{"version":3,"sources":["services/NotificationService.ts","services/api/AuthService.ts","services/api/UserService.ts","services/api/FilterService.ts","services/api/SavedSearchesService.ts","services/api/AsyncMultiSelect.ts","constants/email.ts","services/api/UserManagement.ts","services/api/ListsService.ts","services/api/SalesloftService.ts","services/api/AdminService.ts","services/api/ColumnService.ts","redux/user/information/actionTypes.ts","redux/user/information/actions.ts","constants/user.ts","redux/user/information/reducer.ts","redux/user/information/sagas.ts","utils/feature.ts","redux/feature/fetch/reducers.ts","constants/value.ts","constants/table/cells.ts","features/grid/search/state/reducer.ts","features/grid/search/state/saga.ts","constants/routes.ts","constants/pendoActions.ts","utils/api/errors.ts","redux/company/filters/actions.ts","redux/company/filters/actionTypes.ts","redux/company/filters/reducer.ts","redux/company/filters/sagas.ts","utils/utils.ts","constants/descriptions.ts","utils/search.ts","features/company/audit-trail/state/interfaces.ts","features/company/edit-fields/components/EditFieldRadio.tsx","features/company/edit-fields/components/EditFieldMultiSelectProductCategory.tsx","features/company/edit-fields/components/EditFieldMultiSelectAsyncCreatable.tsx","features/company/edit-fields/components/EditFieldSingleSelectText.tsx","common/hooks/useAutoFocusCheckbox.ts","shared/view/molecules/DynamicListDisplay/DynamicListDisplay.tsx","features/company/edit-fields/components/EditFieldCheckBoxSelectAsync.styled.ts","features/company/edit-fields/components/EditFieldCheckBoxSelectAsync.tsx","constants/editFieldFinancials.ts","features/company/edit-fields/hooks/useFinancialField.ts","features/company/edit-fields/components/EditFieldFinancial.styled.ts","features/company/edit-fields/components/EditFieldFinancial.tsx","features/company/edit-fields/components/EditFieldRadioRationale.styled.ts","features/company/edit-fields/components/CellPopover.styled.ts","features/company/edit-fields/components/EditFieldSingleSelect.tsx","common/hooks/select/useAsyncMenuPosition.ts","features/company/edit-fields/components/EditFieldSingleSelectOther.styled.ts","features/company/edit-fields/components/EditFieldSingleSelectOther.tsx","shared/view/molecules/Buttons/VerifyButton.tsx","features/company/edit-fields/components/EditFieldRadioRationale.tsx","features/company/edit-fields/components/MultiSelectWithRationale.tsx","features/company/edit-fields/components/CellPopoverMultiselect.styled.ts","features/company/edit-fields/components/EditFieldMultiSelect.tsx","features/company/edit-fields/components/EditFieldCheckboxText.tsx","features/company/edit-fields/components/EditFieldTextarea.styled.ts","features/company/edit-fields/components/EditFieldTextarea.tsx","features/company/edit-fields/components/EditFieldSingleSelectWithSave.styled.ts","features/grid/sort/state/types.ts","features/grid/sort/state/actions.ts","features/grid/sort/state/reducer.ts","features/grid/sort/state/outreachDetailsSortSagas.ts","features/grid/sort/state/contactsSortSagas.ts","features/grid/sort/state/sagas.ts","redux/feature/fetch/index.ts","features/grid/filter/state/selectors.ts","features/grid/filter/state/reducer.ts","features/grid/filter/state/sagas.ts","redux/favorite-lists/lists/actions.ts","redux/favorite-lists/lists/types.ts","features/grid/pagination/state/types.ts","features/grid/pagination/state/actions.ts","features/grid/pagination/state/reducer.ts","features/grid/pagination/state/selectors.ts","features/grid/pagination/state/sagas.ts","features/list-import/state/actions.ts","features/list-import/state/types.ts","constants/pendoAction.ts","components/common/Icon/index.ts","features/custom-global-loader/featureName.ts","features/custom-global-loader/state/selectors.ts","features/custom-global-loader/state/types.ts","features/custom-global-loader/state/actions.ts","features/custom-global-loader/state/reducers.ts","features/custom-global-loader/useInject.ts","features/company/audit-trail/state/types.ts","features/company/audit-trail/state/actions.ts","features/company/audit-trail/state/selectors.ts","features/company/audit-trail/state/sagas.ts","features/company/audit-trail/state/reducers.ts","features/grid/featureName.ts","constants/format/date.ts","constants/search.ts","redux/company/saved-searches/sagasReusable.ts","redux/company/saved-searches/sagas.ts","redux/company/saved-searches/reducers.ts","features/grid/view-type/state/types.ts","features/grid/view-type/state/actions.ts","features/grid/view-type/state/selectors.ts","features/grid/view-type/state/reducer.ts","features/grid/view-type/state/saga.ts","components/feature/company-individual-edit/state/selectors/selectFeature.ts","components/feature/company-individual-edit/state/selectors/companyIndividualEdit.ts","components/feature/company-individual-edit/state/selectors/index.ts","components/feature/company-individual-edit/state/reducer.ts","components/common/table/AntTable/cells/TableCellDefaultTooltip.tsx","utils/breakLines.tsx","components/common/table/AntTable/cells/TableCellLink.styled.ts","components/common/table/AntTable/cells/TableCellEmail.tsx","components/common/table/AntTable/cells/TableCellLinkedin.tsx","components/common/table/AntTable/cells/TableCellFormatNumber.ts","components/common/table/AntTable/cells/TableCellMoney.tsx","components/common/table/AntTable/cells/TableCellFormatMoney.tsx","components/common/tooltip/TooltipText.tsx","components/common/table/AntTable/cells/TableCellList.tsx","components/common/table/AntTable/cells/TableCellListDefault.tsx","components/common/table/AntTable/cells/TableCellDate.tsx","components/common/table/AntTable/cells/TableCellNumber.ts","components/common/table/AntTable/cells/TableCellDateInterval.tsx","components/common/table/AntTable/cells/TableCellMatch.tsx","components/common/table/AntTable/cells/TableCellStatus.tsx","components/common/table/AntTable/cells/TableCellCeoRating.tsx","components/common/table/AntTable/cells/TableCellPhones.tsx","components/common/table/AntTable/cells/TableCellListURL.tsx","components/common/table/AntTable/cells/TableCellListDate.tsx","shared/view/molecules/TruncateTooltip/TruncateTooltip.tsx","common/hooks/useHasOverflow.ts","utils/grid.ts","features/add-research-rationale/constants.ts","utils/routes.ts","redux/grid/sagas.ts","features/grid/columns/state/sagas.ts","features/columns/update-columns/state/reducers.ts","utils/columnsDefaultVisible.ts","features/grid/columns/state/reducer.ts","redux/grid/reducer.ts","features/grid/search/state/sagasReusable.ts","redux/company-outreach/filters/actions.ts","redux/company-outreach/filters/types.ts","redux/company-outreach/filters/selectors.ts","redux/company-outreach/filters/reducers.ts","components/common/popover/EditPopover.tsx","utils/number.ts","features/bulk-actions/edit-fields/state/constants.tsx","features/bulk-actions/edit-fields/state/selectors.ts","features/bulk-actions/edit-fields/state/reducers.ts","features/bulk-actions/edit-fields/state/saga.ts","features/bulk-actions/edit-fields/components/bulk-edit-progress/InProgress.tsx","features/bulk-actions/edit-fields/components/bulk-edit-progress/Completed.tsx","components/common/table/TableBulkEditingResults/defaultColumns.tsx","features/bulk-actions/edit-fields/components/bulk-edit-progress/BulkEditingResults.tsx","features/bulk-actions/edit-fields/components/bulk-edit-progress/BulkEditCompletion.tsx","features/bulk-actions/edit-fields/components/bulk-edit-modal/BulkEditModal.styled.ts","features/bulk-actions/edit-fields/components/bulk-edit-modal/BulkEditModal.tsx","features/bulk-actions/edit-fields/components/EditStage.tsx","features/bulk-actions/edit-fields/components/EditPipelineRank.tsx","features/bulk-actions/edit-fields/components/EditCompanyOwner.tsx","features/bulk-actions/edit-fields/components/EditFund.tsx","features/bulk-actions/edit-fields/components/EditRationale.tsx","features/bulk-actions/edit-fields/components/edit-addon/EditAddon.style.ts","features/bulk-actions/edit-fields/components/edit-addon/EditAddon.tsx","features/bulk-actions/edit-fields/components/EditLeadSource.tsx","features/bulk-actions/edit-fields/components/EditSeniorAdvisor.tsx","features/bulk-actions/edit-fields/components/EditSoftware.tsx","features/bulk-actions/edit-fields/components/EditSubsector.tsx","features/bulk-actions/edit-fields/components/EditProductCategory.tsx","features/bulk-actions/edit-fields/components/EditAiMl.styles.ts","features/bulk-actions/edit-fields/components/EditAiMl.tsx","features/bulk-actions/edit-fields/components/BulkEditField.tsx","constants/config.ts","features/bulk-actions/state/selectors/editingFields.ts","features/bulk-actions/state/selectors/equityTouch.ts","features/bulk-actions/state/selectors/salesloft.ts","features/bulk-actions/state/selectors/mergeCompanies.ts","features/bulk-actions/state/selectors/software.ts","features/bulk-actions/state/selectors/aiMl.ts","features/bulk-actions/state/selectors/index.ts","features/bulk-actions/state/reducer.ts","features/bulk-actions/state/sagas/index.ts","features/bulk-actions/useInject.ts","redux/company/saved-searches/actions.ts","redux/company/saved-searches/types.ts","features/grid/search/state/types.ts","features/grid/search/state/actions.ts","redux/favorite-lists/lists/constants.ts","redux/favorite-lists/lists/sagasReusable.ts","redux/favorite-lists/lists/sagas.ts","redux/favorite-lists/lists/reducers.ts","utils/helpers.ts","constants/table/sort/defaultSort.ts","utils/uuid.ts","utils/filters/mapFiltersToURLParams.ts","features/bulk-actions/equity-touch/featureName.ts","features/bulk-actions/equity-touch/state/types.ts","features/bulk-actions/equity-touch/state/actions.ts","redux/my-companies/filters-cards/actions.ts","redux/my-companies/filters-cards/types.ts","redux/my-companies/filters-cards/sagas.ts","redux/my-companies/filters-cards/reducers.ts","config/bulkConfig.ts","features/checklist-research-insights/state/actions/filters.ts","features/checklist-research-insights/state/actions/ui.ts","features/checklist-research-insights/state/actions/card.ts","features/checklist-research-insights/state/actions/index.ts","components/pages/AnalystsLeaderboard/state/actions.ts","components/common/table/Companies/cells/TableCellCompanyURL.tsx","components/common/table/TableAdvancedSearch/cells/TableCellAdvancedSearchActions.tsx","components/common/table/TableMyCompanies/cells/TableCellMyCompaniesActions.tsx","components/common/table/Companies/cells/TableCellActions.tsx","components/common/table/Companies/cells/TableCellPercentageGrowth.tsx","components/common/table/Companies/cells/TableCellLocation.tsx","components/common/table/Companies/cells/TableCellName/CustomTooltip.styled.ts","components/common/table/Companies/cells/TableCellStringList.tsx","components/common/table/Companies/cells/TableCellNumberOfEmployees.tsx","components/common/table/Companies/cells/TableCellOPTXScore.tsx","components/common/table/Companies/cells/TableCellDescription.tsx","components/common/table/Companies/cells/TableCellScoreAdmin.tsx","components/common/table/Companies/cells/TableCellRadioAdmin.tsx","components/common/table/Companies/cells/TableCellFitRationale.tsx","components/common/table/Companies/cells/TableCellInvestors.tsx","components/common/table/Companies/cells/TableCellAddon.tsx","components/common/table/Companies/cells/TableCellNewMatched.tsx","components/common/table/Companies/cells/TableCellDealTeams.tsx","redux/lists/details/sagas.ts","redux/lists/details/reducer.ts","components/feature/company-individual-edit/featureName.ts","redux/favorite-lists/lists-popup/actions.ts","redux/favorite-lists/lists-popup/types.ts","features/grid/search-count/state/types.ts","features/grid/search-count/state/actions.ts","features/grid/search-count/state/reducer.ts","features/grid/search-count/state/sagas.ts","shared/view/molecules/edit/InlineEdit.tsx","redux/company/search/search/sagasReusable.ts","constants/regex.ts","constants/charts.ts","components/common/select/SingleSelect/SingleSelect.tsx","features/grid/search-type/state/types.ts","features/grid/search-type/state/actions.ts","features/grid/search-type/state/reducer.ts","common/hooks/inject/useInjectUI.ts","common/hooks/inject/useInjectResetPassword.ts","common/hooks/inject/useInjectProfilePicture.ts","common/hooks/inject/useInjectCompanySavedSearches.ts","common/hooks/inject/useInjectContactsSavedSearches.ts","common/hooks/inject/useInjectContactsFilterSources.ts","common/hooks/inject/useInjectCompanyFilterSources.ts","common/hooks/inject/useInjectSuggestedSearches.ts","common/hooks/inject/useInjectOpportunityPresentation.ts","common/hooks/inject/useInjectUserInformation.ts","redux/contacts/search/filter/reducer.ts","redux/contacts/search/reducer.ts","common/hooks/inject/useInjectContactsSearch.ts","redux/lists/search/sagas.ts","redux/lists/sagas.ts","redux/lists/reducer.ts","common/hooks/inject/useInjectCompanyLists.ts","common/hooks/inject/useInjectPortfolio.ts","common/hooks/inject/useInjectEquityTouch.ts","features/list-import/state/sagas.ts","redux/favorite-lists/reducer.ts","common/hooks/inject/useInjectFavoriteLists.ts","common/hooks/inject/useInjectUserList.ts","redux/user/share/sagas.ts","common/hooks/inject/useInjectShareList.ts","common/hooks/inject/useInjectSourceScrubLists.ts","common/hooks/inject/useInjectMyPipeline.ts","redux/auth/reducer.ts","redux/auth/sagas.ts","common/hooks/inject/useInjectAuth.ts","common/hooks/inject/useInjectFiles.ts","common/hooks/inject/useInjectCompanyFundingRounds.ts","common/hooks/inject/useInjectSalesloft.ts","common/hooks/inject/useInjectPrimaryContacts.ts","redux/feature/pooling/sagas.ts","redux/pooling/saga.ts","common/hooks/inject/useInjectPoolingGenerator.ts","redux/my-companies/reducer.ts","redux/my-companies/search/saga.ts","common/hooks/inject/useInjectMyCompanies.ts","common/hooks/inject/useInjectNotes.ts","common/hooks/inject/useInjectDatePresented.ts","redux/company/score-growth/actions.ts","redux/company/score-growth/types.ts","redux/company/score-growth/sagas.ts","common/hooks/inject/useInjectScoreGrowth.ts","common/hooks/inject/useInjectEmployeeGrowth.ts","common/hooks/inject/useInjectCompanyUserValues.ts","common/hooks/inject/useInjectGeoRange.ts","redux/login/saga.ts","common/hooks/inject/useInjectLogin.ts","common/hooks/inject/useInjectFavorites.ts","common/hooks/inject/useInjectCompanyTabList.ts","common/hooks/inject/useInjectCompanyInBusinessEvaluation.ts","common/hooks/inject/useInjectCompanyActive.ts","common/hooks/inject/useInjectScheduledTouches.ts","common/hooks/inject/useInjectCompanyAddonManagement.ts","redux/company/score/sagas.ts","common/hooks/inject/useInjectScore.ts","common/hooks/inject/useInjectAddRationale.ts","common/hooks/inject/useInjectExtensionProfile.ts","redux/company-outreach/reducer.ts","common/hooks/inject/useInjectCompanyListSourcingOutReach.ts","common/hooks/inject/useInjectCompanyRelationshipManagement.ts","common/hooks/inject/useInjectDocumentUploadModal.ts","common/hooks/inject/useInjectCombineSearch.ts","utils/format.ts","features/request/featureName.ts","features/request/state/selectors/index.ts","features/request/state/selectors/error.ts","features/request/state/selectors/loading.ts","features/request/state/types.ts","features/request/state/actions.ts","features/request/state/reducers/error.ts","features/request/state/reducers/loading.ts","features/request/state/reducers/index.ts","features/request/useInject.ts","redux/company/opportunity-presentation/actions.ts","redux/company/opportunity-presentation/types.ts","redux/company/opportunity-presentation/selectors.ts","redux/company/opportunity-presentation/sagas.ts","redux/company/opportunity-presentation/reducers.ts","constants/grid.ts","components/feature/company-individual-edit/state/dealTeam/actions.ts","components/feature/company-individual-edit/state/dealTeam/actionTypes.ts","components/feature/company-individual-edit/state/dealTeam/reducer.ts","components/feature/company-individual-edit/state/seniorDealTeamLead/actions.ts","components/feature/company-individual-edit/state/seniorDealTeamLead/actionTypes.ts","components/feature/company-individual-edit/state/seniorDealTeamLead/reducer.ts","components/feature/company-individual-edit/state/date-fields/actions.ts","components/feature/company-individual-edit/state/date-fields/actionTypes.ts","redux/company/profile/reducer.ts","redux/company/profile/saga.ts","redux/company/filters/constants.ts","redux/company/filters/selectors.ts","redux/ui/modals/company-touches/sagas.ts","redux/ui/modals/company-touches/actions.ts","redux/ui/modals/company-touches/actionTypes.ts","redux/ui/modals/company-touches/selectors.ts","redux/ui/modals/company-touches/interfaces.ts","redux/ui/modals/company-touches/reducer.ts","features/grid/pagination-long-card/types.ts","features/grid/pagination-long-card/actions.ts","features/grid/pagination-long-card/selectors.ts","features/grid/pagination-long-card/saga.ts","features/grid/pagination-long-card/reducer.ts","constants/table/columnDisplay/company-search.ts","features/bulk-actions/edit-fields/featureName.ts","features/bulk-actions/edit-fields/state/types.ts","features/bulk-actions/edit-fields/state/actions.ts","features/grid/selectFeature.ts","redux/user/information/selectors.ts","utils/option.ts","features/company/edit-fields/state/selectors.ts","features/company/edit-fields/state/sagas.ts","features/company/edit-fields/state/reducers.ts","constants/filters.ts","features/grid/search-type/state/constants.ts","utils/columns.ts","features/alerts/state/actions.ts","features/alerts/state/types.ts","constants/format/number.ts","features/grid/state/sagasReusable.ts","redux/company/funding-rounds/types.ts","redux/company/funding-rounds/actions.ts","redux/company/funding-rounds/selectors.ts","redux/company/funding-rounds/reducer.ts","redux/company/funding-rounds/sagas.ts","features/edit-all-info/state/types.ts","features/edit-all-info/state/actions.ts","features/edit-all-info/state/reducer.ts","features/edit-all-info/state/sagas.ts","services/api/axios-client.ts","features/add-research-rationale/state/saga.ts","features/add-research-rationale/state/selectors.ts","features/add-research-rationale/state/reducer.ts","features/grid/histograms/state/selectors.ts","features/grid/histograms/state/types.ts","features/grid/histograms/state/actions.ts","features/grid/histograms/state/reducer.ts","features/grid/histograms/components/HistogramRefreshToggler.tsx","features/grid/histograms/components/HistogramTooltip.styled.ts","features/grid/histograms/components/HistogramTooltip.tsx","features/grid/histograms/components/Histogram.styled.ts","features/grid/histograms/components/Histogram.tsx","features/grid/histograms/state/sagas.ts","utils/filters/preselectedValues.ts","storage/localStorage/analystStorage.ts","storage/localStorage/adminStorage.ts","storage/localStorage/partnerStorage.ts","storage/localStorage/cognito.ts","redux/scheduled-touches/actions.ts","redux/scheduled-touches/actionTypes.ts","utils/company.ts","common/hooks/history/index.ts","features/grid/search/state/selectors.ts","redux/contacts/saved-searches/actions.ts","redux/contacts/saved-searches/types.ts","redux/company/profile/actions.ts","shared/view/molecules/Select/MultiSelectInline/components/MultiValueContainer.tsx","shared/view/molecules/Select/MultiSelectInline/MultiSelectInline.tsx","shared/view/molecules/Select/SingleSelect/SingleSelect.styled.tsx","shared/view/molecules/Select/SingleSelect/components/Control.styled.ts","shared/view/molecules/Select/SingleSelect/SingleSelect.tsx","shared/view/molecules/Select/SingleSelect/components/Control.tsx","features/bulk-actions/equity-touch/state/selectors.ts","features/bulk-actions/equity-touch/state/constants.ts","features/bulk-actions/equity-touch/state/reducer.ts","features/bulk-actions/equity-touch/state/saga.ts","constants/table/company.ts","common/hooks/useUserRole.ts","features/company-touches/featureName.ts","features/company-touches/state/types/search.ts","features/company-touches/state/types/filters.ts","features/company-touches/state/types/index.ts","features/company-touches/state/actions/search.ts","features/company-touches/state/sagas/search.ts","features/company-touches/state/actions/filters.ts","features/company-touches/state/sagas/filters.ts","features/company-touches/state/sagas/index.ts","features/company-touches/state/actions/index.ts","features/company-touches/state/reducers/search.ts","features/company-touches/state/reducers/filters.ts","features/company-touches/state/reducers/index.ts","features/company-touches/constants/touches.ts","features/company-touches/state/selectors/search.ts","features/company-touches/state/selectors/filters.ts","features/company-touches/state/selectors/index.ts","features/company-touches/useInject.ts","components/common/DangerousInnerHTML.tsx","features/company-touches/components/TimelineIntervalLabel.tsx","features/company-touches/components/PageLoader.tsx","utils/replaceEmailTouchNotes.ts","features/company-touches/components/ExpandIcon.tsx","features/company-touches/components/Attendees.tsx","features/company-touches/components/TouchHeader.tsx","features/company-touches/components/constants.ts","features/company-touches/components/TouchMenu.styled.ts","features/company-touches/components/TouchMenu.tsx","features/company-touches/utils/emailAttendees.ts","features/company-touches/components/TimelineTouchItem.tsx","features/company-touches/components/TouchesTimeline.tsx","features/company-touches/components/TouchesTabFilters.tsx","shared/view/molecules/Select/components/Option.styled.tsx","shared/view/molecules/Select/components/Option.tsx","shared/view/molecules/Select/components/MultiSelectTags.styled.ts","shared/view/molecules/Select/components/MultiSelectTags.tsx","shared/view/molecules/Select/components/PreviousMultiSelectedTags.tsx","shared/view/molecules/Select/components/DropdownIndicator.tsx","shared/view/molecules/Select/components/ValueContainer.styled.ts","shared/view/molecules/Select/components/ValueContainer.tsx","shared/view/molecules/Select/components/MultiValueRemove.tsx","shared/view/molecules/Select/components/MultiValueLabel.tsx","shared/view/molecules/Select/components/MenuListWithLoader.tsx","redux/favorite-lists/lists-popup/selectors.ts","redux/favorite-lists/lists-popup/sagasReusable.ts","redux/favorite-lists/lists-popup/sagas.ts","redux/favorite-lists/lists-popup/reducers.ts","utils/theme/colors.ts","utils/url.ts","utils/filters/parseFilters.ts","features/list-import/state/selectors.ts","features/list-import/state/constants.ts","features/list-import/state/reducers.ts","constants/pagination.ts","redux/async-multiselect/actions.ts","redux/async-multiselect/actionTypes.ts","redux/async-multiselect/sagas.ts","common/hooks/select/useAsyncSearch.ts","features/bulk-actions/salesloft/featureName.ts","features/bulk-actions/salesloft/state/types.ts","features/bulk-actions/salesloft/state/actions.ts","features/bulk-actions/salesloft/state/selectors.ts","features/bulk-actions/salesloft/state/reducer.ts","features/bulk-actions/salesloft/state/saga.ts","common/hooks/useOnClickOutside.ts","features/grid/searchkey/state/constants.ts","features/grid/searchkey/state/types.ts","features/grid/searchkey/state/actions.ts","features/grid/searchkey/state/reducer.ts","components/feature/company-individual-edit/components/CellPopover.styled.ts","redux/company/addon-management/actions.ts","redux/company/addon-management/actionTypes.ts","redux/company/addon-management/selectors.ts","redux/company/addon-management/reducer.ts","redux/company/addon-management/addonManagementReducer.ts","redux/company/addon-management/saga.ts","features/company/edit-fields/hooks/useUpdateFields.ts","components/common/table/Companies/styled-cells/EditCellPen.tsx","utils/validation.ts","components/common/table/AntTable/cells/TableCellDefault.tsx","features/long-card/company-card/useInject.ts","features/long-card/company-card/components/CompanyCard.tsx","utils/editFields.tsx","features/grid/columns/state/constants.ts","common/hooks/useCurrentGridName.ts","components/common/table/AntTable/cells/memoize.ts","redux/company/suggested-searches/actions.ts","redux/company/suggested-searches/types.ts","redux/company/suggested-searches/selectors.ts","redux/company/suggested-searches/sagas.ts","redux/company/suggested-searches/reducers.ts","redux/lists/details/actions.ts","utils/researchRationale.ts","components/pages/AnalystsLeaderboard/state/filters/constants.ts","components/pages/AnalystsLeaderboard/constants/statsChart.ts","components/pages/AnalystsLeaderboard/state/filters/selectors.ts","components/pages/AnalystsLeaderboard/state/filters/reducer.ts","features/pipeline-report/featureName.ts","features/company/long-card/LongCardView.styled.ts","redux/ui/settings/fullscreen/actions.ts","redux/ui/settings/fullscreen/types.ts","redux/ui/settings/fullscreen/selectors.ts","redux/ui/settings/fullscreen/reducer.ts","common/hooks/fetch/index.ts","components/common/charts/LineChart/config.ts","redux/contacts/filters/actions.ts","redux/contacts/filters/types.ts","redux/contacts/filters/selectors.ts","redux/contacts/filters/sagas.ts","redux/contacts/filters/reducers.ts","utils/salesloft.ts","components/pages/AnalystsLeaderboard/state/selectors.ts","redux/favorite-lists/lists/selectors.ts","redux/company/notes/companyNotes/actions.ts","redux/user/user-list/selectors.ts","redux/user/user-list/actions.ts","redux/user/user-list/types.ts","redux/user/user-list/reducer.ts","redux/user/user-list/sagas.ts","utils/touches.ts","features/checklist-research-insights/state/types/search.ts","features/checklist-research-insights/state/types/filters.ts","features/checklist-research-insights/state/types/ui.ts","features/checklist-research-insights/state/types/card.ts","features/checklist-research-insights/state/types/index.ts","redux/company/primary-contacts/types.ts","redux/company/primary-contacts/actions.ts","redux/company/primary-contacts/selectors.ts","redux/company/primary-contacts/reducer.ts","redux/company/primary-contacts/sagas.ts","utils/filters/mapTags.ts","features/checklist-research-insights/featureName.ts","redux/feature/saved-search/reducers.ts","components/DropdownAdd/DropdownAddContext.tsx","features/grid/searchkey/state/selectors.ts","features/company/edit-fields/components/EditFieldOPTX.styled.ts","redux/scheduled-touches/featureName.ts","utils/table/sorting.ts","constants/lists.ts","redux/company/user-values/sagas.ts","redux/company-outreach/search/selectors.ts","constants/my-companies.ts","constants/asyncEndpoints.ts","redux/scheduled-touches/selectors.ts","redux/router/selectors.ts","redux/router/saga.ts","components/feature/company-individual-edit/state/companyIndividualEdit/selectors.ts","features/grid/view/state/types.ts","features/grid/view/state/actions.ts","features/grid/view/state/reducer.ts","features/grid/view/state/sagas/advanced-search/sagas.ts","features/grid/view/state/sagas/my-companies/sagas.ts","features/grid/view/state/sagas/lists/sagas.ts","features/grid/view/state/sagas/company-outreach/sagas.ts","features/grid/view/state/sagas.ts","redux/company/equity-touch/sagas.ts","redux/company/equity-touch/actions.ts","utils/myCompanies.ts","redux/company/saved-searches/selectors.ts","redux/contacts/search/search/reducer.ts","redux/contacts/search/search/sagas.ts","redux/company/score/actions.ts","redux/ui/modals/add-document-upload-touch/actions.ts","redux/ui/modals/add-document-upload-touch/types.ts","redux/ui/modals/add-document-upload-touch/selectors.ts","redux/ui/modals/add-document-upload-touch/reducer.ts","redux/ui/modals/add-document-upload-touch/sagas.ts","features/checklist-research-insights/state/selectors/filters.ts","features/checklist-research-insights/state/selectors/index.ts","features/checklist-research-insights/state/selectors/search.ts","features/checklist-research-insights/state/selectors/cards.ts","features/grid/columns/state/types.ts","features/grid/columns/state/actions.ts","features/company/edit-fields/state/actions.ts","features/company/edit-fields/state/types.ts","features/grid/view/state/selectors.ts","features/company/graphs/score/state/selectors.ts","features/company/graphs/score/state/reducer.ts","features/company/graphs/score/state/saga.ts","redux/favorites/actions.ts","redux/favorites/types.ts","redux/favorites/reducer.ts","redux/favorites/sagas.ts","constants/contacts.ts","components/pages/AnalystsLeaderboard/state/constants.ts","utils/charts.ts","features/tags/tags/FilterTagValue.tsx","features/tags/tags/FilterTagMore.tsx","features/tags/tags/CompanyTagValue.tsx","features/tags/tags/CompanyTagMore.tsx","features/tags/tags/IsPortfolioTag.tsx","features/tags/tags/IsSoftwareTag.tsx","features/tags/tags/IsPSGCompanyTag.tsx","features/tags/tags/DiversityTags.tsx","components/common/select/AsyncCreatableMultiSelect.tsx","components/common/select/AsyncSelect.tsx","features/tags/tags/AddTags.tsx","features/tags/tags/CompanyTags.styles.tsx","features/tags/tags/CompanyTags.tsx","features/tags/tags/BulkAddTags.tsx","features/tags/tags/ListTagValue.tsx","features/tags/tags/ListTagMore.tsx","redux/contacts/search/search/actions.ts","redux/company/profile/actionTypes.ts","features/edit-all-info/featureName.ts","constants/form.ts","utils/select/select.ts","features/tags/overflow-tags/FilterTagsOverflow.tsx","features/tags/overflow-tags/CompanyTagsOverflow.tsx","features/tags/overflow-tags/ListTagsOverflow.tsx","features/tags/overflow-tags/ListTagsCollapsable.tsx","features/bulk-actions/selected-companies/components/SelectedCount.tsx","features/bulk-actions/selected-companies/state/reducer.ts","features/bulk-actions/selected-companies/state/saga.ts","utils/filters/parseSorting.ts","components/feature/company-individual-edit/hooks/useLeadSourceEditableField.ts","components/feature/company-individual-edit/hooks/useSeniorAdvisorThesisEditableField.ts","components/feature/company-individual-edit/hooks/useActiveEditableField.ts","redux/feature/toggle/reducers.ts","utils/componentFactory.ts","components/common/charts/LineChart/LegendFormatter/LegendFormatter.tsx","components/common/charts/LineChart/LineChart.tsx","components/common/charts/TrendingLine.tsx","components/pages/AnalystsLeaderboard/constants/custom-criteria.ts","redux/company/equity-touch/types.ts","components/common/table/Companies/cells/TableCellEditFinancialField.tsx","components/pages/CompanyProfile/ProfileTabs/DealPresentation/components/TableYearTitle.styled.ts","components/pages/CompanyProfile/ProfileTabs/DealPresentation/components/TableYearTitle.tsx","utils/dealPresentation.tsx","features/lists-and-searches/state/selectors.ts","features/lists-and-searches/state/sagas.ts","features/lists-and-searches/state/reducer.ts","features/lists-and-searches/useInject.ts","storage/localStorage/autoSaveStorage.ts","features/company/edit-fields/components/TableCellFit.styled.ts","services/api/SearchService.ts","constants/table/sortOrder.ts","utils/api/cleanPayload.ts","features/company/add-company/constants/index.ts","redux/feature/saved-search/actions.ts","constants/titles.ts","utils/filters/normalize.ts","features/columns/update-columns/components/ResetColumnWidthsMenu.tsx","features/lists-and-searches/pagination/types.ts","features/lists-and-searches/pagination/actions.ts","features/lists-and-searches/pagination/sagas.ts","features/lists-and-searches/pagination/reducer.ts","redux/company/tags/actions.ts","redux/company/tags/types.ts","redux/company/tags/sagas.ts","utils/filters/rangeKey.ts","common/hooks/init/useFetchUserInformation.ts","common/hooks/init/useInitFilters.ts","common/hooks/init/useDisplayColumnModal.ts","common/hooks/init/useInitFavorites.ts","common/hooks/init/useFetchUserManagement.ts","common/hooks/init/useFetchUserList.ts","common/hooks/init/useFetchFavoriteLists.ts","common/hooks/init/useFetchSuggestedSearches.ts","common/hooks/init/useFetchSavedSearches.ts","common/hooks/init/useFetchContactsSavedSearches.ts","common/hooks/init/useInitContactFilters.ts","common/hooks/init/useInitCompanyFundingRounds.ts","common/hooks/init/useInitWatchListsIncludingCompany.ts","common/hooks/init/useInitFetchFavoriteLists.tsx","common/hooks/init/useInitFetchFavoriteListsPopup.tsx","components/common/loader/FixedLoader.tsx","utils/filters/injectFilter.ts","constants/autosave.ts","storage/localStorage/pluginStorage.ts","features/add-research-rationale/state/actions.ts","components/common/Text/KeyPerformanceIndicator.tsx","redux/lists/details/types.ts","components/feature/charts/ChartHeader.style.ts","utils/text.ts","features/company/graphs/employee/state/types.ts","features/company/graphs/employee/featureName.ts","features/company/graphs/employee/state/actions.ts","features/company/graphs/employee/state/selectors.ts","features/company/graphs/employee/state/reducer.ts","features/company/graphs/employee/state/saga.ts","features/bulk-actions/state/selectors/selectFeature.ts","components/common/buttons/GrayRectangleBtn.styles.ts","components/common/buttons/GrayRectangleBtn.tsx","components/feature/charts/EmptyChart.tsx","constants/plugin.ts","components/common/table/Companies/styled-cells/TableCellCompanyURL.tsx","components/common/table/Companies/styled-cells/TableCellName/CustomTooltip.styled.ts","components/common/table/Companies/styled-cells/TableCellName/CustomTooltip.tsx","components/common/table/Companies/styled-cells/TableCellName/TableCellName.styled.ts","components/common/table/Companies/styled-cells/TableCellName/TableCellName.tsx","components/common/table/Companies/styled-cells/TableCellName/TableCellNameLink.tsx","redux/company/notes/companyNotes/selectors.ts","redux/company/notes/companyNotes/reducer.ts","redux/company/notes/companyNotes/sagas.ts","utils/bulk-actions.ts","redux/company/notes/search/actions.ts","redux/company/notes/search/types.ts","redux/company/notes/search/selectors.ts","redux/company/notes/search/reducers.ts","redux/company/notes/search/sagas.ts","shared/view/molecules/Popover/Popover.tsx","storage/localStorage/jwtStorage.ts","features/alerts/state/reducer.ts","features/company/graphs/score/state/types.ts","features/company/graphs/score/featureName.ts","features/company/graphs/score/state/actions.ts","features/bulk-actions/bulk-watchlist/featureName.ts","features/bulk-actions/bulk-watchlist/state/types.ts","features/bulk-actions/bulk-watchlist/state/actions.ts","components/pages/AnalystsLeaderboard/state/filters/types.ts","components/pages/AnalystsLeaderboard/state/filters/actions.ts","redux/my-companies/filters-cards/selectors.ts","features/request/constants.ts","redux/common/list/reducers.ts","components/common/select/components/DropdownIndicator.tsx","components/common/select/components/MultiValueRemove.tsx","components/common/select/components/MultiValueLabel.tsx","components/common/select/components/ValueContainer.tsx","components/common/select/components/Option.tsx","components/common/select/components/ClearIndicator.tsx","shared/view/atoms/Typography/Title.tsx","shared/view/atoms/Typography/Recomended.tsx","common/hooks/modal/useToggle.ts","components/common/trending/Trending.styled.ts","components/common/trending/TrendingValue.tsx","components/common/trending/Info.styled.ts","components/common/trending/Info.tsx","components/common/trending/ScoreTrending.tsx","components/common/charts/Tooltip.styles.ts","features/grid/sort/state/selectors.ts","common/hooks/useReferrerLink.ts","features/company/add-company/useInject.ts","components/feature/company-individual-edit/state/companyIndividualEdit/actions.ts","components/feature/company-individual-edit/state/companyIndividualEdit/actionTypes.ts","redux/company/active/actions.ts","features/bulk-actions/selected-companies/featureName.ts","features/bulk-actions/selected-companies/state/types.ts","features/bulk-actions/selected-companies/state/actions.ts","redux/favorite-lists/company-lists/selectors.ts","redux/favorite-lists/company-lists/reducers.ts","redux/contacts/search/search/actionTypes.ts","components/pages/AnalystsLeaderboard/state/pipeline-information/selectors.ts","components/pages/AnalystsLeaderboard/state/pipeline-information/types.ts","components/pages/AnalystsLeaderboard/state/pipeline-information/actions.ts","components/pages/AnalystsLeaderboard/state/pipeline-information/reducer.ts","redux/company/notes/companyNotes/types.ts","utils/filters/filterHelpers.ts","components/common/select/constants.ts","redux/user/source-scrub-lists/actions.ts","redux/user/source-scrub-lists/types.ts","common/hooks/saved-searches/useSourceScrubLists.ts","components/common/table/TableSourceScrubLists/CellLink.tsx","components/common/table/TableSourceScrubLists/cells/TableCellDefault.tsx","components/common/table/TableSourceScrubLists/cells/TableCellDefaultTooltip.tsx","components/common/table/TableSourceScrubLists/cells/TableCellDate.tsx","components/common/table/TableSourceScrubLists/cells/TableCellActions.tsx","components/common/table/TableSourceScrubLists/cells/TableCellNewTab.tsx","components/common/table/TableSourceScrubLists/sourceScrubColumns.tsx","redux/user/source-scrub-lists/selectors.ts","redux/user/source-scrub-lists/sagasReusable.ts","redux/user/source-scrub-lists/sagas.ts","redux/user/source-scrub-lists/reducers.ts","features/sourcing-outreach-summary/featureName.ts","features/bulk-actions/bulk-merge-companies/featureName.ts","features/bulk-actions/bulk-merge-companies/state/types.ts","features/bulk-actions/bulk-merge-companies/state/actions.ts","features/bulk-actions/bulk-merge-companies/state/selectors.ts","features/bulk-actions/bulk-merge-companies/state/reducer.ts","features/bulk-actions/bulk-merge-companies/state/saga.ts","components/common/select/Select/PrefixedSelectionItem/PrefixedSelectionItem.tsx","utils/date.ts","features/checklist-research-insights/constants/table.ts","redux/company/user-values/actions.ts","redux/contacts/saved-searches/selectors.ts","redux/contacts/search/search/selectors.ts","features/long-card/company-card/state/types.ts","features/long-card/company-card/state/actions.ts","features/long-card/company-card/state/reducer.ts","features/long-card/company-card/state/sagas.ts","components/feature/company-individual-edit/state/companyOwner/actions.ts","features/grid/search/state/selectorsReusable.ts","utils/combineSearch.ts","features/scroll-history/featureName.ts","features/scroll-history/state/actionTypes.ts","features/scroll-history/state/actions.ts","features/scroll-history/state/constants.ts","features/scroll-history/state/selectors.ts","features/scroll-history/state/reducer.ts","features/scroll-history/hooks/useVirtualTableContainerSize.ts","features/scroll-history/hooks/useInject.ts","features/scroll-history/hooks/useVirtualScrollPosition.ts","features/scroll-history/hooks/useScrollPosition.ts","redux/contacts/saved-searches/sagasReusable.ts","redux/contacts/saved-searches/sagas.ts","redux/contacts/saved-searches/reducers.ts","models/filters.ts","components/feature/company-individual-edit/state/companyOwner/reducer.ts","redux/login/utils.ts","shared/view/molecules/Select/MultiSelect/MultiSelect.styled.tsx","shared/view/molecules/Select/utils.ts","models/WatchList.ts","features/bulk-actions/bulk-software/featureName.ts","features/bulk-actions/bulk-software/state/types.ts","features/bulk-actions/bulk-software/state/actions.ts","features/bulk-actions/bulk-software/state/selectors.ts","features/bulk-actions/bulk-software/state/reducer.ts","features/bulk-actions/bulk-software/state/saga.ts","features/bulk-actions/bulk-ai-ml/featureName.ts","features/bulk-actions/bulk-ai-ml/state/types.ts","features/bulk-actions/bulk-ai-ml/state/actions.ts","features/bulk-actions/bulk-ai-ml/state/selectors.ts","features/bulk-actions/bulk-ai-ml/state/reducer.ts","features/bulk-actions/bulk-ai-ml/state/saga.ts","components/feature/company-individual-edit/state/fund/actions.ts","components/feature/company-individual-edit/state/fund/actionTypes.ts","components/feature/company-individual-edit/state/fund/reducer.ts","redux/company/user-values/types.ts","redux/favorite-lists/company-lists/actions.ts","redux/favorite-lists/company-lists/types.ts","features/company/add-company/featureName.ts","shared/view/molecules/Select/MultiSelect/components/SelectAllMenuList/SelectAll.styled.ts","shared/view/molecules/Select/MultiSelect/components/SelectAllMenuList/SelectAll.tsx","shared/view/molecules/Select/MultiSelect/components/SelectAllMenuList/SelectAllMenuList.tsx","shared/view/molecules/Select/MultiSelect/components/AllMultiValueContainer.tsx","shared/view/molecules/Select/MultiSelect/components/SelectableGroupHeading.styled.ts","shared/view/molecules/Select/MultiSelect/components/SelectableGroupHeading.tsx","features/add-research-rationale/featureName.ts","features/add-research-rationale/state/actionsTypes.ts","redux/global-loader/actions.ts","redux/global-loader/types.ts","redux/global-loader/selector.ts","redux/global-loader/reducer.ts","redux/ui/modals/gridModals/types.ts","redux/ui/modals/gridModals/actions.ts","redux/ui/modals/gridModals/selectors.ts","redux/ui/modals/gridModals/reducer.ts","utils/equityTouch.ts","utils/table/pagination.ts","shared/view/molecules/loader/LoadingBlock.styled.ts","shared/view/molecules/loader/LoadingBlock.tsx","shared/view/molecules/loader/LoadingIcon.tsx","redux/auth/cognitoLogout/actionTypes.ts","redux/auth/cognitoLogout/actions.ts","redux/auth/cognitoLogout/selectors.ts","redux/auth/cognitoLogout/reducer.ts","redux/auth/cognitoLogout/sagas.ts","features/local-storage-autosave/state/actions.ts","features/local-storage-autosave/state/actionTypes.ts","features/local-storage-autosave/components/AutoSave.tsx","features/local-storage-autosave/featureName.ts","features/local-storage-autosave/state/selectors.ts","features/local-storage-autosave/components/AutoSaveStatus.tsx","features/local-storage-autosave/components/FormErrorMask.styled.ts","features/local-storage-autosave/components/FormErrorMask.tsx","features/local-storage-autosave/state/reducer.ts","features/local-storage-autosave/useInject.ts","redux/feature/saved-search/selectors.ts","features/edit-all-info/constants/editAllCompany.ts","redux/company/notes/profile/actions.ts","redux/company/notes/profile/types.ts","redux/company/notes/profile/selectors.ts","redux/company/notes/profile/sagas.ts","redux/company/notes/profile/reducers.ts","redux/company/active/selectors.ts","redux/company/active/reducer.ts","redux/company/active/sagas.ts","shared/view/molecules/statistics/StatsCompare/StatsCompare.styles.ts","components/common/buttons/CancelSearchButton.tsx","components/common/loader/FixedLoaderWithCancel.tsx","components/common/cards/CompetitorCard/CompetitorCard.tsx","components/icons/index.tsx","features/bulk-actions/state/selectors/selectedCompanies.ts","components/common/charts/components/MinimumSizeBar.tsx","components/common/charts/LineChart/LegendFormatter/styles.ts","components/feature/company-individual-edit/components/rationale/EditRationaleProfile.tsx","components/common/popover/EmptyPopover.tsx","components/DropdownAdd/EditNoteContent.tsx","components/DropdownAdd/PopoverEditNote.tsx","components/DropdownAdd/RemoveAsAddon.tsx","components/DropdownAdd/DropdownAddMenuItem.tsx","components/DropdownAdd/DropdownAddMenu.styled.ts","components/DropdownAdd/DropdownAddMenu.tsx","features/company/favorites/hooks/useToggleCompanyFavorite.ts","features/company/favorites/components/FavoriteButton.tsx","components/DropdownAdd/DropdownAdd.tsx","features/grid/view-transition/state/types.ts","features/grid/view-transition/state/actions.ts","features/grid/view-transition/state/selectors.ts","features/grid/view-transition/state/reducer.ts","features/grid/view-transition/state/sagas.ts","features/grid/view/components/GridView/GridView.styles.ts","features/grid/view/components/GridView/GridView.tsx","constants/spacing.ts","features/company/edit-fields/components/RationaleSection.styled.ts","features/company/edit-fields/components/RationaleSection.tsx","modules/axios.ts","storage/localStorage/menuStorage.ts","features/grid/search-count/state/selectors.ts","common/hooks/fetch/useInitialFetch.ts","assets/svg/icons/address-book.svg","assets/svg/icons/sticky-note-o.svg","assets/svg/icons/list.svg","assets/svg/icons/search.svg","assets/svg/icons/file-text.svg","assets/svg/icons/checkmark-fill.svg","assets/svg/icons/capterra.svg","assets/svg/icons/facebook.svg","assets/svg/icons/linkedin.svg","assets/svg/icons/twitter.svg","assets/svg/icons/website.svg","assets/svg/icons/crunchbase.svg","assets/svg/icons/g2crowd.svg","assets/svg/icons/sourcescrub.svg","assets/svg/icons/equitytouch.svg","assets/svg/icons/similarweb.svg","assets/svg/icons/bvdorbis.svg","assets/svg/icons/fullscreen.svg","assets/svg/icons/fullscreen-exit.svg","assets/svg/icons/social/people-outlined.svg","assets/svg/icons/social/people.svg","assets/svg/icons/close.svg","assets/svg/icons/chrome-close.svg","assets/svg/icons/pen.svg","assets/svg/icons/thumbs-up.svg","assets/svg/icons/thumbs-down.svg","assets/svg/icons/thumbs-unknown.svg","assets/svg/icons/open-in-new.svg","assets/svg/icons/bookmark.svg","assets/svg/icons/pipeline.svg","assets/svg/icons/business.svg","assets/svg/icons/three-dots.svg","assets/svg/icons/website-rank.svg","assets/svg/icons/dollar.svg","assets/svg/icons/person-add.svg","assets/svg/icons/arrow-down-end.svg","assets/svg/icons/salesloft.svg","assets/svg/icons/trending-down.svg","assets/svg/icons/trending-up.svg","assets/svg/icons/icon-grid.svg","assets/svg/icons/icon-tiles.svg","assets/svg/icons/glassdoor.svg","assets/svg/icons/website-rank-blue.svg","assets/svg/icons/chrome-new-tab.svg","assets/svg/icons/chrome-dots-button.svg","assets/svg/icons/chrome-optx-logo.svg","assets/svg/icons/pin.svg","assets/svg/icons/no-company.svg","assets/svg/icons/drag-and-drop.svg","assets/svg/icons/map.svg","assets/svg/icons/report-card-icon.svg","assets/svg/icons/artificial-intelligence.svg","assets/svg/icons/employee-growth.svg","assets/svg/icons/optx-score-over.svg","assets/svg/icons/thumb-up.svg","assets/svg/icons/thumb-down.svg","assets/svg/icons/reload.svg","assets/svg/icons/new_opportunities.svg","assets/svg/icons/contact_pin.svg","assets/svg/icons/PSG_pin.svg","assets/svg/icons/industry_pin.svg","assets/svg/icons/lists_pin.svg","assets/svg/icons/reports_pin.svg","assets/svg/icons/autosave-saving.svg","assets/svg/icons/autosave-saved.svg","assets/svg/icons/autosave-refresh.svg","assets/svg/icons/pitchbook.svg","assets/svg/icons/grata.svg","assets/svg/icons/pie-icon.svg","assets/svg/icons/bar-chart.svg","assets/svg/icons/my-companies.svg","components/common/Icon/Icon.tsx","redux/user-management/actions.ts","redux/user-management/types.ts","components/common/table/TableUserManagement/cells/TableCellStatus.tsx","components/pages/UserManagement/hooks.ts","components/common/table/TableUserManagement/cells/TableCellActions.tsx","components/common/table/TableUserManagement/defaultColumns.tsx","redux/user-management/selectors.ts","redux/user-management/reducer.ts","redux/user-management/sagas.ts","redux/ui/modals/reducer.ts","redux/ui/messages/company-filter-info/actions.ts","redux/ui/messages/company-filter-info/actionTypes.ts","redux/ui/messages/company-filter-info/reducer.ts","redux/ui/messages/reducer.ts","redux/ui/reducer.ts","features/company/add-company/state/types.ts","features/company/add-company/state/actions.ts","features/company/add-company/state/selectors.ts","features/company/add-company/state/reducer.ts","features/company/add-company/state/saga.ts","shared/view/molecules/Select/AsyncMultiSelect/AsyncMultiSelect.tsx","features/grid/fetched-count/state/types.ts","features/grid/fetched-count/state/actions.ts","constants/notes.ts","utils/lists.ts","features/company/edit-fields/components/CreateOtherRationale.tsx","shared/view/molecules/Popconfirm/Popconfirm.tsx","components/LoadingIcon/index.tsx","features/alerts/state/selectors.ts","components/pages/Home/SearchGridControls/GridDropdown/GridMenu/DisplayColumnToggle.tsx","components/pages/AnalystsLeaderboard/state/search/types.ts","components/pages/AnalystsLeaderboard/state/search/actions.ts","components/pages/AnalystsLeaderboard/state/search/selectors.ts","components/pages/AnalystsLeaderboard/state/search/reducer.ts","components/pages/AnalystsLeaderboard/state/touchesAcrossRegion/types.ts","components/pages/AnalystsLeaderboard/state/touchesAcrossRegion/actions.ts","components/pages/AnalystsLeaderboard/state/touchesAcrossRegion/selectors.ts","components/pages/AnalystsLeaderboard/state/touchesAcrossRegion/reducer.ts","features/long-card/company-card/featureName.ts","redux/ui/modals/display-column/actions.ts","redux/ui/modals/display-column/actionTypes.ts","redux/ui/modals/display-column/selectors.ts","redux/ui/modals/display-column/reducer.ts","redux/ui/modals/company-notes/actions.ts","redux/ui/modals/company-notes/actionTypes.ts","redux/ui/modals/company-notes/selectors.ts","redux/ui/modals/company-notes/reducer.ts","components/common/table/TableSourceScrubLists/utils/predefinedFilters.ts","redux/contacts/salesloft/types.ts","redux/contacts/salesloft/actions.ts","redux/contacts/salesloft/selectors.ts","redux/contacts/salesloft/reducer.ts","redux/contacts/salesloft/sagas.ts","components/feature/company-individual-edit/useInject.ts","components/feature/company-individual-edit/hooks/useInitialFetchEditOptions.ts","features/pipeline-report/state/types.ts","features/pipeline-report/state/actions.ts","features/pipeline-report/state/selectors.ts","features/pipeline-report/state/reducer.ts","features/pipeline-report/state/sagas.ts","utils/window.ts","redux/scheduled-touches/interfaces.ts","features/grid/autocomplete/state/types.ts","features/grid/autocomplete/state/actions.ts","features/grid/autocomplete/state/selectors.ts","features/grid/autocomplete/state/reducer.ts","features/grid/autocomplete/state/sagas.ts","redux/my-pipeline/actions.ts","redux/my-pipeline/types.ts","redux/my-pipeline/selectors.ts","redux/my-pipeline/reducers.ts","services/api/CompanyService.ts","redux/company/profile/selectors.ts","components/common/table/Companies/columns/virtual-column-config.tsx","utils/menu.ts","redux/company/in-business/actions.ts","redux/company/in-business/types.ts","redux/company/in-business/selectors.ts","redux/company/in-business/reducer.ts","redux/company/in-business/sagas.ts","components/pages/AnalystsLeaderboard/state/emailStatistics/selectors.ts","components/pages/AnalystsLeaderboard/state/emailStatistics/types.ts","components/pages/AnalystsLeaderboard/state/emailStatistics/actions.ts","components/pages/AnalystsLeaderboard/state/emailStatistics/reducer.ts","components/pages/AnalystsLeaderboard/state/smartTouchScore/selectors.ts","components/pages/AnalystsLeaderboard/state/smartTouchScore/types.ts","components/pages/AnalystsLeaderboard/state/smartTouchScore/actions.ts","components/pages/AnalystsLeaderboard/state/smartTouchScore/reducer.ts","features/company/edit-fields/components/EditFieldDate.styled.ts","features/company/edit-fields/components/EditFieldDate.tsx","utils/string.ts","features/company/audit-trail/featureName.ts","redux/company/score/actionTypes.ts","features/lists-and-searches/featureName.ts","features/bulk-actions/bulk-watchlist/state/saga.ts","features/bulk-actions/bulk-watchlist/components/EditWatchlist.styled.ts","features/bulk-actions/bulk-watchlist/components/EditWatchList.tsx","redux/ui/modals/save-search/actions.ts","redux/ui/modals/save-search/actionTypes.ts","redux/ui/modals/save-search/reducer.ts","shared/view/molecules/Select/AsyncSingleSelect/AsyncSingleSelect.tsx","features/checklist-research-insights/state/actions/search.ts","utils/proprietaryInfo.ts","utils/contact.ts","utils/filters/mapFiltersOptions.ts","constants/equitytouch.ts","features/checklist-research-insights/state/sagas/search.ts","features/checklist-research-insights/state/sagas/filters.ts","features/checklist-research-insights/state/sagas/index.ts","features/checklist-research-insights/state/reducer/filters.ts","features/checklist-research-insights/state/reducer/ui/index.ts","features/checklist-research-insights/state/reducer/search.ts","features/checklist-research-insights/state/reducer/cards.ts","features/checklist-research-insights/state/reducer/index.ts","shared/view/molecules/FullScreen/GridFullScreen.tsx","common/hooks/select/useLocalMultiSelect.ts","features/grid/search-count/components/SearchCountOwnStyles.ts","features/grid/search-count/components/SearchCount.tsx","components/pages/AnalystsLeaderboard/hooks.ts","models/routes.ts","constants/tags.ts","features/long-card/hooks/useLoadCompanyData.ts","features/long-card/company-card/constants/touches.ts","redux/company/files/actions.ts","redux/company/files/types.ts","components/common/table/TableCompanyFiles/cells/TableCellFileName.tsx","components/common/table/TableCompanyFiles/defaultColumns.tsx","redux/company/files/selectors.ts","redux/company/files/reducer.ts","redux/company/files/sagas.ts","redux/ui/modals/edit-profile-contact/actions.ts","redux/ui/modals/edit-profile-contact/actionTypes.ts","redux/ui/modals/edit-profile-contact/selectors.ts","redux/ui/modals/edit-profile-contact/reducer.ts","shared/view/molecules/Select/MultiSelect/MultiSelect.tsx","shared/view/molecules/Select/MultiSelect/MultiSelectCreatable.tsx","redux/feature/fetch/selectors.ts","redux/favorites/selectors.ts","assets/svg/icons/logo.svg","redux/lists/details/selectors.ts","redux/user/share/actions.ts","features/combine-search/state/actions.ts","redux/favorite-lists/company-lists/sagas.ts","common/hooks/useIsChromePlugin.ts","features/company-review/state/actions.ts","components/feature/company-individual-edit/hooks/useCompanyOwnerEditableField.ts","components/feature/company-individual-edit/hooks/usePipelineRankEditableField.ts","components/feature/company-individual-edit/hooks/useStageEditableField.ts","common/hooks/useisAdminOrAnalyst.ts","features/alerts/state/constants.ts","shared/view/molecules/statistics/StatsCompare/StatsCompare.tsx","shared/view/molecules/statistics/StatsCompareAndSource/StatsCompareAndSource.styled.ts","shared/view/molecules/statistics/StatsCompareAndSource/StatsCompareAndSource.tsx","components/pages/AnalystsLeaderboard/state/additionalsStatistics/selectors.ts","components/pages/AnalystsLeaderboard/state/additionalsStatistics/types.ts","components/pages/AnalystsLeaderboard/state/additionalsStatistics/actions.ts","components/pages/AnalystsLeaderboard/state/additionalsStatistics/reducer.ts","features/company/edit-fields/components/EditFieldText.styled.ts","features/company/edit-fields/components/EditFieldText.tsx","components/feature/company-individual-edit/state/companyOwner/actionTypes.ts","features/bulk-actions/selected-companies/state/selectors.ts","shared/view/molecules/CommonStyled/ThumbsIcon.ts","common/hooks/useAutoFocusSelect.ts","utils/orderTags.ts","features/company-review/state/actionsTypes.ts","redux/company/active/types.ts","components/feature/company-individual-edit/state/stage/actions.ts","components/feature/company-individual-edit/state/stage/actionTypes.ts","components/feature/company-individual-edit/state/stage/reducer.ts","redux/company/portfolio/types.ts","redux/company/portfolio/actions.ts","redux/company/portfolio/sagas.ts","features/company/graphs/state/selectors/selectFeature.ts","features/company/graphs/state/selectors/employeeGrowth.ts","features/company/graphs/state/selectors/scoreGrowth.ts","features/company/graphs/state/selectors/index.ts","features/request/utils/actionTypes.ts","features/grid/sort/constants.ts","features/sourcing-outreach-summary/constants/table.ts","features/company/edit-fields/constants.ts","shared/view/organims/Table/columns/RawLink.tsx","shared/view/organims/Table/columns/RouterLink.tsx","shared/view/organims/Table/columns/OpenInNewTabIcon.tsx","constants/opportunity-presentation.ts","shared/view/organims/Table/columns/TableCellFinancialValue.tsx","components/common/CopyButton.tsx","utils/replaceObjectForCopy.ts","components/common/table/AntTable/cells/TableCellCompanyName.tsx","redux/company/relationship-management/actions.ts","redux/company/relationship-management/actionTypes.ts","redux/company/relationship-management/selectors.ts","redux/company/relationship-management/reducer.ts","redux/company/relationship-management/sagas.ts","features/bulk-actions/salesloft/state/constants.ts","services/api/AnalystService.ts","features/combine-search/state/types.ts","features/list-share/featureName.ts","features/list-share/state/share-list/actions.ts","features/list-share/state/share-list/actionTypes.ts","features/list-share/state/ui/editModal/actions.ts","features/list-share/state/ui/editModal/actionTypes.ts","features/list-share/state/ui/editModal/reducer.ts","features/list-share/state/selectors/selectFeature.ts","features/list-share/state/selectors/shareList.ts","features/list-share/state/share-list/selectors.ts","features/list-share/state/ui/selectors.ts","features/list-share/state/ui/reducer.ts","features/list-share/state/selectors/ui.ts","features/list-share/state/selectors/index.ts","features/list-share/state/saga/shareList.ts","features/list-share/state/share-list/reducer.ts","features/list-share/components/ShareWatchListMenuItem.tsx","features/list-share/state/reducer.ts","features/list-share/components/OwnerInfo.styled.ts","features/list-share/components/OwnerInfo.tsx","features/list-share/components/EditShareListModal.styled.ts","features/list-share/components/EditShareListModal.tsx","features/list-share/useInject.ts","features/bulk-actions/featureName.ts","constants/combineSearch.ts","features/grid/search/utils/filters.ts","features/alerts/featureName.ts","features/company/graphs/featureName.ts","components/feature/charts/LineChartTooltip.tsx","features/tags/tags/Tags.tsx","redux/ui/modals/recent-activity/actions.ts","redux/ui/modals/recent-activity/actionTypes.ts","redux/ui/modals/recent-activity/selectors.ts","redux/ui/modals/recent-activity/reducer.ts","features/combine-search/state/sagas.ts","components/common/layout/MainHeader.tsx","components/common/layout/MainContent.tsx","components/common/form/input/SearchInput.tsx","shared/view/molecules/Buttons/ClearSearchButton.tsx","common/hooks/useFocusInput.ts","components/common/PrivateComponent.tsx","shared/view/organims/Table/Table.ts","screens/App/AllReports/components/ReportBreadcrumb.tsx","features/company-review/state/saga.ts","utils/csvHandler.ts","features/company-review/featureName.ts","features/company/edit-fields/featureName.ts","features/company/edit-fields/useInject.ts","features/sourcing-outreach-summary/state/types/search.ts","features/sourcing-outreach-summary/state/types/filters.ts","features/sourcing-outreach-summary/state/types/index.ts","features/company-search/lib/Table/columns/ResizeColumn.styled.ts","features/company-search/lib/Table/columns/ResizeColumn.tsx","redux/company/equity-touch/selectors.ts","shared/view/molecules/FormFields/InputWithDropdown.tsx","components/common/MultipleDate.tsx","components/common/filters/RadioButtonPicker/styled.ts","components/common/filters/RadioButtonPicker/RadioButtonPicker.tsx","components/common/filters/SingleSelectDateRanges.tsx","features/grid/fetched-count/state/selectors.ts","features/grid/fetched-count/state/reducer.ts","common/hooks/filters/useSpecialFilter.ts","features/bulk-actions/actions-menu/components/BulkActionsButton.styled.ts","features/bulk-actions/actions-menu/components/BulkActionsButton.tsx","features/grid/columns/state/selectors.ts","utils/table/column-visibility.ts","common/selectors/lists/selectors.ts","components/feature/company-individual-edit/state/saga/companyIndividualEdit.ts","features/company-touches/components/TouchIcon.tsx","common/hooks/init/useRecentActivityModal.ts","components/common/powered-by-ai-tag/index.ts","redux/lists/search/search/selectors.ts","components/common/long-card/ToggleLongCardView.tsx","components/common/long-card/ToggleTableView.tsx","features/company/add-company/utils/index.ts","features/company/add-company/utils/validation.ts","features/company/add-company/components/AddCompanyModal.styled.ts","features/company/add-company/components/Step1.tsx","features/company/add-company/components/table/columns/columns.tsx","features/company/add-company/components/table/columns/cells/TableCellCompanyName.tsx","features/company/add-company/components/Step2.tsx","features/company/add-company/hooks/useLoadOptions.tsx","features/company/add-company/hooks/useGetFilterData.tsx","features/company/add-company/components/fields/InputNumberField.tsx","features/company/add-company/components/DropdownIndicator.tsx","features/company/add-company/components/fields/ProductCategoryField.styled.ts","features/company/add-company/components/fields/ProductCategoryField.tsx","features/company/add-company/components/Step3.tsx","features/company/add-company/components/fields/StageWithRationaleField.tsx","features/company/add-company/components/fields/AddonForField.tsx","features/company/add-company/components/Step4.tsx","features/company/add-company/components/StepCompleted.tsx","features/company/add-company/components/ModalWrapper.tsx","components/feature/drop-down/grid-action-menu/ActionMenu.tsx","redux/company/search/search/selectors.ts","redux/auth/authentication/actions.ts","redux/auth/authentication/actionTypes.ts","assets/images/users/avatar-default.png","redux/company/equity-touch/reducer.ts","components/common/table/AntTable/cells/TableCellBoolean.tsx","components/feature/company-individual-edit/state/companyOwner/selectors.ts","components/feature/company-individual-edit/state/rationale/actions.ts","components/feature/company-individual-edit/state/rationale/types.ts","features/bulk-actions/bulk-merge-companies/constants.tsx","redux/ui/modals/save-search/selectors.ts","common/hooks/history/useHistoryTab.ts","features/company/edit-fields/components/EditFieldNewOPTX.tsx","features/grid/search-type/state/selectors.ts","redux/user/share/types.ts","components/common/table/TableContactsSearch/defaultColumns.tsx","features/long-card/company-card/state/selectors.ts","common/hooks/fetch/useShouldFetch.ts","components/common/loader/OverlayLoader.tsx","components/common/powered-by-ai-tag/PoweredByAITag.tsx","features/alerts/state/sagas.ts","components/common/cards/Card.tsx","components/pages/AnalystsLeaderboard/state/reducer.ts","assets/images/logo-company.png","constants/sourcingOutReachColumnNames.ts","components/pages/Home/SearchGridControls/TrendingControls.tsx","features/add-research-rationale/components/fields/OptxScoreRationale.tsx","features/add-research-rationale/components/AddResearchRationale.styles.ts","features/add-research-rationale/components/Header.tsx","features/add-research-rationale/components/rationale/ScoreRationale.tsx","features/add-research-rationale/components/fields/NewOptxScoreRationale.tsx","features/add-research-rationale/components/rationale/OtherOptions.tsx","features/add-research-rationale/components/rationale/OptionsRationale.tsx","features/add-research-rationale/components/fields/CollapsableFields.tsx","features/add-research-rationale/components/rationale/ThumbActions.styled.ts","features/add-research-rationale/components/rationale/ThumbActions.tsx","features/add-research-rationale/components/rationale/CollapsabeCardInfo.styled.ts","features/add-research-rationale/components/rationale/CollapsableCardInfo.tsx","features/add-research-rationale/components/AddResearchRationale.tsx","components/pages/AnalystsLeaderboard/constants/specialCriteria.ts","components/pages/AnalystsLeaderboard/state/sagas/filters.ts","components/pages/AnalystsLeaderboard/utils/isSpecialCriteria.ts","components/pages/AnalystsLeaderboard/state/sagas/search.ts","components/pages/AnalystsLeaderboard/state/sagas/init.ts","components/pages/AnalystsLeaderboard/state/sagas/touchesAcrossRegion.ts","components/pages/AnalystsLeaderboard/state/sagas/emailStatistics.ts","components/pages/AnalystsLeaderboard/state/sagas/smartTouchScore.ts","components/pages/AnalystsLeaderboard/state/sagas/additionalStatistics.ts","components/pages/AnalystsLeaderboard/state/sagas/pipeline-information.ts","components/pages/AnalystsLeaderboard/state/sagas/index.ts","features/company/audit-trail/useInject.ts","utils/auditFields.tsx","features/company/audit-trail/components/AuditTrail.styled.ts","features/company/audit-trail/components/AuditField.tsx","features/company/audit-trail/components/Separator.tsx","features/company/audit-trail/components/AuditTrailHeader.tsx","features/company/audit-trail/components/AuditTrail.tsx","components/feature/company-individual-edit/state/sector/actions.ts","components/feature/company-individual-edit/state/sector/types.ts","components/feature/company-individual-edit/state/sector/reducer.ts","components/feature/company-individual-edit/hooks/useSectorEditableField.ts","components/feature/company-individual-edit/state/subSector/actions.ts","components/feature/company-individual-edit/state/subSector/types.ts","components/feature/company-individual-edit/state/subSector/reducer.ts","components/feature/company-individual-edit/hooks/useSubSectorEditableField.ts","redux/auth/cognitoLogin/actionTypes.ts","redux/auth/cognitoLogin/actions.ts","redux/auth/cognitoLogin/selectors.ts","redux/auth/cognitoLogin/reducer.ts","redux/auth/cognitoLogin/sagas.ts","redux/ui/modals/user-edit/actions.ts","redux/ui/modals/user-edit/actionTypes.ts","redux/ui/modals/user-edit/selectors.ts","redux/ui/modals/user-edit/reducer.ts","redux/user/profile-image/actions.ts","redux/user/profile-image/actionTypes.ts","redux/user/profile-image/sagas.ts","constants/sourcingOutReachFilters.ts","redux/company-outreach/search/saga.ts","components/common/charts/EmptyChart/styled.ts","components/common/charts/EmptyChart/EmptyChart.tsx","utils/pluginManager.ts","utils/mapCompanyPropName.ts","redux/common/rationales/reducer.ts","constants/select.ts","features/grid/filter/state/constants.ts","features/tags/tags/IsAIMl.tsx","features/tags/tags/ListTag.styles.tsx","features/long-card/card-pannel/utils/useHeaderHeight.ts","components/common/loader/Loader.styles.ts","utils/verifyAccess.ts","components/pages/AnalystsLeaderboard/state/init/types.ts","shared/view/molecules/trending/TrendingValue.styles.ts","assets/images/company_ico@2x.png","screens/App/AllReports/selectors.ts","components/common/long-card/ToggleViewButton.styles.tsx","components/feature/charts/CombinedChartTicks.tsx","assets/svg/gradient-definitions.svg","components/feature/company-individual-edit/state/oportunityType/actions.ts","components/feature/company-individual-edit/state/oportunityType/actionTypes.ts","components/feature/company-individual-edit/state/oportunityType/reducer.ts","components/feature/company-individual-edit/state/pipelineRank/actions.ts","components/feature/company-individual-edit/state/pipelineRank/actionTypes.ts","components/feature/company-individual-edit/state/pipelineRank/reducer.ts","components/feature/company-individual-edit/state/leadSource/actions.ts","components/feature/company-individual-edit/state/leadSource/actionTypes.ts","components/feature/company-individual-edit/state/leadSource/reducer.ts","components/feature/company-individual-edit/state/seniorAdviserThesis/actions.ts","components/feature/company-individual-edit/state/seniorAdviserThesis/actionTypes.ts","components/feature/company-individual-edit/state/seniorAdviserThesis/reducer.ts","core/notifications/types.ts","core/constants.ts","core/notifications/middleware.ts","core/notifications/actions.ts","redux/company/date-presented/actions.ts","redux/company/date-presented/types.ts","redux/company/date-presented/sagas.ts","components/feature/company-individual-edit/state/companyIndividualEdit/reducer.ts","components/common/link/OpenInNewTabHover.tsx","components/common/link/ContentLink.tsx","features/edit-all-info/useInject.ts","components/pages/CompanyProfile/ProfileTabs/Addon/table/defaultColumns.tsx","features/grid/columns/utils/columns.ts","components/common/table/Companies/CompanyTable.styled.ts","redux/company/lists/actions.ts","redux/company/lists/types.ts","components/common/table/TableCompanyTabLists/defaultColumns.tsx","redux/company/lists/selectors.ts","redux/company/lists/reducer.ts","redux/company/lists/sagas.ts","features/admin-home/featureName.ts","features/admin-home/state/types/company.ts","features/admin-home/state/types/insights.ts","features/admin-home/state/types/filters.ts","features/admin-home/state/types/activity.ts","features/admin-home/state/types/index.ts","features/admin-home/state/actions/company.ts","features/admin-home/state/actions/insights.ts","features/admin-home/state/actions/filters.ts","features/admin-home/state/actions/activity.ts","features/admin-home/state/actions/index.ts","features/admin-home/state/constants.ts","features/admin-home/state/selectors/index.ts","features/admin-home/state/sagas/sagas.ts","features/admin-home/state/sagas/index.ts","features/admin-home/state/reducers/insights.ts","features/admin-home/state/reducers/activity.ts","features/admin-home/state/reducers/company.ts","features/admin-home/state/reducers/filters.ts","features/admin-home/state/reducers/index.ts","constants/images.ts","components/common/table/TableContactInformation/cells/TableCellActions.tsx","components/common/table/TableContactInformation/cells/TableCellName.styled.tsx","components/common/table/TableContactInformation/cells/TableCellName.tsx","components/common/table/TableContactInformation/cells/TableCellList.tsx","components/feature/charts/LinearChart.tsx","redux/scheduled-touches/saga.ts","redux/scheduled-touches/reducer.ts","components/feature/charts/ChartLegend.style.ts","components/feature/charts/ChartLegend.tsx","redux/company/extension-profile/actions.ts","redux/company/extension-profile/types.ts","redux/company/extension-profile/selectors.ts","redux/company/extension-profile/reducer.ts","redux/company/extension-profile/sagas.ts","redux/company/notes/reducer.ts","redux/company/notes/sagas.ts","redux/login/actions.ts","redux/login/types.ts","features/field-factory/MultiSelectField.styled.ts","components/pages/CompanyProfile/ProfileTabs/DealPresentation/styles/DealPresentation.styled.ts","constants/limit.ts","features/grid/pagination/components/GridPagination.tsx","features/grid/pagination/components/PaginationPerPage.tsx","common/hooks/responsive/useIsTabletOrSmaller.ts","common/hooks/responsive/useIsLaptopOrSmaller.ts","common/hooks/fullscreen/useReduxFullScreen.tsx","features/field-factory/CheckboxIcon.tsx","constants/fullScreen.ts","common/hooks/useIsMount.ts","features/grid/filter/components/ShowFilterButton.tsx","utils/filtersValidationSchema.ts","features/analyst-home/constants/labels.ts","common/validation/save-search.ts","features/alerts/useInject.ts","features/alerts/components/RecentActivity.tsx","assets/svg/logo-background.svg","features/grid/reducer.ts","features/grid/useInject.ts","constants/main-navigation.ts","components/common/menu/menu-items/PrivateMenuItem.tsx","components/common/menu/submenu/PrivateSubmenu.tsx","core/layout/MainNavigation/menu-items/LogOut.tsx","core/layout/MainNavigation/menu-items/Notifications.tsx","core/layout/MainNavigation/menu-items/ProfileSubMenu/UserPicture.tsx","core/layout/MainNavigation/menu-items/ProfileSubMenu/ProfileSubMenu.tsx","core/layout/MainNavigation/menu-items/SuggestedSearches/selectors.ts","core/layout/MainNavigation/menu-items/SuggestedSearches/SuggestedSearch.tsx","core/layout/MainNavigation/NavigationLogo/NavigationLogo.tsx","core/layout/MainNavigation/NavigationTrigger.tsx","core/layout/MainNavigation/MainNavigation.tsx","core/layout/MainNavigation/utils.ts","common/hooks/analytics/useAnalytics.ts","components/common/analytics/Analytics.tsx","components/common/pendo/Pendo.tsx","utils/env.ts","core/layout/LayoutContext.tsx","core/layout/MainLayout.tsx","components/pages/CompanyList/useInjectPage.ts","shared/view/molecules/layout/MainHeader.tsx","shared/view/molecules/layout/MainContent.tsx","core/layout/MainHeader.tsx","components/pages/Home/SearchGridControls/ToggleSortType.tsx","components/pages/Home/SearchGridControls/ToggleSearchViewSort.tsx","components/pages/Home/SearchGridControls/ClearSortButton.tsx","components/pages/Home/SearchGridControls/GridDropdown/GridMenu/GridMenu.tsx","components/pages/UserLists/components/SearchGrid/SearchGridControls/ToggleSortType.tsx","components/pages/UserLists/components/SearchGrid/SearchGridControls/ToggleSearchViewSort.tsx","components/pages/UserLists/components/SearchGrid/SearchGridControls/ClearSortButton.tsx","components/pages/Home/SearchGridControls/GridDropdown/GridMenu/ListsMenu.tsx","components/pages/MyCompanies/SecondaryHeader/ToggleSortType.tsx","components/pages/Home/SearchGridControls/GridDropdown/GridMenu/ClearSortingMenuItem.tsx","components/pages/Home/SearchGridControls/GridDropdown/GridMenu/MyCompaniesMenu.tsx","components/pages/Home/SearchGridControls/GridDropdown/GridMenu/ResetWidthsOnlyMenu.tsx","components/pages/Home/SearchGridControls/GridDropdown/GridMenu/PipelineMenu.tsx","components/pages/Contacts/SecondaryHeader/ToggleSortType.tsx","components/pages/Home/SearchGridControls/GridDropdown/GridMenu/ContactsMenu.tsx","components/pages/Home/SearchGridControls/GridDropdown/GridDropdown.tsx","features/add-touch/components/DocumentUploadModal/constants/fileUploadConstants.ts","features/add-touch/components/DocumentUploadModal/utils/index.ts","features/add-touch/components/DocumentUploadModal/components/DocumentUploadItem/DocumentUploadItem.styled.ts","features/add-touch/components/DocumentUploadModal/components/DocumentUploadItem/DocumentUploadItem.tsx","features/add-touch/components/DocumentUploadModal/components/DocumentDragAndDrop/DocumentDragAndDrop.styled.ts","features/add-touch/components/DocumentUploadModal/components/DocumentDragAndDrop/DocumentDragAndDrop.tsx","features/add-touch/components/DocumentUploadModal/DocumentUploadModal.tsx","components/common/table/TableColumnFilterContext.tsx","components/common/table/TableColumnFilter.styled.ts","components/common/table/TableColumnFilter.tsx","features/columns/DrawerHeader.tsx","components/common/table/DisplayColumnModal.styled.ts","features/grid/columns/components/DisplayColumnModal.tsx","features/edit-all-info/utils/validation.ts","features/edit-all-info/components/EditAllDialog.styled.ts","features/edit-all-info/components/EditAllDialog.tsx","components/common/table/TableSavedSearches/cells/company/FilterTagsNewDateMatched.tsx","components/common/table/TableSavedSearches/cells/company/FilterTags.styled.ts","components/common/table/TableSavedSearches/cells/company/FilterTags.tsx","common/hooks/useNonVirtualizedTable.ts","common/hooks/testing/useIsForTesting.ts","components/common/external-scroll/index.ts","utils/mapSortFieldQuery.ts","utils/mapSortOrderQuery.ts","features/add-touch/components/index.tsx","features/company/graphs/state/reducer.ts","features/company/graphs/state/sagas.ts","features/company/graphs/useInject.ts","components/pages/Home/Header/SaveSearch/SaveSearch.style.ts","components/pages/Home/Header/SaveSearch/SaveSearchForm.tsx","components/pages/Home/Header/SaveSearch/SaveSearch.tsx","components/common/table/Companies/columns/virtual-column-config-fast-load.tsx","components/pages/Home/TestingGridTable.tsx","components/common/form/formik/FormikMultiSelect.tsx","components/DropdownAdd/useDropdownAdd.ts","utils/scrollTable.ts","utils/select/selectAll.ts","common/hooks/useMultiSortNumbers.ts","common/hooks/select/useSelectAll.ts","components/common/external-scroll/ExternalScroll.tsx","features/grid/select-all/components/RenderCell.tsx","utils/filters/mapTagsToNamesAndOperators.ts","features/company-sorting/ClearAllSortingMenuItem.tsx","features/company-sorting/ToggleSortTypeMenuItem.tsx","components/common/DropdownDotRemove.tsx","components/CompanyNotes/CardNotification.tsx","components/CompanyNotes/CompanyNotes.tsx","redux/geo-range/actions.ts","redux/geo-range/actionTypes.ts","redux/geo-range/sagas.ts","features/grid/select-all/components/SelectAll.styled.tsx","features/grid/select-all/components/SelectAllBanner.tsx","features/grid/search-type/components/SearchTypeMenu.styled.ts","features/grid/search-type/components/SearchTypeMenu.tsx","features/company-search/lib/Table/columns/CompanyName.tsx","storage/localStorage/extensionStorage.ts","components/common/table/AntTable/cells/TableCellURL.tsx","constants/future-date-fields.ts","components/common/select/AsyncCreatableSelect.tsx","features/edit-all-info/state/selectors.ts","features/company-search/index.ts","components/pages/UserLists/components/PageLoader/selectors.ts","components/common/molecules/buttons/ToggleButton.tsx","common/hooks/useTableLayoutHeight.ts","constants/exportedFileName.ts","common/hooks/filters/useSaveViewMessage.tsx","components/common/DropdownInput.tsx","components/feature/drop-down/saved-searches/ListActions/menu-items/ShareListMenuItem.tsx","components/feature/drop-down/saved-searches/ListActions/menu-items/MakeDefaultFilter.tsx","components/feature/drop-down/saved-searches/ListActions/menu-items/AddListAssociationMenuItem.tsx","components/feature/drop-down/saved-searches/ListActions/menu-items/RemoveListAssociationMenuItem.tsx","common/validation/combine-search.ts","components/feature/drop-down/saved-searches/ListActions/menu-items/CombineSearchMenuItem.tsx","components/feature/drop-down/saved-searches/ListActions/menu-items/DownloadMenuItem.tsx","components/feature/drop-down/saved-searches/ListActions/menu-items/ActionMenuItem.tsx","components/feature/drop-down/saved-searches/ListActions/ListActionsMenu.styled.ts","components/feature/drop-down/saved-searches/ListActions/ListActionsMenu.tsx","components/feature/drop-down/saved-searches/ListActions/ListActions.tsx","features/optx-insights/components/OPTXInsights.styles.ts","features/optx-insights/components/OPTXInsights.tsx","features/long-card/card-pannel/state/selectors.ts","features/long-card/card-pannel/components/CardPannelHeader.styles.tsx","features/long-card/card-pannel/components/CardPannelHeader.tsx","features/long-card/card-pannel/components/CardPannelGraphs.tsx","features/long-card/card-pannel/components/CardPannel.styled.tsx","features/long-card/card-pannel/components/CardPannel.tsx","components/common/avatar/CompanyAvatar/CompanyAvatar.tsx","features/company/edit-fields/components/CreateOtherOptions.tsx","assets/images/flags/israel_flag.jpg","features/sourcing-outreach-summary/state/actions/search.ts","constants/os/browser.ts","components/pages/CompanyProfile/ProfileTabs/DealPresentation/components/inputs/EditFieldNumber.tsx","components/pages/CompanyProfile/ProfileTabs/DealPresentation/components/inputs/EditFieldSingleSelect.tsx","components/pages/Home/SearchGridControls/index.ts","components/pages/MyCompanies/selectors.ts","components/feature/charts/LinearCombinedChart.tsx","common/hooks/useNavigateOnCompanyNameClick.ts","features/sourcing-outreach-summary/components/FilterSingleSelectDateFilter.styled.ts","features/company/social-media/featureName.ts","features/company/social-media/state/website-rank/types.ts","features/company/social-media/state/website-rank/actions.ts","features/company/social-media/state/website-rank/selectors.ts","features/company/social-media/state/website-rank/reducer.ts","features/company/social-media/state/website-rank/saga.ts","features/company/social-media/state/g2/types.ts","features/company/social-media/state/g2/actions.ts","features/company/social-media/state/g2/selectors.ts","features/company/social-media/state/g2/reducer.ts","features/company/social-media/state/g2/saga.ts","features/company/social-media/state/glassdoor/types.ts","features/company/social-media/state/glassdoor/actions.ts","features/company/social-media/state/glassdoor/selectors.ts","features/company/social-media/state/glassdoor/reducer.ts","features/company/social-media/state/glassdoor/saga.ts","features/company/social-media/state/linkedin/types.ts","features/company/social-media/state/linkedin/actions.ts","features/company/social-media/state/linkedin/selectors.ts","features/company/social-media/state/linkedin/reducer.ts","features/company/social-media/state/linkedin/saga.ts","features/company/social-media/state/crunchbase/types.ts","features/company/social-media/state/crunchbase/actions.ts","features/company/social-media/state/crunchbase/selectors.ts","features/company/social-media/state/crunchbase/reducer.ts","features/company/social-media/state/crunchbase/saga.ts","features/company/social-media/state/twitter/types.ts","features/company/social-media/state/twitter/actions.ts","features/company/social-media/state/twitter/selectors.ts","features/company/social-media/state/twitter/reducer.ts","features/company/social-media/state/twitter/saga.ts","features/company/social-media/state/facebook/types.ts","features/company/social-media/state/facebook/actions.ts","features/company/social-media/state/facebook/selectors.ts","features/company/social-media/state/facebook/reducer.ts","features/company/social-media/state/facebook/saga.ts","features/company/social-media/state/capterra/types.ts","features/company/social-media/state/capterra/actions.ts","features/company/social-media/state/capterra/selectors.ts","features/company/social-media/state/capterra/reducer.ts","features/company/social-media/state/capterra/saga.ts","features/company/social-media/state/reducer.ts","features/company/social-media/state/sagas.ts","features/company/social-media/state/selectors.ts","features/company/social-media/useInject.ts","features/company/social-media/components/LineChartTooltip.tsx","features/company/social-media/components/LineChart.style.ts","features/company/social-media/components/ChartHeader.tsx","features/company/social-media/components/ReversedTicks.tsx","features/company/social-media/components/LineChart.tsx","features/company/social-media/components/website-rank/WWWebsiteRankChart.tsx","features/company/social-media/components/DoubleLineChart.styled.ts","features/company/social-media/components/DoubleLineChart.tsx","features/company/social-media/components/g2/G2Chart.tsx","features/company/social-media/components/glassdoor/GlassDoorChart.style.ts","features/company/social-media/components/glassdoor/GlassDoorChart.tsx","features/company/social-media/components/linkedin/LinkedinChart.tsx","features/company/social-media/components/crunchbase/CrunchbaseChart.tsx","features/company/social-media/components/twitter/TwitterChart.tsx","features/company/social-media/components/facebook/FacebookChart.tsx","features/company/social-media/components/capterra/CapterraChart.tsx","features/company/social-media/components/website-rank/USWebsiteRankChart.tsx","features/company/social-media/components/SocialMedia.tsx","components/DropdownAdd/AddCompanyToListPopover/AddWatchList.tsx","components/DropdownAdd/AddCompanyToListPopover/cols/TableCellName.tsx","components/DropdownAdd/AddCompanyToListPopover/WatchListOptionsColumn.ts","components/DropdownAdd/AddCompanyToListPopover/WatchListOptions.tsx","components/DropdownAdd/AddCompanyToListPopover/PopoverContent.tsx","components/DropdownAdd/AddCompanyToListPopover/AddCompanyToListPopover.styles.ts","components/DropdownAdd/AddCompanyToListPopover/SortSelectLists.styles.ts","components/DropdownAdd/AddCompanyToListPopover/SortSelectLists.tsx","components/DropdownAdd/AddCompanyToListPopover/AddCompanyToListPopover.tsx","redux/ui/modals/user-invitation/actions.ts","redux/ui/modals/user-invitation/actionTypes.ts","redux/ui/modals/user-invitation/selectors.ts","redux/ui/modals/user-invitation/reducer.ts","redux/ui/modals/user-invitation/sagas.ts","components/pages/Home/Header/ToggleLongCardViewContainer.tsx","components/pages/Home/Header/ToggleTableViewContainer.tsx","components/pages/Home/SearchGridControls/CardPannelSorting.tsx","components/pages/Home/SearchGridControls/QuickFiltersToggle.tsx","components/pages/Home/SearchGridControls/SearchGridControls.styles.ts","components/pages/Home/SearchGridControls/SearchGridControls.tsx","features/add-touch/components/touchInitialValues.ts","features/add-touch/components/validation.ts","common/hooks/init/useInitCompanyTouchesDialog.tsx","features/add-touch/components/CompanyTouches.styled.ts","features/add-touch/components/TouchModalTitle.tsx","features/add-touch/components/CompanyTouches.tsx","features/company-search/lib/HeaderContent.styled.ts","features/company-search/lib/SearchGridControls.styled.ts","features/company-search/lib/ShowingCount.styled.ts","features/company-search/lib/ShowingCount.tsx","redux/ui/modals/my-watchlist-csv-error/actions.ts","redux/ui/modals/my-watchlist-csv-error/types.ts","redux/ui/modals/my-watchlist-csv-error/selectors.ts","redux/ui/modals/my-watchlist-csv-error/reducer.ts","assets/images/google-news.png","components/pages/CompanyProfile/ProfileTabs/NewsFeed/GoogleNews.tsx","components/pages/CompanyProfile/ProfileTabs/NewsFeed/NewsFeed.tsx","redux/user/region-settings/actions.ts","redux/user/region-settings/actionTypes.ts","redux/user/region-settings/sagas.ts","shared/view/molecules/trending/TrendingValue.tsx","shared/view/molecules/trending/ScoreTrending.styles.ts","components/pages/CompanyProfile/ProfileBanner/CompanySourceDescriptions/CompanySourceDescriptions.styles.ts","components/pages/CompanyProfile/ProfileBanner/CompanySourceDescriptions/CompanySourceDescriptions.tsx","components/common/feedback-mechanism/FeedbackMechanism.styles.ts","components/common/feedback-mechanism/FeedbackMechanism.tsx","components/feature/charts/BarChartTooltip.tsx","components/feature/charts/BarCustomizedLabel.tsx","components/feature/charts/BarChartIntervals.tsx","features/company/edit-fields/components/EditParentCompanyInfluence.styled.ts","features/company/edit-fields/components/EditParentCompanyInfluence.tsx","components/common/table/AntTable/cells/TableCellCompanyURL.tsx","features/company/long-card/LongCard.tsx","components/pages/UserManagement/UserManagement.style.ts","features/company/edit-fields/components/EditFieldOPTX.tsx","features/checklist-research-insights/components/Table/columns/analystColumn.tsx","utils/chart/recharts.ts","redux/auth/authentication/saga.ts","components/pages/Home/HomeContext.tsx","features/field-factory/RadioGroupField.styled.ts","features/tags/overflow-tags/CompanyTagsCollapsable.tsx","screens/App/AllReports/PageLoader.tsx","shared/view/molecules/Select/SingleSelect/components/SingleValueContainer.tsx","features/add-touch/components/TouchInformation.styled.ts","components/pages/AnalystsLeaderboard/state/init/actions.ts","components/pages/AnalystsLeaderboard/components/AnalystsMultiSelect.tsx","components/pages/AnalystsLeaderboard/components/styled.ts","utils/chart/tooltip.ts","components/pages/AnalystsLeaderboard/components/LeaderboardChart/LeaderboardChartTooltip.styled.tsx","components/pages/AnalystsLeaderboard/components/LeaderboardChart/LeaderboardChartTooltip.tsx","components/pages/AnalystsLeaderboard/components/LeaderboardChart/LeaderboardChart.tsx","components/common/Text/OptionValue.tsx","components/pages/AnalystsLeaderboard/constants/cardInfo.ts","components/pages/AnalystsLeaderboard/components/Cards/CardTitle.styles.ts","components/pages/AnalystsLeaderboard/components/Cards/CardTitle.tsx","components/pages/AnalystsLeaderboard/components/Cards/Info.styled.ts","components/pages/AnalystsLeaderboard/components/Cards/FilterCards.styles.ts","components/pages/AnalystsLeaderboard/components/Cards/Info.tsx","components/pages/AnalystsLeaderboard/components/Cards/FilterCards.tsx","common/hooks/filters/useSingleSelect.ts","components/common/filters/SingleSelectButtons.tsx","components/pages/AnalystsLeaderboard/components/FilterSingleSelectButtons.tsx","components/pages/AnalystsLeaderboard/components/FilterMultiSelect.tsx","components/pages/AnalystsLeaderboard/components/ChartCardHead/ChartCardHead.tsx","components/pages/AnalystsLeaderboard/components/FilterSingleSelectDateRanges.tsx","components/pages/AnalystsLeaderboard/components/Header/FilterTags.tsx","components/pages/AnalystsLeaderboard/components/Header/Header.tsx","components/pages/AnalystsLeaderboard/components/PageLoader.tsx","components/common/ErrorBoundary.tsx","components/pages/AnalystsLeaderboard/utils/maps.ts","components/pages/AnalystsLeaderboard/components/AnalystsTouches/TouchesMap.tsx","components/common/legend-card/LegendCard.styles.ts","components/common/legend-card/LegendCard.tsx","components/pages/AnalystsLeaderboard/utils/top-touches.ts","components/pages/AnalystsLeaderboard/components/AnalystsTouches/TopTouches.styles.ts","components/pages/AnalystsLeaderboard/components/AnalystsTouches/TopTouches.tsx","components/pages/AnalystsLeaderboard/components/AnalystsTouches/AnalystsTouches.styles.ts","components/pages/AnalystsLeaderboard/components/AnalystsTouches/AnalystsTouches.tsx","components/pages/AnalystsLeaderboard/components/StatsSection/StatsSection.styles.tsx","components/pages/AnalystsLeaderboard/components/EmailStatistics/EmailsSentChart/helpers.ts","components/pages/AnalystsLeaderboard/components/EmailStatistics/EmailsSentChart/config.ts","components/pages/AnalystsLeaderboard/components/EmailStatistics/EmailsSentChart/EmailsSentChart.tsx","components/pages/AnalystsLeaderboard/components/EmailStatistics/EmailsSentTitle.tsx","components/pages/AnalystsLeaderboard/components/EmailStatistics/EmailStatistics.tsx","components/pages/AnalystsLeaderboard/components/SmartTouchScore/SmartTouchScoreChart/ChartTooltip.styled.ts","components/pages/AnalystsLeaderboard/components/SmartTouchScore/SmartTouchScoreChart/ChartTooltip.tsx","components/pages/AnalystsLeaderboard/components/SmartTouchScore/SmartTouchScoreChart/config.ts","components/pages/AnalystsLeaderboard/components/SmartTouchScore/SmartTouchScore.styled.ts","components/pages/AnalystsLeaderboard/components/SmartTouchScore/SmartTouchScoreChart/SmartTouchScoreChart.tsx","components/pages/AnalystsLeaderboard/components/SmartTouchScore/Info.styled.ts","components/pages/AnalystsLeaderboard/components/SmartTouchScore/Info.tsx","components/pages/AnalystsLeaderboard/components/SmartTouchScore/SmartTouchScore.tsx","components/pages/AnalystsLeaderboard/components/StatsSection/StatsSection.tsx","components/pages/AnalystsLeaderboard/components/AdditionalStatistics/AdditionalStatistics.tsx","components/pages/AnalystsLeaderboard/components/PipelineInformation/Title.tsx","shared/view/molecules/List/OrderedList.styled.tsx","shared/view/molecules/List/OrderedList.tsx","components/pages/AnalystsLeaderboard/components/PipelineInformation/LabelValuePair.styled.ts","components/pages/AnalystsLeaderboard/components/PipelineInformation/LabelValuePair.tsx","components/pages/AnalystsLeaderboard/components/PipelineInformation/OtherDealStages.tsx","components/pages/AnalystsLeaderboard/components/PipelineInformation/PipelineChart/Tooltip.tsx","components/pages/AnalystsLeaderboard/components/PipelineInformation/PipelineChart/PipelineChart.styled.ts","components/pages/AnalystsLeaderboard/components/PipelineInformation/PipelineChart/Legend.tsx","components/pages/AnalystsLeaderboard/components/PipelineInformation/PipelineChart/PipelineChart.tsx","components/pages/AnalystsLeaderboard/components/FilterSingleSelect.tsx","components/pages/AnalystsLeaderboard/components/PipelineInformation/PreviousPeriodSelect.styled.ts","components/pages/AnalystsLeaderboard/components/PipelineInformation/PreviousPeriodSelect.tsx","components/pages/AnalystsLeaderboard/components/PipelineInformation/PipelineInformation.styled.ts","components/pages/AnalystsLeaderboard/components/PipelineInformation/PipelineInformation.tsx","components/pages/AnalystsLeaderboard/components/AnalystsLeaderboard.styled.ts","components/pages/AnalystsLeaderboard/components/AnalystsLeaderboard.tsx","features/company/merges/featureName.ts","features/company/merges/state/types.ts","features/company/merges/state/actions.ts","features/company/merges/state/selectors.ts","features/company/merges/state/saga.ts","features/company/merges/state/reducer.ts","features/company/merges/useInject.ts","components/common/table/TableCompanyMerges/defaultColumns.ts","components/common/table/TableCompanyMerges/cells/TableCellLink.tsx","features/company/merges/components/UnmergeModal.styled.ts","features/company/merges/components/UnmergeModal.tsx","features/company/merges/components/MergeHistory.tsx","features/company/merges/components/History.tsx","features/pipeline-report/components/Table/columns/cells/TableCellCompanyName.tsx","features/pipeline-report/components/Table/columns/cells/TableCellCompanyURL.tsx","features/pipeline-report/components/Table/columns/cells/TableCellTeams.tsx","features/pipeline-report/components/Table/columns/cells/TableCellDate.tsx","features/pipeline-report/components/Table/columns/cells/TableCellActions.tsx","features/pipeline-report/components/Table/columns/columns.tsx","redux/company/revenue-growth/actionTypes.ts","redux/company/revenue-growth/actions.ts","redux/company/revenue-growth/saga.ts","components/pages/CompanyProfile/saga.tsx","components/pages/CompanyProfile/hooks.ts","redux/user/reset-password/actions.ts","redux/user/reset-password/actionTypes.ts","redux/user/reset-password/sagas.ts","redux/company/employee-growth/actionTypes.ts","redux/company/employee-growth/actions.ts","redux/company/employee-growth/saga.ts","components/pages/CompanyProfile/ProfileBanner/PSGFit/PSGFit.style.ts","components/pages/CompanyProfile/ProfileBanner/PSGFit/PSGFitDefault.tsx","components/pages/CompanyProfile/ProfileBanner/PSGFit/PSGFit.tsx","redux/lists/search/search/sagas.ts","shared/view/molecules/statistics/StatsPresentation/StatsPresentation.styles.ts","shared/view/molecules/statistics/StatsPresentation/StatsPresentation.tsx","components/common/table/TableMyWatchlists/cells/TableCellMyWatchlistsActions.tsx","components/common/table/TableMyWatchlists/cells/TableCellAssociatedCompany.tsx","features/grid/filter/components/FiltersModal.tsx","common/hooks/dom/useMaxDisplayedChildren.ts","features/checklist-research-insights/components/Table/columns/cells/TableCellScore.tsx","features/checklist-research-insights/components/Table/columns/companyColumn.tsx","components/common/table/TableBulkEditingResults/cells/TableCellErrorReason.tsx","modules/numeral.ts","core/theme/colors.ts","core/theme/theme.ts","core/theme/breakpoints.ts","components/feature/loader/GlobalLoader/GlobalLoader.styles.ts","components/feature/loader/GlobalLoader/index.tsx","features/custom-global-loader/components/CustomGlobalLoader.tsx","components/common/route/PrivateRoute.tsx","components/common/route/PublicRoute.tsx","screens/App/AllReports/components/SearchGridControls/SourcingOutReachContext.ts","screens/App/AllReports/components/SearchGridControls/GridDropdown/GridMenu/ClearSortingMenuItem.tsx","screens/App/AllReports/components/SearchGridControls/ToggleSortType.tsx","screens/App/AllReports/components/SearchGridControls/GridDropdown/GridMenu/CompaniesOutReachMenu.tsx","screens/App/AllReports/components/SearchGridControls/GridDropdown/GridDropdown.tsx","screens/App/AllReports/components/SearchGridControls/ToggleLongCardViewContainer.tsx","screens/App/AllReports/components/SearchGridControls/ToggleTableViewContainer.tsx","screens/App/AllReports/components/SearchGridControls/SearchGridControls.styles.ts","screens/App/AllReports/components/SearchGridControls/CardPannelSorting.tsx","screens/App/AllReports/components/SearchGridControls/SearchGridControls.tsx","screens/App/AllReports/CompanyListSourcingOutReach.styled.ts","screens/App/AllReports/components/LongCardView.tsx","screens/App/AllReports/components/CardContent.tsx","screens/App/AllReports/components/PageLoader/selectors.ts","screens/App/AllReports/components/SearchGrid.tsx","screens/App/AllReports/components/GridContent.tsx","screens/App/AllReports/components/CompanySearchDisplay.tsx","screens/App/AllReports/components/ApplySearchButton.tsx","screens/App/AllReports/components/CompanySearch/CompanySearch.tsx","screens/App/AllReports/components/FilterTags.tsx","screens/App/AllReports/components/CompanySearchDropdown/SearchMenu/SearchMenu.tsx","screens/App/AllReports/components/CompanySearchDropdown/CompanySearchDropdown.tsx","screens/App/AllReports/components/CompanySearchDropdown/SearchMenu/ExportToCSV.tsx","screens/App/AllReports/components/SearchHeader.tsx","screens/App/AllReports/components/AnalystsSelect.tsx","screens/App/AllReports/components/styled.ts","screens/App/AllReports/components/FilterSingleSelectDateRanges.tsx","screens/App/AllReports/CompanyListSourcingOutReach.tsx","screens/App/App.tsx","screens/App/useInject.ts","utils/history.tsx","reducers.ts","core/middlewares.ts","configureStore.ts","serviceWorker.js","index.tsx"],"names":["NotificationService","_classCallCheck","_createClass","key","value","message","settings","forceLock","toast","success","mergeSettings","info","this","toastOptions","toastId","error","setTimeout","dismiss","autoClose","warn","defaultSettings","position","newSettings","merge","AuthService","client","ApiClient","concat","API_URL","login","payload","get","headers","getCognitoURL","getCognitoLogOutURL","logout","post","UserService","arguments","length","undefined","put","picture","data","FormData","append","responseType","currentPassword","nextPassword","password","new_password","queryString","stringify","companyId","company_id","queryData","query","page","pageNumber","per_page","pageSize","note","noteText","title","note_title","unique_id","note_unique_id","note_text","id","status","patch","arrayFormat","user_id","queryPayload","isFetchPSG","shareData","listId","list_id","delete","tab","startDate","endDate","sortBy","pagination","touchType","stageType","rankType","sort","mapSortQuery","pag","mapPaginationQuery","_objectSpread","start_date","end_date","touch_type","stage_type","pipeline_rank","Number","addon_company","addonCompany","createCompanyNote","deleteCompanyNote","noteId","note_id","getFavorites","addFavorite","deleteFavorite","updateFitEvaluation","is_interesting","rationale","getAlerts","history","pageNr","sorting","updateAlerts","ids","alert_id","dismissAlert","dismissAllAlerts","addCompanyTag","name","addCompanySoftwareEvaluation","evaluation","addCompanyInBusinessEvaluation","fetchMyCompaniesCards","searchKey","searchType","filter","selectedCard","mapSearchCounterQuery","selected_card","updatedPayload","cleanPayload","bulkAddToWatchlist","companyIds","existingListIds","newTitles","company_ids","existing_list_ids","new_titles","bulkRemoveFromWatchList","bulkMergeCompanies","bulkCompanySoftwareEvaluation","unmergeCompanies","mainCompanyId","copyData","main_company_id","source_companies_ids","copy_data","sendOptxScoreRationale","optxScoreVerified","rationaleReasonLower","rationaleReasonUpper","scoreType","optx_score_verified","rationale_reason_lower","rationale_reason_upper","score_type","sendResearchRationale","subVertical","user_values","sub_vertical","updateNote","company_notes","updateAiMl","bulkCompanyAiMl","isAiMl","is_bulk_action","reviewCompany","customPayload","userId","createCombineSearch","FilterService","filterGroup","FilterGroup","Company","filter_names","filter_group","SavedSearchesService","searchData","_searchData$sortBy","_searchData$sortBy2","_searchData$sortBy2$","_searchData$sortBy3","sort_by","sort_order","desc","searchCount","filters","columns","columnOrder","pinnedColumns","isDefault","newTitle","defaultOptx","_lastColumns$join","_lastColumns","_lastColumnOrder$join","_lastColumnOrder","_lastPinnedColumns$jo","_lastPinnedColumns","lastPinnedColumns","lastColumns","lastColumnOrder","sortQuery","split","item","_defineProperty","searchTypeKey","join","column_order","pinned_columns","is_default","number_of_results","new_list_title","appliedFilters","cleanObjectWithEmptyValues","list_title","decodeURIComponent","_searchData$sortBy4","_searchData$sortBy5","show_empty_lists","showEmptyLists","popup","excludeCompanyId","exclude_company_id","fetchAll","_searchData$sortBy6","_searchData$sortBy7","mapSearchQuery","body","encodeURIComponent","getCompanyListByTitle","getSuggestedSearches","AsyncMultiSelect","additionalOptions","endpoint","emailUser","UserManagement","sort_field","SORT_ORDER","DESCENDING","ASCENDING","result","email","role_id","role","message_user","message_admin","SalesloftService","cadence","companies","postData","cadence_id","team_cadence","cadence_name","AdminService","getCompanyActivity","getDataSettings","getHomeActivity","getHomeInsightsStats","ColumnService","getColumnState","gridId","FETCH_USER_INFORMATION","FETCH_USER_INFORMATION_SUCCESS","FETCH_USER_INFORMATION_FAIL","UPDATE_USER_SETTINGS","UPDATE_USER_SETTINGS_SUCCESS","UPDATE_USER_SETTINGS_FAIL","UPDATE_USER_SETTINGS_FROM_AUTO_SAVE","UPDATE_USER_SETTINGS_FROM_AUTO_SAVE_SUCCESS","UPDATE_USER_SETTINGS_FROM_AUTO_SAVE_FAIL","UPDATE_USER_SETTINGS_FOR_USER_LISTS","UPDATE_USER_SETTINGS_FOR_USER_LISTS_SUCCESS","UPDATE_USER_SETTINGS_FOR_USER_LISTS_FAIL","UPDATE_USER_SETTINGS_FOR_SS_LISTS","UPDATE_USER_SETTINGS_FOR_SS_LISTS_SUCCESS","UPDATE_USER_SETTINGS_FOR_SS_LISTS_FAIL","UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS","UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS_SUCCESS","UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS_FAIL","UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES","UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES_SUCCESS","UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES_FAIL","UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES","UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES_SUCCESS","UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES_FAIL","updateUserSettings","createAction","types","callback","meta","updateUserSettingsSuccess","updateUserSettingsFail","updateUserSettingsFromAutoSave","updateUserSettingsFromAutoSaveSuccess","updateUserSettingsFromAutoSaveFail","updateUserSettingsForUserList","updateUserSettingsForUserListSuccess","updateUserSettingsForUserListFail","updateUserSettingsForFavoritesList","updateUserSettingsForFavoritesListSuccess","updateUserSettingsForFavoritesListFail","updateUserSettingsForSSList","updateUserSettingsForSSListSuccess","updateUserSettingsForSSListFail","updateUserSettingsForSavedContactSearches","updateUserSettingsForSavedContactSearchesSuccess","updateUserSettingsForSavedContactSearchesFail","updateUserSettingsForSuggestedSearches","updateUserSettingsForSuggestedSearchesSuccess","updateUserSettingsForSuggestedSearchesFail","fetchUserInformation","fetchUserInformationSuccess","fetchUserInformationFail","sessionPropList","fetchUserInformationSuccessReducer","draftState","action","_draftState$data","_draftState$data$sett","_action$payload","components","loading","fetchedAt","Date","toISOString","authorizedComponents","reduce","acumulator","componentType","newAcumulator","pictureBase64","profile","imageBlob","dataURItoBlob","window","URL","revokeObjectURL","createObjectURL","region_settings","short_date","grid_date","globalConfig","DATE_FORMAT","date_format","show_my_companies_cards","search","location","path","pathname","startsWith","prevFilters","session_settings","user_list_filters","indexOf","normalizedPrevFilters","parse","saved_list_id","ss_list_id","filterKey","Object","keys","forEach","e","fetchRegionOptionsSuccessReducer","regionOptions","updateUserSettingsReducer","column_widths_advanced_search","column_widths_lists","column_widths_my_companies","updateUserSettingsSuccessReducer","_userSettings$region_","_userSettings$region_2","userSettings","sessionSettings","each","includes","updateProfileImageReducer","resetEquityTocuhReducer","et_form_auto_save","reducer","createReducer","builder","addCase","actions","fetchReducer","fetchFailReducer","regionOptionsActions","fetchRegionOptionsSuccess","profileImageActions","updateProfileImage","eqtActions","resetAddToEquityTouch","updateUserSettingsSaga","_marked2","_regeneratorRuntime","mark","fetchUserInformationSaga","_marked3","userSaga","errorMsg","wrap","_context","prev","next","call","updateSettings","type","t0","stop","_marked","res","isAnalyst","isAdmin","isPartner","errorMessage","_errorMessage","_context2","getUserInfo","sent","AnalystStorage","setIsAnalyst","AdminStorage","setIsAdmin","PartnerStorage","setIsPartner","_context3","takeLatest","createFeatureActionType","featureName","actionName","createFeatureAction","fetchSuccessReducer","fetchSuccessLoadingReducer","DEFAULT_EMPTY_VALUE","NOT_AVAILABLE_VALUE","NEGATIVE_SIGN","DEFAULT_CELL_VALUE","DEFAULT_LAST_TOUCH","DEFAULT_NEXT_TOUCH","ABBREVIATION_ERROR_MESSAGE","ABBREVIATION_WITH_NEGATIVE_VALUES_ERROR_MESSAGE","ABBR_NEGATIVE_VALUES_SPECIAL_OPTIONS_ERROR_MESSAGE","ONLY_DIGITS_ERROR_MESSAGE","ONLY_DIGITS_AND_PERCENTAGE_ERROR_MESSAGE","ONLY_DIGITS_AND_OPTIONS_ERROR_MESSAGE","ABBREVIATION_AND_OPTIONS_ERROR_MESSAGE","_message","config","maxCount","duration","LINK_URL_VALUE_ERROR_MESSAGE","initialState","generateGridReducerInitialState","GRID_KEYS_SEARCH","SEARCH_INITIAL_STATE","initialSearchCompaniesReducer","gridKey","fetchReducers","searchCompaniesReducer","searchCompaniesSuccessReducer","gridSearchCompaniesResponse","_action$meta","allGridSearchCompaniesById","searchCompaniesResponse","map","company","updateRevenueList","ebitda_year","last_rev_update_year","listItem","byId","allIds","searchTitle","listType","searchCompaniesFailReducer","_action$payload2","changeSortReducer","getLocationMainGridKey","_action$payload3","pageAlias","label","cancelCompaniesSearchReducer","_action$payload4","cancelled","shouldUpdateSourcingOutReachAnalystInfoReducer","outreachDetails","shouldUpdateSourcingOutReachAnalystInfo","saveSearchTitleReducer","_action$payload5","getRouteAlias","deleteSearchTitleReducer","_action$payload6","hideCancelSearchReducer","_action$payload7","hideCancelSearch","addToEquityTouchBulkSuccessReducer","updateTrendingReducer","_action$payload8","trending","resetSearchKeyReducer","updateSourcingOutReachAnalystInfoReducer","tableGridQuery","fetchCompaniesByFilterReducer","inBusinessEvaluationSuccessReducer","_action$payload9","isInBusiness","score","IlScore","il_score","score_v3","is_in_business","il_optx_score","editFieldsSuccessReducer","_action$payload10","fieldName","scoreGrowth","newScore","newScoreGrowth","companyOwnerData","ilScore","ilScoreGrowth","defaultOptxScore","isPsgCompany","raiseDate","lastRevenueGrowth","optionSelected","fieldKeyValue","fieldKey","il_score_growth","toString","score_growth","score_v3_growth","Array","isArray","Stage","stage","is_psg_company","showRationaleForStage","stage_rationale","company_owner","company_owner_name","DEFAULT_COMPANY_OWNER_VALUE","is_software","is_software_rationale","is_software_verified","interesting_rationale","sub_sector","sector","senior_advisor_thesis","lead_source","fund","prev_stage","raise_date","opportunity_type","active","updateFinancialValues","last_rev_growth","newCategories","category","is_valid","previousCategories","_toConsumableArray","product_category","combinedArray","duplicateValue","find","newAddon","optionalValue","addon","addon_bool","selectedValue","date_presented","next_steps","next_steps_opinion","extraValues","company_type","linkedin","url_status","_action$payload11","city","country","state","is_ai_ml","year_founded","transaction_notes","updateVerifiedSoftwareSuccessReducer","_action$payload12","isVerified","updateCompanyUserValuesSuccessReducer","_action$payload13","lastRoundData","financialList","last_round","last_round_id","parentcompany","updateCompanyTrendLinesReducer","_action$payload14","employeeCountTrends","optxScoreTrends","newOptxScoreTrends","employee_count_trends","optx_score_trends","optx_score_v3_trends","updateCompanyEmployeeGrowthPercentageReducer","_action$payload15","empGrowthPercent","emp_growth_percent","updateCompanyETDataReducer","updateData","updateCompanyETData","bulkSoftwareSuccessReducer","optx_score_growth","optx_score","software","isAdminOrAnalyst","bulkAiMlSuccessReducer","aiMl","addCompanyTagSuccessReducer","_action$payload16","tag","_objectWithoutProperties","_excluded","_specialties","specialties","push","cs_tags","deleteCompanyTagSuccessReducer","_action$payload17","_cs_tags","csTagsArray","slice","tagIndex","findIndex","removeTag","splice","replace","addFundReducer","_action$payload18","fundName","DEFAULT_FUND_VALUE","addCompanyPortfolioSuccessReducer","_action$payload19","isPortfolio","is_portfolio","is_platform","addCompanyToListBulkSuccessReducer","_action$payload20","watchLists","ownerName","companyData","createCompanyToListSuccess","addCompanyToListSuccessReducer","_action$payload21","list","deleteCompanyToListSuccessReducer","_action$payload22","deleteCompanyToListSuccess","createCompanyToListSuccessReducer","_action$payload23","persistedSearch","sourcing_outreach_detail_filters","test","my_companies_filters","my_companies_trending","myCompanies","company_name_or_url","search_trending","advancedSearch","user_list_trending","lists","activeSuccessReducer","_action$payload24","addOpportunityTypeSuccessReducer","_scoreValues$optx_sco","_scoreValues$score_v","_scoreValues$il_optx_","_action$payload25","opportunityTypeName","scoreValues","DEFAULT_OPPORTUNITY_TYPE","il_optx_score_growth","submitResearchRationaleSuccessReducer","_action$payload26","fields","scoreRationale","newScoreRationale","_scoreValues$fitScore","_scoreValues$fitNewSc","_scoreValues$fitIsrae","_scoreValues$software","_scoreValues$software2","_scoreValues$software3","psg_fit","fitScore","fitScoreGrowth","fitNewScore","fitNewScoreGrowth","fitIsraelScore","fitIsraelScoreGrowth","software_company","softwareScore","softwareScoreGrowth","softwareNewScore","softwareNewScoreGrowth","softwareIsraelScore","softwareIsraelScoreGrowth","il_optx_score_rationale","il_optx_score_rationale_reason","rationale_reason","il_optx_score_rationale_reason_type","rationale_reason_type","il_optx_score_verified","optx_score_rationale","optx_score_rationale_reason","optx_score_rationale_reason_type","optx_score_v3_rationale","optx_score_v3_rationale_reason","optx_score_v3_rationale_reason_type","optx_score_v3_verified","gridSendOptxScoreRationaleSuccessReducer","_action$payload27","defaultScore","optxScoreRationaleReason","optxScoreRationaleReasonType","bulkEditFieldSuccessReducer","_action$payload28","field","selectedData","additionalInfo","additionalAddonId","values","companyInfo","alphabeticalCategories","a","b","tags","isNaN","il_optx_score_trends","prevStage","addons","some","option","currentAddons","newAddons","acc","curr","removeCompanyFromAddonManagementReducer","removeCompanyFromAddonManagementSuccessReducer","_draftState$addons$al","_draftState$addons$al2","_draftState$addons$al3","omit","total","removeCompanyFromAddonManagementFailReducer","fetchAddonAdditionalFiltersReducer","shouldBeAddedToLoading","fetchAddonAdditionalFiltersFailReducer","_action$payload29","fetchAddonAdditionalFiltersSuccessReducer","clearAddonManagementFetchedAtReducer","updateCompanyInfoSuccessReducer","_ref","_payload$general_info","_payload$general_info2","_payload$funding$last","_payload$funding$last2","_payload$funding$last3","_payload$funding$last4","_payload$funding$last5","_payload$funding$last6","_payload$funding$last7","_payload$funding$acqu","general_info","num_employees","funding","last_round_date","last_raised_amount","last_round_amount","last_investors","acquiring_company","addTouchToCompanySuccessReducer","_ref2","companyid","nextTouchDate","next_touch_date","lastTouchDate","last_touch_date","isComplete","iscomplete","psgAttendees","psg_attendees","deleteSavedValues","ADD_TOUCH_LOCALSTORAGE_KEY_PREFIX","updateAllCompanyEditAllInfoSuccessReducer","_ref3","companyFundingRoundsSuccessReducer","_action$payload30","total_raised","capital_raised","is_capital_raise_has_unknown","amount","aiDescriptionSuccessReducer","_action$payload31","description","company_description","updateGridFinancialSuccessReducer","_ref4","getGridKeyFromReferral","financial","deal_preparation","_ref5","revenueModel","revenue_model","cashflow","_ref6","banker","bankerName","banker_name","askingAmount","asking_amount","_ref7","technology","deliveryModel","delivery_model","architecture","cloudProvider","cloud_provider","_ref8","customer_kpis","salesCycle","sales_cycle","customerType","customer_type","salesAndMarketing","sales_and_marketing","extra_data","customer_other_rationale","revenue","revenue_list","estimated","year","ebitda","ebitda_list","annual_recurring_revenue","gm","gross_margin_list","deal_type","fetchOpportunityPresentationSuccessReducer","_ref9","_financial$growth_ful","_financial$growth_ful2","currentYearGrowth","growth_full","YEARS_LABELS","current","listOfYearsGrowth","mostRecentYear","Math","max","apply","mostRecentYearGrowth","generateDynamicColumnKeys","setLoaderReducer","loadSearchReducer","viewActions","applyView","outreachFilterActions","resetStoreFilter","changeCardSubfilter","changeCard","myCompaniesFilterCardsActions","initializeMyCompaniesCards","fetchMyCompaniesCardsFail","sortActions","changeSort","resetSort","paginationActions","changePagination","savedSearchesActions","applyViewSuccess","inBusinessEvaluationActions","addCompanyInBusinessEvaluationSuccess","companyEditFields","updateFieldsSuccess","updateCompanyInfoActions","updateTouchCompanyInfoSuccess","addTouchToCompanySuccess","editAllInfoActions","updateCompanyEditAllInfoSuccess","updateAllCompanyEditAllInfoSuccess","updateVerifyCompanySoftwareSuccess","companyUserActions","updateCompanyUserValuesSuccess","updateCompanyTrendingLines","updateCompanyEmployeeGrowthPercentage","equityTouchActions","bulkEditActions","bulkEditFieldSuccess","bulkSoftwareActions","bulkSoftwareSuccess","bulkAiMlActions","bulkAiMlSuccess","bulkEqtActions","addToEquityTouchBulkSuccess","tagsActions","addCompanyTagSuccess","deleteCompanyTagSuccess","fundActions","addFund","portfolioActions","updateCompanyPortfolioSuccess","favoriteListsActions","favoriteListsActionsPopup","userInformationActions","addCompanyActiveSuccess","companyOportunityTypeActions","addOpportunityTypeSuccess","opportunityPresentationActions","updateOpportunityPresentationSuccess","presentationActions","fetchOpportunityPresentationSuccess","researchRationaleActions","submitResearchRationaleSuccess","sendOptxScoreRationaleSuccess","sendNewOptxScoreRationaleSuccess","addonActions","removeCompanyFromAddonManagement","removeCompanyFromAddonManagementSuccess","removeCompanyFromAddonManagementFail","paginationLongCardActions","changeLongCardPagination","fetchAdditionalFilters","fetchAdditionalFiltersSuccess","fetchAdditionalFiltersFail","clearAddonManagementFetchedAt","fundingRoundActions","getCompanyFundingRoundsSuccess","companyProfileActions","regenerateAiDescriptionSuccess","setLoader","initializeSearch","initializeSearchSaga","searchWithCountSaga","_marked4","clearSearchSaga","_marked5","resetSearchToDefaultSaga","_marked6","loadCompanySavedSearchSaga","_marked7","loadSuggestedSearchSaga","_marked8","loadSuggestedSearch","_marked9","fetchSuggestedSearches","_marked10","resetFilterSaga","_marked11","removeFilterSaga","_marked12","loadAutocompleteSearch","_marked13","loadFilter","_marked14","loadCompaniesByFilterSaga","_marked15","loadDiversityFilterSaga","_marked16","saveTrendingInSessionSaga","_marked17","searchCompaniesSuccessSaga","_marked18","loadSearchSaga","_marked19","clearDateMatchesSaga","_marked20","searchSaga","view","select","viewTypeSelectors","searchView","abrupt","selectors","fork","getSourcingOutReachFilters","initializeLongCardSearchSaga","initialCompanySearchSaga","columnSelectors","isColumnsFetched","gridColumnActions","fetchColumns","gridName","take","fetchColumnsSuccess","_sortBy","_sortBy2","prevSearchKey","isSourceScrub","gridSearchData","isSimilarCompaniesSorting","sourcingOutReachDateFilter","filterQuery","additionalFilterQuery","_selectedCard$filter","_selectedCard$filter2","subFilter","savedListId","analystIdFilter","columnNameSourcingOutReachFilter","listOfAnalystIds","sourcingOutReachColumnName","isInitialSearch","isUpdatedSessionSettings","listsDetailsSelectors","isSourceScrubRoute","getGridSearchDataSaga","userInformationSelectors","getDefaultScore","sortSelectors","isSimilarCompaniesSort","originalFilter","preProcessSearch","MYCOMPANIES_DEFAULT_SORT_US","MYCOMPANIES_DEFAULT_SORT_IL","COMPANY_DEFAULT_SORT","getRouteListId","shouldHandleTouchFilters","handleTouchFilters","outreachFilterSelectors","getSourcingFilterOptionsDateValue","ddate","getFiltersQuery","shouldResetPageNumber","LONG_CARD_VIEW_DEFAULT_PAGE_SIZE","shouldBeAnalystHomePageSorting","ANALYST_HOME_DEFAULT_SORT_US","ANALYST_HOME_DEFAULT_SORT_IL","perMultiplePages","perPage","addonSelectors","getAdditionalFiltersQuery","myCompaniesFilterCardsSelectors","getSelectedCard","getSubFilter","source_tag_filter","myCompaniesCardsFilters","lastTouchDateDays","last_touch_date_days","getSourcingOptitonsFilterValues","analystId","userInfoUpdateSaga","isEqual","isSimilarCompaniesSearch","similarCompaniesSortingAction","searchCompanies","changeSortSuccess","longCardPaginationActions","changeLongCardPaginationSuccess","changePaginationSuccess","t1","searchCompaniesFail","clearedFilters","customClearedFilter","companyOwner","filterSources","userName","_window$history$state","_window$history$state2","defaultColumnName","defaultAnalystId","defaultDateRange","selectedCardId","defaultSortBy","cardsList","allFiltersWithHistograms","_userSettings","_context4","outreachSearchSelectors","getClearedFilter","filterSelectors","getCustomClearedFilter","admin_portal_link","filterSourcesSelectors","getCompanyFilters","getFullName","getCompanyOwner","company_owner_id","defaultSearchType","getDefaultColumnName","getDefaultAnalystId","getDefaultDateRange","updateSourcingFilterOptions","updateSourcingOutReachFilters","panelFiltersQuery","panel_filters","updateHistoryState","getSelectedCardId","processCardList","fetchMyCompaniesCardsSuccess","histogramSelectors","histogramActions","fetchHistogramFilters","resetSortSuccess","removeAllParametersFromURL","filterSourcesDefaultFilters","defaultSearchkey","defaultSorting","cancelSearch","regularPagination","defaultFilters","_context5","getDefaultFilters","getDefaultSearchkey","getDefaultSorting","paginationSelectors","getPagination","cancel","finish","_action$payload5$data","searchId","newOnly","hasNewMatches","savedSearch","customSearchData","actionType","_context6","getSearchSavedSearchSelectors","searchTypeSelectors","getSearchType","new_date_matched","COMPANY_LIST_NEW_MATCHED_SORT","searchTypeOptions","companyNameOrUrl","fromSavedList","isCustomUIView","newMatchesSavedSearchTitle","clearNewMatches","company_sorting","company_display_columns","company_column_order","company_pinned_columns","updateColumn","addRemoveDateMatched","updateFilterSettings","filtersLoaded","shouldFetch","filterRes","_context7","suggestedSearchSelectors","getIsAnalyst","getIsAdmin","getSettings","getOptions","filterActions","fetchCompanyFiltersSuccess","defaultViews","default_views","searchOrigin","search_origin","isAnalystOrIsAdmin","fetchCompanyFiltersFail","routes","home","searchPayload","suggestedSearch","userPageNumber","_context8","getSuggestedSearch","getResultsPageNumber","search_results_page_number","searchRes","_errorMessage2","_context9","suggestedSearchActions","fetchSuggestedSearchesSuccess","mapPreselectedFilters","fetchSuggestedSearchesFail","_filterTag$resetFor","allTags","filterTag","similarCompanyInfo","normalizedFilterSources","clearedFields","searchOriginKey","filtersSearchOriginValue","payloadData","savedSearches","suggestedSearches","_yield$select","defaultOptxView","ignoreSort","includeCombined","filteredSavedSearches","_matchView","matchedTitle","matchedView","_companyId","oldListId","_Number","_context10","filterTags","selectedTag","getSimilarCompanyName","getFiltersMap","injectFilter","optionId","removeTouchFilters","resetFor","selectedToClear","getSearchOriginKeyFromGridKey","getFilterSearchOrigin","profileSelectors","getCompanyId","getVisibleColumnString","getColumnOrder","getPinnedColumnsString","getSavedSearchesSavedSearchSelectors","getViewsSavedSearchSelectors","search_info","matchView","col","ddate_lower","ddate_upper","CompanyService","fetchCompanyAddonManagement","SearchService","applyViewSuccessSavedSearchesActions","getRouteAliasFromGridKey","longCardActions","fetchCompanyProfileSuccess","clearNewMatchesFromLists","t2","sortSimilarCompanies","t3","t4","t5","t6","t7","hasFilters","search_criteria","t8","t9","t10","t11","t12","t13","searchCompaniesSuccess","searchCountActions","removeParameterFromURL","t14","tagName","tagId","_filterTag$resetFor2","_data","_window$history$state3","_window$history$state4","panelFilters","parsedPanelFilters","_context11","shouldRemoveFilter","_autocompleteInfo$sea","_autocompleteInfo$sea2","autocompleteInfo","_context12","keyword","filterValue","clearedFilter","_context13","listsDetailsActions","clearCompanyList","_context14","diversityKey","options","_context15","getSelectOptions","updateUserSettingsData","_context16","sendPendoData","ADVANCED_SEARCH","TRENDING_VALUES","sourcing_outreach_trendings","MY_COMPANIES_PENDO","MY_COMPANIES_TRENDING_VALUES","route","_context17","userLists","scrollHistoryActions","resetScrollHistory","incrementFetchedCount","_context18","_context19","adminCompanyActivitySelectors","newMatchSavedSearches","adminActions","fetchAdminCompanyActivity","_context20","CompanyProfileTabs","PROFILE_OVERVIEW","RELATIONSHIP_MANAGEMENT","PROPRIETARY_INFO","ADDON_MGMT","LISTS","SOCIAL_MEDIA","HISTORY","FILES","NEWS_FEED","LISTS_ROUTES","myWatchList","companySavedSearches","sourceScrubLists","contactSearches","ALL_REPORTS","allReports","sourcingAnalystsLeaderboard","checklistResearchInsights","equityTouchIntegration","pipelineReport","sourcingOutreachSummary","sourcingOutreachSummaryCompanies","DEFAULT_REPORTS","ROUTES","admin","users","contacts","analystHome","adminHome","notes","user","reports","defaultReports","addToEquityTouch","addToSalesloft","chromeExtension","scheduledTouches","CB","CP","OW","RM","COMPANY_PAGE_NEWS_FEED_GOOGLE_NEWS","COMPANY_PAGE_ACTION","NavigationPane","notifications","myWatchlist","savedCompanySearches","savedContactSearches","touchManagement","browseByRecentlyFunded","myProfilePage","companyPageTop","website","twitter","equitytouch","sourcescrub","g2crowd","crunchbase","facebook","addTouchNote","editCompanyInfo","changeDescription","psgFitThumbsUp","psgFitThumbsDown","addTagButton","MarkAsReviewedButton","editDateFounded","addToFavorites","searchResultsBreadcrumb","CompanyPageOverviewPendo","rank","owner","fit","date","psgPlatformCompany","addOn","addOnFor","leadSource","seniorAdvisorThesis","seniorDealTeamLead","inBusiness","opsTeam","icStatusDate","expectedCloseDate","dealTeam","nextSteps","lastRound","lastFundingDate","softwareCompany","companyType","opportunityType","subsector","productCategory","fundingRounds3M","fundingRounds6M","fundingRounds1Y","fundingRounds2Y","fundingRoundsALL","optxScore3M","optxScore6M","optxScore1Y","optxScore2Y","employeeCount3M","employeeCount6M","employeeCount1Y","employeeCount2Y","similarCompanies_profileLink","CompanyPageRelationshipManagement","equityTouchHistory_addTouchNote","equityTouchHistory_touchType_all","equityTouchHistory_touchType_call","equityTouchHistory_touchType_email","equityTouchHistory_touchType_internalNote","equityTouchHistory_touchType_meeting","equityTouchHistory_touchType_other","equityTouchHistory_createdBy","equityTouchHistory_scheduledTouches","equityTouchHistory_previousTouches_touchpoint","equityTouchHistory_editTouch","equityTouchHistory_emailAttendees","equityTouchHistory_expandTouchPointArrow","primaryContacts_addContact","primaryContacts_editContact","CompanyPageFilesEquityTouchFilesDownload","CompanyPageProprietaryInfo","dealPreparation_datePresented","dealPreparation_equityCheck","dealPreparation_banker","dealPreparation_nameOfBanker","dealPreparation_dealType","financials_addYears","CompanyPageAddOnMGMT","showActiveCompanies","origin","exportSaveSearch","fullScreen","sortByCompanyName","sortByPsgFit","sortByOptxScore","sortByStage","sortByNextsteps","sortByLastTouch","sortByFutureTouch","sortByAction","CompanyPageLists","SortByDateUpdated","ListName","CompanyPageHistory","auditTrail_search","auditTrail_startDate","auditTrail_endDate","auditTrail_all","auditTrail_editField","mergeHistory_checkBox_unmergeCompanies","MenuNotifications","viewOptxRoadmap","inbox","history_newestToOldest","upcomingTouches","pastDue","FNC","MenuFindNewCompaniesSuggestedSearches","SuggestedSearches","MyWatchlists","SourceScrubLists","SavedCompanySearches","SavedContactSearches","FNCSSL","FindNewCompaniesSourceScrubLists","source_scrub_lists","startdate","enddate","last_refreshed_at","number_of_companies","number_of_companies_in_et","number_of_companies_not_in_et","number_of_last_touch_over_6_months","number_of_future_touches","source_scrub_lists_action","FIND_NEW_COMPANIES_BROWSE_BY_RECENTLY_FUNDED","TR","TRATN","LOG","SCHEDULE","ADD_NEW_CONTACT","TOUCHES","ACTION_VERIFY","OPTXChromePlugin","topHeader","stages","portfolioCompany","dead","pass","lead","qualifiedLead","track","vwia","target","priority","ioiPresented","loiPresented","loiSigned","ranks","none","save","logs","log","type_call","type_contactImport","type_crunchbase","type_documentUpload","type_email","type_internalNote","type_meeting","type_ndaSigned","type_stageModified","type_transferred","type_voiceMail","initator","otherpsgAttendees","schedule","schedule_1week","schedule_2weeks","schedule_1month","schedule_3months","schedule_6months","schedule_1year","schedule_customdate","schedule_type","schedule_type_call","schedule_type_contactImport","schedule_type_crunchbase","schedule_type_documentUpload","schedule_type_email","schedule_type_internalNote","schedule_type_meeting","schedule_type_ndaSigned","schedule_type_stageModified","schedule_type_transferred","schedule_type_voiceMail","schedule_date","schedule_subject","xout","verifyKeyInfos","verifyKeyInfo","softwareCompanyThumbsUp","softwareCompanyThumbsDown","openInEquityTouch","addtoSalesloft","addtoList","hideOPTXTab","companyBanner","company_icon","website_icon","linkedin_icon","twitter_icon","equitytouch_icon","sourcescrub_icon","g2crowd_icon","bvdorbis_icon","capterra_icon","crunchbase_icon","companyPage","stats","click_ceo_email","descriptions","equityTouch","sourceScrub","crunchbaseShort","crunchbaseLong","glassDoor","capterra","addTag","touches","clickTouchpoint","threeDotsAction","threeDotsAction_editTouch","threeDotsAction_emailAttendees","arrowToExpand","contacts_addNewContact","primaryContactButton","psgFunctions","psgFunction","selectAllNone","ceo","coo","corporateDevelopment","cto","customerSuccessSupport","executiveChairman","finance","hr","legal","marketing","presidentCoo","product","sales","slackChannels","slackChannel","psgCeo","psgCfo","psgExecutiveTeams","psgGtm","psgHr","psgTechleader","portfolioExecutiveButton","addNewEmailAddress","addNewPhoneNumber","contacts_threeDotsAction","contacts_threeDotsAction_editContact","lists_startDate","lists_dateUpdated","lists_clickCompanyName","news","news_clickNewsIcon","similar_companies","similar_companies_clickCompanyProfileLink","MMP","MC","TDA","SS","MY_COMPANIES_PAGE","MY_WATCHLIST","MY_WATCHLIST_ACTIONS","SS_LIST_ACTIONS","SAVED_COMPANY_SEARCHES","TOUCH_MANAGEMENT","CONTACTS","NT","ALL_USERS","PENDO_PAGE_TRACK_NUMBER","PENDO_PER_PAGE_TRACK_NUMBERS","mapColumnsToActions","owner_name","modified_at","display_name","last_activity","mapTouchesToActions","all_open_touches","past_due","scheduled","completed","mapAnalystStatsToActions","transformPendoString","input","char","toUpperCase","handleMultipleActions","array","pendo","mapSortToActions","mapContactsToActions","source_db","first_name","last_name","ceo_approval","display_location","company_name","tenure_start_date","cb_rank","country_code","state_code","portfolio_executive","psg_function","slack_channel","mapReportTouchesToActions","companies_reached","stage_changes","mapStagesToActions","blank","ManageMyPipeline","editOwner","editPipelineRank","editStage","numberOfEmployees","lastFunding","lastRaisedAmount","totalRaised","revenueYear","errorResponseFormat","errorMessages","getErrorMessage","defaultError","errorMessagesFormat","isAxiosError","console","response","_response$data","errors","getAPIErrors","fetchCompanyFilters","fetchCompanyFiltersForNotifications","fetchCompanyFiltersForNotificationsSuccess","fetchCompanyFiltersForNotificationsFail","stopFetchingFilters","changeDefaultView","setFormRationales","setAlertSettings","setNextSteps","normalizedFilters","preselected","shouldNotFetch","formRationale","alertSettings","updateDefaultView","searchCriteria","_parseFilter","parseFilter","parsedFilters","_slicedToArray","_parseFilter3","parseSorting","fetchCompanyFiltersSuccessReducer","normalizedByColumn","normalizeFiltersByColumn","locationData","getNormalizedFilters","preselectedValues","mapFiltersOptions","_action$meta$defaultV","_parseFilter5","changeDefaultViewReducer","stopFetchingFiltersReducer","_action$payload$setti","customUIViewId","default_view","customUIViews","setFormRationalesReducer","setNextStepsReducer","setAlertSettingsReducer","getCompanyFiltersSaga","companyFiltersSaga","isPartnerStorage","isPartnerSelector","isForNotifications","_res$data","_res$data$forms","_res$data2","_res$data2$forms","_res$data2$forms$next","_res$data3","_res$data3$forms","updatedFilters","userSelectors","getIsPartner","column","forms","rationales","next_step_choices","alert_settings","takeLeading","normalizeData","isDateInFuture","currentDate","moment","isAfter","isSimilarCompanies","similarCompanyId","pop","similarMainCompany","filteredCompaniesList","normalizeNegativeSignValues","splitedValues","capitalizeString","str","word","charAt","_window$pendo","normalizePendoActionsFilterModal","currentFilter","currentNormalizedFilter","filterKeyObject","isSecondaryQuickFilter","isMyCompanies","isSendPendoDataCalled","filterLocation","_","index","FILTER_MODAL_OPTX_SCORE_VALUES","normalizedValue","defautValues","defaultRangeValues","Set","has","SUB_SECTOR_NORMALIZED_VALUES","FUND_PSG_NAMES","STAGE_TYPE_OPTIONS","DIVERSITY_SPOTLIGHT_OPTIONS","SUB_VERTICAL_OPTIONS","LAST_ROUND_OPTIONS","tierList","europe_tier","numberOfTiersLists","filteredTierLists","entries","every","europeByTier","normalizePendoDataEuropeByTier","not_blank","dataSourceFilterKey","dataSourceFilterValue","DATA_SOURCES_NAMES","FILTER_MODAL_DATA_SOURCE_VALUES","month_0_month_1","month_1_month_2","month_2_month_6","month_6_month_120","pendoActionsFilterModal","listOfFilters","filtersList","normalizeViewsColumns","viewData","defaultScoreValue","validatedColumns","validatedColumnsOrder","checkSurName","typeOptions","normalizeCommaValues","toLowerCase","localeCompare","formattingSquareBrackets","getAnalystNames","analystNames","listOfAnalystNames","checkOverflow","el","_tableBody$parentElem","tableBody","document","getElementsByClassName","tableBodyHeight","clientHeight","tableHeaderHeight","parentElement","updateContacts","tempDataContacts","personId","tenureEndDate","tenureStartDate","contact","person_id","tenure_end_date","mapDescriptionOptions","newOptions","_each","mapOptionsToLabeledValues","getTooltipText","valueList","companyPageProprietaryInfo","createPendoActions","words","handlePendoAction","trackMyCompaniesPendoActions","trackMyWatchlistPendoActios","trackSSlistPendoActions","trackUsersPendoActios","capitalizeFirstLetter","trackCopyEmailPendoActions","trackAnalystPendoActions","createSendPendoAction","pendoData","trackPendoPagination","transformStringForActionPendo","letter","includePagination","performanceTesting","hasCustomColumnYears","_searchData$paginatio","arr_years","FINANCIAL_YEARS","ebitda_years","growth_years","useormpagination","parsedGridQuery","parsedGridValues","_parsedGridValues$ind","column_name","analyst_id","sortFields","sortOrders","sortRule","sort_fields","sort_orders","per_multiple_pages","sourcingOutReachAnalystId","matchSavedSearches","savedSearchList","includeSorting","filterString","encode","getFilterString","compareFilterString","searchFilterString","currentFilterString","matchGridOnMyCompanies","cleanSearchFilterString","removeFiltersFromQueryString","cleanCurrentFilterString","removeSortFromQueryString","compareColumnVisibility","searchColumns","currentColumns","searchList","removeColumnFromString","currentList","areShallowEqual","columnId","filteredSearchList","filteredCurrentList","comparePinnedColumns","searchPinnedColumns","currentPinnedColumns","normalizedSearchPinnedColumns","normalizedCurrentPinnedColumns","compareColumnOrder","searchColumnOrder","currentColumnOrder","views","myCompaniesSessionSettings","arrangedSavedSearches","criteria","viewColumns","withFilters","withVisibility","withOrder","withPins","getArrangedSavedSearches","searches","_getUpdatedSavedSearc","size","visibleColumns","order","pins","getUpdatedSavedSearchSettings","myCompaniesSearchCriteria","isSortByEquals","sourcingOrder","filterKeys","searchInNewTab","sources","extraQueries","searchPathname","mappedFilters","mapFiltersToURLParams","extraQueriesString","newLocation","open","searchSourceScrubInNewTab","appRoutes","text","_text$trim","trim","validateSearchTerm","setValidSearchKey","validateMinChars","SEARCH_MINIMUM_CHAR_COUNT","customUIViewIds","getDataSource","startIndex","endIndex","excludeFiltersForMyCompanies","newFilters","restOfFilters","_i","_Object$entries","_Object$entries$_i","getSearchTypeInfo","sessionFilters","sessionFiltersQuery","_i2","_Object$entries2","combined_search_id","_Object$entries2$_i","filterOutExcludedFilters","filteredQuery","FieldChangedValue","EditFieldRadio","_record$company_id","_record$company_url","record","labelValue","isFromGrid","showOnlyRadio","service","successMessage","onClick","hidePen","isFromHistory","triggerLabel","placement","children","onChangeRadioValue","callbackComponent","actionPendo","useSelector","updateField","useUpdateFields","companyUrl","company_url","_useState","useState","_useState2","closePopup","setClosePopup","_useState3","_useState4","radioValue","setRadioValue","afterValue","useRef","currentGridName","useCurrentGridName","_useContext","useContext","DropdownAddContext","setDropdownVisible","dropdownVisible","useEffect","gridValue","gridWebsiteValue","gridAiMlValue","customLabel","icon","customValue","customWebsiteValue","handlePendoActionsCallBack","handlePendoRadioActions","handleEqualOptions","_defaultValues","defaultValues","_jsx","ThumbsUpIcon","marginLeft","iconName","ThumbsIcon","Styled","FitCellInnerTextContainer","content","_Radio","Group","onChange","_jsxs","style","display","flexDirection","className","gridContent","TableCellInner","CheckCircleTwoTone","twoToneColor","fontSize","EditPopover","hidePenIcon","TruncateTooltip","InlineEdit","EditCellPen","fill","top","React","memo","EditFieldMultiSelectAsyncProductCategory","asyncSearchEndpoint","getPopupContainer","isDynamicPopoverHeight","destroyOnHide","containerRef","updateHistoryFields","useHistoryTab","loadOptions","useAsyncSearch","popoverContentRef","selectedOptions","setSelectedOptions","_useState5","_useState6","fetchedOptions","setFetchedOptions","handleCallback","showHistory","beforeValue","fieldChanged","handleSave","useCallback","alphabeticalMappedValues","getLoadOptionsDelay","debounce","callbackResult","valueExceptBlank","prototype","hasOwnProperty","hasBlankOrNoneLabel","handleDefaultValues","mappedValues","isValid","getIsValueChanged","valid","useOnClickOutside","handleCancel","onKeyDown","event","ref","tabIndex","defaultMenuIsOpen","defaultOptions","defaultValue","loadingMessage","inputValue","closeMenuOnSelect","onMenuClose","focus","onSelectResetsInput","blurInputOnSelect","controlShouldRenderValue","maxLength","closeOnSelect","_Button","disabled","onVisibilityChange","DefaultTooltip","styled","_templateObject","_taggedTemplateLiteral","MultiSelectWrapper","div","_templateObject2","EditFieldMultiSelectAsyncCreatable","tooltipPosition","_useState7","_useState8","setInputValue","useMemo","handleDropdownKeyEvent","preventDefault","optionSet","updatedOptions","from","isValidNewOption","itExists","formatCreateLabel","openMenuOnFocus","isCreatable","onInputChange","newValue","ContentContainer","SelectAsyncContainer","AsyncSingleSelect","SelectContainer","SingleSelect","_templateObject3","loadValue","formatValue","formattedValue","EditFieldSingleSelectText","_company$last_investo","_company$last_investo2","validation","_ref$isProfileInforma","isProfileInformation","isFromAuditField","lastTemporaryFieldValue","dispatch","useDispatch","useLocation","setValue","lastTemporaryFieldValueFormatted","setLabel","extraValue","setExtraValue","lastTemporarySelectedValue","selectedType","setSelectedType","_useState9","_useState10","selectedAcquiredCompany","setSelectedAcquiredCompany","_useState11","SELECT_UNKNOWN","_useState12","acquiredCompanyFetchedOptions","setAcquiredCompanyFetchedOptions","loadAcquiredCompanyOptions","COMPANY_NAME_SEARCH_ENDPOINT","_useState13","_useState14","selectedInvestorName","setSelectedInvestorName","_useState15","_useState16","investorNameFetchedOptions","setInvestorNameFetchedOptions","loadInvestorNameOptions","LAST_INVESTORS_SEARCH_ENDPOINT","_useState17","_useState18","setRaiseDate","_useState19","_useState20","fundingTypes","fundingRoundsSelectors","getFundingTypes","secondToLastRoundDate","getSecondToLastRoundDate","numberOfRounds","getNumberOfRounds","updateValue","_company$last_investo3","_company$last_investo4","handleSaveCallback","parseNumberFromAbbreviation","fundingRoundsActions","getCompanyFundingRounds","_selectedAcquiredComp","lastInvestorValue","format","ISO_DATE_FORMAT","isValueAbbreviated","regexNegativeAbbreviation","toFixed","handleDashLastRoundAmount","numeral","NUMBER_FORMAT","lastRoundValue","normalizeMonetaryMinusValues","_company$last_investo5","_company$last_investo6","loadAcquiredCompanyOptionsDelay","unshift","isButtonActive","_company$last_investo7","_company$last_investo8","isRaiseDateChanged","isInvestorNameChanged","someValueChanged","isAcquiredCompanyFilled","lastRoundDisabledDate","getLastRoundDisabledDate","_Row","_Typography","Text","placeholder","SearchIcon","required","autoFocus","_Input","currentTarget","AsyncCreatableSelect","disableValueRemove","_DatePicker","allowClear","disabledDate","trigger","parentNode","customOverlayStyle","zIndex","TagOutlined","useAutoFocusCheckbox","shouldFocus","domNode","findDOMNode","inputElement","querySelector","preventScroll","ELLIPSIS_TEXT","FONT_TYPE","getTextWidth","context","createElement","getContext","font","measureText","width","getFinalText","containerWidth","remainingItemsNr","additionalText","additionalTextWidth","c","subStrWidth","substring","ceil","newText","endsWith","DynamicListDisplay","setText","_containerRef$current","currentRefParent","offsetWidth","updateVisibleNames","i","nameWidth","remainingItems","handleResize","resizeObserver","ResizeObserver","observe","unobserve","cursor","AddOnLinkContainer","StyledAsyncSingleSelect","_Tooltip","_templateObject4","NewTabLink","Link","_templateObject5","PopoverContent","_templateObject6","ProfileAddonList","span","_templateObject7","EditFieldCheckBoxSelectAsync","_ref$type","isFromGridDropDown","dropdownLabel","hasAddonLink","addonCheck","checkboxRef","isFocus","setIsFocus","isButtonDisabled","setIsButtonDisabled","checkboxValue","setCheckboxValue","associatedCompanies","setAssociatedCompanies","isCheckBoxClicked","getReferrerUrl","useReferrerProfileLink","associatedCompaniesAsAddon","handlePendoActionCallBack","additionalValue","getDisabledStatus","_Checkbox","defaultChecked","checked","marginTop","mappedOptions","getOptionValue","_option$id","isDisabled","margin","editPopover","formatAddon","Popover","companyName","link","to","Icon","pointerEvents","onVisibilityShow","VALIDATE_EDIT_FINANCIAL_FIELD_KEYS","useFinancialField","fieldListValues","isFromSource","setAmount","setYear","setIsFromSource","setDisabled","setError","customFinancialYear","isAmountValid","validateFloatAbbreviation","isOptionChecked","updateFinancialFields","amountValue","getMostRecentAmount","getMostRecentSource","amountOption","rangeValue","_amountValue$min","min","abbrLabel","roundNumber","getMostRecentYear","getFullYear","validateSave","isAmountValidForSource","_fieldListValues$filt","findSourceInfo","from_source","Content","props","isArr","Option","_Select","EditFieldFinancial","extraKeys","dbSource","prevFieldListValues","usePrevious","prevOptions","_useFinancialField","opportunityPresentationKey","handleAmountChange","currentValue","getAmount","isAmountAbbreviated","amountValueInMillions","isFromDropdown","parsedAmount","amountHasPercentage","numberPercentageMatchRegex","parseInt","_option$rangeValue","isValueChanged","_getIsValueChanged","normalizedAmount","roundingPresentationValues","validateField","ArrValue","isYearEstimated","opportunityActions","updateOpportunityPresentation","Container","InputWithDropdown","onSelectOption","maxWidth","_options$find","rangeLabel","generateYears","highlightText","css","isSoftware","Tag","_Tag","CellPopover","fieldsWithoutBlankOption","EditFieldSingleSelect","rationaleAfterValue","useTooltip","dropdownPlacement","_ref$showLabel","showLabel","canBeRationale","blankOptionLabel","getBlankOptionLabel","currRationaleValue","setSelectedValue","closePopUp","setClosePopUp","rationaleValue","setRationaleValue","saveBtnDisabled","setSaveBtnDisabled","rationaleOptions","_getFormRationales","getFormRationales","editFieldSingleSelectSelectors","companyIndividualEdit","companyOwnerOptions","filtersSelector","getDealTypeOptions","seniorAdvisorOptions","leadSourceOptions","rankOptions","stageOptions","Sector","sectorOptions","subSectorOptions","Fund","fundOptions","opportunityTypeOptions","getNextSteps","companyTypeOptions","yearFoundedOptions","getCustomerTypeOptions","Cashflow","getCashflowOptions","getCloudProviderOptions","getSalesAndMarketingOptions","isDefaultValue","initialSelectValue","valueForComparison","isLoadingOptions","isLoadingInfo","blankOption","filteredOptions","selectOptions","handleOptionsList","handleInitialValue","_option$label","toLocaleLowerCase","valueKey","otherRationaleOption","showIsOtherOrTag","customRationaleValue","EDIT_STAGE_VALUES","rationaleFieldContent","EditFieldStyled","isLoading","maxMenuHeight","RationaleSection","handleRationaleChange","otherRationaleValue","handleOtherChange","isRationaleRequired","isHeightOverflow","currentOption","commonContent","renderLabel","TableCellStyled","handleUnownedValue","useAsyncMenuPosition","parentEl","_options$distanceFrom","distanceFromBottom","getMenuPlacement","_parentEl$current","editPositionH","getBoundingClientRect","windowH","innerHeight","InputWrap","EditFieldSingleSelectOther","fieldOtherKey","fieldOtherValue","otherEndpoint","_ref$defaultMenuIsOpe","_ref$destroyOnHide","otherValue","setOtherValue","parentCreatableRef","asyncMenuPlacement","setAsyncMenuPlacement","_Fragment","CreateOtherOptions","apiEndpoint","setMenuMaxHeight","menuPlacement","color","triger","renderLabelOther","renderValueOther","ButtonStyle","button","VerifyButton","EditFieldRadioRationale","updateRadioValue","_ref$displayOnlyOptio","displayOnlyOptions","isPartnerUser","_getFormRationales2","handlePendoConfirmationActions","DEFAULT_FIT_VALUE","verifyIcon","_record$is_software_v","_record$company_id2","updateVerifyCompanySoftware","_record$company_id3","_record$company_url2","_record$company_id4","updateFields","handlePopoverLabel","true","false","SOFTWARE_RATIONALES","other","handlePendoRationaleActions","TextArea","MultiSelectWithRationale","$selectedValues","$list","$renderRationaleField","$rationaleValue","$handleGridMultiSelect","$setRationaleValue","selectRef","useAutoFocusSelect","SelectWrapper","defaultOpen","showSearch","showArrow","menuItemSelectedIcon","CheckboxIcon","onSelect","onDeselect","optionFilterProp","mode","tagRender","filterOption","rows","CellPopoverMultiselect","presentationFields","fieldsWithRationale","EditFieldMultiSelect","fieldRationaleValue","listSelectors","getUserListOptions","getPsgUsers","getSeniorDealTeamLeadOptions","getRevenueModelOptions","getSalesCycleOptions","getDeliveryModelOptions","Architecture","getArchitectureOptions","selectedValues","setSelectedValues","renderRationaleField","valueSelected","membersName","element","flat","financialValues","customerKpisValues","technologyValues","handleAllValuesSelected","MultiSelect","findBlankValue","hasButtons","updatedSelected","checkSaveButton","allValuesExist","getIsDisabled","Error","GlobalBankerFieldStyle","createGlobalStyle","EditFieldCheckboxText","checkValue","textValue","checkboxKey","textInputKey","isCheckbox","setChecked","fieldValue","setFieldValue","disabledSave","_deal_preparation","_Space","direction","padding","marginBottom","overlayClassName","PopoverComponent","SubTitle","EditFieldTextarea","refreshOnChange","_ref$maxLength","isSaveBtnDisabled","setIsSaveBtnDisabled","setFocus","setTextValue","focusInputRef","useFocusInput","isCommentaryValidValue","isDesiredTransactionField","TextareaWrapper","ctrlKey","metaKey","height","CustomPopoverStyled","CHANGE_SORT","CHANGE_SORT_SUCCESS","CHANGE_MULTI_SORT","RESET_SORT","RESET_SORT_SUCCESS","changeMultiSort","multiSort","otherData","generateSortInitialState","changeSortSuccessReducer","changeMultiSortReducer","sortGrid","getSortGrid","optxScoreSettings","defaultTableView","DEFAULT_SORT_COMPANIES","DEFAULT_SORT_ANALYST","defaultSort","resetSortSuccessReducer","defaultSortGrid","sortSessionMap","session","sessionKey","hasMultiSort","gridSession","_parseSorting","isMultiSort","updateSortFromSession","SORT_MAPPING","_action$meta2","_parseSorting2","user_list_sorting","profile_settings","optx_score_settings","similarCompaniesSortingReducer","companyFiltersActions","outreachDetailsChangeSortSaga","outreachDetailsMultiSortSaga","outreachDetailsResetSortSaga","customFilter","searchSelectors","getTableGridQuery","getFilter","getSearchKey","currentSorting","getSorting","contactsChangeSortSaga","filterMap","filterURLParam","payloadRequest","getSearchData","filtersSelectors","searchContacts","contact_sorting","changeSortSaga","changeMultiSortSaga","resetSortSaga","companiesSaga","_yield$call","savedSearchView","fetchSourcingOutreach","checklistSelectors","ui","fetchAnalyst","fetchCompany","savedSearchesSelectors","getAllViews","getCompanyIdFromProfileUrl","previousSorting","isCancelled","searchActions","cancelCompanySearch","_yield$call2","searchFiltersSagas","getModalsIsOpen","createSelector","selectFeatureState","_state$filter$gridKey","_state$filter$advance","similarCompanies","getDefaultFilter","clear","_state$filter$gridKey2","getFiltersLoaded","_state$filter$gridKey3","selectCompanyFilters","filterGetCompanyFilters","filterGetFiltersMap","getTags","getMyCompaniesCards","getLists","routerSelectors","getLocation","mapTags","uniqueKey","generateUniqueKey","closable","showCustomClearFilter","normalizedFilter","filterURLParams","customFilterURLParams","GRID_FILTER_KEYS","FILTERS_INITIAL_STATE","fetchFiltersSuccessReducer","sourceScrubListMatch","matchPath","exact","userListMatch","isSsList","isUserList","myCompaniesPreselectedFilter","companies_assigned","queryFilter","persistedFilter","_parseFilter7","_parseFilter9","_parseFilter11","checkDataFilter","_draftState","listKey","getLocationGridKey","_data$filter","_draftState$gridKey$f","oldFilters","filterCompanyListSuccessReducer","clearCompanyListReducer","company_filters","updatedPersistedFilter","addon_filters","initializeSavedSearchesAndViewsSuccessReducer","allSavedSearches","_parseFilter13","changeCardReducer","clearAddonManagementFilterReducer","addonManagementActions","clearSearch","myCompaniesActions","listsActions","filterCompanyListSuccess","initializeSavedSearchesAndViewsSuccess","filterCompanyListSaga","companySearchFiltersSaga","filterCompanyList","initialFetchFavoritesLists","initialFetchFavoritesListsSuccess","fetchFavoriteLists","fetchFavoriteListsSuccess","fetchFavoriteListsFail","sortFavoriteLists","createFavoriteList","createFavoriteListSuccess","createFavoriteListFail","deleteFavoriteList","deleteFavoriteListSuccess","deleteFavoriteListFail","updateFavoriteListCount","renameFavoriteList","renameFavoriteListSuccess","renameFavoriteListFail","deleteCompanyFromList","deleteCompanyFromListSuccess","deleteCompanyFromListFail","removeSharedList","removeSharedListSuccess","removeSharedListFail","addCompanyToList","addCompanyToListSuccess","addCompanyToListFail","saveSearchAsList","saveSearchAsListSuccess","saveSearchAsListFail","favoriteListsPagination","updateFavoriteListPermission","resetFetchedAt","addCompanyToListBulkActionSuccess","updateListCount","updateFavoriteListAssociation","updateFavoriteListAssociationSuccess","updateFavoriteListAssociationFail","updateCompleted","updatePercentage","saveTitle","tryAgainSaveSearchAsList","cancelSaveSearchAsList","resetSaveSearchAsList","publicWatchList","publicWatchListSuccess","publicWatchListFail","CHANGE_PAGINATION","CHANGE_PAGINATION_SUCCESS","GRID_KEYS","PAGINATION_INITIAL_STATE","userInfo","search_results_per_page","my_companies_results_per_page","my_companies_results_page_number","contact_results_per_page","contact_results_page_number","user_list_search_results_per_page","user_list_search_results_page_number","sourcing_outreach_results_per_page","sourcing_outreach_results_page_number","addon_results_per_page","bi_weekly_pipeline_report_per_page","bi_weekly_pipeline_report_page_number","changePaginationSuccessReducer","getPageNumber","getPageSize","changePaginationSaga","searchName","_searchData","currentCompanyId","additionalFiltersQuery","normalizedSearchData","getDefaultTableView","dateRangeValues","parsedTableGridQuery","customTableGridQuery","searchDataOutreach","getViewId","getListType","getAdvancedSearchListId","getSearchName","assign","_objectDestructuringEmpty","contactsFiltersSelectors","getSavedSearches","contactsSearchActions","searchContactsSuccess","searchContactsFail","checklistResearchSelectors","checklistResearchActions","fetchAnalystFail","fetchCompanyFail","pipelineReportActions","fetchPipelineReportCompany","fetchPipelineReportCompanyFail","companyOutreachFilterSelectors","importFavoriteList","importFavoriteListSuccess","updateImportCompanies","updateImportCompaniesIds","editCompany","setIsEditing","editCompanies","editCompanySuccess","editingCompanyIndex","removeFailedCompamy","removeFailedCompamies","updateCanceledImportsNumber","updateProgress","resetProgress","updateCanceledImports","saveResults","saveListId","setLoading","showSimilarCompanies","setSimilarCompanies","setFailedImportsOnRequest","removeFailedImportsOnRequest","retryImport","setFailedBatches","SEARCH_QUICK_FILTERS_KEYS","EDIT_FIELD_TEXT_FIELDS","None","Dead","Pass","Lead","Track","VWIA","Target","Priority","SORT_FIELD_NAMES","job_openings","job_openings_percent","sw_website_rank","sw_website_rank_per_country","last_rev_update_amount","last_valuation","source_tag","MY_COMPANIES_SORT_FIELD_NAMES","FILTER_MODAL_KEYS","score_lower","score_upper","sw_website_rank_lower","sw_website_rank_upper","is_on_linkedin","g2_rating_lower","g2_rating_upper","g2_review_count_lower","g2_review_count_upper","ct_rating_lower","ct_rating_upper","cb_rank_lower","cb_rank_upper","num_employees_lower","num_employees_upper","emp_growth_percent_lower","emp_growth_percent_upper","job_openings_upper","job_openings_lower","job_openings_percent_lower","job_openings_percent_upper","geo_range","year_founded_upper","year_founded_lower","has_parent","diversity","is_company_reviewed","stage_type_date","ebitda_string","completed_touch","completed_touch_type_date","schedule_touch","schedule_touch_type_date","has_date_presented","capital_raised_lower","capital_raised_upper","last_rev_update_amount_lower","last_rev_update_amount_upper","ebitda_numeric_lower","ebitda_numeric_upper","last_valuation_lower","last_valuation_upper","last_raised_amount_lower","last_raised_amount_upper","is_psg_only","exclude_psg","ALL","SEARCH_VIEW_VALUES","table","MY_COMPANIES_SEARCH_VIEW_VALUES","GRID_VIEW_VALUES","MY_COMPANIES_GRID_VIEW_VALUES","SECONDARY_QUICK_FILTERS","ss","et","g2","gd","ct","bvd","optx","ivc","Grata","cb","DATA_SOURCE_KEYS","SOURCING_TEAM_MEMBER_HOME_PAGE","findNewCompanies","manageMyCompaniesRecentlyAccessedLists","manageMyCompaniesSavedSearchesWithNewMatches","viewMyCompanyActiviyNumberOfEmployeesExced30","viewMyCompanyActiviyEmployeeGrowth","viewMyCompanyActiviyWebsiteTrafficRankTop200k","viewMyCompanyActiviyNewFundingEventAnalystTracking","myPipeline","outreachRecency","activityInsights","touchActivityByType","TOUCH_MANAGEMENT_OPTIONS","MY_PIPELINE_OPTIONS","ACTIVITY_INSIGHTS_OPTIONS","VIEW_TIME_FRAME_OPTIONS","New","analyst","stage_change","Positive","Negative","companies_added","qualified_leads","WEEKLY_TOUCHES_OPTIONS","Call","COMPANIES_BLOCK_OPTIONS","COMPANIES_BLOCK_OPTIONS_VIEW_ALL","MY_COMPANIES_ACTIVITY_BLOCK_OPTIONS","FIND_NEW_COMPANIES_SOURCING_TEAM_MEMBER_OPTIONS","MANAGE_MY_COMPANIES_SOURCING_TEAM_MEMBER_OPTIONS","MANAGE_MY_COMPANIES_NEW_SAVED_SEARCH_MATCHES_OPTIONS","COMPANIES_BLOCK_SUB_OPTIONS","CloudManagement","EntertainmentSoftwareandServices","HRTechHCM","FILTER_KEYS_DEFAULT_SHOW_ALL_COMPANIES","FILTER_KEYS_DEFAULT_SHOW_ALL","gr","pb","PSGI","PSGII","PSGIII","PSGIV","PSGV","PSGVI","exclude","entered","exited","BlackAfricanAmericanFounded","HispanicLatinxLed","NativeHawaiianPacificIslanderFounded","BlackAfricanAmericanLed","MiddleEasternNorthAfricanLed","HispanicLatinxFounded","AmericanIndianAlaskaNativeFounded","AmericanIndianAlaskaNativeLed","MiddleEasternNorthAfricanFounded","NativeHawaiianPacificIslanderLed","ChimneyFireplaceService","GutterInstallatinCleaning","design","VentureRound","UnknownFundingRound","SeriesJW","SeriesDI","MY_COMPANIES_CARDS","card1","card1_no_touches","card1_more_than_6_months_ago","card1_6_weeks_to_6_months_ago","card2","card2_in_more_than_6_months","card2_in_6_weeks_to_6_months","card2_within_6_weeks","card3","card3_past_due","card3_next_7_days","card3_8_14_days_away","card3_next_30_days","card4","card4_past_due","card4_next_7_days","card4_8_14_days_away","card4_next_30_days","customText","toggle","loadingReducer","useInject","useInjectReducer","fetchChangedCompanyFields","requestUtils","createActionTypes","REQUEST","fetchChangedCompanyFieldsSuccess","SUCCESS","fetchChangedCompanyFieldsFail","FAILURE","editCompanyAuditTrailFields","clearCompanyFields","getFields","getSearchQuery","searchQuery","getStartDate","getEndDate","getCount","count","getFieldsToFilter","fieldsToFilter","getInternal","internal","getOPTX","getHasReachedResultsEnd","hasReachedResultsEnd","fetchCompanyChangedFieldsSaga","companyChangedFieldsSaga","results","fetchCompanyChangedFields","fetchChangedCompanyFieldsReducer","fieldsToOmit","field_changed","editAuditTrialFieldsReducer","before_value","after_value","clearCompanyFieldsReducer","SHORT_MONTH_YEAR_DATE_FORMAT","LONG_MONTH_YEAR_DATE_FORMAT","NOTIFICATION_DATE_FRAME_FORMAT","PRESENT_DATE_FORMAT","STATE_SEARCH_ENDPOINT","CITY_SEARCH_ENDPOINT","PRODUCT_CATEGORY_SEARCH_ENDPOINT","future","generateArrCurrentColumnKey","generateArrPast1YearColumnKey","generateEbitdaCurrentColumnKey","generateEbitdaPast1YearColumnKey","generateGrowthCurrentColumnKey","generateGrowthPast1YearColumnKey","searchSavedSearches","fetchMyCompaniesCardsResponse","fetchFavoriteListsResponse","getAllWatchlistsSelector","getSortBy","initialFetchFavoriteLists","getCompanySearches","fetchSavedSearchesSuccess","total_list_count","addCustomViews","defaultCustomUIView","searchSavedSearchesFail","fetchSavedSearchesSaga","savedSearchesPaginationSaga","sortCompanySearchesListsSaga","saveSearchSaga","saveViewSaga","modifyViewSaga","modifyCustomUIViewSaga","deleteSearchSaga","renameSearchSaga","makeFiltersDefaultSaga","initializeSavedSearchesAndViewsSaga","companySavedSearchesSaga","viewSettingsKeys","getSavedCompanySearchesResultsPageNumber","getDefaultCustomUIView","listsAndSearchesSelectors","userActions","saved_company_serches_page_number","saved_company_searches_filters","lists_and_searches_results_per_page","listsAndSearchesActions","updateMyWatchlistTabsPagination","saved_company_serches_sorting","filterSourcesMap","searchKeySelectors","searchCountSelectors","getSearchCount","createCompanySearch","saveFilters","saveSorting","saveColumns","savePinnedColumns","myCompaniesFilters","_selectedCard$filter3","_objectSpread2","regularFilters","cardId","subFilterValue","getStageFilter","next_touch_date_days","default_view_id","saveSearchTitle","autoCompleteActions","fetchSearchAutocomplete","t15","formSaveFilters","formSaveSorting","formSaveColumns","formSavePinnedColumns","formTitle","defaultSearch","editedView","_editedView$column_or","getViews","saerchType","mapSearchSave","viewId","shouldRefetch","searchesSelectors","fetchAfterDelete","deleteCompanySearch","initializeSavedSearchesAndViews","getViewLabel","getTitles","_errorMessage3","renameCompanySearch","modifyViewId","isCreatedViewDefault","uniqueId","defaultView","_settings$session_set","_settings$session_set2","savedQuery","allWatchlistsResponse","_userSettings$setting","getUserSettings","decodedPayload","customViews","myCompaniesFilterCards","allWatchlists","fetchSavedSearchesSuccessReducer","isSavedSearchList","viewIds","makeFiltersDefaultSuccessReducer","currentDefaultId","findKey","modifyViewSuccessReducer","searchSaveResponse","modifiedView","modifiedViewId","currentDefaultView","modifyCustomUIViewSuccessReducer","updateSavedSearchesReducer","_draftState$byId$list","shareWith","sharedList","shared_with","_action$payload$setti2","defaultViewId","defaultId","savedCompanySearchPaginationReducer","loadSavedSearchReducer","fetchSavedSearchesReducer","saveSearchSuccessReducer","deleteSearchSuccessReducer","renameSearchSuccessReducer","combinedSearchActions","combineSearch","combineSearchFail","loadSavedSearch","TOGGLE_SEARCH_VIEW","CHANGED_COMPANY_CARD","TOGGLE_SEARCH_VIEW_SUCCESS","toggleSearchView","changedCompanyCard","toggleSearchViewSuccess","viewType","isChangedCompanyCard","VIEW_TYPE_INITIAL_STATE","toggleSearchViewSuccessReducer","changedCompanyCardReducer","search_view_home","search_view_my_companies","search_view_list","sourcing_outreach_view_home","toggleSearchViewSaga","SearchViewSaga","newView","oldView","newViewKeys","getCompanies","toggleViewTransitionActions","toggleViewTransition","employeGrowthActions","fetchEmployeeGrowth","scoreGrowthActions","fetchScoreGrowth","selectCompanyIndividualEditState","selectCompanyOwnerState","localSelectors","isLoadingCompanyOwnerInfo","companyOwnerSelectors","isSubmitting","getAllOptions","failedLoadingInfo","dealTeamOptions","multipleOptions","shouldInitialFetch","phoneOptions","combineReducers","companyIndividualEditReducer","companyOwnerReducer","TableCellDefaultTooltip","breakLines","InlineBlockLink","TooltipDefaultLabel","TableCellEmail","CopyButton","href","rel","recommended_email","copyText","RecommendedContainer","TableCellLinkedin","convertToURL","LinkedinOutlined","TableCellFormatNumber","TableCellMoney","formatMoney","cellIsEqual","TableCellFormatMoney","TooltipText","TableCellList","TableCellListDefault","shouldBeInUpperCase","valueFormated","TableCellDate","formattedDate","TableCellNumber","formatNumber","TableCellDateInterval","trimedDate","formatDateFromDatePicker","formattedEndDate","isIsoDateString","formatedStartDate","MatchedText","TableCellMatch","RowWrapper","TableCellStatus","isSuccess","justify","_Col","CheckCircleFilled","CloseCircleFilled","TableCellCeoRating","TableCellPhones","phone","handlePhones","phone_number","listOfPhoneNumbers","ListURL","TableCellListURL","urlPath","list_type","clickable","fontWeight","TableCellListDate","normalizedValues","ContentWrapper","$maxWidth","maxTooltipWidth","rest","hasOverflow","elementText","setHasOverflow","elementWidth","contentWidth","scrollWidth","isContentWider","currentRef","useHasOverflow","overlayStyle","gridKeys","gridList","fromEntries","generateGridColumnReducerInitialState","gridListFormatted","gridListCustom","isColumnFetched","BASE_OPTX_DEFAULT_VIEW","alias","routeAlias","gridKeyMain","referrer","mapGridKeyToName","OPTX_SCORE_RATIONALE_KEY","OPTX_SCORE_LOWER_RATIONALE_KEY","OPTX_SCORE_UPPER_RATIONALE_KEY","NEW_OPTX_SCORE_RATIONALE_KEY","NEW_OPTX_SCORE_LOWER_RATIONALE_KEY","NEW_OPTX_SCORE_UPPER_RATIONALE_KEY","SOFTWARE_RATIONALE_KEY","PSG_FIT_RATIONALE_KEY","STAGE_RATIONALE_KEY","SOFTWARE_CARD_NAME","FIT_CARD_NAME","SCORE_CARD_NAME","NEW_SCORE_CARD_NAME","getCompanyProfileURL","searchParams","geEquityTouchURL","getAddToSalesLoftURL","getListURL","getSourceScrubListURL","getOriginPath","url","stringifyReferrerUrlParam","profileRedirectPath","pathName","usePathName","parseUrl","_window$location","getGridKeyFromRouteAlias","resetHistoryState","_history$location","newState","cloneDeep","pathSegments","profileIndex","saveColumnWidthSaga","resetColumnWidthsSaga","userSetting","columnWidths","columnDisplayInitialState","newColumnWidths","COLUMN_WIDTH_GRID_NAMES","columnWidthsAdvancedSearch","columnWidthsChecklist","columnWidthsContacts","columnWidthsAddon","getColumnDisplayInitialStateByColumnId","fetchColumnsSaga","saveColumnSaga","ColumnsSaga","userSessionsSettings","defaultViewData","getDefaultViewData","GRID_STATE_OPTIONS","isChecklistResearchAnalyst","columnDisplay","ChecklistInsightsCompanyGrid","grid_initial_state","grid_initial_column_order","columnSettings","ChecklistAnalystLeaderboardGrid","GRID_COLUMN_NAMES","columnDisplayOptxView","columnOrderOptxView","applyCompanyCollumnSettings","_view","_view2","_view3","_SESSIONS_SETTINGS_CO","_SESSIONS_SETTINGS_CO2","_SESSIONS_SETTINGS_CO3","_userInformationActio","companyOutreachFilters","currentView","orderOfColumns","currentSavedSearch","hasColumnConfiguration","updatedViewHasColumnsConfiguration","newSort","SESSIONS_SETTINGS_COLUMNS_KEYS","companyOutreachFiltersSelectors","savedSearchSelectors","suggestedSearchesSelectors","getView","getVisibleColumns","getPinnedColumnsOrdered","getPinnedColumns","LIST_OF_SAVE_COLUMNS_SORT_GRID","getNewSorting","checkCurrentGridColumnsConfig","saveColumnWidth","resetColumnWidths","updateColumnReducer","columnVisibility","updateVisibility","updatePins","getNewColumnDisplay","newColumnDisplay","pinnedColumnsList","newColumnOrder","pinned","visible","_draftState$columnDis","saveColumnWidthReducer","getDefaultVisibleColumns","GRID_KEYS_COLUMNS","COLUMNS_INITIAL_STATE","fetchColumnsSuccessReducer","_columnState$columnDi","columnState","columnOrderInitialState","columnReducers","last_viewed","optxDefaultView","BASE_OPTX_DEFAULT_VIEW_GRID_KEYS","updatedDefaultOptxView","SESSIONS_SETTINGS_COLUMNS_WIDTH_KEYS","newColumns","mutableColumns","gridUpdateColumnWidthsReducer","saveColumnsReducer","columnType","_draftState$checklist","_draftState$checklist2","applyCompanyCollumnSettingsReducer","checklistResearchColumnType","hasTransactionsColumn","customColumnOrder","columnOrderList","nextStepsIndex","resetColumnWidthsReducer","_draftState$checklist3","_columnState$columnDi2","addRemoveDateMatchedReducer","innerAction","date_matched","firstNotPinned","optionalSettings","_callee","newPayload","filterRangeValues","customFilterPayload","newQueryPayload","stageFilter","_selectedCard$filter$","_queryPayload2","gridKeySessionName","companyOutReachFiltersSelectors","_queryPayload","_queryPayload$stage","search_title","Boolean","newFilter","addSearchHeader","updateSessionSettings","currentDefaultSearch","_callee2","currentPageNumber","currentPageSize","_data$pagination","newPageNumber","newPageSize","listGridKey","_savedSearchView","_savedSearchView2","_yield$select2","matchData","_matchData$filter","restFilters","latestSavedSearches","currentSearch","newFilterQuery","_matchView2","_matchedView","_matchView3","_matchedTitle","_matchedView2","isAdvancedSearch","_searchData$filter$si","_companies$find","similarCompanyName","persistedSimilarCompanyName","_searchData$filter","allCompanies","_suggestedSearches","isOptxDefaultView","_searchTitle","addFromSavedListParam","isSuggestedSearch","addSearchTitleParam","applyViewData","listsSelectors","selectedCompaniesActions","deselectCompanyIds","getSessionSettings","AnalystService","getCompaniesListOutReach","_excluded2","selectCompanyIds","selectedCompanies","columnActions","viewSelectors","searchKeyActions","setSearchKey","errorNumber","_yield$select3","defaultSearchKey","listsSessionFilters","outreachSessionFilters","savedFilters","companyFilters","_parseFilter2","parsedSessionsFilters","getDefaultViews","isSavedSearchesLoaded","urlQuery","listOfSavedSearches","isParentSearch","isTagSearch","isFromPlugin","hasQueryInURL","outreachColumnSelectorsessionFilters","companySessionFilters","defaultData","_getSearchTypeInfo","filtersSearchType","_defaultData$","_defaultData$2","_listId","_searchTitle2","loaded","fetchSourcingOutReachFiltersSuccess","resetSessionFilter","setDefaultSourcingOutReachFilters","changeCardSubfilterSuccess","selectCompaniesOutReachState","companyOutSourcing","sourcingOutReachFiltersLoaded","getSourcingFiltersOptions","sourcingField","_state$sourcingOutRea","_state$sourcingOutRea2","_state$sourcingOutRea3","sourcingOutReachFilter","getSourcingFiltersOptionsDate","_state$sourcingOutRea4","_state$sourcingOutRea5","_state$sourcingOutRea6","_state$sourcingOutRea7","sourcingOutReachFilterOptions","customClearedfilter","showClearButton","companyFilterSelectors","subfilter","fetchSourcingOutReachSearchSuccessReducer","updateSourcingOutReachFilterOptionsSuccessReducer","updateSourcingOutReachFiltersReducer","_queryString$parse","newPipelineRank","clearSourcingOutReachFilterOptionsReducer","fetchSourcingOutReachFiltersSuccessReducer","my_companies_selected_card_id","sessionFilter","setDefaultSourcingOutReachFiltersReducer","defaultDate","listOfAnalyst","columnName","listOfColumNames","columnNamesFilterDefault","dateFilterDefault","persistedFiltersKeys","tableGridQueryAnalystId","analystIdsFilterDefault","payloadAnalystIdList","listOfPersistedAnalystIds","preselectedFilter","resetSessionFilterReducer","cards","changeCardSubfilterSuccessReducer","clearFilterSuccessReducer","clearFilterSuccess","PenIcon","styledColors","blue6","onVisibilityUpdate","_ref$hidePenIcon","_ref$placement","popupVisibility","setPopupVisibility","handleClick","stopPropagation","prevState","popoverHTML","textContent","offsetLeft","offsetTop","head","appendChild","querySelectorAll","remove","_Popover","onVisibleChange","destroyTooltipOnHide","abbreviateNumber","maxValue","dot","roundHalfEven","_ref$format","n","roundToHalfEven","roundedValue","round","splitedWord","formatedValue","abbreviateValue","thresholdValue","maxFilterValue","minFilterValue","inputType","finalValue","isNegative","sign","convertToPositive","abs","logarithmNumber","computePercent","decimals","number","numberToMillions","isInputNegative","parts","String","BULK_EDIT_DEFAULT_COLUMNS","dataIndex","render","TableCellCompanyName","getResults","isInProgress","inProgress","isCompleted","getPercentageCompleted","percentageCompleted","getSelectedCompaniesCount","selectedCompaniesCount","saveResultsReducer","updateProgressReducer","updateCompletedReducer","updatePercentageReducer","addProgress","selectCompanyIdsReducer","resetProgressReducer","cancelReducer","_persistedFilter$comp","companiesById","allCompanyIds","isInteger","bulkEditFieldSaga","bulkEditSaga","extraOptions","dataField","BULK_EDIT_COMPANY_LIMIT","addonId","arrayOfTags","companiesBatch","failedCompanies","currentResults","nextResults","finalResults","successfulResults","hasBlankOption","canceledCompanies","prevResults","BULK_EDIT_COMPANY_LIMIT_SYNCED_TO_ET","BULK_EDIT_COMPANY_LIMIT_ADD_TO_WATCHLIST","BULK_EDIT_COMPANY_LIMIT_REMOVE_FROM_WATCHLIST","BULK_EDIT_COMPANY_LIMIT_ADD_TAGS","BULK_EDIT_COMPANY_LIMIT_SET_AS_SOFTWARE_COMPANY","deal_team_leader_name","bulkEdit","bulkActionsSelectors","editFields","_failedCompanies$id$r","rawUrl","raw_url","scoreInfo","reason_to_failed","sync_status","error_reason","updatedCompaniesIds","changedValue","editFieldKey","customGlobalLoaderActions","ProgressWrapper","_Progress","ResultWrapper","_Result","InProgress","visibilityChange","percentage","percent","showInfo","subTitle","extra","blur","Completed","proccessName","successfulCount","getSuccessCount","totalCount","getSelectedCompanies","TableCellURL","align","TableCellErrorReason","BulkEditingResults","_Table","tableLayout","defaultColumns","rowKey","dataSource","bordered","maxHeight","overflowY","BulkEditCompletion","editField","ModalWrapper","_Modal","BoxWrapper","$isStageField","renderProductCategoriesTitle","BulkEditModal","changeVisibility","editFieldTitle","setSelectedData","confirmationVisibility","setConfirmationVisibility","searchCompanyCount","isAddonGridRefreshed","isFetchingInProgress","isWatchlistStateUpdating","setIsWatchlistStateUpdating","getIsAdminOrAnalyst","okText","selectedCompaniesNumber","MERGE_COMPANIES_LIMIT","useUnmount","initialCompaniesSearch","defaultColumnRender","columnRender","mergeCompaniesColumns","BULK_MERGE_COMPANIES_COLUMNS","CompanyA","CompanyB","onOk","addToWatchListActions","bulkAddToWatchList","removeFromWatchListActions","listDetailCount","bulkRemoveAddon","bulkAiMl","bulkEditField","bulkMergeCompaniesActions","bulkSoftware","isBulkRemoved","onCancel","okButtonProps","destroyOnClose","_Alert","EditStage","selectedRationale","setSelectedRationale","EditPipelineRank","menuIsOpen","EditCompanyOwner","EditFund","EditRationale","onBlur","Styles","AsyncWrapper","EditAddon","setIsDisabled","GET_ET_COMPANIES_ENDPOINT","isOptionDisabled","EditLeadSource","EditSeniorAdvisor","EditSoftware","isOther","setIsOther","Radio","alignItems","lineHeight","buttonStyle","textAlign","Button","CreateOtherRaionale","isSoftwareModal","EditSubsector","EditProductCategory","COMPANY_PRODUCT_CATEGORY_ENDPOINT","RadioStyled","EditAiMl","BulkEditField","component","BulkAddTags","EditWatchList","GOOGLE_MAPS_API_KEY","process","REACT_APP_GOOGLE_MAPS_API_KEY","GOOGLE_LOCATION_API_KEY","REACT_APP_GOOGLE_LOCATION_API_KEY","JWT_ENCRYPTION_SECRET_KEY","REACT_APP_JWT_SECRET_KEY","editingFieldsState","editingFields","successCompanies","equityTouchState","getFormData","formData","getAllIds","getQueue","getCompanyData","getBulkValues","bulkValues","getTemporaryData","getListId","getSelectedContactIds","_companiesById$compan","contactIds","selectedContactIds","getContacts","pick","BULK_ACTIONS_CONTACT_FIELDS","getInitialFormValues","temporaryData","step1","source","database_matched","itemId","Rank","Source","Funding","Groups","Investors","Rationale","FTEs","getEditCompanyPosition","et_sync_status","getCadence","getCompanyEqtData","companyEqtData","getCompanyEqtTemporaryData","getCompanyTemporaryData","salesloftState","salesloft","salesloftBulkCompanies","salesloftBulkContacts","modalVisible","getCadenceId","getAttentionCount","_company$contacts","primary_contact","sl_sync_status","mergeCompaniesState","mergeCompanies","getMergeCompaniesStatus","getStatus","softwareState","aiMlState","selectedCompaniesReducer","editingFieldsReducer","equityTouchReducer","bulkSalesloftReducer","mergeCompaniesReducer","bulkSoftwareReducer","bulkAiMlReducer","bulkActionsSagas","selectedCompaniesSaga","equityTouchSaga","salesloftSaga","bulkAddToWatchListSaga","bulkMergeCompaniesSaga","bulkSoftwareSaga","bulkAiMlSaga","useInjectSaga","saga","prepareFetchSuccess","fetchSavedSearches","fetchSavedSearchesFail","saveSearch","prepareSaveSearch","saveSearchSuccess","prepareSaveSearchSuccess","saveSearchFail","saveView","modifyView","modifyCustomUIView","updateSavedSearches","modifyViewSuccess","modifyCustomUIViewSuccess","deleteSearch","deleteSearchSuccess","deleteSearchFail","renameSearch","renameSearchPrepare","renameSearchSuccess","renameSearchFail","savedCompanySearchPagination","sortCompanySearchesLists","makeFiltersDefault","makeFiltersDefaultSuccess","INITIAL_COMPANIES_SEARCH","COMPANIES_SEARCH","COMPANIES_SEARCH_SUCCESS","COMPANIES_SEARCH_FAIL","CANCEL_COMPANY_SEARCH","HIDE_CANCEL_SEARCH","UPDATE_TRENDING","CLEAR_COMPANY_SEARCH","CLEAR_COMPANY_SEARCH_SUCCESS","RESET_COMPANY_SEARCH","RESET_COMPANY_SEARCH_SUCCESS","LOAD_SAVED_SEARCH","LOAD_SUGGESTED_SEARCH","RESET_FILTER","LOAD_AUTOCOMPLETE_SEARCH","LOAD_COMPANIES_BY_FILTER","SAVE_SEARCH_TITLE","DELETE_SAVED_LIST","LOAD_COMPANIES_BY_FILTER_COMPLETED","LOAD_DIVERSITY_FILTER","INITIALIZE_LONG_CARD_SEARCH","SHOULD_UPDATE_SOURCING_OUT_REACH_ANALYST_INFO","UPDATE_SOURCING_OUT_REACH_ANALYST_INFO","REMOVE_FILTER","CLEAR_FILTER_SUCCESS","CHANGE_SEARCH_TYPE","LOAD_SEARCH","CLEAR_DATE_MATCHES","resetSubFilter","updateTrending","clearSearchSuccess","resetSearch","shouldSort","resetSearchSuccess","resetFilter","loadCompaniesByFilter","deleteSavedList","changeSearchType","loadCompaniesByFilterCompleted","loadDiversityFilter","initializeLongCardSearch","updateSourcingOutReachAnalystInfo","removeFilter","loadSearch","clearDateMatches","SAVE_SEARCH_AS_LIST_LIMIT","searchLists","getFavoriteLists","searchListsFail","initialFetchFavoriteListsSaga","fetchFavoriteListsSaga","sortFavoriteListsSaga","favoriteListsPaginationSaga","updateFavoriteListAddonSaga","createFavoriteListSaga","deleteFavoriteListSaga","renameFavoriteListSaga","deleteCompanyFromListSaga","removeSharedListSaga","addCompanyToListSaga","saveSearchAsListSaga","tryAgainSaveSearchAsListsaga","publicWatchListSaga","favoriteListsSagas","favoriteListsSelectors","payloadQuery","getFavoritesListResultsPageNumber","favorites_list_page_number","my_watchlists_filters","hideHistory","favorites_list_sorting","isDeleting","addonCompanyId","updateFavoriteListAddon","addon_company_id","deleteCompanyInList","substr","deleteCompanyInCurrentList","selectedLists","titles","failureListIds","successListIds","_titles","_list","_titles2","_action$payload7$page","getCompanyCount","_normalizedFilters","totalPageCount","isCancel","getKeys","isUnderLimit","FAVORITE_LIST_OWNER","lastPercentage","isPublic","is_public","publicList","companyListsSagas","FAVORITE_LISTS_DEFAULT_SORT","loadingPublic","errorPublic","initialFetchFavoriteListsSuccessReducer","watchlists","watchListsById","allWatchlistsById","filteredAllWatchlists","share_permission","fetchFavoriteListsSuccessReducer","_action$payload$setti3","deleteFavoriteListSuccessReducer","pickBy","createListSuccessReducer","renameFavoriteListSuccessReducer","removeSharedListSuccessReducer","updateFavoriteListCountReducer","deleteCompanyFromListSuccessReducer","saveSearchAsListSuccessReducer","newList","updateFavoriteListPermissionReducer","userPermission","updateFavoriteListAssociationSuccessReducer","resetFetchedAtReducer","fetchFavoriteListPagination","updateListCountReducer","saveTitleReducer","cancelSaveSearchAsListReducer","resetSaveSearchAsListReducer","bulkRemoveFromWatchListReducer","bulkAddToWatchListReducer","publicWatchListReducer","publicWatchListSuccessReducer","publicWatchListFailReducer","bulkWatchlistsActions","hasBlankLabel","selectedOption","showOpinionForNextSteps","parseDataByPastTime","Today","dateData","dateFrame","todayNew","filteredData","next_update","diff","todayDateFrame","subtract","parseDataByNextTime","hasUpcomingTouchesSorting","dataSet","Tomorrow","reverse","todayDate","add","today","tomorrowDate","tomorrow","tomorrowDateFrame","lastDayOfThisWeek","startDayOfNextWeek","lastDayOfNextWeek","futureTouchDate","isSame","isBetween","convertPayloadImport","dataImport","isEmpty","cmp","pr","Website","dataString","JSON","copyToClipboard","navigator","clipboard","writeText","convertLinkedinURL","linkedinUrlValue","linkedinUrl","makeUnique","normalizeValue","pendoLoadingHelper","Promise","resolve","pendoScript","getElementById","onload","reject","CONTACT_DEFAULT_SORT","USER_DEFAULT_SORT","COMPANY_TAB_LISTS_DEFAULT_SORT","SOURCE_SCRUB_LISTS_DEFAULT_SORT","FAVORITE_LISTS_POPUP_DEFAULT_SORT","SORT_DESCENDING_BY_DEFAULT","FILES_DEFAULT_SORT","random","normalizedSources","histogramFilters","_value","filterColumn","currentFilterData","lowerOptions","upperOptions","histogramFiltersLength","histogramListFieldIndex","shouldValidateHistogramFilters","originalMinMax","filterItem","range","ebitdaString","check","lowerRangeKey","upperRangeKey","customOption","used_for","in","notIn","start","end","_option$value","my_assigned_companies","queryParsed","_values$index","is_in_israel","sourcingDatesFilter","nextTouchDateFilter","lastTouchDateFilter","dateRangeFormatUpperLower","wrt_over_6_wks","wrt_over_6_months","wrt_nothing_scheduled","wst_over_6_months","wst_over_6_wks","wst_within_6_wks","mfst_8_to_14_days","mfst_next_7_days","mfst_next_30_days","mfst_past_due","stn30_8_to_14_days_away","stn30_next_7_days","stn30_next_30_days","stn30_past_due","initializeEquityTouchBulk","initializeEquityTouchBulkSuccess","initializeIndividualEditing","fetchFormDataSuccess","addToEquityTouchBulk","addToEquityTouchBulkFail","fetchCompanySuccess","addBulkContacts","updateBulkContact","updateBulkCadence","updateBulkContactSuccess","updateBulkCompany","resolveSalesloft","resolveSalesloftSuccess","salesloftSelectContactsBulk","selectCadenceIndividually","fetchContacts","fetchContactsSuccess","autoSave","updateTemporaryData","isInitializing","fetchEqtData","cadenceId","fetchMyCompaniesCardsSaga","initializeMyCompaniesCardsSaga","changeCardSaga","myCompaniesFilterSaga","touchFilters","fetched","init","_filter","_filter2","_filter2$company_owne","myCompanySessionFilters","listIdType","tablePagination","longCardPagination","_searchType","companiesFilterSelectors","longCardPaginationSelectors","getLongCardPagination","_listType","searchResults","getMyCompaniesResultsPageNumber","fetchMyCompaniesCardsSuccessReducer","_draftState$selectedC","card","subFilterKey","_draftState$sessionFi","BULK_ADD_COMPANY_LIMIT_EQUITY_TOUCH","BULK_ADD_COMPANY_LIMIT_SALESLOFT","BULK_EDIT_COMPANY_LIMIT_SET_AS_AI_ML_COMPANY","MAX_ET_SL_COMPANIES","MAX_SELECT_ALL_COMPANIES","fetch","fetchFilters","fetchSuccess","fetchFail","clearFilters","resetToDefault","applyFilters","updateFilters","toggleDefaultTableView","toggleDefaultTable","fetchCard","FETCH_CARD","fetchCardSuccess","FETCH_CARD_SUCCESS","TableCellCompanyURL","GlobalOutlined","TableCellAdvancedSearchActions","DropdownAdd","TableCellMyCompaniesActions","TableCellActions","TableCellMyWatchlistsActions","TableCellPercentageGrowth","textClassName","TableCellLocation","displayName","locationName","getLocationName","PopoverTitle","fullWidth","PopoverTitleWrapper","p","left","_templateObject8","TableCellStringList","viewValue","stringListToView","TableCellNumberOfEmployees","numEmployees","setNumEmployees","period","setPeriod","myCompaniesTrending","getTrending","searchTrending","watchlistTrending","userValuesActions","updateCompanyUserValues","newLabel","validateIntegerAbbreviation","TrendingLine","points","renderCompanyOPTXScoreTrendline","defaultOPTXScore","_company$optx_score_v","isNewScore","_company$il_optx_scor","_company$optx_score_t","TableCellOPTXScore","companyOutReachTrending","getIsPsgCompany","handleNanOptxScore","TableCellDescription","TableCellScoreAdmin","useIsAdminOrAnalyst","EditFieldNewOPTX","EditFieldOPTX","TableCellRadioAdmin","TableCellFitRationale","TableCellInvestors","TableCellAddon","_record$source_tag","isFromPipelineReportGrid","updateAddon","NewDateMatchedBox","TableCellNewMatched","isNewMatched","TableCellDealTeams","fieldType","handleRenderValue","listOfIds","loadCompanyListDetailsSaga","userListsDetailsSaga","savedSearchesLists","sourceScrubListsSelectors","getSourceScrubLists","ListsService","getSourceScrubList","loadCompanyListDetailsFailure","loadCompanyListDetailsSuccess","resetLoadingState","loadCompanyListDetails","loadCompanyListSuccessReducer","filterCSVCompanyErrorListReducer","CSVImportCompanies","isSimpleList","isSourceScrubList","loadCompanyListDetailsSuccessReducer","resetStateReducer","UserInformationActions","initialFetchFavoritesListsPopup","initialFetchFavoritesListsPopupSuccess","fetchFavoriteListsPopup","fetchFavoriteListsPopupSuccess","fetchFavoriteListsPopupFail","sortFavoriteListsPopup","createFavoriteListPopup","createFavoriteListPopupSuccess","createFavoriteListPopupFail","deleteCompanyFromListPopup","deleteCompanyFromListPopupSuccess","deleteCompanyFromListPopupFail","addCompanyToListPopup","addCompanyToListPopupSuccess","addCompanyToListPopupFail","addCompanyToListPopupBulkActionSuccess","SEARCH_COUNT","SEARCH_COUNT_SUCCESS","SEARCH_COUNT_FAILURE","DECREMENT_ADDON_COUNT","searchCountSuccess","searchCountFailure","decrementAddonCount","SEARCH_COUNT_INITAL_STATE","searchCountSuccessReducer","searchCountFailureReducer","decrementCountReducer","decrementAddonCountReducer","searchCountReducer","favoriteListActions","deleteFavoriteSuccess","searchCountSaga","fetchSearchCount","_res","_res2","_res3","_res4","_errorMessage4","_res5","_errorMessage5","getAdvancedSearchSearchTitle","getCompanieListOutReachCount","searchContactsCounter","fetchCompanyAddonManagementCount","getCompanyCountChecklistInsight","Wrapper","$showActionOnHover","ActionWrapper","$fill","ChildrenWrapper","$hideActionOnChildrenHover","showActionOnHover","hideActionOnChildrenHover","defaultProps","_newFilter$psg_attend","_newFilter$psg_attend2","_newFilter$psg_attend3","touchesExcludeFilters","touchesTypeDateFilters","touchesDateFilters","touchesFilters","shouldAddAllTouches","_normalizedFilters$ps","allPsgAttendees","_filterSources$3$data","_completedTouchesFilt","completedTouchesFilter","mappedTouches","completed_touch_type","schedule_touch_type","completed_touch_date","schedule_touch_date","psg_attendees_type_date","attendeeFilter","psg_attendees_date","_item$relatedoptions","_item$name","relatedoptions","touchesFilter","isFilterValid","newFilterTouch","touchFilter","checkboxCondition","dateRangeCondition","obj","FILTER_TOUCHES","touch","parent","regexCsvMimeType","regexValidEmail","regexLinkedinURL","regexFloatAbbreviation","regexFloatAndNegativeAbbreviation","regexIntegerAbbreviation","phoneRegExp","numberRegExp","numberPercentageRegex","numberBigRegExp","numberBigRegExpEndingDot","regexAbbreviation","urlRegExp","regexDateInterval","CHART_KEYS","INITIAL_STATE_CHART","INITIAL_STATE_BAR_CHART","INITIAL_GlASS_DOOR_CHART","overall_stars","number_of_reviews","percent_recommend_friend","percent_recommend_ceo","ceo_ratings","positive_outlook_percent","defaultComponents","ValueContainer","DropdownIndicator","_ref$autoFocus","restProps","availableOptions","handleChange","selectComponents","MenuList","MenuListWithLoader","Select","isMulti","classNamePrefix","isClearable","hideSelectedOptions","SET_SEARCH_TYPE","setSearchType","GRID_KEYS_SEARCH_TYPE","SEARCH_TYPE_INITIAL_STATE","setSearchTypeReducer","search_type","my_companies_search_type","lists_search_type","sourcing_outreach_detail_search_type","_data$searchType","useInjectUI","uiReducer","useInjectResetPassword","useInjectProfilePicture","useInjectCompanySavedSearches","savedSearchesReducer","savedSearchesSagas","useInjectContactsSavedSearches","useInjectContactsFilterSources","filterSourcesReducer","filterSourcesSaga","useInjectCompanyFilterSources","useInjectSuggestedSearches","suggestedSearchesReducer","useInjectOpportunityPresentation","sagas","useInjectUserInformation","searchContactsReducer","resetReducer","clearFilter","resetTo","normalized","contact_filters","reset","contactsFiltersActions","fetchFiltersSuccess","searchReducer","filterReducer","useInjectContactsSearch","contactsSearchSaga","searchSagas","viewTransitionSaga","listsSagas","listsDetailsSaga","details","listReducer","useInjectCompanyLists","useInjectPortfolio","useInjectEquityTouch","importFavoriteListSaga","editCompanySaga","resetProgressSaga","retryImportSaga","importListsSagas","importCompaniesCopy","retryImportCompaniesCopy","listOfCompanies","cancelImport","importCompanies","importCompaniesCount","_convertPayloadImport","successCompaniesIds","successCompaniesMapped","_e$response$data","_prevResults","importSelectors","getImportCompanies","getImportCompaniesCount","getWatchlistTitle","importConstants","BULK_IMPORT_LIMIT","Reason","possible_matches","count_possible_matches","successful_companies","optx_company_name","failed_company_data","getQuery","_e$response$data2","_convertPayloadImport2","listsIds","previewsCompany","currentListId","previewsURL","isListExists","_res$data$failed_comp","failedCompany","_finalResults","_res$data$failed_comp2","_failedCompany","_finalResults2","updatedResults","_failedCompany2","getEditingCompanyIndex","getAllListIds","_value$","_value$2","failedImportsOnRequestCompanies","failedBatches","_convertPayloadImport3","listUpdated","_prevResults2","getFailedImportsOnRequest","getFailedBatches","BULK_RETRY_IMPORT_LIMIT","isPrevious","batch","_value$3","favoriteListsReducer","listImport","listImportReducer","companyLists","companyListsReducer","listsPopup","listsPopupReducer","useInjectFavoriteLists","sagasPopup","sagaImport","useInjectUserList","shareListSaga","shareSearchListSaga","shareWithList","shareWithListTransformed","shareList","share_with","useInjectShareList","useInjectSourceScrubLists","useInjectMyPipeline","myPipelineReducer","cognitoLogin","cognitoLoginReducer","cognitoLogout","cognitoLogoutReducer","authSaga","cognitoLoginSagas","cognitoLogoutSagas","useInjectAuth","authReducer","useInjectFiles","useInjectCompanyFundingRounds","useInjectSalesloft","useInjectPrimaryContacts","TIMEOUT_INTERVAL","createPool","poolGenerator","interval","visibilityState","delay","poolingSaga","fetchAlertsInboxSaga","useInjectPoolingGenerator","filterCards","filterCardsReducer","changeCardSubfilterSaga","filterPayload","filterCardsSelectors","filterCardsActions","useInjectMyCompanies","myCompaniesReducer","filtersCardsSaga","useInjectNotes","useInjectDatePresented","fetchCompanyScoreGrowthSaga","companyScoreGrowthSaga","getScoreGrowth","useInjectScoreGrowth","useInjectEmployeeGrowth","useInjectCompanyUserValues","useGeoRange","loginSaga","loginCrossTabsSaga","profileSaga","isPluginVersion2_3","token","loaderActions","startConnecting","checkPluginVersion","jwt","cookie","setAxiosAuthorizationHeaders","JWTStorage","setJWT","sendToken","MenuStorage","setMenuCollapsed","isChromeExtension","endConnecting","getCookie","useInjectLogin","AuthReducer","AuthSaga","useInjectFavorites","useInjectCompanyInBusinessEvaluation","useInjectCompanyActive","useInjectScheduledTouches","useInjectCompanyAddonManagement","sendOptxScoreRationaleSaga","rationaleTransformed","useInjectScore","useInjectAddRationale","useInjectExtensionProfile","useInjectCompanyListSourcingOutReach","useInjectCompanyRelationshipManagement","useInjectDocumentUploadModal","useInjectCombineSearch","canBeNegative","formatValueToMillions","formatDate","formatQuarter","quarterCount","quarter","getYear","formatPercentDefault","defaultFormatDateIntervalOptions","prefix","dateSeparator","labelSeparator","dateFormat","formatDateInterval","finalOptions","formattedStart","formattedEnd","selectRequestState","selectError","createCachedSelector","createErrorSelector","createLoadingSelector","resetError","regexString","typeSuffix","actionTypeRegex","RegExp","matches","exec","_matches","requestName","requestState","resetErrorReducer","addDefaultCase","fetchOpportunityPresentation","fetchOpportunityPresentationFail","setAddYearsOpenModal","editAddYearsOpenModal","dealData","updateOpportunityPresentationFail","addFinancialYear","addFinancialYearSuccess","addFinancialYearFail","deleteFinancialYear","deleteFinancialYearSuccess","deleteFinancialYearFail","editFinancialYear","editFinancialYearSuccess","editFinancialYearFail","selectOpportunityPresentationState","opportunityPresentation","fetchSelectors","isLoadingSelector","isAddYearsOpenModal","getOpportunityPresentation","canFetch","getDealPreparationValue","_state$data","_state$data$deal_prep","dealType","_state$data2","_state$data2$deal_pre","getFinancialsData","_state$data3","getCustomerKpisData","_state$data4","getFundingOwnershipData","_state$data5","getTechnologyData","_state$data6","getCurrentEditableYear","editableYear","getAllFinancialYears","_financial$revenue","_financial$annual_rec","_financial$ebitda","_financial$gm","_financial$revenue2","_financial$annual_rec2","_financial$ebitda2","_financial$gm2","_financial$revenue3","_financial$annual_rec3","_financial$ebitda3","_financial$gm3","_financial$revenue4","_financial$annual_rec4","_financial$ebitda4","_financial$gm4","_financial$revenue5","_financial$annual_rec5","_financial$ebitda5","_financial$gm5","addToUniqueYears","currentYear","getCurrentFinancialYearInfo","financialYears","currentEditableYear","_state$revenue","_state$revenue$find","_state$ebitda","_state$ebitda$find","_state$gm","_state$gm$find","_state$annual_recurri","_state$annual_recurri2","_financialYears$find","initialData","arr","currentRevenueValue","currentEbitdaValue","currentGmValue","currentArrValue","currentEstimatedYear","financialYear","getData","_financial$revenue6","_financial$revenue_gr","_financial$ebitda6","_financial$ebitda_mar","_financial$annual_rec6","_financial$annual_rec7","_financial$gm6","source_info","revenue_growth","_objectSpread4","ebitda_margin","_objectSpread6","annual_recurring_revenue_growth","_objectSpread8","fetchOpportunityPresentationSaga","updateOpportunityPresentationSaga","addFinancialYearSaga","editFinancialYearSaga","deleteFinancialYearSaga","opportunityPresentationSaga","presentation","sortedRevenues","sortedEBITDA","orderBy","_funding","_res$data12","_res$data13","_res$data24","_res$data25","_res$data$funding","_res$data$funding$cap","_res$data2$funding","_res$data2$funding$ca","_res$data3$funding","_res$data4","_res$data4$funding","_res$data4$funding$ca","_res$data5","_res$data5$funding","_funding2","_res$data6","_res$data6$funding","_res$data7","_res$data7$funding","_res$data8","_res$data8$funding","_res$data8$funding$ca","_res$data9","_res$data9$funding","_funding3","_res$data10","_res$data10$funding","_res$data11","_res$data11$funding","_res$data14","_res$data15","_res$data15$last_reve","_res$data16","_res$data16$last_reve","_presentation$revenue","_presentation$revenue2","_presentation$revenue3","_presentation$revenue4","updatedSortedRevenues","yearKey","_res$data18","_res$data18$last_reve","_res$data19","_res$data19$last_reve","_res$data20","_res$data20$last_reve","_res$data21","_res$data22","_res$data23","_res$data23$last_reve","_res$data26","_res$data27","_res$data27$last_ebit","_res$data28","_res$data28$last_ebit","_presentation$ebitda","_presentation$ebitda2","_presentation$ebitda3","_presentation$ebitda4","updatedSortedEBITDA","_yearKey","_res$data30","_res$data30$last_ebit","_res$data31","_res$data31$last_ebit","_res$data32","_res$data32$last_ebit","_res$data33","_res$data34","_res$data35","_res$data35$last_ebit","addOpportunityPresentation","_res$data$funding2","last_revenue","_res$data17","_res$data17$last_reve","last_ebitda","_res$data29","_res$data29$last_ebit","auditSelectors","auditActions","addYearToOpportunityPresentation","deleteYearToOpportunityPresentation","fetchOpportunityReducer","setAddYearsOpenModalReducer","editAddYearsOpenModalReducer","fetchOpportunitySuccessReducer","addFinancialYearReducer","financials","revenue_by_country","financial_notes","equity_check","cap_table","customers_number","acv","nps","clt","gross_retention","net_retention","customer_churn","customer_concentration","cac","ltv_cac","technology_notes","other_notes","updateFieldsSuccessReducer","_last_round$amount","editFieldActions","GRID_VIEW_KEYS","GRID_FETCHED_COUNT_KEYS","GRID_KEYS_FILTER_MODALS","HISTOGRAM_KEYS","LONGCARD_PAGINATION_INITIAL_STATE","VIEW_INITIAL_STATE","GRID_MODALS_INITIAL_STATE","isModalOpen","VIEW_TRANSITION_INITIAL_STATE","isViewTransition","HISTOGRAM_INITIAL_STATE","allFilters","lastChangedFilter","changedFilters","edit","defaultHistograms","enabled","addDealTeamMember","addDealTeamMemberSuccess","addDealTeamMemberFail","addSeniorDealTeamLead","addSeniorDealTeamLeadSuccess","addSeniorDealTeamLeadFail","addDateFields","addDateFieldsSuccess","fetchProfileReducer","fetchProfileSuccessReducer","_defaultSelectedDescr","selectedDescription","setSelectedDescriptionReducer","fetchProfileFailReducer","addCompanyInBusinessEvaluationSuccessReducer","IlScoreGrowth","updateCompanyOptxScoreSuccessReducer","addDealTeamSuccessReducer","deal_team","addSeniorDealTeamLeadSuccessReducer","seniorDealTeamLeadList","senior_deal_team_lead","addCompanyEditFieldsSuccessReducer","useParentCompany","owner_img","company_owner_img","payloadValue","opsMembersName","members","ops_team","dealTeamMembersName","MONTH_DATE_YEAR_FORMAT_FIELDS","DEFAULT_SENIOR_ADVISOR_VALUE","seniorDealTeamList","use_parent_company","USER_VALUES_FIELDS","_lastRoundData","_lastRoundData2","_lastRoundData3","_lastRoundData4","_lastRoundData5","_lastRoundData6","_lastRoundData7","_draftState$data$spec","tag_id","removedTagName","companyTags","tagNameIndex","updateCompanyDatePresentedSuccessReducer","financialListUpdated","ebitda_source_db","last_rev_source_db","editUserContactSuccessReducer","contactDetails","primaryContact","is_edited","additional_phones","phones","full_name","addContactSuccessReducer","companyContacts","newContact","mappedContacts","has_contacts","addFavoriteSuccessReducer","is_in_fav_list","deleteFavoriteSuccessReducer","loadingCompletedReducer","resetCompanyProfileReducer","addDateFieldsSuccessReducer","addCompanyActiveSuccessReducer","addCompanyFundSuccessReducer","sendOptxScoreRationaleSuccessReducer","addCompanyReviewSuccessReducer","reviewed","reviewedBy","reviewedDate","company_reviewed_by","company_reviewed_date","updateOpportunityPresentationSuccessReducer","_payload$deal_prepara","updatedProdCat","prodCat","loadingStartedReducer","_draftState$data2","stateDescriptions","AI","aiRelationshipSummarySuccessReducer","highlights","is_ai_highlights_approved","inBusinessActions","editFieldsActions","UPDATE_COMPANY_OPTX_SCORE","seniorDealTeamLeadActions","DealTeamActions","datePresentedActions","updateCompanyDatePresentedSuccess","primaryContactsActions","editPrimaryContactSuccess","bulkSalesloftActions","addContactSuccess","favoritesActions","addFavoriteSuccess","favoriteListsPopupActions","activeActions","dateFieldsActions","addFundSuccess","companyReviewActions","addCompanyReviewSuccess","fetchCompanyProfileSaga","backToSearchResultsSaga","regenerateAiDescriptionSaga","opinionAiDescriptionSaga","viewSimilarCompaniesOnGridSaga","aiRelationshipSummarySaga","companyProfileSaga","getProfile","profileState","longCardState","fetchPayload","longCardSelectors","fetchRegenerateAiDescription","_queryString$parse2","opinion","fetchOpinionAiDescription","profileInfo","listOfCompetitorsIds","gridFilterSelectors","competitors","competitor","updatedRes","fetchAiRelationshipSummary","addonManagementQuickFilters","shouldFetchCompanyFilters","loadedUserInformation","getDefaultColumns","getDefaultColumnOrder","getDefaultPinnedColumns","getFilterData","getAlertSettings","getFilterLocations","shortName","getPreselectedFilters","getSecondaryQuickFiltersMap","is_quick_filter","filterSearchOrigin","getFilterOptions","filtersOptions","searchOriginItem","getSecondaryQuickFiltersMapAddonManagement","filterOptions","getFinancialFilterOptions","filterName","filterData","getFilterSourceData","ebitdaOptions","range_values","getTouches","scheduleTouches","_getFilterOptions","_getFilterOptions2","_getFilterOptions3","addTouchCompanyCallback","initCompanyTouchesDialog","toggleCompanyTouchesDialog","getPsgParticipants","getPsgParticipantsSuccess","getPsgParticipantsFail","getTouchesFilters","getTouchesFiltersSuccess","getTouchesFiltersFail","getTouchCompanyContacts","getTouchCompanyContactsSuccess","getTouchCompanyContactsFail","addTouchToCompany","addTouchToCompanyErrorValidation","addTouchToCompanyFail","changeModalTitle","changeSaveBtnStatus","changeSaveBtnStatusByAdditionalFields","editTouch","editTouchFail","getTouchFinancialFilters","getTouchFinancialFiltersSuccess","getTouchFinancialFiltersFail","updateTouchCompanyInfoFail","clearAdditionalFieldsError","setAdditionalFieldsError","errorReasonValue","changeAdditionalFieldsErrorText","getTouchState","modals","companyTouches","isOpen","psgParticipants","getTouchCompany","getTouchFilters","mappedData","touches_types","getTouchFinancials","getModalTitle","modalTitle","getDisableSaveBtnFor","disableSaveBtnFor","getDisableSaveBtnByAdditionalFields","disableSaveBtnByAdditionalFields","getAdditionalFieldsError","additionalFieldsError","getTouchCompanyRank","getTouchCompanyStage","getTouchCompanyStageRationale","getTouchCompanyOwner","hasCompanyCard","hasFinancialsLoaded","getInitialFinancialState","initialFinancialState","getNoErrorsOnSubmitState","validationErrors","noTouchErrors","noEditFieldErrors","noFinancialErrors","getHasAllFormDataLoaded","companyTouchesInfo","initCompanyTouchesDialogReducer","toggleCompanyTouchesDialogReducer","_modifiedTouch$psgPar","modifiedTouch","touchUser","psgParticipant","optx_id","getTouchCompanyContactsSuccessReducer","getTouchesFiltersSuccessReducer","getPsgParticipantsSuccessReducer","has_psg_email","is_et_user","getTouchesFiltersSuccessFail","newContacts","addTouchToCompanyReducer","error_initial_text","error_text","error_value","error_field","changeModalTitleReducer","changeSaveBtnStatusReducer","changeSaveBtnStatusByAdditionalFieldsReducer","getTouchFinancialFiltersSuccessReducer","formatInitialValues","clearAdditionalFieldsErrorReducer","setAdditionalFieldsErrorReducer","normalizedError","errorFieldType","changeAdditionalFieldsErrorTextReducer","_errorValue","errorValue","logo_url","is_in_et","contactAction","initCompanyTouchesDialogSaga","toggleCompanyTouchesSaga","addTouchToCompanySaga","getPsgParticipantsSaga","getTouchesFiltersSaga","getTouchCompanyContactsSaga","editTouchSaga","getTouchFinancialFiltersSaga","addTouchToCompanySuccessSaga","addTouchToCompanyFailSaga","touchSaga","touchSelectors","_action$payload$compa","_action$payload$compa2","touchForm","additionalCompanyInfo","validAction","resSchedule","touchSchedule","errorMessageSchedule","initiator","currentType","filtersPayload","selectedCompanyCard","financialTouch","financialYearsChangeLog","initialFinancialData","financialData","_initialFinancialData","_financialData$fundin","_financialData$fundin2","normalizedFinancialData","resFinancialInfo","finacialResponse","financialErrorMessage","errorMessageCatch","touchInfo","touchId","initiatorId","addTouches","scheduleFollow","touchDate","scheduleTouchDate","scheduleType","typeId","scheduleTypeId","subject","scheduleSubject","textarea","touchesSelectors","getCurrentInitiator","getTouchTabFilter","currentInitiator","touchesActions","fetchTouchesFilters","fetchTouches","relationshipManagementActions","fetchRelationshipManagement","cardSelectors","TOUCHES_PER_PAGE","editAllInfoSelectors","getFinancialYearsChangeLog","formatFinalValues","updateCompanyInfo","getPsgContacts","Touches","getPrimaryContacts","_errorMessage6","getCompanyInfo","CHANGE_LONG_CARD_PAGINATION","CHANGE_LONG_CARD_PAGINATION_SUCCESS","paginationLongCard","changeLongCardPaginationSaga","changeLongCardPaginationSuccessReducer","created_at","updated_at","selectUserInformation","checkRole","getHasAccessToPipelineReport","getHasAccessToSourcingOutreachSummary","getHasAccessToChecklistResearchInsightsReport","getHasAccessToReviewCompany","getHasAccessToTouches","getIsPartnerOnly","getResultsPerPage","_state$data$settings","_state$data$settings2","getContactResultsPerPage","_state$data$settings3","getContactResultsPageNumber","_state$data$settings4","getMyCompaniesResultsPerPage","_state$data$settings5","getDefaultViewId","_state$data$settings6","getSourcingOutReachPerPage","_state$data$settings7","_state$data$settings8","getSourcingOutReachResultsPageNumber","_state$data$settings9","_state$data$settings10","_state$data$settings11","_state$data$settings12","getCombinedSearchId","_state$data$settings13","_state$data2$settings","_state$data3$settings","_state$data4$settings","getIdFromFilters","getUserName","login_name","getFirstName","getLastName","getEmail","getPicture","defaultAvatarImage","getAnalyticsId","_state$data$settings14","ga","getUserId","getUserEtId","et_user_id","getRegionOptions","shouldFetchRegionOptions","getRegionSettingsInitialValues","getUserRegion","user_region","getUserRegionSettings","_state$data7","showQuickFilters","_state$data$settings15","show_quick_filters","showMyCompaniesCards","_state$data$settings16","filtersRefresh","_state$data$settings17","filters_refresh","myCompaniesFiltersRefresh","_state$data$settings18","my_companies_filters_refresh","menuCollapsed","_state$data$settings19","menu_collapsed","_state$data8","_state$data9","_state$data9$settings","showUserListQuickFilters","_state$data$settings20","user_list_show_quick_filters","getUserListResultsPerPage","_state$data$settings21","_state$data$settings22","getSourceScrubListResultsPageNumber","_state$data$settings23","source_scrub_list_page_number","_state$data$settings24","getSavedContactSearchesResultsPageNumber","_state$data$settings25","saved_contact_serches_page_number","getUserListSearchesResultsPageNumber","_state$data$settings26","getETCompaniesListPageNumber","_state$data$settings27","new_et_companies_page_number","getAddonPageNumber","_state$data$settings28","addon_results_page_number","getAddonPerPage","_state$data$settings29","_state$data$settings30","column_widths_addon_mgmt","_state$data$settings31","column_widths_key_check_list","_state$data$settings32","column_widths_all_contacts","userListfiltersRefresh","_state$data$settings33","user_list_filters_refresh","_state$data$settings34","columnWidthsLists","_state$data$settings35","columnWidthsMyCompanies","_state$data$settings36","getDefaultRecommendedOptxNotifications","_state$data$settings37","_state$data$settings38","_state$data$settings39","_state$data10","getProfileInformation","user_role","user_title","permissionGroups","permission_groups","getSourcingOutReachDefaultAnalyst","_state$data11","_state$data12","_state$data13","getPipelineReportQuery","_state$data14","pipeline_report","mapToSelectOption","getOptionLabel","_options$find$value","extraYear","listOfFinancialYears","isEstimatedYear","isFinancialTable","maxYear","minYear","years","_loop","listOfYears","isExtraYearDataDisabled","extraYearData","selectCompanyEditFields","updateVerifiedSoftwareSaga","updateEditFields","mapCompanyInfoData","canBeDuplicatedLoader","isFromTouch","updatingTrendingLinesFields","financialKeys","_option","isLinkedin","_company","_company2","_company3","_company4","_company5","_company6","_value2","_res$data$last_revenu","_res$data$last_revenu2","_value3","_res$data$last_ebitda","_res$data$last_ebitda2","_res$data$show_on_his","_res$data$last_rev_gr","_customValue","updateFieldPayload","companyAddon","_customValue2","_res$data36","_res$data37","_res$data38","_res$data39","_res$data$last_rev_gr2","_res$data40","secondValue","_res$data41","_res$data42","_res$data43","_res$data44","_res$data45","_res$data46","_res$data47","_res$data48","_res$data49","_res$data50","_res$data51","_secondValue","_res$data52","_res$data53","_res$data54","tabNumber","getCompanyById","customData","deal_team_leader","COMPANY_VALUES_FIELDS","linkedin_url","entityType","checklist_reviewed_by","checklist_reviewed_date","psg_date","addonManagementSelectors","getCurrentCompanyAddon","mapCompanyPropName","show_on_history","modalActions","takeEvery","updatedEditFieldsReducer","updatedEditFieldsSuccessFailReducer","addMatcher","isAnyOf","RANGE_FILTER_UNKNOWN_VALUE","RANGE_FILTER_UNKNOWN_ONLY_VALUE","RANGE_FILTER_PSG_VALUE","RANGE_FILTER_PSG_ONLY_VALUE","RANGE_FILTER_INCLUDE_BELOW_VALUE","DEFAULT_SORTING_USER_SETTINGS","FILTER_ORIGIN_VALUES","addonManagement","FILTERS_WITH_CHECKBOX_AS_RADIO","FILTER_CARDS","FILTER_WITH_LABEL_ONLY","SAVED_SEARCH_FILTER_WITH_LABEL_ONLY","mapSortableColumns","mapPinnedColumns","yearType","columnData","sortableColumns","sorter","firstOrderableColumnId","restoreColumns","columnToRemove","fetchAlertsInbox","fetchAlertsHistory","fetchAlertsSuccess","fetchAlertsFail","updateTouches","fetchTouchesSuccess","fetchTouchesFail","loadMoreAlerts","sortAlerts","sortUpcomingPastDueTouches","dismissAlertSuccess","dismissAllAlertSuccess","deleteUpcomingTouch","deleteUpcomingTouchSuccess","deleteUpcomingTouchFail","deletePastDueTouch","deletePastDueTouchSuccess","deletePastDueTouchFail","deleteAllPastUpcomingTouches","deleteAllPastUpcomingTouchesSuccess","deleteAllPastUpcomingTouchesFail","loadMorePastDueTouches","FETCH_ALERTS_INBOX","FETCH_ALERTS_HISTORY","FETCH_ALERTS_SUCCESS","FETCH_ALERTS_FAIL","FETCH_TOUCHES","UPDATE_TOUCHES","FETCH_TOUCHES_SUCCESS","FETCH_TOUCHES_FAIL","LOAD_MORE_ALERTS","SORT_ALERTS","SORT_UPCOMING_PAST_DUE_TOUCHES","UPDATE_ALERTS","DISMISS_ALERT","DISMISS_ALERT_SUCCESS","DISMISS_ALL_ALERTS","DISMISS_ALL_ALERTS_SUCCESS","DELETE_UPCOMING_TOUCH","DELETE_UPCOMING_TOUCH_SUCCESS","DELETE_UPCOMING_TOUCH_FAIL","DELETE_PAST_DUE_TOUCH","DELETE_PAST_DUE_TOUCH_SUCCESS","DELETE_PAST_DUE_TOUCH_FAIL","DELETE_ALL_PAST_UPCOMING_TOUCHES","DELETE_ALL_PAST_UPCOMING_TOUCHES_SUCCESS","DELETE_ALL_PAST_UPCOMING_TOUCHES_FAIL","LOAD_MORE_PAST_DUE_TOUCHES","paginationData","companyGridPagination","companyLongCardPagination","myCompaniesGridPagination","myCompaniesLongCardPagination","listGridPagination","listLongCardPagination","outreachGridPagination","outreachLongCardPagination","addonGridPagination","addonLongCardPagination","DEFAULT_PAGINATION","isReturnUserSettings","isSorting","userPageSize","results_per_page","results_page_number","results_sorting","outreachPagination","GET_COMPANY_FUNDING_ROUNDS","getCompanyFundingRoundsFail","selectCompanyFundingRounds","companyFundingRounds","getTotalRaised","number_of_rounds","getTotalInvestors","total_investors","getLastRound","investment_history","getInvestmentHistory","getFundingRoundsGraph","parseBarData","funding_rounds_graph","funding_types","getFundingGraphMessage","graph_message","getCompanyFundingRoundsSaga","companyFundingRoundsSaga","TOGGLE_COMPANY_EDIT_ALL_FORM_DIALOG","GET_EDIT_ALL_INFO","GET_EDIT_ALL_INFO_SUCCESS","GET_EDIT_ALL_INFO_FAIL","UPDATE_COMPANY_EDIT_ALL_INFO","UPDATE_COMPANY_EDIT_ALL_INFO_SUCCESS","UPDATE_ALL_COMPANY_EDIT_ALL_INFO_SUCCESS","UPDATE_COMPANY_EDIT_ALL_INFO_FAIL","CHANGE_SAVE_BTN_STATUS","SET_EDIT_COMPANY_ACTIVE_TAB_NAME","UPDATE_FAVORITE_COMPANY_EDIT_INFO","ADD_YEAR_CHANGE_LOG","toggleCompanyEditAllFormDialog","setEditCompanyActiveTabName","updateFavoriteCompanyEditInfo","getEditAllInfo","getEditAllInfoSuccess","getEditAllInfoFail","updateCompanyEditAllInfo","updateCompanyEditAllInfoFail","addYearChangeLog","toggleCompanyEditAllFormDialogReducer","currentFavoriteCompanyEditableName","isFinancialsLoaded","COMPANY_ALL_INFO_KEYS","getEditAllInfoSuccessReducer","allFields","all_fields","propInfo","prop_info","eqtView","eqt_view","gridOrder","grid_order","idInfo","id_info","favorites","updateCompanyEditAllInfoSuccessReducer","EDIT_ALL_LOCALSTORAGE_KEY_PREFIX","updateCompanyEditAllInfoReducer","setEditCompanyActiveTabNameReducer","activeTabName","updateFavoriteCompanyEditInfoReducer","lastRevenueUpdateAmountYear","addYearChangeLogReducer","toggleCompanyEditAllFormSaga","updateEditAllFormSaga","getEditAllInfoSaga","updateCompanyEditAllInfoSuccessSaga","editAllSaga","financialInfo","_financialData$financ","_financialData$financ2","_financialData$financ3","_financialData$financ4","updatedFinancialData","fundingDataAcquiringCompany","fundingData","resFundingDataAcquiringCompany","resFundingData","fundingHasDiff","acquiringCompanyHasDiff","historyPagination","editAllFields","getInitialEditAllState","getEditAllTabs","updateEditAllCompanyInfo","auditFieldsSelectors","auditFieldsActions","getEditAllCompanyInfo","getCompanyUrl","actionEmployeeGrowthActions","REACT_APP_API_ROOT","CancelToken","axios","baseUrl","baseURL","conf","request","createURL","cancelToken","CANCEL","rationaleCallBack","getModalState","researchRationale","getRationale","getInitialFields","initialFieldsValues","getInitialRationale","initialRationaleValues","getActiveRationaleReasonType","activeScoreRationaleReasonType","getNewActiveRationaleReasonType","activeNewScoreRationaleReasonType","toggleAddResearchRationaleReducer","toggleAddResearchRationaleSuccessReducer","scoreRationaleReason","newScoreRationaleReason","scoreRationaleReasonType","newScoreRationaleReasonType","scoreLowerRationaleReason","scoreUpperRationaleReason","newScoreLowerRationaleReason","newScoreUpperRationaleReason","scoreVerified","newScoreVerified","rangeValues","getRangeValues","scoreValuesRelation","getValuesRalation","is_software_rationales","psg_fit_rationales","optx_score_rationales","optx_score_upper_rationales","optx_score_lower_rationales","optx_score_v3_rationales","optx_score_v3_upper_rationales","optx_score_v3_lower_rationales","changeFieldsReducer","changeRationaleReducer","revertFieldsChangesReducer","toggleAddResearchRationaleSaga","submitResearchRationaleSaga","addResearchRationaleSaga","getSearchCompanyById","checklistGetCompany","companyProfile","initialFields","initialRationale","fieldsPayload","optx_score_rl","optx_score_v3_rl","checklistReviewedBy","checklistReviewedDate","selectHistogramFeatureState","histograms","selectEditHistograms","_state$gridKey","_state$gridKey2","_state$gridKey$edit","_state$gridKey$edit2","isInitialized","histogramRequestFilters","_state$gridKey3","isEnabled","_state$gridKey4","histogramsAreEmpty","_state$gridKey5","histogram","fetchHistograms","TOGGLE_REFRESH","FILTER_CHANGED","EDIT","APPLY_EDIT","RESET_TO_DEFAULT","INIT","histogramList","fetchHistogramFiltersSuccess","fetchHistogramFiltersFail","toggleRefresh","filterValues","filterChanged","isEditing","applyEdit","fetchHistogramFiltersReducer","fetchHistogramFiltersSuccessReducer","companyCount","newData","filtersWithHistogram","toggleRefreshReducer","resetToDefaultReducer","search_count","filterChangedReducer","editReducer","_draftState$gridKey","applyEditReducer","resetFilterSearchActionsReducer","fetchHistogramFiltersFailReducer","companyFilterActions","clearSearchSearchActions","resetSearchSearchActions","resetFilterSearchActions","HistogramRefreshToggler","_Switch","HistogramTooltip","min_value","max_value","hidden","COLOR_DISABLED","Histogram","initial","final","entry","newEntry","x","buildHistogramData","ResponsiveContainer","BarChart","right","bottom","XAxis","hide","dataKey","YAxis","allowDataOverflow","domain","scale","Tooltip","Bar","radius","minPointSize","Cell","fetchHistogramFiltersSaga","getRouteMatcher","initializeHistogramsSaga","locationChangeSaga","filterChangeSaga","toggleRefreshSaga","applyEditSaga","companyHistogramsSaga","currentRoute","defaultHistogramKeys","filterQueryPayload","filterQueryString","isDefaultHistogram","companyProfileId","_filterQueryPayload","_filterQueryString","_isDefaultHistogram","_filterQueryPayload2","_filterQueryString2","_isDefaultHistogram2","_filterQueryPayload3","_filterQueryString3","_isDefaultHistogram3","getHistograms","company_count","searchSelectorsAddon","filterOrigin","filtersCardsSelectors","matcher","routerSagas","matchesLocation","AppRoutes","_allFiltersWithHistograms","histogramsEnabled","histogramsLoaded","normalizeFilter","settingKey","filteredFilters","LOCATION_CHANGE","preselectedNames","filterPreselectedNames","includePreselected","defaultDateIndex","preselectedFilters","_filter$data","dataCheck","getRangeInputOptions","getCheckboxOptions","getCheckboxCustomOption","getMultiTextOptions","getLogicCheckboxOptions","getMultiRangeNumberOptions","getMultiRangeCustomOption","getDateRangeOptions","firstOption","getDateRangesOptions","getRadioOption","getMultiSelectOptions","getSingleSelectHelperOptions","section","placeholders","not_in","custom","format_name","hasHistogram","IS_ANALYST","localStorage","getItem","setItem","removeIsAnalyst","removeItem","IS_ADMIN","removeIsAdmin","IS_PARTNER","removeIsPartner","errorCodeKey","errorDetailsKey","getError","saveError","clearErrors","getErrorCode","errorCode","setErrorCode","fetchScheduledTouchesDashboard","resetScheduledTouchesFilter","fetchScheduledTouchesDashboardSuccess","fetchScheduledTouchesDashboardFail","fetchScheduledTouchesNextPage","fetchScheduledTouchesNextPageSuccess","fetchScheduledTouchesNextPageFail","fetchScheduledTouches","fetchScheduledTouchesSuccess","fetchScheduledTouchesFail","fetchScheduledTouchesCount","fetchScheduledTouchesCountSuccess","fetchScheduledTouchesCountFail","changeScheduledTouchesSortBy","changeScheduledTouchesTouchType","changeScheduledTouchesStageType","changeScheduledTouchesRankType","changeSelectedDate","changeSelectedPeriod","changeSelectedTab","getCompanyAddress","street","getPreviousNextCompanyIds","stateData","revenueValue","last_rev_update_amount_high","newRevenueList","specialty","from_user","firstTag","secondTag","editDateFieldData","isLastRaisedAmountForAddons","_data$lastRoundData","financialYearKey","financialValue","extraPayload","seniorsDealTeamList","dealTeamValues","selectSearchFeatureState","previousNextCompanyIds","getFirstCompanyFromSearch","isError","filterIsLoading","makeSelectLoadingHomePage","favoriteSelectors","isLoadingFavoriteListsSelectors","loadingSeach","loadingFilters","loadingFavorite","loadingListsFavorites","getTotalCount","getTotalCountSelector","getSearchKeySelector","fetchContactSavedSearches","fetchContactSavedSearchesSuccess","fetchContactSavedSearchesFail","saveContactSearch","saveContactSearchSuccess","saveContactSearchFail","deleteContactSearch","deleteContactSearchSuccess","deleteContactSearchFail","renameContactSearch","renameContactSearchSuccess","renameContactSearchFail","resetToSearch","prepareSavedSearch","savedContactsSearchPagination","fetchCompanyProfile","fetchCompanyProfileFail","backToSearchResults","resetCompanyProfile","setSelectedDescription","viewSimilarCompaniesOnGrid","regenerateAiDescription","regenerateAiDescriptionFail","opinionAiDescription","opinionAiDescriptionSuccess","opinionAiDescriptionFail","aiRelationshipSummary","aiRelationshipSummarySuccess","aiRelationshipSummaryFail","reduceValues","nextValue","MultiValueContainer","selectProps","allOptions","includesGroups","hasGroups","valuesDictionary","selectedGroups","groupOptions","group","groupValues","someOptionsDisabled","ellipsis","MultiSelectInline","MenuListMemoized","SelectAllMenuList","ReactSelect","MultiValueLabel","MultiValueRemove","GroupHeading","SelectableGroupHeading","backspaceRemovesValue","valuePrefix","PrefixWrapper","PrefixIconWrapper","Prefix","Control","SearchOutlined","queue","_state$temporaryData","_state$temporaryData$","step2","editedCompanies","fetchFormDataSuccessReducer","initializeEquityTouchBulkSuccessReducer","initializeIndividualEditingReducer","formValues","customFormValues","fetchCompanySuccessReducer","add_all_contacts","_draftState$temporary","selectedContactsLimit","CONTACT_SELECT_LIMIT","addBulkContactReducer","updateBulkContactSuccessReducer","_draftState$companies","_draftState$companies2","_draftState$companies3","primaryContactIndex","contactItem","selectedContacts","selectedPrimaryContactIndex","salesloftContacts","salesloft_contacts","tempSalesloftContacts","selectedContact","selectedContactsIds","_tempSalesloftContact","getSalesloftEmails","temporaryState","arrayOfSalesLoftContacts","newSalesloftContacts","slContact","addToEquityTouchBulkReducer","addToEquityTouchBulkFailReducer","updateBulkCadenceCompanyReducer","companyKeysFiltered","updateBulkCompanyReducer","resolveSalesloftSuccessReducer","resultIndex","fetchContactsSuccessReducer","salesloftSelectContactsBulkReducer","_draftState$companies4","_draftState$companies5","selectedContactData","_draftState$companies6","_draftState$companies7","removeContactIndex","fetchCompaniesContactsSuccessReducer","primary_email","_draftState$temporary2","_draftState$temporary3","companyDataContacts","tempDataContactsContacts","tempDataSLContacts","company_website","updatePrimaryContactsReducer","isValidData","updatedContacts","companyByIdData","_draftState$temporary4","tempData","selectCadenceIndividuallyReducer","_persistedFilter$form","_persistedFilter$firs","_persistedFilter$comp2","firstStepData","companiesData","updateTemporaryDataReducer","salesloftBulkActions","fetchCompaniesContactsSuccess","updatePrimaryContacts","initializeEquityTouchBulkSaga","initializeIndividualEditingSaga","addToEquityTouchBulkSaga","fetchCompanySaga","updateBulkContactSaga","updateBulkCompanySaga","resolveSalesloftSaga","fetchContactsSaga","autoSaveSaga","equityTouchBulkSaga","isFirstStep","defaultErrorMessage","urlParams","_sessionSettings$et_f","sessionSettingsFormData","initialFormData","grid","fetchEquityTouchFormData","salesLoftActions","fetchCompaniesContacts","mapEquityTouchProps","replaceAll","editableFieldsOptions","idBatch","companyBatch","prevResultsIds","remainingIds","companyEditSelectors","_companiesById$id$con","_companiesById$id","_companiesById$id$sal","mapEquityTouchForm","emails","updatedContact","addEquityTouchBulk","et_status","et_message","et_resolve","et_url","salesloft_status","sl_message","SALESLOFT_ERROR_MESSAGE_SPECIAL_CHARACTERS","sl_resolve","editableFields","_results$find","sl_url","profileRes","formRes","editPrimaryContact","shouldSubmit","_result$salesloftCont","all","cadences","failedContactIds","_company$salesloft_co","requestData","customContact","customResponse","salesLoftSelector","getCadences","postSalesloftData","handleSalesloftError","DEFAULT_LEAD_SOURCE_VALUE","useUserRole","isAnalystStorage","isAdminStorage","isAnalystSelector","isAdminSelector","advancedSearchPathname","fetchCompanyTouches","fetchCompanyTouchesSaga","companyTouchesSaga","tabs","getTouchTabs","getTouchTypeForRequest","parseTouchHistoryResponse","fetchTouchesFiltersSuccess","fetchTouchesFiltersFail","fetchCompanyTouchesFiltersSaga","touchesFiltersSaga","fetchTouchesSuccessReducer","searchPaylod","currentPage","formatTouchHistoryNotes","touchesLeft","touches_left","touchHistory","touch_history","last_six_weeks","over_six_weeks","over_six_months","uploadFilesSuccessReducer","touchtype","touchid","number_of_touches","uploadFileActions","uploadFilesSuccess","ALL_OPTION","fetchTouchesFiltersSuccessReducer","initiators","initiatorname","initiatorid","mapInitiators","available_initiators","currentInititator","fetchTouchesReducer","touchTabFilter","DEFAULT_TOUCHES_COUNT","shouldInitialFetchSelector","selectFiltersState","touchDateValue","selectSearchState","companiesTouches","localSearch","loaderSelectors","SELECTOR","totalTouches","numberOfTouches","hasMore","localFilters","getInitiatorOptions","getSummaryKPIs","firstTouchDate","first_touch_date","getAllTypesTotalTouches","DangerousInnerHTML","innerHTML","dangerouslySetInnerHTML","__html","getCountLabel","renderCount","TimelineIntervalLabel","renderTitle","Label","PageLoader","FixedLoader","emailRegex","replaceEmailTouchNotes","match","ExpandIcon","isActive","rotate","UpOutlined","getAtendeesLabel","atendees","names","Attendees","attendees","TouchHeader","gutter","flex","BellOutlined","TouchIcon","Title","level","_Menu","TouchMenu","handleVisibilityChange","disableMenuItemByTouch","handleEditClick","setCompleted","classList","updatedTouch","touchIsComplete","selectable","Item","et_company_id","attendees_email","recipients","startdatetime","emailSubject","sendEmail","TimelineItem","_Timeline","TimelineTouchItem","_touch$touchid","touchesCount","timelineInterval","colorInterval","setActiveKey","activeKey","hasTouchAccess","isExtension","setDropdownVisibility","setScheduled","_Collapse","expandIconPosition","accordion","expandIcon","Panel","header","_Dropdown","overlay","handleMenuVisibleChange","EllipsisOutlined","TouchesTimeline","_touches$touch_histor","lastSixWeeks","overSixMonths","overSixWeeks","_touches$number_of_to","lastSixWeeksCount","overSixMonthsCount","overSixWeeksCount","scheduledCount","futureTouchClassName","classnames","TabPane","_Tabs","valueToTrackMapping","All","Meeting","Other","TouchesTabFilters","_ref$isExtension","touchTypes","activeTabKey","trackAction","highlightStyles","OptionFC","highlight","Checkbox","isSelected","SELECT_ALL","isBold","isET","canBeOpened","$Title","MultiSelectTags","allowSelectAll","_ref$showKey","showKey","_ref$hasNoneValue","hasNoneValue","selectedOptionsListTitle","tagsRef","filterLabel","showTags","getColor","checkOption","onClose","removedOption","_tagsRef$current","_tagsRef$current$pare","_tagsRef$current$pare2","_tagsRef$current$pare3","_querySelector","removeOption","PreviousMultiSelectedTags","previousSelectedOptions","previousSelectedOptionsListTitle","shouldDisplayPreviousSelectedOptions","DownOutlined","IconWrapper","showSearchIcon","innerProps","CloseOutlined","StyledLoadingOutlined","LoadingOutlined","StyledMenuList","selectListsPopupSate","favoriteLists","errorSelector","userInfoLoaded","getListsNormalized","getAllWatchlists","getAllListAccessRightLists","hasEditPermission","getSortSelect","getWatchlists","watchlist","getWatchlistsById","initialFetchFavoriteListsPopupSaga","fetchFavoriteListsPopupSaga","sortFavoriteListsPopupSaga","createFavoriteListPopupSaga","addCompanyToListPopupSaga","favoriteListsPopupSagas","favorites_list_popup_sorting","initialFetchFavoriteListsPopupSuccessReducer","fetchFavoriteListsPopupSuccessReducer","createListPopupSuccessReducer","addCompanyToListPopupSuccessReducer","themeColor","theme","colorPalleteIndex","colors","getThemeColor","gray2","gray4","gray5","gray6","gray7","gray8","gray9","gray10","blue1","blue7","blue8","green6","red6","toURL","stripUrlSlashes","sliceURLQuery","startsWithHttp","startsWithHttps","endWithSlash","startWithWWW","getParametersFromURL","params","param","URLSearchParams","newUrl","replaceState","stateFieldKey","stateFieldValue","getDateRangeFilter","filterParsed","lowerKey","upperKey","getCheckboxFilter","checkboxFilter","checkboxFilters","savedValues","optionsList","lastOption","getSelectFilter","parsedOptions","formatName","optionByValue","originalOption","formattedFilterParsed","hasPipelineReportFilters","mergedCategories","previousCategory","_filterParsed$company","finalFilter","filterSource","cbFilter","finalOption","defaultRange","_options$0$check","checkIndex","_options$0$check2","_options$0$check3","_options$0$check4","_options$0$check5","_options$0$check6","_options$0$check7","_options$0$check8","_options$0$check9","_options$0$check10","minData","maxData","minList","maxList","lastMinOption","customParsedOption","defaultItem","used_by","helpedFilter","is_il_optx_score","checkboxes","ebitda_numeric","checkbox","parseFilterSorting","parsedSorting","sortField","sortItem","parseFiltersKeys","selectListImportState","getFailedImports","failedImports","getCanceledImports","canceledImports","getSimilarCompanies","failedImportsOnRequest","canceledImportsNumber","getCanceledImportsNumber","getFailedImportsOnRequestNumber","getIsEditing","importFavoriteListSuccessReducer","listImports","updateCanceledImportsReducer","updateImportCompaniesReducer","updateImportCompaniesIdsReducer","removeFailedCompamyReducer","failedCompanieyIndex","removeFailedCompamiesReducer","editCompaniesReducer","importedCompany","companyIndex","setIsLoadingReducer","comparison","editCompanyReducer","editingCompanyIndexReducer","saveListIdReducer","_ref10","showSimilarCompaniesReducer","_ref11","setIsEditingReducer","_ref12","setSimilarCompaniesReducer","_ref13","updateCanceledImportsNumberReducer","_ref14","setFailedBatchesReducer","_ref15","setFailedImportsOnRequestReducer","_draftState$failedImp","removeFailedImportsOnRequestReducer","_ref16","LONG_CARD_VIEW_DEFAULT_LOAD_MORE_SIZE","searchAsyncMultiSelect","fetchAsyncMultiSelectSuccess","fetchAsyncMultiSelectFail","fetchAsyncMultiSelectSaga","AsyncMultiSelectSaga","modifiedData","modifiedDataWithOutSpecialUnicodeAndBlank","_item$company_id","location_info","searchAction","_options$action","dependenciesOptions","setModalVisible","addContact","addPersonBulk","addPersonBulkFail","companiesWithContacts","selectContactIndex","getEmailsFromString","addPersonBulkReducer","setModalVisibleReducer","addNewContactSuccessReducer","primarySalesLoftContactIndex","resolvedContacts","addPersonBulkFailReducer","resolveSalesloftReducer","contactIndex","salesloftContactIndex","fetchCompaniesContactsSaga","addPersonBulkSaga","addNewContactSaga","salesloftBulkSaga","getCompaniesContacts","mappedCompanies","remainingCompanies","company_raw_url","shouldResolve","isEtBulk","addContactToOptx","eqtBulkActions","_result$contacts$filt","handler","listener","contains","addEventListener","removeEventListener","userSessionsSettingsGridsSearchKeys","checklist_insights_companies_filters","SET_SEARCH_KEY","clearAddonSearchKeyReducer","setSearchKeyReducer","rationale_report_query","fetchCompanyAddonManagementSuccess","fetchCompanyAddonManagementFail","togglePortfolioCompanies","removeFilterTag","setSelectedFilters","updateAdditionalFilters","resetAdditionalFilter","getCompanyAddonManagementState","companyAddonManagement","_state$search$data","_state$search$byId$co","searchHasValues","getAdditionalFilter","additionalFilter","getAdditionalValues","additionalFiltersValues","getAdditionalFilters","_state$search","normalizedAdditionalFilters","getAdditionalFiltersData","additionalFiltersData","getAdditionalFiltersDataLists","getAdditionalFiltersDataListsNames","listIds","getOriginAdditionalFilterRelatedListsIds","getListOfCompaniesIdFromAdditionalFilters","commonIds","getAdditionalFiltersClear","clearAdditionalFilters","filtersSourcesSelectors","additionalValues","additionalFiltersTags","isClearedFilter","_tag$values","preselectedAdditionalFilters","persistedAdditionalFilters","clearSearchReducer","fetchAdditionalFiltersSuccessReducer","sourceData","flatMap","defaultOrigin","parsedFiltersData","preselectedData","updateValueReducer","resetAdditionalFilterReducer","combinedReducer","removeFilterTagSaga","fetchAddonManagementFiltersSaga","setSelectedFiltersSaga","searchCompaniesSaga","removeCompanyFromAddonManagementSaga","bulkRemoveAddonSaga","filterNew","fetchAddonFilters","payloadFilter","searchCompaniesData","filteredDataSize","listName","dataList","listsNames","et_list_id","listOfCompaniesIds","listOfCompaniesIdsWithAddonManuallyAdded","listOfCompaniesIdsFromAdditionalFilters","companyProfileName","addonList","companiesList","_companiesList","getCompanyName","_companiesBatch$find","addonCompaniesList","normalizedAddonCompaniesList","addonBool","companies_list","addon_list","_failedCompany$","isContact","$visible","EditableCell","decimalPointCount","decimalPointIndex","regexValidation","charLimit","validateLinkedinURL","validateUrl","validatePositiveNumbers","finalReturn","StyledDefaultCell","TableCellDefault","TableCellDefaultRender","CompanyCard","activeCard","cardRef","headerHeight","useHeaderHeight","loadCompanyData","useLoadCompanyData","handleHeightOfCompanyOutReachCards","_cardRef$current2","distanceToTop","scrollBy","behavior","hoverable","_cardRef$current","viewTypeActions","openPannel","$active","LongCard","_ref$useTooltip","_ref2$useTooltip","showPopupError","listValues","_listValues$find","_listValues$find$esti","_listValues$find2","initialIsYearEstimated","draftStateData","fieldValues","newValues","financialOptionIndex","SORT_DIRECTION_KEYS_COLUMNS","column_widths_sourcing_outreach_detail","column_widths_bi_weekly_pipeline_report","prevProps","nextProps","selectCompanySuggestedSearchesState","getSavedSearchesSelector","shouldFetchSearches","fetchedFilters","getSearch","_find","getTotal","getSuggestedSearchesTitleList","fetchSuggestedSearchesSaga","suggestedSearchesSaga","loadCompaniesByFilterCompletedReducer","newOpportunitiesLoading","fetchSuggestedSearchesSuccessReducer","_suggestedSearch$sear","uniqueFilters","isSuggestedSearchList","loadCompanyList","loadCompanyListSuccess","filterCSVCompanyErrorList","loadCompanyListDetailsReset","getRationaleDefaultValue","defaultRationaleScore","dashIndex","firstValue","getRange","valuesRalation","tagsOmmitedFilters","filtersByCriteria","pipeline_information","lines","stroke","selectNormalizedFilters","byColumn","selectSources","selectCommonValues","commonValues","selectCriteriaValues","criteriaValues","selectDefaultValues","selectDefaultCriteriaValues","defaultCriteriaValues","selectClearValues","clearValues","getSearchCriteria","filter_criteria","selectValues","valuesByCriteria","getAllValues","allValues","allowAnalystsEditing","getSelectValue","selectInfo","getRadioValue","getSingleDateRangesValue","getSingleDateRangesOptions","isAllTimeDate","getCurrentDateRangeOption","isAllTime","_filterSources$","_filterSources$$data$","_values$analyst_id","pipelineValues","pipelineCriteria","previous_period","finalValues","getDefaultTags","showClearAll","preselectedValue","getSelectedPeriodLabel","getChartLines","currentLabel","line","isCommonFilter","getCommonFiltersQuery","filtersByColumn","queryValues","getValuesByCriteria","reducers","apiValues","defaultClearCriteriaValues","getCriteriaValues","apiCommonValues","getCommonValues","apiCriteriaValues","mergedValues","defaultCommonValues","filterColumns","clearAllFilters","currentCriteria","clearValue","analysts_leaderboard_filters","grouped_values","_Card","LogoColumn","EmployeeColumn","EmployeeChart","ImageWrapper","IsraelFlagImg","img","ScoreTrendingWrapper","CompanyNameWrapper","_templateObject9","CompanyName","_templateObject10","CompanyProfileLink","_templateObject11","CompanyLocation","_templateObject12","CompanyDetailsWrapper","_templateObject13","CompanyDetails","_templateObject14","YearLabel","_templateObject15","YearValue","_templateObject16","WebsiteIcon","_templateObject17","Description","_templateObject18","_templateObject19","Value","_templateObject20","DateValue","_templateObject21","CenteredColumn","_templateObject22","toggleFullScreen","isFullscreen","fullscreen","toggleReducer","cartesianGridProps","horizontal","vertical","tickDefaultProps","xAxisTickDefaultProps","marginRight","yAxisTickDefaultProps","defaultAxisLineProps","strokeWidth","xAxisProps","axisLine","tickLine","tick","tickMargin","yAxisProps","lineProps","legendProps","verticalAlign","wrapperStyle","paddingLeft","iconType","iconSize","fetchFiltersFail","selectContactsFiltersState","contactsFilters","getFilterSources","fetchContactsFiltersSaga","contactsFiltersSaga","Contacts","defaultMessage","errorApi","responseText","errorFieldList","errorField","emailFieldsToString","getContactErrors","filteredContacts","firstName","lastName","fullName","primaryEmail","salesloftEmails","secondary_email","tertiary_email","quarternary_email","getSelectedContacts","selectAnalystsLeaderboard","analystsLeaderboard","getFiltersState","getSearchState","getTouchesAcrossRegionState","touchesAcrossRegion","getEmailStatisticsState","emailStatistics","getSmartTouchScoreState","smartTouchScore","getPipelineInformationState","pipelineInformation","isLoadingFilters","isLoadingSearch","loadingUserInformation","loadingSearch","localFiltersSelectors","getDefaultValues","getFilterValues","getChartInfo","localSearchSelectors","getCards","criteriaOptions","searchInformation","criteriaOption","cardInfo","creiteriaInfo","growth","items","localTouchesAcrossRegionSelectors","getLocations","getTopTouches","topTouches","getEmailsStatistics","emailStatisticsSelectors","selectEmailStatistics","isFetching","getSmartTouchScore","smartTouchScoreSelectors","selectSmartTouchScore","additionalStatistics","getAdditionalStatistics","additionalStatisticsSelectors","selectAdditionalStatistics","getAdditionalStatisticsState","selectPreviousPeriodName","requestSelectors","pipelineInformationTypes","getPipelineInformation","localPipelineInformationSelectors","selectPipelineInfo","selectCount","selectOtherDealStages","selectSelectedPeriodDate","selectPreviousPeriodDate","selectFavoriteListsState","isLoadingPublic","getGridColumns","sortColumns","getPercentage","getTitle","fetchCompanyNotes","fetchCompanyNotesSuccess","fetchCompanyNotesFail","addCompanyNote","addCompanyNoteSuccess","addCompanyNoteFail","deleteCompanyNoteSuccess","deleteCompanyNoteFail","userListState","userList","isShareLoading","share","isFieldLoading","shouldFieldFetch","shouldShareFetch","getShareUserListData","getFieldUserListData","getUserList","psgUsers","fetchUserList","fetchUserListFieldSuccess","fetchUserListFieldFail","fetchPsgUserListFieldSuccess","fetchPsgUserListFieldFail","fetchUserListShareSuccess","fetchUserListShareFail","fetchUserListReducer","fetchUserListFieldSuccessReducer","fetchPsgUserListFieldSuccessReducer","fetchPsgUserListFieldFailReducer","fetchUserListFieldFailReducer","fetchUserListShareFailReducer","fetchUserListShareSuccessReducer","fetchUserListSaga","userListSaga","isShare","customQuery","formatNotesText","formatLastTouch","lastTouch","initialValues","form","financialInput","yearChangeLog","_form$companyId","finalPayload","formField","_item$tag","_form$formField$id","selectedCat","extraDataKey","extraDataValue","customerTypeData","formValue","formatFundingValues","formatFinancialValues","parsedTabs","filterTabs","fundingFields","_last_round","_fundingFields","hasLastRoundValue","hasLastRoundAmountValue","hasLastRoundDateValue","hasLastInvestorsValue","newFields","formatFinancialFieldData","canBePercentage","logFinancialYear","commonCheck","FETCH_ANALYST","FETCH_ANALYST_SUCCESS","FETCH_ANALYST_FAIL","FETCH_COMPANY","FETCH_COMPANY_SUCCESS","FETCH_COMPANY_FAIL","toggleFiltersModal","FETCH_CARD_FAIL","FETCH_PRIMARY_CONTACTS","fetchPrimaryContacts","fetchPrimaryContactsSuccess","fetchPrimaryContactsFail","editPrimaryContactFail","editingPrimaryContact","cancelEditingPrimaryContact","clearPrimaryContacts","primaryContactsState","primaryContacts","getEditedContact","editedContact","getEditContactInitialValues","companyIndividualSelectors","getPhoneNumbers","mapToSelectOptions","getNames","fetchPrimaryContactsSuccessReducer","_action$payload$icons","_action$payload3$icon","_action$payload4$icon","icons","isPrimaryContact","primary","secondary","tertiary","quarternary","shouldUpdatePrimaryContact","editPrimaryContactSuccessReducer","_draftState$data$inde","isEditingPrimaryContactReducer","_action$payload$addit","additionalProps","phone_type_id","cancelEditingPrimaryContactReducer","clearPrimaryContactsReducer","fetchPrimaryContactsSaga","editProfilePrimaryContactSaga","editingPrimaryContactSaga","cancelEditingPrimaryContactSaga","primaryContactsSaga","editContactModalActions","touchActions","getSSListTouchDateTag","touchDateFilters","defaultTouchDateFilters","dateValue","stringifiedValues","getMultiSelectTag","_values31","_values32","_filters$filter$colum","getCheckboxTag","getDateRangeTag","defaultStart","defaultEnd","startValue","endValue","showString","isDateInterval","mapScheduledTouchesTags","selectedPeriod","selectedDateRange","GROUP_COUNT_DISPLAY","tagsValue","_values$","_values$2","FILTER_TAGS_MAX_COUNT","moreCount","displayedValues","_myCompaniesFilterCar","_myCompaniesFilterCar2","_filters$next_touch_d","_myCompaniesFilterCar3","_myCompaniesFilterCar4","_filters$next_touch_d2","_myCompaniesFilterCar5","_myCompaniesFilterCar6","_filters$last_touch_d","_myCompaniesFilterCar7","_myCompaniesFilterCar8","_filters$last_touch_d2","_myCompaniesFilterCar9","_myCompaniesFilterCar10","_myCompaniesFilterCar11","_myCompaniesFilterCar12","_myCompaniesFilterCar13","_myCompaniesFilterCar14","_myCompaniesFilterCar15","_location$pathname","_filters$similarCompa","ommitFilters","defaultIndex","sourcingFilters","predefinedFilters","cardTitles","_watchlists","_watchlists2","_allWatchlists$Number","showValue","lastDot","ranges","sliderPlus","slider_plus","sliderDots","slider_dots","isFormatted","is_formatted","formatter","checkboxTag","_options","zipCode","_defaultOptions","defaultZipCode","logicOptionValues","dateRangeTag","tagIsDefault","isGrouped","groupedOptionsCount","groupedValues","optionIndex","tagValue","displayedOptionsOutsideGroup","valueIsDefault","countOptionsLeft","defaultValueNotInValues","mapMultiSelectTag","default_value","preselectedOption","tagValues","_value26","mapDateRangesTag","date_range_radio","reset_for","analystInfo","sourcingOutReachColumnNames","anlystValues","dateLabel","_columnName","columnValues","customColumnValues","stageTag","myCompaniesTags","mapSortBy","searchQueryString","savedSeachResponse","_parsedFilters$compan","keySearch","hasQueryFilter","hasCompanyQueryFilter","keySearchAsCompanyName","shouldRemoveLastViewedColumn","filteredTags","savedSearchesResponse","searchIndex","viewIndex","saved_contact_searches_filters","createContext","searchkey","RadioButton","ThumbsDownIcon","ScoreContainer","CustomRadio","CustomRadioGroup","ContainerProfileBanner","defaultConfig","sortDirections","isControlled","multipleScore","newCol","sortOrder","mergedConfig","sortDirectionsKeys","columnIndex","columnSort","newColumn","multiple","mapSorting","nextSorting","keywordSearch","onlyTwoStates","mapMultiSortList","newSorting","_item$column","lastClickedItem","_lastClickedItem$colu","newSortingKeys","accumulator","_sortItem$column","newAccumulator","gridSort","FAVORITE_LIST_ID","FAVORITE_LIST_NAME","FAVORITE_LIST_SELECT_OPTIONS","updateCompanyUserValuesSaga","userEnteredValuesSaga","presentantionActions","getFilters","getSourcingFilters","showCustomClearedFilter","dateRange","_sourcingFilters$anal","filterURL","customFilterURL","customFilterQuery","isSourcingFilters","getLabel","filterSourcingOutReachSelectors","optionsDate","optionsDateLabel","_sourcingFilters$ddat","_sourcingFilters$ddat2","customSourcingFilter","ConvertFromAPIToText","more_than_6_months_ago","no_touches","in_6_weeks_to_6_months","in_more_than_6_months","within_6_weeks","next_30_days","next_7_days","NEXT_STEPS_OPINION_ENDPOINT","COMPANY_RATIONALE_ENDPOINT","COMPANY_NAME_ENDPOINT","LAST_INVESTORS_ENDPOINT","COMPANY_TAG_ENDPOINT","scheduledTouchesState","getSortValue","getStageType","getTouchType","getRankType","getAllStageTypes","dashboard","getAllTouchTypes","getAllRankTypes","getDates","inputDates","getTabs","getSelectedTab","selectedTab","getSelectedPeriod","getSelectedDate","selectedDateRage","getTotalTouches","remainedTouches","getTabsCount","_state$count$data","getCardsCount","_state$count$data2","allStageTypes","_allStageTypes$find","scheduledTouchesFiltersObject","showClearedFilter","isDashboardLoading","isTouchesLoading","isTouchesCountLoading","shouldFetchTouches","getInsight","insight","getInsightTotal","insightTotal","getRouter","router","paths","getMultipleOptions","getSelectOptionsByField","received_values","getYearFoundedOptions","getYearsList","APPLY_VIEW","APPLY_VIEW_SUCCESS","RESET_VIEW_TO_SOURCING_ORDER","CHECK_VIEW","resetViewToSourcingOrder","checkView","applyViewReducer","applyViewSuccessReducer","applyViewSaga","_action$payload$data","viewFilters","viewSearchKey","searchInfo","isCombinedSearch","isSimilarCompaniesSavedSearch","viewFiltersCustom","currentSortBy","pageNumberChanged","updateSession","_selectedCard$filter4","_selectedCard$filter5","_selectedCard$filter6","_selectedCard$filter7","_searchCriteria","cardFilters","cardSearchFilter","n_touch_date_with_past_due","sourceTagValue","my_companies_sorting","my_companies_columns","my_companies_column_order","my_companies_pinned_columns","parseSourceTagFilter","userSessionSettingsUserListPageNumber","shouldUpdateUserListPageNumberSettings","user_list_display_columns","user_list_column_order","user_list_pinned_columns","resetViewToSourcingOrderSaga","_normalizeViewsColumn","sourcing_outreach_detail_sorting","sourcing_outreach_detail_columns","sourcing_outreach_detail_column_order","sourcing_outreach_detail_pinned_columns","checkViewSaga","viewSaga","advancedSearchApplyViewSaga","myCompaniesApplyViewSaga","listsApplyViewSaga","companyOutReachApplyViewSaga","equityTouchAvailabilitySaga","fetchEquityTouchFormDataSaga","addtoEquityTouchSaga","saveContactSaga","checkEquityTouchAvailability","editedContactIds","phoneIds","updatePayload","errorData","primaryContactsSelectors","contactId","contactData","phone_type","phoneId","phoneItem","is_primary","uniqBy","addEquityTouch","errorType","hasError","fieldsData","listActions","msgs","equityTouchAvailability","fetchEquityTouchFormDataSuccess","fetchEquityTouchFormDataFail","addToEquityTouchSuccess","updateEquityTouchSelectedContacts","updateEquityTouchSelectedSalesLoftContacts","saveContact","saveContactFail","updateTemporaryFormValues","colorMap","graph","buildFilters","filtersArray","getGraphValue","graphValueCalc","parseFloat","Infinity","buildGraphicValues","graphTotal","_values","previousValue","currentItemKey","currentGraphValue","graphValuePercentOfTotal","floor","graphValue","valueProps","graphColor","mapGraphValues","getMyCompaniesCardsList","cardsKeys","cardsValues","finalCard","secondTitle","variation","colSizeFirstBigger","mapCardsList","cardKey","base","_ref$nextTouchDate","_ref$lastTouchDateDay","_ref$stage","selectCompanySavedSearchesState","getShouldFetch","getAllViewsSelector","getFilteredSavedSearches","filteredSavedSearchesCount","getDefaultSearchId","getAllSearch","getTitlesSelector","getSavedSearchesById","getDefaultOptxView","optxDefault","isOptxDefault","getViewData","getSavedSearchId","searchSuccessReducer","getContactId","_userInfo$settings$se","removeFilterReducer","editUserInformationSuccessReducer","updateLinkedinURLSuccessReducer","changePaginationReducer","defaultPageSize","userInformationTypes","searchContactsSaga","searchContactsCountSaga","resetSaga","searchContactsSagas","_userSettings$setting2","checkUpdateFilters","customSearch","_action$payload$reset","SEARCH_CONTACTS","RESET_SEARCH_CONTACTS","sendNewOptxScoreRationale","toggleModal","updateFileList","updateFileEncodingList","removeFileEncoding","uploadFiles","uploadFilesError","failedUploadFiles","selectDocumentUploadTouchModal","documentUploadTouchModal","fileList","files","encodedFileList","encodedFiles","getUploading","uploading","toggleModalReducer","updateFileListReducer","uniqueFiles","file","self","t","updateFileEncodingListReducer","removeFileEncodingReducer","encodedFile","uploadFilesReducer","uploadFilesErrorReducer","failedUploadFilesReducer","uploadFilesSaga","addDocumentUploadTouchSaga","touchCompanyId","profileCompanyId","failedFiles","successFiles","isMultiple","callOptionsEndpoint","_files$2","_files$3","slicedFiles","newArray","progressiveCalls","mappedProgressiveCalls","combinedOptions","documentUploadTouchSelectors","filesSelectors","companyTouchesSelectors","_files$","author_user_id","author","touch_id","files_data","is_multiple","filename_with_extension","encoded_content","base64Encoding","touchesDocumentUpload","error_message","_item$files","filesActions","fetchFilesFilters","selectUIState","selectCardState","selectFilter","selectDefaultFilter","selectClearedFilter","isCLearedFilter","getLoading","getScore","getSoftware","getPsgFit","psgFit","pageLoading","FETCH_COLUMNS","FETCH_COLUMNS_SUCCESS","SAVE_COLUMNS","SAVE_COLUMN_WIDTH","RESET_COLUMN_WIDTHS","UPDATE_COLUMN","ADD_REMOVE_DATE_MATCHED","APPLY_COMPANY_COLLUMN_SETTINGS","updateVerifyCompanySoftwareFail","updateFieldsFail","_state$view$gridKey","psgDateMoment","psgDate","scoreData","itemDateMoment","is_psg","getPSGDate","fetchScoreGrowthSuccessReducer","fetchScoreGrowthSaga","scoreGrowthSaga","growthList","parseLineGraphDataWithoutPosition","fetchFavorites","fetchFavoritesSuccess","fetchFavoritesFail","addFavoriteFail","deleteFavoriteFail","fetchFavoritesSuccessReducer","companyNameIdx","bulkDeleteFavoriteSuccessReducer","fetchFavoritesSaga","addFavoriteSaga","deleteFavoriteSaga","favoritesSaga","getFilterListId","favoritesSelectors","psgFunctionOptions","slackChannelOptions","STATE_KEY","FEATURE","checkIntervalDate","numberOfMonths","firstDate","months","setMonth","getMonth","getTime","clearIntervalData","_Object$keys","intervalKey","addEmptyLabels","intervalData","intervalStartDate","initialQuarter","getInitialIntervalQuarter","distinctMonths","point","totalDays","parseLineGraphDataWithPosition","getNoOfMonths","latestDate","updatedDate","_intervalData$0$date$","_intervalData$0$date$2","day","month","dateNew","totalNumberOfMilliseconds","dataPoint","getFirstValidDate","addEmptyBars","isMonth","isYear","x_axis","oldestMonth","startMonth","round_data","total_investment","startQuarter","chartData","getChartTicks","tickList","parseReversedValues","lowest_rank","chartPoint","reversedValue","FilterTagValue","isMyCompanyFilterCard","hasLabelOnly","labelOnly","Overflow","textTransform","TagMoreFilters","TagMoreFiltersText","FilterTagMore","StyledTag","CompanyTagValue","_ref$companyId","isNewTab","useFilterSearch","deleteTag","deleteCompanyTag","innerText","CompanyTagMore","onTagMoreClick","IsProfolioTag","newTab","useHistory","IsSoftwareTag","IsPSGCompanyTag","isCompany","_option$check","DiversityTags","diversityTags","_createElement","AsyncCreatableMultiSelect","preDefinedSelectedValues","tagsChildrenStart","tagsChildrenEnd","wrapperClassName","bodyDisplay","onTagClick","validateCreateOption","_useAsyncSelect","allowSelectNone","setSelectedOption","selectedList","setSelectedList","removeSelectedItem","optionValue","newSelectedList","selectedFilter","actionMeta","newSelectedOption","SELECT_NONE","isNoneSelected","val","removedValue","listSelectedItems","tagClassName","useAsyncSelect","classNames","AsyncCreatable","cacheOptions","_Option","AddTags","isCollapsed","addTagRef","_useToggle","useToggle","_useToggle2","showAddButton","toggleShowAddButton","loadOptionsAfterInputChange","isNotOnlyEmptySpaces","ghost","PlusOutlined","OverflowTagsWrapper","TagsWrapper","$notTruncated","CompanyTags","_ref$isAdd","isAdd","companyProfileTags","companyTag","uniqueTags","_allTags$find","_allTags$find2","IsAIMlTag","IsPortfolioTag","companiesTagInMyCompaniesPage","companiesTagInMyHomePage","getSeletedCompanies","companiesTagInMyWatchList","companiesTagsFiltered","occurrencesOfTags","countBy","tagsMapped","rowGap","MultiSelectAsync","ListTagValue","ListTagStyled","ListTagMore","FETCH_COMPANY_PROFILE","FETCH_COMPANY_PROFILE_SUCCESS","FETCH_COMPANY_PROFILE_FAIL","BACK_TO_RESULTS","RESET_COMPANY_PROFILE","SET_SELECTED_DESCRIPTION","VIEW_SIMILAR_COMPANIES_ON_GRID","REGENERATE_AI_DESCRIPTION","REGENERATE_AI_DESCRIPTION_SUCCESS","REGENERATE_AI_DESCRIPTION_FAIL","OPINION_AI_DESCRIPTION","OPINION_AI_DESCRIPTION_SUCCESS","OPINION_AI_DESCRIPTION_FAIL","AI_RELATIONSHIP_SUMMARY","AI_RELATIONSHIP_SUMMARY_SUCCESS","AI_RELATIONSHIP_SUMMARY_FAIL","FIELD_REQUIRED_ERROR","_option$children","_option$children$prop","_option$children$prop2","_option$children2","_option$children2$pro","_option$children$prop3","contactFilterOption","reorderPrimaryContact","primaryContactId","NormalWrapper","FullWrapper","FilterTagsOverflow","_props$closable","_props$isFullWidth","isFullWidth","multipleValue","activeOptions","setActiveOptions","setClearFilters","onCloseAction","_tag$resetFor","renderRawItem","_item$closable","renderRest","CompanyTagsOverflow","_ref$isNewTab","_ref$closable","showPSGFit","_allTags$find3","justifyContent","suffix","PSGFit","ListTagsOverflow","_orderTags","orderTags","ListTagsCollapsable","collapsed","setCollapsed","shouldFetchColumns","handleTagClick","CountWrapper","SelectedCount","updateState","combineCompaniesFromAllPages","categories","updateIndividualStageState","companyStageText","updateIndividualPipelineRankState","pipelineRankText","updateIndividualCompanyOwnerState","updateIndividualLeadSourceState","leadSourceName","updateIndividualSeniorAdvisorState","seniorAdvisorName","updateIndividualFundState","updateEtContactsState","stateItem","_stateItem$contacts","updateContactsState","_item$contacts","selectCompaniesReducer","totalCompanies","totalPages","deselectCompaniesReducer","bulkUpdateDataSuccessReducer","bulkUpdateIndividualStageReducer","bulkUpdateIndividualPipelineRankReducer","bulkUpdateIndividualCompanyOwnerSuccessReducer","bulkUpdateIndividualLeadSourceReducer","bulkUpdateIndividualSeniorAdvisorReducer","bulkUpdateIndividualFundReducer","fetchBulkEditDataSuccessReducer","dataFields","currentItem","updateContactSuccessReducer","updateCompanies","companiesObject","updateCompanyState","updateIndividualStageActions","addCompanyStage","updateIndividualPipelineRankActions","addCompanyPipelineRank","updateIndividualCompanyOwnerActions","addCompanyOwnerSuccess","leadSourceActions","addLeadSource","seniorAdvisorActions","addSeniorAdviser","bulkEtActions","fetchBulkEditDataSuccessSaga","getBulkEditData","_parsedSort$sort_fiel","parsedSort","useLeadSourceEditableField","leadSourceId","useSeniorAdvisorThesisEditableField","seniorAdvisor","addSeniorAdvisor","seniorAdvisorId","useActiveEditableField","getCurrentCompany","addCompanyActive","getPassThrough","node","instance","LegendFormatter","_entry","LegendText","_ref$XAxisNode","XAxisNode","_ref$YAxisNode","YAxisNode","_ref$TooltipNode","TooltipNode","_ref$LegendNode","LegendNode","Legend","_ref$LineNode","LineNode","Line","_ref$CartesianGridNod","CartesianGridNode","CartesianGrid","_ref$EmptyChartNode","EmptyChartNode","EmptyChart","passThrow","passProps","lineChartFactory","normalize","_ref$scaleMin","scaleMin","_ref$scaleMax","scaleMax","_ref3$svgWidth","svgWidth","_ref3$svgHeight","svgHeight","_ref3$viewBoxWidth","viewBoxWidth","_ref3$viewBoxHeight","viewBoxHeight","_ref3$points","_ref3$padding","isPositive","invalidPoints","areAllPointsEqual","pointsTrend","first","last","normalizedPoints","minX","maxX","minY","maxY","numbersData","boundariesX","boundariesY","y","normalizeDataset","xmlns","viewBox","CHECK_EQUITY_TOUCH_AVAILABILITY","FETCH_EQUITY_TOUCH_FORM_DATA","FETCH_EQUITY_TOUCH_FORM_DATA_SUCCESS","FETCH_EQUITY_TOUCH_FORM_DATA_FAIL","ADD_TO_EQUITY_TOUCH","ADD_TO_EQUITY_TOUCH_SUCCESS","UPDATE_EQUITY_TOUCH_SELECTED_CONTACTS","UPDATE_EQUITY_TOUCH_SELECTED_SALESLOFT_CONTACTS","RESET_ADD_TO_EQUITY_TOUCH","EQUITY_TOUCH_SAVE_CONTACT","EQUITY_TOUCH_SAVE_CONTACT_FAIL","EQUITY_TOUCH_ADD_CONTACT","UPDATE_COMPANY_ET_DATA","AUTO_SAVE","UPDATE_TEMPORARY_FORM_VALUES","TableCellEditFinancialField","financialOptions","_company$fieldKey","handleFieldListValues","TableYearTitleContainer","TableYearTitle","EditOutlined","initialColumn","fixed","createColumn","dataItem","TableCellFinancialValue","power","pow","listsAndSearchesSagas","paginationSagas","paginationReducer","getSavedValues","keyPrefix","saveValues","searchSource","savedSearchId","from_saved_list","searchHeaders","getIsUrlAvailable","getSimilarCompaniesByURL","propertyValue","FORM_INITIAL_VALUES","primaryUrl","alternativeName","secondaryUrl","primaryAddress","primaryAddressSecondLine","hasSecondaryAddress","secondaryAddress","secondaryAddressSecondLine","secondaryCity","secondaryCountry","secondaryState","secondaryZipCode","subSector","ftes","etCheck","isAddon","stageRationale","addonFor","FORM_TOTAL_STEPS","STATE_INITIAL_VALUES","addedCompany","urlData","MODAL_WRAPPER_TITLE","VIEW_AND_CLOSE","searchSaveResponses","LONG_CARD_TITLE","TABLE_VIEW_TITLE","FULLSCREEN_TITLE","COLUMNS_SOURCE_MANEGEMENT_TITLE","ADD_NEW_COMPANY_MENU_TITLE","EXPORT_SAVE_TITLE","EXPORT_TITLE","EXPORT_SORTING_TITLE","ResetColumnWidthsMenu","myCompaniesView","listView","companyOutReachView","listsAndSearchesPaginationActions","updateMyWatchlistTabsPaginationSaga","contactsSavedSearchesSaga","_query","_query2","_query3","watchlistSelector","sourceScrubSelectors","getSort","searchSourceScrubLists","savedCompanySearchesSelectors","savedContactSearchesSelectors","contactSearchSavedSearches","updatePageSizeReducer","addTagSaga","deleteTagSaga","tagsSaga","useFetchUserInformation","useInitialFetch","useInitFilters","useShouldFetch","useDisplayColumnModal","displayColumnModalSelectors","displayDialog","displayColumnModalActions","toggleDisplayColumnDialog","useFavorites","useInitialFetchFavorites","useFetchUserManagement","fetchUserManagement","useFetchUserList","useFetchFavoriteLists","isAdvancedSearchPage","isWatchListPage","isAllReportsPage","isTouchManagementPage","useFetchSuggestedSearches","companyFiltersSelectors","useFetchSavedSearches","useFetchContactsSavedSearches","useInitContactFilters","useInitCompanyFundingRounds","fetchCompanyFundingRounds","useInitWatchListsIncludingCompany","shouldInitialize","isChromePlugin","useIsChromePlugin","listsIncludingCompany","companyListsSelectors","getCompanyLists","companyListsActions","fetchListsExcludingCompany","useInitFetchFavoriteLists","allWatchlistIsEmpty","useInitFetchFavoriteListsPopup","fetchFiltersPopup","_ref$isAbsolute","isAbsolute","Loader","$isChromePlugin","LoadIcon32","destinationFilters","sourceFilters","itemIndex","sourceFilterOption","geo_country","customCheckKey","SAVE_FREQUENCY_IN_MILLISECONDS","pluginVersion","getPluginVersion","setPluginVersion","version","toggleAddResearchRationale","TOGGLE_ADD_RESEARCH_RATIONALE","toggleAddResearchRationaleSuccess","TOGGLE_ADD_RESEARCH_RATIONALE_SUCCESS","changeFields","CHANGE_FIELDS","changeRationale","CHANGE_RATIONALE","revertFieldsChanges","REVERT_FIELDS_CHANGES","submitResearchRationale","SUBMIT_RESEARCH_RATIONALE","SUBMIT_RESEARCH_RATIONALE_SUCCESS","KeyPerformanceIndicator","_ref$isInvalidValue","isInvalidValue","kpiClassName","valueClassName","getDateColor","LOAD_COMPANY_LIST","LOAD_COMPANY_LIST_SUCCESS","FILTER_COMPANY_LIST","FILTER_COMPANY_LIST_SUCCESS","CLEAR_COMPANY_FILTER","DELETE_COMPANY_IN_LIST","FILTER_CSV_COMPANY_ERROR_LIST","LOAD_COMPANY_LIST_DETAILS","LOAD_COMPANY_LIST_DETAILS_SUCCESS","LOAD_COMPANY_LIST_DETAILS_FAILURE","LOAD_COMPANY_LIST_DETAILS_RESET","RESET_LOADING_STATE","LoadingIcon","LoadingIconWrapper","ChartHeaderWrapper","ChartTitleWrapper","canBePastDueDate","targetDate","dateDiff","checkForNegativeSelectedOption","fetchEmployeeGrowthSuccess","fetchEmployeeGrowthFail","fetchEmployeeGrowthSaga","employeeGrowthSaga","getEmployeeGrowth","GrayButton","GrayRectangleBtn","_ref$text","GrayRectangle","isInIframe","CompanyLink","urlStatus","PopoverContentDescription","attrs","isMarginItem","TagContainer","CustomTooltip","companyDescription","parentCompany","isOnEquityTouch","companyWatchLists","et_watchlists","regular_watchlists","arrowPointAtCenter","_company$parentcompan","_company$parentcompan2","firstPart","secondPart","ReferrerUrlOrigin","parentCompanySearch","MultipleDate","dates","emptyValue","is_ai_powered","PoweredByAITag","Truncate","LinkOpenInNewTab","OpenInNewTabIcon","TableCellName","_useReferrerProfileLi","referrerUrl","TableCellNameLink","selectCompanyNotes","companyNotes","makeSelectIsLoadingCompanyNotes","getCompanyNotesError","makeSelectCompanyNotesError","makeSelectShouldFetch","getCompanyNotes","noteIds","notesById","makeSelectGetCompanyNotes","fetchCompanyNotesSuccessReducer","addCompanyNoteSuccessReducer","deleteCompanyNoteSuccessReducer","noteIndex","updateNoteReducer","currentNote","searchNotesActions","addCompanyNoteSaga","fetchCompanyNotesSaga","deleteCompanyNoteSaga","companyNotesSaga","getPinId","allNotes","pinned_notes","unpinned_notes","pin_id","profileNotesSelectors","notesSearchActions","profileNotesActions","fetchProfileNotes","getNotes","pinId","getProfileNotes","deleteProfileNote","companiesByPage","searchNotes","searchNotesSuccess","searchNotesFail","updateNoteSuccess","updateNoteFail","selectSearchNotes","getById","getSearchNotes","searchNotesReducer","searchNotesSuccessReducer","currentQueryData","updateNoteSuccessReducer","resetSearchReducer","addToEquityTouchBulkSuccessaReducer","searchCompanyNotesSaga","updateNoteSaga","searchNotesSaga","updateCompanyNote","JWT","getJWT","sessionStorage","jwtCookieToken","removeJWT","oldValue","_event$data","iframeOrigin","currentPluginVersion","setPluginOrigin","postMessage","saveToken","exists","newAlertCount","upcoming","newUpcomingCount","roadmapUrl","PAGE_SIZE","constants","fetchAlertsSuccessReducer","fetchAlertsFailReducer","viewed_at","pastdueTouches","fetchTouchesFailReducer","updateAlertsReducer","alert","updateTouchesReducer","dismissAlertReducer","itemToMove","remainingData","dismissAllAlertsSuccessReducer","_draftState$history$d","itemsToMove","modifiedAlert","upcomingTouch","deleteUpcomingTouchFailReducer","loadMoreInboxAlertsReducer","deletePastDueTouchFailReducer","deleteAllPastUpcomingTouchesReducer","touchKey","deleteAllPastUpcomingTouchesSuccessReducer","deleteAllPastUpcomingTouchesFailReducer","loadMorePastDueTouchesReducer","inboxItemId","deletedListId","_item$attributes$extr","attributes","extra_context","deleted","historyItemId","_item$attributes$extr2","fetchScoreGrowthSuccess","fetchScoreGrowthFail","FEATURE_SLICE","FETCH","FETCH_SUCCESS","FETCH_FAIL","CLEAR_ALL_FILTERS","CLEAR_FILTER","UPDATE_VALUE","selectMyCompaniesState","watchList","isBulk","setWatchlist","companyItem","watchlistItem","_label","isEt","is_et_group","getLabelWithoutOwner","watchListData","_companyData$et_watch","isAlreadyAddedToList","_companyData$regular_","_companyData$regular_2","_companyData$regular_3","_companyData$et_watch2","_companyData$et_watch3","_companyData$et_watch4","_companyData$regular_4","listIndexNotET","listIndex","StyledClearIndicator","ClearIndicator","_props$children","setIsOpen","PSGCompanyLabel","isLongCardView","isFromNotifications","ScoreTrendingGrowth","TrendingValueSpan","CLASS_NAME","TrendingValue","customFontSize","finalClassName","InfoCircleOutlined","Info","overlayInnerStyle","ScoreTrending","isPSGCompany","infoText","selectSortFeatureState","getSortingLoading","fetchSelectOptions","fetchSelectOptionsSuccess","fetchSelectOptionsFail","addCompanyActiveFail","fetchBulkEditData","fetchBulkEditDataSuccess","bulkUpdateDataSuccess","selectCompanyListsState","listsState","listsExcludingCompany","fetchListsExclusingCompanySuccessReducer","SEARCH_CONTACTS_SUCCESS","SEARCH_CONTACTS_FAIL","selectPipelineInformation","companies_count","other_deal_stages","pipeline_data","selected_period_date","previous_period_date","ADD_COMPANY_NOTE","ADD_COMPANY_NOTE_SUCCESS","ADD_COMPANY_NOTE_FAIL","DELETE_COMPANY_NOTE","DELETE_COMPANY_NOTE_SUCCESS","DELETE_COMPANY_NOTE_FAIL","FETCH_COMPANY_NOTES","FETCH_COMPANY_NOTES_SUCCESS","FETCH_COMPANY_NOTES_FAIL","checkHelperValues","helperName","helperData","helpersValues","addOption","helperValueIndex","removeIndexValue","arrayUnion","firstArray","secondArray","removeElementByValue","removeMultipleElements","arr1","arr2","valuesToRemove","filterCopy","excludedValues","propName","_data$propName","getMappedTouchFilters","touchesParam","searchSourceScrubListsSuccess","searchSourceScrubListsFail","changeSourceScrubPagination","sortSourceScrub","fetchSourceScrubListsTotal","fetchSourceScrubListsTotalSuccess","fetchSourceScrubListsTotalFail","useSourceScrubLists","paginationSize","handleSourceScrubListsResults","CellLink","_row$id","row","formattedVal","currentFilteredListId","userListShare","userListSelectors","DropdownDot","isRight","handleDeleteList","handleRenameList","onDownloadList","fileName","includeDescription","filteredColumns","pipelineActions","exportFileCSV","exportToCSV","then","accessRights","ListAccessRights","ReadOnly","TableCellNewTab","cellUpdates","sourceScrubListsState","loadedUserInfo","shouldFetchTotal","fetchedTotalAt","searchSourceScrubsListsSaga","sortSourceScrubListsSaga","fetchSourceScrubListsTotalSaga","sourceScrubsListsSaga","initialQuery","source_scrub_list_filters","source_scrub_list_sorting","getSourceScrubListsTotal","searchSourceScrubListsSuccessReducer","fetchSourceScrubListsTotalSuccessReducer","invertStatusAfterMerge","fetchMergeReducer","mergeStatusInvertReducer","_pagination","_searchKey","_filterQuery","_gridKey","_pagination2","_searchKey2","_searchType2","_filterQuery2","_searchData2","PrefixedSelectionItem","SelectionItem","existParent","isFutureDate","endOf","startYear","yearsInAdvance","currentInputDate","isBefore","updateCompanyOptxScoreSuccess","selectContactsSavedSearchesState","contactsSavedSearches","selectContactsSearchState","contactsSearch","isInitialFetch","getSearchTitle","fetchPluginPrimaryContact","featureNamePluginPrimaryContact","fetchPluginPrimaryContactSuccess","fetchPluginPrimaryContactFail","fetchCompanyProfileReducer","fetchCompanyProfileSuccessReducer","fetchPluginPrimaryContactReducer","fetchPluginPrimaryContactSuccessReducer","pluginPrimaryContact","addCompanyStageReducer","addCompanyOwnerSuccessReducer","_draftState$data3","companyStageActions","companyOwnerActions","fetchPluginPrimaryContactSaga","getPluginPrimaryContact","addCompanyOwner","actionTypes","addCompanyOwnerFail","createSelectOptions","createCombineSearchData","searchesToCombine","search_id","first_search_id","logical_operator","searchFieldsList","operator","_values$searchFieldsL","getOrdinalNumber","mod100","mod10","_search$parent_search","parent_search_ids","_filters$match","SAVE_SCROLL_POSITION","SAVE_TABLE_ROW","RESET_SCROLL_HISTORY","prepareSaveScrollAction","pageKey","scrollHistory","saveScrollPosition","saveTableRow","defaultPageScrollHistory","scrollPosition","tableRow","selectScrollState","getScrollPosition","getTableRow","pageScrollHistoryReducer","currentScrollHistory","initialValue","createRef","VirtualTableScrollYContext","useVirtualTableContainerSize","_useSize","useSize","useVirtualScrollPosition","initialScrollPosition","scrollSelectors","scrollRef","scrollActions","onScroll","scrollInfo","wrapper","scrollTo","scrollTop","handleExternalScroll","useScrollPosition","elementToScroll","currQuery","setCurrQuery","prevQuery","currPageSize","setCurrPageSize","prevPageSize","currLocation","setCurrLocation","prevLocation","currPageNumber","setCurrPageNumber","prevPageNumber","_elementToScroll$curr","scrolled","scrollY","getContactSearches","fetchContactsSavedSearchesSaga","savedContactsSearchPaginationSaga","resetToSearchSaga","createContactSearch","deleteCookie","nameEQ","cookies","_action$payload$page","startCompany","successCount","addFundFail","UPDATE_COMPANY_USER_VALUES","UPDATE_COMPANY_USER_VALUES_SUCCESS","UPDATE_COMPANY_TRENDING_LINES","UPDATE_COMPANY_EMPLOYEE_GROWTH_PERCENTAGE","fetchListsExcludingCompanySuccess","listsExclusingCompany","fetchListsExcludingCompanyFail","SelectAllWrapper","hasCustomNoTouchesOption","SelectAll","getValue","checkProps","filteredValues","AllMultiValueContainer","allPrefix","showSelectAll","numbers","groupIndex","isChecked","currentValues","valuesOutsideGroup","filteredGroupOptions","loaderReducer","loader","isConnecting","startConnectingReducer","endConnectingReducer","TOGGLE_GRID_FILTERS_MODAL","UIModalsState","gridModals","gridToggleReducer","parseInitialFormData","formInitialValues","_initialFormData$fiel","_initialFormData$fiel2","from_database","_initialFormData$fiel3","getFieldValue","getFTEsValues","_formData$AddOnFor","jsonForm","formKey","findSubSectorId","fieldId","fieldTypeId","locTypeId","locId","groups","personid","groupids","Watchlists","WWWebsiteRank","USWebsiteRank","employeeCount","City","Country","State","addressLine1","equityTouchValidationSchema","yup","shape","when","is","otherwise","nullable","oneOf","getBackButtonText","btnText","getGridName","LoadingBlock","animation","keyframes","LoadingWrapper","FETCH_COGNITO_LOGOUT_URL","fetchCognitoLogoutURL","fetchCognitoLogoutURLSuccess","fetchCognitoLogoutURLFail","selectCognitoLogOut","_state$auth","auth","shouldFetchCognitoLogoutURL","loadingCognitoLogoutURL","getCognitoLogoutURL","cognitoLogOutReducer","cognitoLogOutFailReducer","cognitoLogOutSuccessReducer","fetchCognitoLogOutURLSaga","cognitoLogOutSaga","updateAutosaveStatus","AutoSave","storageKeyPrefix","_ref$loadFromStorage","loadFromStorage","formik","latestFormik","setValues","_latestFormik$current","isInitialValues","isDifferentFromSaved","persistedValues","intervalId","setInterval","clearInterval","useAddTouchAutoSave","useFormikContext","getAutosaveStatus","StyledStatusWrapper","AutoSaveStatus","autosaveStatus","iconStyle","textStyle","FormErrorMask","$isChromeExtension","reload","updateAutosaveStatusReducer","EDIT_ALL_TABS","hasSearch","EDIT_ALL_INFO_FORM","fte_location","fetchProfileNotesSuccess","fetchProfileNotesFail","pinNote","editNote","editNoteSuccess","deleteProfileNoteFail","selectProfileNotes","profileNotes","fetchProfileNotesSaga","editNoteSaga","pinNoteSaga","deleteProfileNoteSaga","profileNotesSaga","fetchProfileNotesSuccessReducer","editNoteSuccessReducer","isPinned","activeState","companyActive","addCompanyActiveReducer","addInBusinessEvaluationSaga","inBusinessEvaluationSaga","MainStatValue","ComparedValue","StyledPropgress","MainStatProgress","ComparedProgress","StyledCancelSearchButton","CancelSearchButton","FixedLoaderWithCancel","showCancel","CompetitorCard","profileURL","CompanyAvatar","logoUrl","OpenInNewTabHover","Camera","d","IconCompany","shapeRendering","textRendering","imageRendering","fillRule","clipRule","transform","fontFamily","IconImport","IconLocation","xmlSpace","selectedCompaniesState","areAllCompaniesInEqt","checkEquityTouch","areCompaniesAssigned","checkCompaniesOwner","MinimumSizeBar","_ref$minimalHeight","minimalHeight","finalHeight","finalY","getRectanglePath","validationSchema","EditRationaleProfile","formRef","handleOk","submitForm","Formik","onSubmit","addRationale","innerRef","_Form","layout","EmptyPopover","EditNoteCard","EditNoteContent","onNoteSave","handleToggle","MAX_CHAR_LENGTH","PopoverEditNote","manualClose","RemoveAsAddon","addonSyncEt","addon_sync_et","relatedListsIds","Popconfirm","onConfirm","normalizedAddon","handleConfirm","DropdownAddMenuItem","isVisible","actionIndex","DropdownMenu","DropdownAddMenu","accessFor","verifyAccess","useCompanyFavorite","isFavorite","toggleFavorite","favoriteActions","FavoriteButton","_favoritesLists$filte","_favoritesLists$filte2","_company$rationale","deleteNote","_ref$isBlue","isBlue","fromNotesPage","isInEt","companyEtUrl","links","companyOwnerName","hasReviewAccess","_useDropdownAdd","useDropdownAdd","filterListId","favoritesLists","toggleSelectList","openDropdownSelectList","toggleCompanyTouchesModal","deleteFromWatchList","openEditNotePopover","toggleEditNote","openRationalePopover","toggleRationale","removeNote","companyReview","toggleEditAllModal","toggleCompanyEditFavoritesTab","updateCompanyData","userLastName","userFullName","currentCompanyOwnerName","individualEditSelectors","addOwner","companyOwnerId","etUrl","initializeCompanyLists","setInitializeCompanyLists","targetOffset","setTargetOffset","_useCompanyFavorite","fetchFormData","etActions","companyInfoParams","handlePendoActionDropdown","DeleteOutlined","ZoomInOutlined","toggleDropdownVisible","EditFieldText","updateLinkedinURL","isURL","triggerRef","handleDropdownVisible","handleActionsNames","menu","Provider","boundingLimits","menuHeight","PopoverSelectWatchList","TOGGLE_VIEW_TRANSITION","getViewTransition","viewTransition","toggleViewTransitionReducer","resetViewTransitionSaga","viewTransitionSelectors","viewTransitionActions","DropdownWrapper","TriggerWrapper","SelectedLabel","MenuWrapper","$customWidth","MenuItem","GridView","activeView","customWidth","isFromSourcingOutReach","isColumnModalOpen","setKey","setVisible","handleItemClick","handleButton","toggleSaveSearchModal","selectedKeys","cardRowGutter","xs","sm","lg","xl","isHeightOwerflow","refreshToken","checkInterval","defaults","common","Authorization","checkRefreshToken","interceptors","use","newRefreshToken","handleRefreshToken","_error$response","MENU_COLLAPSED","removeMenuCollapsed","getSearchCountLoading","_len","fetchArgs","_key","_path","_path2","_path3","_path4","_path5","_extends","bind","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgAddressBook","svgRef","titleId","ForwardRef","SvgStickyNoteO","SvgList","SvgSearch","SvgFileText","SvgCheckmarkFill","SvgCapterra","SvgFacebook","fillOpacity","SvgLinkedin","SvgTwitter","SvgWebsite","SvgCrunchbase","SvgG2Crowd","SvgSourcescrub","SvgEquitytouch","SvgSimilarweb","SvgBvdorbis","xmlnsXlink","enableBackground","opacity","SvgFullscreen","SvgFullscreenExit","SvgPeopleOutlined","SvgPeople","SvgClose","SvgChromeClose","SvgPen","SvgThumbsUp","SvgThumbsDown","SvgThumbsUnknown","SvgOpenInNew","SvgBookmark","SvgPipeline","strokeLinecap","strokeLinejoin","SvgBusiness","SvgThreeDots","SvgWebsiteRank","SvgDollar","SvgPersonAdd","SvgArrowDownEnd","SvgSalesloft","SvgTrendingDown","SvgTrendingUp","SvgIconGrid","SvgIconTiles","SvgGlassdoor","_defs","SvgWebsiteRankBlue","patternContentUnits","xlinkHref","SvgChromeNewTab","_circle","_circle2","_circle3","SvgChromeDotsButton","cx","cy","r","_rect","SvgChromeOptxLogo","SvgPin","SvgNoCompany","_g","SvgDragAndDrop","clipPath","SvgMap","SvgReportCardIcon","SvgArtificialIntelligence","SvgEmployeeGrowth","SvgOptxScoreOver","SvgThumbUp","SvgThumbDown","SvgReload","SvgNewOpportunities","SvgContactPin","SvgPsgPin","SvgIndustryPin","SvgListsPin","SvgReportsPin","SvgAutosaveSaving","SvgAutosaveSaved","_mask","_line","SvgAutosaveRefresh","rx","mask","x1","y1","x2","y2","SvgPitchbook","_rect2","SvgGrata","SvgPieIcon","SvgBarChart","SvgMyCompanies","iconProps","iconClassName","AddressBookIcon","WebsiteRankIcon","PieIcon","ArrowDownEnd","Bookmark","BusinessIcon","DollarIcon","StickyNoteIcon","ListIcon","FileTextIcon","CheckmarkFill","CapterraIcon","ChromeNewTabIcon","ChromeDotsButtonIcon","ChromeOptxLogoIcon","FacebookIcon","LinkedinIcon","TwitterIcon","CrunchbaseIcon","G2CrowdIcon","SourceScrubIcon","EquityTouchIcon","SimilarWebIcon","BVDOrbisWebIcon","Fullscreen","FullscreenExit","People","PeopleOutlined","Close","Pen","PersonAdd","ThumbsUp","ThumbsDown","ThumbsUnknown","TrendingDown","TrendingUp","OpenInNew","PipelineIcon","ThreeDotsIcon","Salesloft","GridIcon","TilesIcon","PinIcon","NoCompanyIcon","GlassdoorIcon","WebsiteRankBlueIcon","ChromeCloseIcon","DragAndDrop","MapIcon","ReportCardIcon","ArtificialIntelligenceIcon","EmployeeGrowthIcon","OPTXScoreOverIcon","ThumbUpIcon","ThumbDownIcon","ReloadIcon","NewOpportunitiesIcon","ContactIcon","PSGIcon","IndustryIcon","ListsIcon","ReportsIcon","BarChartIcon","MyCompaniesIcon","AutosaveSavingIcon","AutosaveSavedIcon","AutosaveRefreshIcon","PitchbookIcon","GrataIcon","fetchUserManagementSuccess","fetchUserManagementFail","resendUserInvite","resendUserInviteSuccess","resendUserInviteFail","disableUser","disableUserSuccess","unlockUser","unlockUserSuccess","unlockUserFail","fetchUserEditInfo","fetchUserEditInfoSuccess","fetchUserEditInfoFail","submitUserInfo","submitUserInfoSuccess","TableCellStatusContainer","StatusText","userResendInvitation","useResendUserInvitation","locked","userEditmodalActions","toggleUserEditModal","userManagementState","userManagement","userEditModalState","userManagementData","modalLoading","getEditData","access_role_options","user_info","email_list","fetchUserManagementReducer","fetchUserManagementReducerSuccess","resendUserInviteSuccessReducer","disableUserSuccessReducer","unlockUserSuccessReducer","submitUserInfoSuccessReducer","roleName","fetchUserEditInfoReducer","fetchUserEditInfoSuccessReducer","fetchUserEditInfoFailReducer","fetchUserManagementSaga","resendUserInviteSaga","disableUserSaga","unlockUserSaga","fetchUserEditInfoSaga","submitUserInfoSaga","userManagementSaga","setResendInvitation","getUserEditInfo","_roleList$access_role","roleList","postUserInfo","displayColumn","displayColumnDialogReducer","comanyNotesModal","comanyTouchesModal","userInvitation","UserInvitationModal","userEdit","userEditModal","myWatchListCSVError","myWatchListsCSVErrorModal","editProfileContact","editProfileContactReducer","saveSearchReducer","documentUploadTouchModalReducer","recentActivity","recentActivityModalReducer","companyFilterInfoReducer","buider","companyFilterInfo","companyInfoFilter","modalsReducer","fullscreenReducer","messages","messagesReducer","checkSimilarCompanies","checkUrl","resetUrlData","addCompany","checkSimilarCompaniesSuccess","checkSimilarCompaniesFail","checkUrlSuccess","checkUrlFail","addCompanySuccess","addCompanyFail","getAddedCompany","getUrlData","setStateLoading","checkSimilarCompaniesReducer","checkSimilarCompaniesSuccessReducer","checkSimilarCompaniesFailReducer","checkUrlReducer","checkUrlSuccessReducer","available","foundCompanyId","checkUrlFailReducer","resetUrlDataReducer","addCompanyReducer","addCompanySuccessReducer","company_et_id","company_et_url","addCompanyFailReducer","checkUrlSaga","checkSimilarCompaniesSaga","addCompanySaga","AddCompanySaga","addedCompanyData","AsyncSelect","INCREMENT_FETCHED_COUNT","NOTES_ENABLED","permission","_ref$disabled","_Popconfirm","danger","cancelText","alertsState","alertsInboxState","alertsHistoryState","alertsUpcomingTouchesState","alertsPastDueTouchesState","alertsNewList","alerts","touchesNewList","getRoadmapUrl","getAlertsPageNumber","_state$inbox","getNewUpcomingTouches","DisplayColumnToggle","_useDisplayColumnModa","toggleModalDisplay","SEARCH","SEARCH_SUCCESS","SEARCH_FAIL","searchSuccess","searchFail","fetchTouchesAcrossRegion","fetchTouchesAcrossRegionSuccess","fetchTouchesAcrossRegionFail","getTouchesAcrossRegion","locations","top_five","toggleCompanyNotesDialog","companyNotesReducer","FETCH_SALESLOFT_AUTH_URL","FETCH_SALESLOFT_CADENCES","POST_SALESLOFT_DATA","SALESLOFT_PRELOAD_CONTACTS","fetchSalesloftAuthUrl","fetchSalesloftAuthUrlSuccess","fetchSalesloftCadences","fetchSalesloftCadencesSuccess","postSalesloftDataSuccess","postSalesloftDataFail","salesloftPreloadContacts","salesloftSelectContacts","salesloftSelectCadence","salesloftReset","getAuthUrl","authUrl","getPostData","fetchSalesloftAuthUrlSuccessReducer","fetchSalesloftCadencesSuccessReducer","submitSalesloftFormSuccessReducer","_action$payload$","salesloftSelectCadenceReducer","teamCadence","salesloftSelectContactReducer","salesloftResetReducer","postSalesloftDataFailReducer","contactActions","fetchSalesloftAuthSaga","fetchSalesloftCadencesSaga","postSalesloftDataSaga","preloadContactsSaga","contactSelectors","preloadContacts","useInitialFetchEditOptions","shouldInitialFetchEditOptions","editActions","FETCH_PIPELINE_REPORT_COMPANY","FETCH_PIPELINE_REPORT_COMPANY_SUCCESS","FETCH_PIPELINE_REPORT_COMPANY_FAIL","FETCH_PIPELINE_REPORT_COMPANY_COUNT","FETCH_PIPELINE_REPORT_COMPANY_COUNT_SUCCESS","FETCH_PIPELINE_REPORT_COMPANY_COUNT_FAIL","FETCH_PIPELINE_REPORT_CARD","FETCH_PIPELINE_REPORT_CARD_SUCCESS","FETCH_PIPELINE_REPORT_CARD_FAIL","SAVE_SEARCH_AS_LIST","SAVE_SEARCH_AS_LIST_SUCCESS","SAVE_SEARCH_AS_LIST_FAIL","FETCH_FILTERS","FETCH_FILTERS_SUCCESS","FETCH_FILTERS_FAIL","FILTER_CLEAR","FILTER_RESET","APPLY_FILTERS","TOGGLE_FILTERS_MODAL","HIDE_CARDS_TOGGLE","fetchPipelineReportCompanySuccess","fetchPipelineReportCompanyCount","fetchPipelineReportCompanyCountSuccess","fetchPipelineReportCompanyCountFail","fetchPipelineReportCard","fetchPipelineReportCardSuccess","fetchPipelineReportCardFail","hideCardsToggle","pipelineReportState","pipelineReportCompanies","companiesCount","_state$companies$coun","pipelineReportFilters","pipelineReportOpportunities","opportunities","pipelineReportCardLoading","pipelineReportCompanyLoading","pipelineReportLoading","filterModalIsOpen","modalIsOpen","totalFund","fundAssociation","_state$filters","getValues","saveSearchLoading","getCardStatus","cardHidden","fetchPipelineReportCompanyReducer","isFundEdited","fetchPipelineReportCardReducer","fetchPipelineReportCompanyFailReducer","fetchPipelineReportCardFailReducer","_normalized$company_o","defaultAnalysts","defaultFund","_parsedFilters$fund","is_addon","pipelineFilters","fetchETCompaniesSuccessReducer","total_count","fetchPipelineReportCardSuccessReducer","fund_association","total_fund","clearFiltersReducer","resetFilterReducer","_draftState$filters","newRegion","toggleFiltersModalReducer","_action$payload$filte","deleteFundAndCountry","deleteIlOptxScore","hiddenCard","bi_weekly_pipeline_report_show_cards","persistedRegionFilter","bi_weekly_pipeline_report_region","applyFiltersReducer","loadingActiveReducer","loadingDeActiveReducer","fundList","fundListValues","updateValueAskingAmount","fetchPipelineReportCompanyCountSuccessReducer","hideCardsToggleReducer","fetchPipelineReportSaga","fetchPipelineReportCardSaga","fetchPipelineReportCompanyCountSaga","fetchFiltersSaga","updateFilterSaga","clearFiltersSaga","alertsSaga","getFilterQuery","_normalizedFilter","mappedFiltersURLParams","shouldClear","countQuery","getPipelineReportsCompany","getPipelineReportsCard","getPipelineReportsCompanyCount","gridSearchCountActions","PipelineReport","saveAsListPipelineReport","iframePostMessage","sender","getPluginOrigin","encryptedToken","currentJwt","ScheduledTouchesSortByEnum","SCHEDULED_TOUCHES_DEFAULT_SORT","scheduledTouchesSortBy","ilItem","FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE","FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE_SUCCESS","fetchSearchAutocompleteSuccess","getAutocompleteList","autocomplete","fetchSearchAutocompleteSuccessReducer","fetchSearchAutocompleteSaga","searchAutocompleteSaga","filterSourcesActions","getCompanySearchAutocomplete","setInitialListTab","selectMyPipelineState","getInitialTab","initialTab","setInitialListTabReducer","visited","tab_name","new_date","newDate","formattedPayload","initiator_id","_touch$initiatorId","_touch$attendees","_touch$externalAttend","editable","time","touchTime","endTime","is_optx_id","externalParticipants","externalAttendees","notesHTML","attachments","touchFinancialData","companyEditAllData","add_favorites_section","file_id","fileDownload","new_text","updateUpcomingTouches","unique_ids","getCompaniesInET","isSelectOption","updateAddonCheckbox","addonChecked","updatePortfolio","portfolioData","bulkData","cleanFilter","updatedBody","exportCompanyAddonsToCSV","exportETIntegrationToCSV","exportContactsToCSV","parameters","filter_origin","getCompanyTabLists","updateCompanyRationale","_payload$value","_payload$rationale","updateCompanyNumOfEmployees","number_employees","getCompanyMerges","getCompanySocialMediaWebsiteRank","us_only","usOnly","getCompanySocialMediaG2","getCompanySocialMediaCapterra","getCompanySocialMediaTwitter","getCompanySocialMediaLinkedin","getCompanySocialMediaFacebook","getCompanySocialMediaCrunchbase","getCompanySocialMediaGlassdoor","entity_type","getExtensionCompanies","companyURL","convertSortBy","opinion_type","opinion_status","getCompanyProfileState","getSelectedDescription","getProfileProductCategory","getProfileContacts","getProfileOptxScore","getCompanySources","getIsInBusiness","EditFieldDate","updateDatePresented","_company$banker_name","is_new_matched","getPlacement","_triggerRef$current","itemLength","_ref$itemHeight","itemHeight","_ref$menuPadding","menuPadding","_ref$initialPlacement","initialPlacement","_ref$secondPlacement","secondPlacement","rect","addCompanyInBusinessEvaluationFail","selectInBusinessEvaluation","companyInBusinessEvaluation","addCompanyInBusinessEvaluationReducer","CustomDatePicker","CloseIcon","CloseCircleTwoTone","AddDateButton","dateformat","resetOpenDatePicker","dateValues","setDateValues","displayedDates","setDisplayedDates","openDatePicker","setOpenDatePicker","isShowingToolTip","setIsShowingToolTip","forceRenderKey","setForceRenderKey","lastValue","datePickerRefs","isDatePresented","updateFieldCallback","prevKey","inputContainer","EditFieldDateStyled","onFocus","dateString","newDateValues","newDates","handleDateChange","LIST_OF_FUTURE_DATE_FIELDS","visibility","dataURI","byteString","atob","mimeString","ab","ArrayBuffer","ia","Uint8Array","charCodeAt","Blob","dateRegex","SEND_OPTX_SCORE_RATIONALE","SEND_NEW_OPTX_SCORE_RATIONALE","SEND_OPTX_SCORE_RATIONALE_SUCCESS","SEND_NEW_OPTX_SCORE_RATIONALE_SUCCESS","bulkRemoveFromWatchListSaga","uniqueListIds","updatedSelectedData","failedIds","allErrorMessage","errorForSomeList","updatedData","isRemoveFromAddonManagement","listDetailCountBatch","newLastPageNumber","CreateListWrapper","Divider","_Divider","ErrorMessage","setTitle","isCreateList","setIsCreateList","watchListError","setWatchListError","selectBoxOptions","setSelectBoxOptions","newLists","setNewLists","sortActive","watchListsPopupSelectors","handleCreateOption","fromInput","newOption","handleSorting","watchListsActions","MultiSelectCreatable","onCreateOption","dropdownClassName","listTitleIndex","selectedValueTitleIndex","inCurrentList","toggleSaveSearchModalReducer","fetchAnalystSuccess","financialYearValidationSchema","revenueOptions","arrOptions","gmOptions","Yup","checkFinancialValues","financialType","isEditable","mostRecentYearAvailable","selectedValueArray","currentValueArray","isMoment","mapPhoneNumbers","contactInformation","phoneList","phoneOption","existingPhone","additionalPhones","phoneType","filteredByType","validateContactLimit","formatEditContactForm","psgValues","slackChannelValues","editedData","Symbol","getRadioOptions","getSingleSelectOptions","groupedOptions","groupBy","addedGroups","groupOption","orderAnalystsByCustom","psgContext","BULK_ACTIONS_FIELDS","EQT_CONTACT_FORM_INITIAL_STATE","AUTOSAVE_TIMER_DURATION","fetchAnalystSaga","fetchCardSaga","fetchChecklistResearchDataSaga","toggleDefaultTableViewSaga","sourcingOutreachSaga","newSortBy","queryDataForRequest","payloadForRequest","queryDataForSettings","payloadForSettings","columnsWidth","getAnalystChecklistInsight","userColumnWidths","queryDataSearchCount","payloadSearchCount","getCompanyChecklistInsight","getCardInfoChecklistInsight","checklist_insights_view_default","filtersSaga","ChecklistResearchInsightReport","initSaga","review_date","toggleDefaultTableViewReducer","fetchAnalystSuccessReducer","analysts","fetchCompanyCountFailReducer","previousAddon","fetchCardSuccessReducer","StyledIcon","GridFullScreen","hideFullScreenIcon","pendoAction","fullscreenSelectors","isSafari","userAgent","fullscreenActions","useLocalMultiSelect","localValue","setLocalValue","isLocalChange","setIsLocalChange","_actionMeta$option","searchCountFullScreenStyle","gap","minWidth","ownStylesAdvancedSearch","searchCountOwnStyles","SearchCount","isFullScreen","_ref$searchViewType","searchViewType","_ref$showSearchName","showSearchName","setMatchedView","loadingCount","gridSearchName","contactsSearchName","contactsSelectors","isLoadingPage","tableViewPagination","paginationLongCardView","paginationLongCardSelectors","searchColumnSelectors","matchViewResult","isSearchNameVisible","actualPageSize","formattedSearchCompanyCount","gridType","styleProps","profileActions","fetchFiles","fetchFilesSuccess","fetchFilesFail","fetchFilesFiltersSuccess","fetchFilesFiltersFail","downloadFile","fetchForCompanyId","clearFilesData","sortFiles","changeFilter","TableCellFileName","fileActions","DownloadOutlined","filesState","getFileData","getColumns","_state$filter","_state$filter2","initiateFetchFilesReducer","clearFilesDataReducer","fetchFilesSuccessReducer","file_type","sortReducer","changeFilterReducer","mappedAction","fetchFilesFiltersSuccessReducer","fetchFilesSaga","downloadFileSaga","fetchFilesFiltersSaga","filesSaga","getFiles","getFilesDataSettings","_ref$hasButtons","selectFavoritesState","SvgLogo","selectedListState","getListEditPermission","savedLists","savedListIds","global_list","is_owner","getCSVImportCompanies","getListData","routeSelectors","getRouteListUrl","strict","listUrl","shareListAction","fetchListsExcludingCompanySaga","addCompanyReview","ADD_COMPANY_REVIEW","ADD_COMPANY_REVIEW_SUCCESS","addCompanyReviewFail","ADD_COMPANY_REVIEW_FAIL","useCompanyOwnerEditableField","usePipelineRankEditableField","pipelineRankId","useStageEditableField","companyStageId","value1","value2","defaultRenderValue","StatsCompare","_ref$renderMainValue","renderMainValue","_ref$renderCompareVal","renderCompareValue","mainValue","comparedValue","_useMemo","firstValueProgress","secondValueProgress","getFilledPercentages","_useMemo2","mainfilledProgress","comparedfilledProgress","BottomWrapper","MainStatLabel","ComparedValueBlue","StatsCompareAndSource","isPercentage","comparedLabel","renderNumberOfEmployeesTrendline","monetaryOptions","isFormattedToMillions","formattedToMillions","setCustomValue","_getRouteAlias","_getRouteAlias2","_getRouteAlias3","_getRouteAlias4","isShowTrendingLinesEmployees","isCapitalRaiseHasUnknown","fieldNames","placeholderMessage","customMonetaryValue","handleType","handleConfirmSave","handleURLSave","currValue","ADD_COMPANY_OWNER","ADD_COMPANY_OWNER_SUCCESS","ADD_COMPANY_OWNER_FAIL","ADD_COMPANY_ACTIVE","ADD_COMPANY_ACTIVE_SUCCESS","ADD_COMPANY_ACTIVE_FAIL","addCompanyStageFail","ADD_COMPANY_PORTFOLIO","updateCompanyPortfolio","updateCompanyPortfolioFail","updateCompanyPortfolioSaga","portfolioSaga","employeeGrowthState","employeeGrowth","getEmployeeGrowthData","scoreGrowthState","getScoreGrowthData","employee","createFeaturePrefix","featureType","featurePrefix","RouterLink","FINANCIAL_KEYS","ARR","EBITDA","Revenue","FINANCIAL_OPTIONS_FIELD","_normalizeNegativeSig2","growthStatus","updatedFieldFromGrid","companyCard","isTooltipVisible","setIsTooltipVisible","getRangeValueLabel","_getRangeValueLabel","cellValue","_getRangeValueLabel2","updatedFieldPayload","_normalizeNegativeSig","tooltipLink","tooltipContent","TooltipLink","valueElement","hideDropdownOnFocusOut","triggerNode","_triggerNode$parentNo","_triggerNode$parentNo2","_triggerNode$parentNo3","overflowX","_mapList$flat","_childrenFlatted$repl","mapList","_item$props","childrenFlatted","replaceObjectForCopy","CompanyNameRender","stopClickPropagation","newTabPath","pagePath","stopEventPropagation","showOpenInNewTab","fetchRelationshipManagementSuccess","fetchRelationshipManagementFail","selectCompanyRelationshipManagement","companyRelationshipManagement","getRelationshipManagementData","fetchRelationshipManagementReducer","fetchRelationshipManagementSuccessReducer","fetchRelationshipManagementFailReducer","fetchRelationshipManagementSaga","companyRelationshipManagementSaga","getDasboard","getMapInfo","getEmailStatistics","getOPTXStats","getPipelineInfo","getETMergeHistory","getETAllTimeHighlights","getSourcingOutreach","getAnalystHomeInsightsStats","getAnalystHomeFilters","getNonAnalystHomeFilters","getAnalystHomeTouchActivity","getAnalystHomeActivity","exportChecklistResearch","exportCompaniesOutReachToCSV","sourcingOutReachInfo","exportPipelineToCSV","exportSourcingOutreachToCSV","COMBINE_SEARCH","COMBINE_SEARCH_FAIL","editShareList","cancelEditShareList","shareListSuccess","shareListFail","fetchShareListInfo","fetchShareListInfoSuccess","fetchShareListInfoFail","selectShareListState","listOwner","editedSharedList","editedList","accessRightsOptions","access_rights","otherUsersAccessRightsOptions","share_options","sharedListUsers","editModal","editModalReducer","localUISelectors","usersSelectors","loadingInfo","loadingUsers","userOptions","otherUsersAccessOptions","otherUsersDefaultAccessRights","ownerDefaultAccessRights","usersWithoutSeniorAdvisorOptions","mappedUsers","ownerIndex","mappedUser","selectedUsers","sharedUsers","sharedUsersDict","sharedUser","isEqOwner","editShareListSaga","cancelEditShareListSaga","fetchShareListInfoSaga","shareListSagas","getShareListInfo","mapSharedUsers","sharedWith","ownerId","permission_id","mapShareFormToRequest","editInfo","owner_id","currentUserId","currentUser","currentUserPermission","updateListCurrentUserPermissionPayload","editShareListReducer","cancelEditShareListReducer","shareListSuccessReducer","ShareWatchListMenuItem","shareListReducer","Email","Name","UserAvatar","OwnerInfo","ownerImage","src","alt","Modal","ShareUsersHeader","ShareUserRow","SharedUsersWrapper","TitleContentWrapper","emptyInitialValues","EditShareListModal","formWrapperRef","initialSelectedUsers","setButtonDisabled","apiError","setSelectedUsers","hasPermissionToPublic","setIsPublic","shareListActions","handleSubmit","footer","multiSelectKeyEvent","_formWrapperRef$curre","handleDisableButton","handleEditLabelMissing","currentAccessRight","customAccessRightsOptions","isEditOptionExists","handleDropdownList","disabledOwners","centered","resetForm","enableReinitialize","_Skeleton","_Field","fieldProps","customOnChange","OPERATOR_VALUES","INITIAL_NUMBER_OF_SEARCHES","removedFilter","filterPsgAttendeesType","dateFilterPsgAttendeesType","psgAttendeesDateType","psgAttendeesDate","filterTouchTypeDate","filterTouchType","filterTouchDate","areTouchOptionsChecked","removedFilterValues","valueObj","touchTypeDate","LineChartTooltip","primaryKey","secondaryKey","primaryLabel","secondaryLabel","tooltipDate","generateMoreTags","totalTagsToDisplay","generateTagsListPopover","filterNames","hiddenChildrenIdList","remainingTagsList","toggleRecentActivityModal","createCombineSearchSaga","combineSearchSaga","Header","_Layout","MainHeader","headerClassName","MainContent","hasFixedHeader","contentClassName","SearchInput","forwardRef","onSearch","setCurrentValue","validSearchKey","handleSearch","onKeyPress","ClearSearchButton","_ref$title","_ref$isVisible","CloseCircleOutlined","inputRef","PrivateComponent","wrapTableHeadEllipssis","Table","StyledInlineEdit","$wrapTableHead","$forceCellEllipsis","showSorterTooltip","ReportBreadcrumb","reportPage","hasSourcingOutReach","_Breadcrumb","addCompanyReviewSaga","inAddCompanyReviewSaga","_payload","reviewed_by","reviewed_date","columnNamesReplace","exportDataToCSV","csvString","csvRows","_step","_iterator","_createForOfIteratorHelper","s","done","err","f","convertToCsv","blob","saveAs","filtersSearchCriteria","hideNotification","availableColumns","gridHeaders","columnsUsed","availableColumnsSet","headerKey","last_touch_initiator_name","last_touch_type","next_touch_initiator_name","next_touch_type","pc_first_name","pc_last_name","pc_title","pc_email","pc_phone","pc_linkedin","catch","ResizableTh","Resizable","maxLimit","innerWidth","ResizeColumn","handleResizeStop","handleResizeStart","onResize","handle","onResizeStart","onResizeStop","draggableOpts","enableUserSelectHack","minConstraints","maxConstraints","axis","resizeHandles","companyEquityTouchState","companyEquityTouch","isFetched","getFormValues","getTemporaryFormValues","temporaryFormValues","isAutoFocus","showDropdown","_ref$open","_ref$customWidth","dropDownStyle","_ref$hideDropdownOnFo","dropdownContentRef","_React$useState","_React$useState2","visibleDropdown","setVisibleDropdown","_Input2","StyledWrapper","additionalParameter","shouldShowTooltip","normalizedDates","tooltipAdditionalContent","RadioButtonPicker","localValues","setLocalValues","customDateOpened","setCustomDateOpened","activePickerIndex","setActivePickerIndex","rangePickerValue","RangePicker","onOpenChange","onCalendarChange","StyledCalendarIcon","CalendarOutlined","SingleSelectDateRanges","lastIndex","customIsSelected","getFetchedCount","fetchedCount","incrementFetchedCountReducer","useLoadSpecialFilter","ButtonLink","BulkActionsButton","setIsModalVisible","setField","fieldTitle","setFieldTitle","selectedColumn","setSelectedColumn","setIsValid","changedSelection","setChangedSelection","companiesInMyHomePage","companiesInMyCompaniesPage","companiesInMyWatchList","addonManagementCompanies","companiesOutReachPage","listDetailsSelectors","isRemoveFromWatchList","canMergeCompanies","openModal","handleCompaniesList","handleBulkSalesloft","handleClaimAsOwner","handleMergeCompanies","handleRemoveFromWatchList","handleRemoveFromAddonManegement","bulkActionsET","URLlinks","handleOpenUrl","selectColumnsFeatureState","getColumnDisplay","isCheckListAnalyst","partnerStorage","partnerSelector","getColumnDisplayInitialState","_state$gridKey$analys","getColumnInitialOrder","getColumnInitialLists","includeDateMatched","getColumnLists","getDisplayedColumns","hasActionColumn","existActionColumn","mappedOrder","filterSortableVisibleColumns","sortingGridKey","shouldFetchColumnData","getSelectedListName","userListsSelectors","savedSearchesList","sourceScrubList","listData","fetchSelectOptionsSaga","addRationaleSaga","addCompanyOwnerSaga","companyIndividualEditSagas","getEquityTouchSelectOptions","companyIndividualEditActions","successPayload","companyRationaledActions","styles","iconColor","PhoneOutlined","ContactsOutlined","FileExclamationOutlined","MailOutlined","FileProtectOutlined","ClockCircleOutlined","DoubleRightOutlined","FileTextOutlined","useRecentActivityModal","recentActivityModalSelectors","recentActivityModalActions","ToggleLongCardView","SearchViewButton","ToggleTableView","getCityDependenciesOptions","countryField","stateField","getNewRoute","getDataFromPlugin","_this$parent$isAddon","Step1","Step2","DefaultTable","Step3","Step4","StepCompleted","AddCompanyStep1","formikProps","handleDisableNextButton","shouldGoToNextStep","canGoToNextStep","setUrl","validUrl","setValidUrl","shouldShowValidationResult","isValidUrl","debouncedHandleChange","_formikProps$errors","primaryUrlError","companyNameError","_formikProps$values","shouldDisableNextButton","_FormItem","_document$activeEleme","_document$activeEleme2","_document$activeEleme3","canMoveToNext","activeElement","childNodes","OverlayLoader","isOverlay","AddCompanyStep2","changeStep","shouldLoadCompanies","_useField","useField","urlField","_urlField$value","similarCompaniesColumns","useLoadOptions","loadPrimaryStateOptions","loadSecondaryStateOptions","secondaryCountryField","loadPrimaryCityOptions","loadSecondaryCityOptions","secondaryStateField","loadProductCategoryOptions","loadCompanyOptions","optionsFields","useGetFilterData","step","_useSelector","companySelectors","countries","_filters$1$data$find$","_filters$1$data$find","sectors","subSectors","_filters$3$data$find$","_filters$3$data$find","analystsArray","analystValue","funds","opportunityTypes","_filters$1$data$find$2","_filters$1$data$find2","InputNumberField","_useField2","fieldHelpers","amountRemovedDot","newAmount","fieldValueAsStr","isInputValueAbbreviated","setTouched","DefaultComponents","ProductCategoryMultiSelectAsyncField","selected","setSelected","setIsVisible","filterTagValues","setFilterTagValues","applyDisabled","setApplyDisabled","handleAsyncSearch","_item$is_valid","handleApply","_item$is_valid2","onMenuOpen","flag","renderItem","resetField","helper","AddCompanyStep3","_countryField$value3","_secondaryCountryFiel","_sectorField$value","_subSectorField$value","isLoadingState","setIsLoadingState","isLoadingCity","setIsLoadingCity","isLoadingSecondaryState","setIsLoadingSecondaryState","isLoadingSecondaryCity","setIsLoadingSecondaryCity","hasSecondaryAddressField","_useField3","_useField4","cityField","cityHelpers","_useField5","_useField6","secondaryCityField","secondaryCityHelpers","_useField7","_useField8","stateHelpers","_useField9","_useField10","secondaryStateHelpers","_useField11","_useField12","countryHelpers","_useField13","_useField14","secondaryCountryHelpers","_useField15","_useField16","sectorField","sectorHelpers","_useField17","_useField18","subSectorField","subSectorHelpers","_useGetFilterData","_useLoadOptions","areFieldsValid","_countryField$value","_stateField$value","_countryField$value2","_secondaryStateField$","ProductCategoryField","StageWithRationaleField","_stageField$value","_stageField$value2","_rationaleOptions$fin","_stageField$value3","stageField","stageHelpers","stageRationaleField","setStageRationaleFieldHelpers","oldStageValue","setOldStageValue","rationaleBoxVisible","setRationaleBoxVisible","selectedRationaleOption","setSelectedRationaleOption","otherRationale","setOtherRationale","stageLabel","setStageLabel","selectedLabel","ChangeRationaleWrapper","positionedAbsolute","optionExists","AddonForFieldMultiSelectAsyncField","_isAddonField$value2","_isAddonField$value3","isAddonField","addonForHelpers","_isAddonField$value","handleSelectChange","AddCompanyStep4","_companyOwnerField$va","_rankField$value","_sourceField$value","_opportunityTypeField","_fundField$value","companyOwnerField","companyOwnerHelpers","rankField","rankHelpers","sourceField","sourceHelpers","opportunityTypeField","opportunityHelpers","fundField","fundHelpers","isAddonHelpers","addonForField","AddonForField","AddCompanyStepCompleted","removeButtonFocus","addContacts","addTouch","userEtId","userRegion","_getDataFromPlugin","isNextButtonDisabled","setIsNextButtonDisabled","isFormCompleted","setIsFormCompleted","setStep","moveForward","setMoveForward","urlValidated","setUrlValidated","shouldChangeStep","setShouldChangeStep","companyOwners","_filters$dataAndManag","_filters$dataAndManag2","_filters$dataAndManag3","debouncedValidation","schema","setErrors","validate","abortEarly","inner","isUserCompanyOwner","companyOwnerInitialValues","companyUrlFromPlugin","addCompanyFromPlugin","initialVisibilityToggled","isNext","handleSecondaryButton","closeModal","goToCompanyProfile","maskClosable","_formRef$current","_values$secondaryUrl","_values$secondaryCoun","_values$secondaryStat","_values$secondaryCity","_values$productCatego","_values$isAddon","_values$addonFor","fundValue","etCheckValue","ftesValue","alt_names","secondary_urls","primary_address","primary_address_cont","secondary_address","secondary_address_cont","zip_code","secondary_country","secondary_state","secondary_city","secondary_zip_code","addon_for","Form","ActionMenu","isEllipsisWhite","shouldModalBeVisible","isDropdownVisible","setIsDropdownVisible","isAddCompanyModalVisible","setIsAddCompanyModalVisible","AddCompanyModalWrapper","getClearedFilterValue","logOut","companyState","_payload$updateData","_payload$updateData$f","newDescription","ownerLabel","rankLabel","sectorLabel","subSectorLabel","fetchEquityTouchFormDataSuccessReducer","addToEquityTouchSuccessReducer","updateEquityTouchSelectedContactsReducer","updateEquityTouchSelectedSalesLoftContactsReducer","slContacts","contactSelectedLimit","temporaryContacts","temporaryContactsSelectedLimit","updateTemporaryFormValuesReducer","resetAddToEquityTouchReducer","_persistedFilter$valu","fetchPrimaryContactsActions","primaryContactActions","TableCellBoolean","ADD_COMPANY_RATIONALE","dontShowName","auditTrailActions","getRationaleReasonKey","defaultRationaleScoreReasonType","defaultScoreVerified","defaultRationaleReasonValue","rationaleReasonValue","setRationaleReasonValue","rationaleReasonKey","setRationaleReasonKey","disabledRange","setDisabledRange","isOptionsDisabled","setIsOptionsDisabled","rationaleReasonOptions","reasonKey","customRationaleReasonValue","rationaleReasonKeyTransformed","LogoIcon","_score_v3_growth","borderColor","_state$searchType$gri","SHARE_LIST","getCompanyCardState","loadingIcon","spin","_Spin","indicator","Overlay","fetchAlertsSaga","fetchAlertsHistorySaga","sortAlertsSaga","loadMoreAlertsSaga","updateAlertsSaga","dismissAlertSaga","dismissAllAlertsSaga","fetchUpcomingTouchesSaga","sortUpcomingTouchesSaga","deleteUpcomingTouchSaga","deleteAllPastUpcomingTouchesSaga","deletePastDueTouchSaga","previousPageNum","_err","new_alert_count","roadmap_url","dataHistory","dataInbox","_err2","getUpcomingTouches","upcoming_touches","pastdue_touches","_err3","sortUpcomingTouches","upcomingTouchId","_err4","deleteTouch","_err5","deleteAllTouches","pastDueTouchId","_err6","getBorderRadius","StyledCard","$size","$transparent","LIST_OF_COLUMN_NAMES","calls","emails_sent","past_due_touches","qualified_opportunities_platform","stale_accounts","total_dtl","stale_touches","revived_touches","transferred_to_touches","transferred_from_touches","meetings","start_qo_touches","end_qo_touches","number_touches","qualified_opportunities_addon","StyledLabel","StyledOption","StyledSelect","typesOptions","TrendingControls","searchOutReachTrending","listTrending","handleSelectValue","selectSelector","StyledDrawer","_Drawer","PanelContainer","DependentPanelContainer","canBeShown","CardInfoDivider","TitleContainer","ButtonsContainer","CompanyInfoContainer","ProfileInformationContainer","CompanyLogo","hasLogo","CompanySecondaryInfo","Address","ContentTitle","h3","ContentSubTitle","h4","OptxScoreContainer","OptxScoreContentGraphicContainer","ScoreRationaleDivider","OptxScore","_templateObject23","Logo","_templateObject24","OptxScoreNumber","_templateObject25","_templateObject26","_templateObject27","RationalesWrapper","_templateObject28","_templateObject29","setAccordionKey","fieldsValues","newOptxScoreVerified","_cardData$filter","cardData","cardNames","isSoftwareFieldChanged","isSoftwareRationaleChanged","isInterestingFieldChanged","isPSGFitRationaleChanged","isScoreFieldChanged","isScoreRationaleChanged","isScoreRationaleLowerReasonChanged","isScoreRationaleUpperReasonChanged","isNewScoreFieldChanged","isNewScoreRationaleChanged","isNewScoreRationaleLowerReasonChanged","isNewScoreRationaleUpperReasonChanged","isStateChanged","oneFieldOpenedCondition","twoFieldsOpenedCondition","isOPTXScoreVisibile","isOPTXScoreRationaleVerifiedToFalse","hasNoOPTXScoreRationaleValueFor","hasOPTXScoreRationaleValueFor","threeFieldsOpenedCondition","threeFieldsOpenedExpandedCondition","fourFieldsOpenedCondition","fourFieldsOpenedExpandedCondition","ScoreRationale","normalizedScore","OptxScoreRationale","isShowingRationale","trendKey","logoCompany","OtherOptions","baseStyle","getRationaleTitle","rationaleTitle","OptionsRationale","handleOtherOptionRationaleChange","showTagRationale","setShowTagRationale","setOptionValue","_getFormRationales3","_getFormRationales4","showIsOther","CollapsableFields","collapsableValue","valueRationale","storeRationale","typeOptionsRef","getRationaleKey","Thumb","ThumbUp","ThumbDown","ThumbActions","onUpdateThumbsChecked","collapsableOptions","handleClickThumbUp","AntIcon","isInActiveKey","handleClickThumbDown","Meta","CollapsableCardInfo","NewOptxScoreRationale","handleCardTitle","cardName","cardTitle","AddResearchRationale","isInChromeExtension","useInjectEditFields","activeRationaleScoreType","activeRationaleNewScoreType","accordionKey","getScoreRationaleReason","getNewScoreRationaleReason","optionType","closeIcon","iconCompany","handleCard","backgroundColor","specialCriterias","getFiltersSaga","updateValueSaga","clearFilterSaga","analystsSaga","getAnalystLeaderboardOptions","notifyAction","searchAnalystsLeaderboardSaga","searchAnalystsLeaderboardSagas","oldQuery","pageLoadedSaga","initFilters","initSagas","shouldFetchFilters","PAGE_LOADED","fetchTouchesAcrossRegionSaga","touchesAcrossRegionSagas","fetchEmailStatistics","commonFilterChangeSaga","emailStatisticsSagas","fetchSmartTouchScore","fetchAdditionalStatistics","additionalStatisticsSagas","clearAllFiltersSaga","pipelineInformationSagas","criteriaQueryValues","pipeline_companies_rank","shouldSearch","analystsLeaderboardSaga","handleTypeOfValue","getInternalValue","tabKey","getOPTXValue","isEmptyRevenue","AuditTrailWrapper","$hasFields","isDescription","isAfterRationale","Opinion","FormerValue","User","SearchField","Search","CustomRangePicker","AuditField","_fieldOptions","opportunityData","opportunitySelectors","opportunityDataDealPreparation","dealValues","fieldOptions","lastRevenue","lastRevUpdateAmount","optxScoreImpactLabel","isMoney","capitalRaised","shouldDisplayRationale","shouldDisplayOpinion","_year","_options$find$label","sizeMultiple","renderAfterValue","fromValue","_year2","_options$find$label2","_options$find2","yearFounded","before_value_opinion","renderFormerValue","afterOPTX","after_optx","renderAfterOPTX","fromOPTX","beforeOPTX","before_optx","renderFormerOPTX","useInjectCompanyIndividualEdit","_fields$find","pipelineRank","subSectorAPI","datePresented","lastInvestors","activeOnPipeline","websiteActive","transactionNotes","EditTrigger","_field$after_value","_opportunityDataDealP","_opportunityDataDealP2","_opportunityDataDealP3","_opportunityDataDealP4","_dealValues$deal_type","_opportunityData$fina","_opportunityData$fina2","_field$after_value2","_field$after_value3","_field$after_value4","after_value_opinion","after_value_rationale","EditFieldNumber","fieldPropietaryInfoType","EditPreparationFieldSingleSelect","Paragraph","generatedDescription","before_value_rationale","regeneration_type","Separator","AuditTrailHeader","activeTab","activeProfileKey","setSearchQuery","setStartDate","setEndDate","fetchFields","delayDebounceFn","currentURL","clearTimeout","separator","suffixIcon","AuditTrail","internalFields","optxFields","setActiveTab","infiniteScrollRef","useInfiniteScroll","hasNextPage","onLoadMore","noFields","mappedFields","defaultActiveKey","addSector","addSectorSuccess","addSectorFail","useSectorEditableField","addCompanySector","sectorName","addSubSector","addSubSectorSuccess","addSubSectorFail","useSubSectorEditableField","addCompanySubSector","subSectorName","FETCH_COGNITO_LOGIN_URL","fetchCognitoLoginURL","fetchCognitoLoginURLSuccess","fetchCognitoLoginURLFail","selectCognitoLogin","cognitoButtons","shouldFetchCognitoURL","fetchCognitoLoginURLSuccessReducer","fetchCognitoLoginURLSaga","updateProfileImageSuccess","updateProfileImageFail","updateProfileImageSaga","updateProfilePicture","FILTER_PATH_KEYWORDS","resetFilterSettings","listOfColumnNames","companiesOutReachFilters","sourcing_filters","sourcing_outreach_detail_page_number","SyledButton","_ref$children","pluginVersionManager","PluginManager","_pluginOrigin","set","pluginOrigin","filterIsAiMlSelected","ListTag","searchHeaderHeight","setHeight","useLayoutEffect","updateHeight","load","hasAccess","savedSearchesSelector","loadingCompaniesOutReachSearch","loadingSavedSearch","sortLoading","shouldFetchCompaniesOutReach","companiesOutReachFilterSelectors","loadedUser","loadedFilters","loadedCompaniesOutReachFilters","savedSearchLoaded","CombinedChartTicks","unit","spacing","totalDaysInInterval","days","daysInMonth","monthInQuarter","dy","SvgGradientDefinitions","offset","stopColor","stopOpacity","addOpportunityType","addOpportunityTypeFail","addCompanyPipelineRankSuccess","addCompanyPipelineRankFail","addLeadSourceSuccess","addLeadSourceFail","addSeniorAdviserSuccess","addSeniorAdviserFail","NOTIFY","notificationMiddleware","store","updateCompanyDatePresented","updateCompanyDatePresentedSaga","datePresentedSaga","isDatePresentedModified","StyledLink","ContentLink","contactColumns","adddonColumns","pipelineReportColumns","CompanyColumn","AnalystColumn","CompanyTableWrapper","CompanyTable","overflowHeight","getCompanyTabListsSuccess","companyTabLists","sortCompanyTabLists","getCompanyTabListsFail","clearCompanyTabList","selectCompanyTabList","getHasMore","getPaginationQuery","companyTabListsSuccessReducer","newWatchlists","profile_lists_tab_sorting","getCompanyTabListsSaga","sortCompanyListsSaga","companySaga","FETCH_ADMIN_COMPANY_ACTIVITY","FETCH_ADMIN_COMPANY_ACTIVITY_SUCCESS","FETCH_ADMIN_COMPANY_ACTIVITY_FAIL","FETCH_INSIGHTS_STATS","FETCH_INSIGHTS_STATS_SUCCESS","FETCH_INSIGHTS_STATS_FAIL","UPDATE_INSIGHTS_REGION","UPDATE_FILTER","FETCH_INIT_ACTIVITY","FETCH_ACTIVITY","FETCH_ACTIVITY_SUCCESS","FETCH_ACTIVITY_FAIL","insights","activity","fetchAdminCompanyActivitySuccess","fetchAdminCompanyActivityFail","fetchInsightsStats","fetchInsightsStatsSuccess","fetchInsightsStatsFail","updateInsightsRegion","updateFilter","fetchInitActivity","fetchActivity","fetchActivitySuccess","fetchActivityFail","ACTIVITY_INSIGHT_ORDER","TOTALS_ORDER","FILTER_REGIONS_ORDER","getPipelineInsigthsRegions","region","getPipelineInsightsLoading","getFiltersLoading","getPipelineInsightsRegionSelectedValue","insightsRegion","getPipelineData","_state$insights$data","totals","getSourcingActivityInsightsDateFilter","activity_insights_date","getActivityInsightsDates","filterdata","getSourcingActivityInsightsData","activityInsightData","analyst_previous","labelNameMap","customTotals","getSourcingActivityInsightsRedirect","_state$filters$data","activity_insights_redirect","isSourcingAcitivtyInsightsLoading","getOutreachRecencyFilters","searchFilters","redirects","outreach_recency_redirect","getCompanyActivityData","_state$company","getCompanyActivityDataLoading","_state$company2","recentlyAccessedLists","_state$company3","_state$company3$data","recently_accessed_lists","_state$company4","_state$company4$data","saved_searches_with_new_matches","recentlyViewedCompanies","_state$company5","_state$company5$data","recently_viewed_companies","assignedCompanies","_state$company6","_state$company6$data","getSearchCardsBlocks","_state$filters$data2","action_shortcuts","getReportsCardsBlocks","_state$filters2","_state$filters2$data","workflow_shortcuts","fetchInsightsStatsSaga","fetchCompanyActivitySaga","fetchActivitySaga","fetchInitActivitySaga","updateInsightsRegionSaga","non_analyst_activity_timeframe","non_analyst_insights_regions","featuresSagas","updateInsightsRegionReducer","fetchActivityReducer","fetchActivitySuccessReducer","fetchActivityFailReducer","updateFilterReducer","_action$payload$activ","activityInsightDate","setPlacement","editingContact","menuItems","NewTag","LinearChart","_getFirstValidDate","_ref$isLoading","dataSecondaryKey","labelKey","kpiLabel","newKPILabel","isTrending","headerValue","newHeaderValue","newGrowth","_ref$isPSGCompany","legend","setIntervalValue","setMaxValue","minValue","setMinValue","growthClassName","setGrowthClassName","newMaxValue","setNewMaxValue","newMinValue","setNewMinValue","newGrowthClassName","setNewGrowthClassName","chartPoints","setChartPoints","historyStartsWidth","setHistoryStartsWidth","ticks","setTicks","_useState21","_useState22","formatGrowth","setFormatGrowth","_useState23","_useState24","newFormatGrowth","setNewFormatGrowth","_useState25","_useState26","psgDotCoordinate","setPsgDotCoordinate","areaRef","areDefaultTicksSetRef","defaultKey","updateGrowth","_data$key","_data$key2","updateNewGrowth","_data$key3","_data$key4","v3_growth","_data$defaultKey$data","emptyLabels","_data$defaultKey","_data$defaultKey2","_data$defaultKey3","_data$defaultKey4","_data$defaultKey5","_data$defaultKey6","v3_max","v3_min","isSameOrBefore","_points","isSameOrAfter","_data$key5","_data$key6","_data$key7","_data$key8","_data$key9","_data$key10","_data$key11","_data$key12","_data$key13","betaScoreExtra","renderDot","renderActiveDot","xCoord","yCoord","Gradients","LineChart","tickSize","orientation","tickCount","connectNulls","activeDot","background","borderRadius","fetchScheduledTouchesSaga","fetchScheduledTouchesNextPageSaga","fetchScheduledTouchesDashboardSaga","fetchScheduledTouchesCountSaga","changeSelectedDateSaga","selectedDate","selected_period","touch_filters","touch_sorting","getScheduledTouches","getScheduledTouchesDashboard","getScheduledTouchesCount","fetchScheduledTouchesReducer","fetchScheduledTouchesNextPageReducer","fetchScheduledTouchesDashboardReducer","fetchScheduledTouchesCountReducer","fetchScheduledTouchesFailReducer","fetchScheduledTouchesDashboardFailReducer","fetchScheduledTouchesCountSuccessReducer","_action$payload$tabs$","insightTotalTouches","rank_type","fetchScheduledTouchesCountFailReducer","fetchScheduledTouchesSuccessReducer","remained_touch_count","fetchScheduledTouchesNextPageSuccessReducer","fetchScheduledTouchesDashboardSuccessReducer","_getParametersFromURL","_getParametersFromURL2","input_dates","touch_types","inputDateOption","inputDate","resetScheduledTouchesFilterReducer","changeSortingReducer","changeStageTypeReducer","changeTouchTypeReducer","changeRankTypeReducer","changeSelectedDateReducer","changeSelectedPeriodReducer","changeSelectedTabReducer","LegendWrapper","ChartLegend","fetchExtensionCompanies","fetchExtensionCompaniesSuccess","fetchExtensionCompaniesFail","clearExtensionCompanies","extensionProfileState","extension","getProfiles","profiles","fetchExtensionProfileSuccessReducer","clearExtensionProfileReducer","fetchExtensionCompaniesSaga","hostURL","touchPagination","activeProfile","cardActions","userListActions","employeeGrowthActions","notesReducer","notesSaga","userLogin","userLoginCrossTabs","ContactSelectGlobal","PopupTooltipContainer","ContainerButtons","_SubmitButton","FinancialsCard","DealPreparationCard","FundingCard","CustomerKPICard","TechnologyCard","PropietaryInfoContainer","DealPresentationWrapper","OtherFinancialsInformationTitle","OtherFinancialsInformationWrapper","OtherFinancialsInformationRow","OtherFinancialsInformationLabel","OtherFinancialsInformationValue","FinancialsWrapper","DropDownExportContainer","DeleteFinancialYearButton","EbitdaCol","COMPANY_CSV_SIZE_LIMIT","GridPagination","onPageChange","totalItemsCount","searchCountPageSize","selectedCountType","isLoadingCount","searchCountStyle","isLoadingList","handlePageChange","handlePaginationPendoAction","PaginationPerPage","Pagination","activePage","itemsCountPerPage","pageRangeDisplayed","itemClass","innerClass","linkClass","firstPageText","DoubleLeftOutlined","prevPageText","LeftOutlined","nextPageText","RightOutlined","lastPageText","perPageValues","handleLinkClick","useIsTabletOrSmaller","useBreakpoint","down","useIsLaptopOrSmaller","useReduxFullScreen","originalOptions","onExitFull","restOriginalOptions","_useFullscreen","useFullscreen","setFull","exitFull","_excluded3","HTML","useIsMount","isMountRef","ShowFilterButton","isFilterDisabled","tooltipTitle","FilterOutlined","getGeoRangeValuePath","geoRangeSchema","geolocationList","_geolocationList$","_geolocationList$2","geoRange","createError","geoCountrySchema","geoCountry","_geoRange$","code","TotalsCardLabels","getValidationSchema","searchTitles","initialValueLength","isOverwritten","hasSameName","saveListSchema","exclusive","TouchesNotificationItems","lazy","NotificationItems","TABS","getSortingOrder","RecentActivity","onDismissNotification","onDismissUpcomingTouch","onDismissPastDueTouch","alertsUpcomingTouchesData","alertsPastDueTouchesData","filtersLoading","newUpcomingTouchesCount","upcomingTouchesNewList","modalClass","handleScroll","elm","scrollHeight","handleSort","getCountForActiveTab","Suspense","fallback","getContainer","_Badge","overflowCount","ArrowUpOutlined","ArrowDownOutlined","sortNotificationsButton","alertActions","onTabClick","nextTab","handleTabChange","animated","onDismissTouch","autocompleteSaga","paginationSaga","filterSagas","viewTypeSaga","paginationLongCardSaga","columnsSaga","sortSaga","histogramSaga","NAVIGATION_SUBMENUES","navPaths","PrivateMenuItem","PrivateSubmenu","SubMenu","LogOut","logOutSaga","cognitoLogoutSelectors","cognitoLogoutActions","authActions","isChromeExtenison","Notifications","clickedOutsideNotifications","setClickedOutsideNotifications","_useRecentActivityMod","_useRecentActivityMod2","recentActivityModal","toogleRecentActivityModal","inboxNewAlertsCount","setInboxNewAlertsCount","savedSearchLoading","fetchInboxAlerts","fetchUpcomingTouches","alertSelectors","upcomingTouchesData","pastDueTouchesData","handleDismissNotification","handleDeleteUpcomingTouch","handleDeletePastDueTouch","toggleModalHandler","UserPicture","ProfileSubMenu","loadingSuggestedSearches","SuggestedSearch","SvgLogoBackground","gradientUnits","LogoBackground","NavigationTrigger","Sider","defaultOpenedKeysExceptions","defaultOpenedKeys","exceptions","getDefaultOpenedKeys","navigationPaths","MainNavigation","openedKeys","setOpenedKeys","_useUserRole","submenuItem","getOpenedKeys","newKeys","handleSubmenuOpenChange","collapsible","NavigationLogo","openKeys","paddingRight","HomeOutlined","BarChartOutlined","SettingOutlined","_Affix","offsetBottom","hasGAInitialized","useAnalytics","ReactGA","initialize","gaOptions","Analytics","send","hitType","Pendo","currentEnv","rootDomain","getEnv","visitor","account","LayoutContext","useInjectGrid","useInjectProfilePage","useInjectAnalystLeaderboard","useInjectBulkActions","useInjectListsAndSeaches","useInjectAlerts","MainLayout","extensionLayout","savedSearchActions","isTabletOrSmaller","fullScreenSelectors","layoutClassname","handleStorageChange","fullScreenActions","cookieToken","close","handleCookieStorage","changed","change","_step2","_iterator2","_window","_window$cookieStore","isChrome","cookieStore","_window2","_window2$cookieStore","defaultCollapsed","onCollapse","up","fixedStyles","StyledMainHeader","hasSider","hasSiderCollapsed","MainHeaderView","ToggleSortType","tableElement","ToggleSearchViewSort","ClearSortButton","SearchMenu","ListsMenu","ClearSortingMenuItem","MyCompaniesMenu","GridDropdown","overlayMenu","setOverlayMenu","ResetWidthsOnlyMenu","GridMenu","ContactsMenu","PipelineMenu","SUPPORTED_FILE_TYPES_LIST","getFileExtension","lastIndexOf","bytesToMB","bytes","valueInMB","DocumentUploadItem","FileIconWrapper","FileInfo","FileName","FileSize","UploadProgress","StyledDocumentUploadItem","FILE_ICONS","FileWordOutlined","FilePdfOutlined","FilePptOutlined","FileExcelOutlined","FileZipOutlined","FileIcon","itemClassName","Dragger","_Upload","UploadOutlinedIcon","UploadOutlined","UploadText","DragAndDropContent","SupportedFileTypes","formattedFileTypes","DocumentDragAndDrop","accept","itemRender","_originNode","_fileList","customRequest","_options$onSuccess","onSuccess","beforeUpload","fileExtension","newFileList","uid","originFileObj","reader","FileReader","onerror","readAsDataURL","convertFile","StyledNotesLabel","DocumentUploadModal","_ref$isChromeExtensio","setNotes","isSubmitted","setSubmitted","resetModal","documentUploadTouchActions","htmlFor","TableColumnFilterContext","setColumnDisplay","setSortableColumns","setPinnedColumns","ColumnHeader","ColumnWrapper","selectAll","TableColumnFilter","gridView","handlePin","initialColumnState","initialColumnOrder","handleSelect","checkAll","handleIsraelScoreColumn","PushpinOutlined","DragDropContext","onDragEnd","destination","newItems","_result$splice","removed","reOrder","Droppable","droppableId","provided","snapshot","droppableProps","Draggable","draggableId","draggableProps","dragHandleProps","DrawerHeader","onApply","Drawer","DisplayColumnModal","_useDisplayColumnModa2","_useSelector2","sortable","sortableColumnsReference","columnsActions","shouldPin","pinIndex","unPinnedIndex","validationAllInfo","stageRequiredValues","_this$parent$last_rou","_this$parent$last_rou2","_this","of","_this$from","_this$from$","_this$from$$value","DrawerEditAll","EditAllContainer","TabLoader","EditAllTabsGroup","EditAllModalTitle","EditAllCompanyInfo","CompanyDrawerBanner","EditAllDialog","_company$company_id","useInjectEditAllCompany","useInjectLocalStorageAutosave","dataLoading","editAllDialogSelectors","getEditAllCompany","getEditAllFields","proprietaryFields","getEditPropInfo","getEditEqtView","getEditGridOrder","editIdInfo","getEditIdInfo","editFavoriteInfo","getEditFavoriteInfo","featuredSelectors","getActiveTabName","activeEditTabIndex","setActiveEditTabIndex","tabTitle","setTabTitle","setIsLoading","showFormDataErrorMask","editAllDialogActions","_formRef$current2","newTabIndex","tabSource","flattedFields","handleModalCancel","handleCreateCompanyEdit","customMessage","stageRationaleRequiredValues","fieldsLabels","handleInitialValues","validateOnMount","_formRef$current3","LocalStorageAutoSave","companyFields","searchFields","searchFieldsLabels","FilterTagsNewDateMatched","dateMatchedTag","selectedCombinedSearch","updatedItem","CloseTagIcon","FilterTags","_ref$listType","showSingleTagCloseIcon","_useMaxDisplayedChild","useMaxDisplayedChildren","updateContentDependency","domRef","countHiddenChildren","moreTags","setMoreTags","remainingTags","setRemainingTags","nameOrOperator","classes","_filter$split","_filter$split2","finalValuesString","isQueryFilter","useNonVirtualizedTable","virtualizedActive","setVirtualizedActive","_process$env$REACT_AP","useIsForTesting","ignoreTesting","isForTesting","usefor","mapSortFieldQuery","mapSortOrderQuery","employeeGrowthReducer","scoreGrowthReducer","CompanyGraphsSaga","FormWrapper","handleValidateStatus","isSearchNameExists","SaveSearchForm","savedListTitles","areOptionsDisabled","handletoggleModal","handleDelete","handleSetSaveBtnDisabled","isSearchNameOverwritten","helpersIsOverwritten","helpersHasSameName","helpersTitle","searchNameExistsInTitles","handleEqualsSavedSearchNames","SaveSearch","_ref$showButton","showButton","setInitialFormData","modalSelectors","customValues","TestingGridTable","_ref$maxHeight","mergedColumns","defaultColumnsFast","columnsSet","updateFinalColumns","overflow","minHeight","textOverflow","whiteSpace","FormikMultiSelect","isContactForm","_useLocalMultiSelect","companyID","toggleCompanyNotesModal","modalTouchesActions","companyEditAllActions","modalActionsAddResearch","dropdownOpen","setDropdownOpen","setOpenDropdownSelectList","setRationalePopover","setOpenEditNotePopover","notesActions","toggleFavoriteCompanyEditableField","scrollTableOnSorting","tableRef","scrollLeft","disableSelectAllCheckbox","selectedRows","selectAllCheckbox","numberOfRowsAvailableForSelection","numberOfRowsToBeSelected","HTMLInputElement","useMultiSortNumbers","tableWrapperRef","cell","dataset","sortingCell","useSelectAll","selectedRowKeys","setShowSelectAll","ExternalScroll","refElement","isVirtualGrid","scrollWrapper","isMenuCollapsed","normalizedIsMenuCollapsed","isScroll","_refElement$current","scrollCurrent","gridCurrent","scrollLeftMax","clientWidth","addedSize","handleScrollElement","handleGridElement","_refElement$current2","scrollElementDiv","refElementContent","onscroll","customClassName","RenderCell","originNode","mapTagsToNamesAndOperators","parentIds","allSearches","operators","parentSearches","_allSearches$find","parentSearch","ClearAllSortingMenuItem","ToggleSortTypeMenuItem","searchViewSelectors","toggleSortType","DropdownDotRemove","handleDeleteItem","handleEditItem","dropddownMenu","MoreOutlined","CardNotification","onDeleteCompanyNote","avatarImg","note_created_date","CompanyNotes","fetchNotes","onCreateCompanyNote","setNoteTextState","shouldFetchNotes","errorNotifications","handleCreateCompanyNote","setGeoRange","geoRangeZipCode","geoRangeCountry","country_name","setGeoRangeSuccess","setGeoRangeFail","setGeoRangeSaga","GeoRangeSaga","getGeoRangeOptions","SelectAllContainer","BottomBarContainer","SelectAllBanner","totalNumber","handleDeselect","numberOfCompanies","selectedCompaniesMessage","toggleSelect","Menu","SearchTypeMenu","selectedSearchType","outreachDetailsfilters","useRouteMatch","searchTypeActions","ItemGroup","DISPLAY","isDisplay","toggleDisplay","showClearIcon","getCompanyEditAllState","companyEditAllForm","getCurrentFavoriteCompanyEditableName","getLastRevenueUpdateAmountYear","saveSearchSelectors","equityTouchSelectors","searchIsLoading","sortIsLoading","savingSearch","loadingHistograms","listsSearchSelectors","loadingSort","listIsLoading","StyledButton","$hide","ArrowIcon","ToggleButton","useTableLayoutHeight","paginationId","windowSize","tableHeader","mainHeaderHeight","extraDependentValues","tableScroll","setTableScroll","extraDep","_tableWrapperRef$quer","_document$querySelect","tableDOMRect","windowHeight","paginationHeight","bottomSpace","CHECKLIST_RESEARCH_INSIGHTS","SOURCING_OUTREACH_SUMMARY_REPORT_DETAILS","PIPELINE_REPORTS","EQUITY_TOUCH_INTEGRATION","ViewWrapper","SavedViewMessage","useSaveViewMessage","toggleModalFilters","destroy","DropdownInput","onToggle","onRenameList","setInput","readableListType","ShareListItem","showModal","setShowModal","initialUsersSelected","setInitialUsersSelected","usersSelected","setUsersSelected","userIds","actionsShare","paddingBottom","MakeDefaultFilter","defaultSearchId","AddListAssociationMenuItem","isEdit","initialCompany","selectedCompany","setSelectedCompany","RemoveListAssociationMenuItem","domEvent","existingNames","allSearchIds","CombineSearchMenuItem","initialSavedSearches","savedSearchesNames","numberOfSearchFields","setNumberOfSearchFields","_inputRef$current","handleClose","FieldArray","arrayHelpers","Fragment","setFieldTouched","strong","DownloadMenuItem","ActionMenuItem","ListActionsMenu","toggleInput","handleRemoveList","isContacts","onVisible","listAssociation","isOwner","isShareable","Edit","ShareOnly","showCombineSearchesMenuItem","showDelete","ShareListMenuItem","ListActions","handleGetInput","dropdownInput","OPTXInsights","companyProfileWatchLists","CompanyTagsCollapsable","current_ceo","CompanySourceDescriptions","pannelLoading","profileSearchSelectors","loadingProfile","loadingTouches","Icons","StyledDropDown","CardHeaderStyles","ArrowButton","ButtonWrapper","CardPannelHeader","logo","currentCompanyIndex","disableLeftArrow","setDisableLeftArrow","disableRightArrow","setDisableRightArrow","_companies$currentCom","currentCompanyUrl","_companies$currentCom2","CardPannelGraphs","employeeGraphData","graphSelectors","isEmployeeGraphLoading","scoreGraphData","isScoreGraphLoading","fundingGraphData","fundingSelectors","isFundingGraphLoading","roundsTotal","totalInvestors","extraFunding","LinearCombinedChart","BarChartIntervals","emptyText","CardPannelWrapper","_props$$location","$location","$topOffset","_props$$location2","CardPannel","pannelSelectors","NewsFeed","crossOrigin","fetchSourcingOutreachSuccess","fetchSourcingOutreachFail","isFirefox","_initialValue$toStrin","_initialValue$toStrin2","_initialValue$toStrin3","resetValue","_initialValue$toStrin4","_initialValue$toStrin5","isFieldValueAbbreviated","dropdownMatchSelectWidth","loadingMyCompaniesSearch","loadingMyCompaniesSort","shouldFetchMyCompanies","persistFilters","loadedMyCompanies","loadedMyCompaniesFilters","setGrowth","handleClassName","_data$interval","tickFormatter","strokeDasharray","useNavigateOnCompanyNameClick","_target$parentElement","_target$parentElement2","getAttribute","fetchWWWebsiteRank","fetchUSWebsiteRank","fetchWWWebsiteRankSuccess","fetchWWWebsiteRankFail","fetchUSWebsiteRankSuccess","fetchUSWebsiteRankFail","getSocialMediaState","getUSOnlyData","websiteRankData","us","nonUs","fetchUSWebsiteRankSuccessReducer","fetchWWWebsiteRankSuccessReducer","clearStateReducer","fetchWWWebsiteRankSaga","fetchUSWebsiteRankSaga","websiteRankSaga","fetchG2Data","fetchG2DataSuccess","fetchG2DataFail","g2Data","G2DataSaga","g2DataSaga","fetchGlassDoorData","fetchGlassDoorDataSuccess","fetchGlassDoorDataFail","glassDoorData","fetchGlassDoorSaga","glassDoorSaga","fetchLinkedinData","fetchLinkedinDataSuccess","fetchLinkedinDataFail","linkedinData","fetchLinkedinDataaga","linkedinDataSaga","fetchCrunchbaseData","fetchCrunchbaseDataSuccess","fetchCrunchbaseDataFail","crunchbaseData","fetchCrunchbaseDataSuccessReducer","fetchCrunchbaseDataSaga","crunchbaseDataSaga","fetchTwitterData","fetchTwitterDataSuccess","fetchTwitterDataFail","twitterData","fetchTwitterDataSaga","twitterDataSaga","fetchFacebookData","fetchFacebookDataSuccess","fetchFacebookDataFail","facebookData","fetchFacebookDataSaga","fetchDataSaga","fetchCapterraData","fetchCapterraDataSuccess","fetchCapterraDataFail","capterraData","fetchCapterraDataSaga","CapterraDataSaga","websiteRankReducer","g2DataReducer","glassDoorDataReducer","linkedinDataReducer","crunchbaseDataReducer","twitterDataReducer","facebookDataReducer","capterraDataReducer","facebookDataSaga","capterraDataSaga","socialMediaLoading","websiteRankSelectors","capterraSelectors","crunchbaseSelectors","facebookSelectors","g2Selectors","glassdoorSelectors","linkedinSelectors","twitterSelectors","websiteRankLoading","capterraLoading","crunchbaseLoading","facebookLoading","g2Loading","glassdoorLoading","linkedinLoading","twitterLoading","LineChartWrapper","ChartHeaderColumn","ChartHeaderLogoColumn","ChartLabel","RatingLabel","ChartHeader","stars","headerLabel","headerLabelExtra","headerValueExtra","_Rate","allowHalf","ReversedTicks","chartLabel","isReversed","referenceLineData","has_overflow","AreaChart","allowEscapeViewBox","ReferenceLine","isFront","Area","WWWebsiteRankChart","_activeChartData$data","_activeChartData$data2","_activeChartData$data3","chartInterval","quarters","useMount","localActions","activeChartData","outputDuplicateQuarters","newActiveChartDataWithUniqueQuarters","labelKeyAlt","best_rank","current_rank","DoubleChartWrapper","DoubleLineChart","secondaryDataKey","ChartStyles","ComposedChart","angle","dx","yAxisId","G2Chart","num_of_reviews","GlassDoorChartWrapper","ChartRow","removeDecimals","trunc","GlassDoorChart","strokeColor","trailColor","LinkedinChart","total_followers","CrunchbaseChart","TwitterChart","FacebookChart","CapterraChart","USWebsiteRankChart","gridGutter","SocialMedia","setChartInterval","activeChartDataLinkedin","localLinkedinSelectors","activeChartDatFacebook","localFacebookSelectors","localLinkedinActions","localFacebookActions","changeInterval","AddWatchList","onTitleChange","NameWrapper","extra_options","isETGroup","et_group_id","_ref$disabledOptions","disabledOptions","showCreateList","searchValue","setSearchValue","companyWatchListsIds","watchListsSelectors","newDataList","_options$itemId","setSelectedRowKeys","_React$useState3","_React$useState4","setFilteredData","rowSelection","newSelectedRowKeys","selectedRow","getCheckboxProps","handleTitleChange","WatchListOptions","SortWrapperStyled","SortSelectLists","AddCompanyToListPopover","favoriteListsLoading","errorOnConflict","error_on_conflict","createNewList","setAction","selectedOptionsRef","handleAction","companyActiveWatchlist","deletedItem","activeWatchlistArr","toggleUserInvitationDialog","sendUserInvite","sendUserInviteSuccess","sendUserInviteFail","userInvitationDialogState","userInvitationDialog","toggleUserInvitationDialogReducer","sendUserInviteSaga","userInvitationSaga","userManagementSelectors","setInvite","userManagementActions","ToggleLongCardViewContainer","ToggleTableViewContainer","CardPannelSorting","_sorting$","defautlOptxScore","optxScore","sortingValues","selectValue","QuickFiltersToggle","setOpen","SearchGridWrapper","$cardView","SearchColWrapper","ControlsWrapper","PageTitle","PageTitleWrapper","SearchGridControls","flexWrap","GridActionMenu","GridContext","TOUCH_TIME_FORMAT","TOUCH_FORM_INITIAL_STATE","initiatorHasEtId","scheduleInterval","validationTouch","notOneOf","useInitCompanyTouchesDialog","DrawerTouches","TouchContainer","TouchModalTitle","isSaveDisabled","saveBtnStatus","saveBtnStatusByAdditionalFields","TouchPropInfo","TouchInformation","AdditionalCompanyInfo","isFieldChanged","isCompanyOwner","normalizedSelectedValue","CompanyTouches","COMPANY_ID_FROM_URL","IS_FROM_GRID","financialsLoaded","touchFields","selectedStageType","selectedStageRationale","selectedRankType","selectedCompanyOwnerType","hasAllFormDataLoaded","companyStageOptions","companyRankOptions","shouldUpdateToInitial","setShouldUpdateToInitial","useAutosave","companyInfoToSaveRef","initiatorid_optx","missingMinutes","minute","startTime","_editTouch$externalPa","editTouchFormattedDate","starttime","endtime","_formRef$current$valu2","_formRef$current4","useFormValue","handleCompanyInfoChange","newInfo","_formRef$current5","_formRef$current$valu","additionalCompanyInfoPayload","payloadRationale","isStageChanged","isStageRationaleChanged","companyStage","normalizedCompanyStage","isRankChanged","companyRank","normalizedCompanyRank","isCompanyOwnerChanged","normalizedCompanyOwner","_formRef$current6","setUpdateToInitial","setInfoToSave","touchParentType","HeaderContent","StyledSearchGridControls","StyledShowingCount","ShowingCount","StyledImage","NoNewsTitle","ClickHereText","GoogleNews","Card","googleNewsImage","GoogleNewsCol","fetchRegionOptions","fetchRegionOptionsFail","fetchRegionOptionsSaga","regionSettingsSaga","EllipsisExpander","AI_DESCRIPTION_KEY","setLines","isThumbsDown","setIsThumbsDown","loadingDescription","setLoadingDescription","saveHistory","isDescriptionAI","CompanyProfileActions","FeedbackMechanism","is_ai_description_approved","isGenerated","handleThumbUp","handleThumbDown","handleRegenerate","textDecoration","FeedbackMechanismWrapper","setDefaultValue","BarChartTooltip","tooltipData","investors","round_name","BarCustomizedLabel","lastKey","tooltipVisibility","setTooltipVisibility","extraContent","onMouseEnter","onMouseLeave","LabelList","EditParentCompanyInfluence","handleParentCompanyClick","parentCompanyName","_ref$record","sourcingOutReachTrending","address","IsraelFlag","flexFlow","_score_growth","maxRadius","ySign","xSign","clockWise","newRadius","groupDataByQuarter","groupData","logOutURL","hasSelectViewChanged","setHasSelectViewChanged","RationaleVerifiedWrapper","setTagsCollapsed","SingleValueContainer","SelectContactCell","ExternalSelectWrapper","pageLoaded","AnalystsMultiSelect","SecondaryTitle","TypographyTitle","ByAnalystsOrTeamMultiSelect","tooltipValueFormat","PreviousPeriodLabel","StyledTooltip","LeaderboardChartTooltip","labelStyle","previous","showCurrent","showPrevious","previousPeriod","previousPeriodLabel","previous_date","getLegendInterval","legendOption","LeaderboardChart","legendFormatter","periodLabel","filterNull","defaultLineProps","blue","OptionValue","TitleValue","formatTrending","CardTitle","contentStyles","PopoverContentTitle","CardOptionsWrapper","PastDue","$value","cardActiveStyles","CardTitleStyles","StyledInfo","TrendingValueStyles","mapInfoSection","mapPastDueCardOption","mapCardOption","FilterCards","mappedCards","renderInfo","cardInfoDictionary","_card$options","md","useSingleSelect","mapSelectedOption","SingleSelectButtons","FilterSingleSelectButtons","stageChangeStatuses","_useSingleSelect","FilterMultiSelect","headOptions","ChartCardHead","searchCategory","FilterSingleSelectDateRanges","_item$values","isTagEditable","showRestoreIcon","filtersActions","ErrorBoundary","_Component","_inherits","_super","_createSuper","setState","_this$props","Component","fitToLocations","bounds","google","maps","LatLngBounds","latlng","extend","getNorthEast","equals","getSouthWest","extendPoint1","LatLng","lat","lng","extendPoint2","fitBounds","worldViewFit","worldBounds","actualBounds","getBounds","setZoom","getZoom","containerStyle","mapOptions","minZoom","clusterOptions","imagePath","TouchesMap","_useLoadScript","useLoadScript","googleMapsApiKey","GLOBAL_CONFIG","isLoaded","loadError","setMap","zoomSize","mapLocations","coordinates","addListenerOnce","addListener","currentZoom","onLoad","mapInstance","fullscreenElement","onUnmount","GoogleMap","mapContainerStyle","MarkerClusterer","clusterer","Marker","noClustererRedraw","MemoizedTouchesMap","Total","LegendCard","getTopTouchLabel","iso_2","Head","Body","OrderedList","ol","OrderedListItem","li","TopTouchesLegend","AnalystsTouches","TopTouches","Section","h2","BodyContent","Banner","SubSection","SubSectionTitle","createLabelFormatter","timerPeriod","selectedInterval","receivedFormat","dayFormat","hourFormat","clone","handleLabelHourFormatter","dateEndString","handleLabelWeekFormatter","commonBarProps","leftBarProps","rightBarProps","tooltipProps","EmailsSentChart","timePeriod","labelFormatter","barSize","EmailsSentTitle","selectedPeriodLabel","StyledStatsCompare","formatTouchesAverage","formatValueWithPercent","hidePercentage","formatPercent","formatAverageWithPercent","EmailStatistics","emailInfo","StyledStatsSection","email_touches_statistics","datetime_period","total_emails","total_avg_emails","salesloft_email_statistics","total_email_sent","team_avg_sent","total_opened_sent","team_avg_opened_sent","$selected","UserNames","ChartTooltip","analystName","is_selected","y_axis","SmartTouchScoreChart","InfoContent","SmartTouchScore","RadarChartOutlined","selected_average","team_average","StatsSection","AdditionalStatistics","StatsPresentation","all_time","countText","$marker","RenderLiItem","_ref$renderItem","LabelValuePair","renderStageItem","StyledOrderedList","OtherDealStages","dealStages","TooltipContent","tooltipPayload","ChartsWrapper","SelectedPeriodWrapper","fillContent","PreviousPeriodWrapper","createLegendFormatter","momentDate","selectedPeriodKey","previousPeriodKey","valueYAxisProps","tooltipCursor","PipelineChart","selectedPeriodDate","previousPeriodDate","selectedPeriodName","previousPeriodName","selectedPeriodLegendFormatter","previousPeriodLegendFormatter","syncId","barGap","barCategoryGap","textAnchor","FilterSingleSelect","PreviousPeriodSelect","isAllTimeRange","storeValue","StyledTitle","$Card","GridChart","Grid","GridOtherDealStages","PipelineInformation","StyledMainContent","StatsWrapper","AnalystsLeaderboard","initActions","paddingTop","fetchCompanyMerges","setSelectedCompanies","setUnmergeLoading","setUnmergeCompleted","resetUnmerge","toggleUnmergeModal","toggleShouldCopyData","resetPagination","setUnmergeCompanyId","setUnmergeError","fetchMerges","fetchMergesSuccess","fetchMergesFail","getCompanyMergesState","getCompanyMergesPagination","getCompanyMergesCount","getUnmergeModalVisible","unmergeModalVisible","getUnmergeLoading","unmergeLoading","getUnmergeCompleted","unmergeCompleted","getShouldCopyData","shouldCopyData","getUnmergedCompanyId","unmergedCompanyId","getUnmergeError","unmergeError","fetchCompanyMergesSaga","unmergeCompaniesSaga","sourceIds","fetchMergesReducer","resetData","fetchMergesSuccessReducer","setUnmergeCompletedReducer","setUnmergeLoadingReducer","resetUnmergeReducer","toggleUnmergeModalReducer","resetPaginationReducer","toggleShouldCopyDataReducer","setUnmergeCompanyIdReducer","setUnmergeErrorReducer","UnmergeModal","mergeSelectors","isModalVisible","mergeActions","cancelButtonProps","MergeHistory","companySources","selectedCompaniesData","History","companySearchLib","TableCellTeams","FETCH_REVENUE_GROWTH","fetchCompanyRevenueSuccess","fetchCompanyRevenueFail","fetchCompanyRevenueGrowthSaga","companyRevenueGrowthSaga","revenueGrowth","tagsSagas","useInjectCompanyProfile","companyProfileReducer","useInjectCompanyTouches","useInjectCompanyMerges","useInjectAuditTrail","useInjectCompanySocialMedia","resetPassword","newPassword","resetPasswordSuccess","resetPasswordFail","resetPasswordSaga","passwordSaga","FETCH_EMPLOYEE_GROWTH","fetchCompanyEmployeeGrowth","fetchCompanyEmployeeGrowthSuccess","fetchCompanyEmployeeGrowthFail","fetchCompanyEmployeeGrowthSaga","companyEmployeeGrowthSaga","TextWrapper","SelectText","FitText","PSGFitDefault","loadCompanyListSaga","userListsSearchSaga","defaultFilter","defaultColumnOrder","defaultPinnedColumns","SubSectionWrapper","_ref$isDateTitle","isDateTitle","formatedTitle","StyledCompanyLink","TableCellAssociatedCompany","FiltersModalContent","FiltersModal","onClearFilter","_ref$hideChildClass","hideChildClass","_useSize2","tagsWrapperSize","tagsWrapperRef","setCountHiddenChildren","setHiddenChildrenIdList","hiddenChildren","childrenSorted","childrensWidths","child","getComputedStyle","maxIndex","tagsWidth","availableWidth","TableCellScore","verifiedKey","register","delimiters","thousands","decimal","abbreviations","thousand","million","billion","trillion","ordinal","currency","symbol","locale","presetColors","grey","presetPalettes","gray","getColors","defaultTheme","breakpoints","xxl","pulse","borderPulse","Preloader","Status","Spinner","GlobalLoader","CustomGlobalLoader","PrivateRoute","Route","Redirect","PublicRoute","JWTStore","SourcingOutReachContext","CompaniesOutReachMenu","$isFullScreen","GridViewWrapper","gridViewSelectors","sourceScrubListCompanyName","gridViewActions","CompanyCardInfo","CompanyCardContainer","isLongCard","ContainerAnalystName","BackButtonText","AnalystName","FilterContainer","FilterSelectContainer","FilterDateContainer","LongCardView","_companies$3","_companies$","_companies$2","_Empty","CardContent","loadingUser","searching","isMouseDown","SearchGrid","_tableWrapperRef$curr","isMount","_useVirtualScrollPosi","documentElement","ctx","vtImperativeScroll","_useSize3","_useSize5","initCompanies","reduxColumns","fetchCountSelectors","gridSelectedCompanyIds","lastPageSize","lastPageNumber","setColumns","currentScroll","setCurrentScroll","externalScroll","setExternalScroll","columnReferences","_useVT","useVT","initTop","scroll","_useVT2","vt","setVt","externalScrollElement","contentRef","_useSize7","tableSize","_data$node$offsetPare","offsetParent","onSelectAll","renderCell","onHeaderCell","onCell","nextColumns","_vtImperativeScroll$c","_vtImperativeScroll$c2","mergeCompaniesActions","_vtImperativeScroll$c3","GridContent","virtualTableScrollYContext","CompanySearchDisplay","ApplySearchButton","EnterOutlined","CompanySearch","setQuery","slicedQuery","_input","click","defaultAnalystIds","StyledSearchMenu","hideDropdown","isAddonManagement","cloneElement","CompanySearchDropdown","RedirectSavedSearchesMenuItem","filterSourcingSelectors","columnNameFilter","dateValueFilter","filtersMap","filterGridQuery","customFilterGridQuery","mapFilterToParams","parameterFilter","handleExportCSV","SearchHeader","combinedSearchId","gridSearchSelectors","logical_operators","autoComplete","CombinedSearchFilterTags","ExportToCSV","AnalystsSelect","isMultiSelectDisabled","valueContainer","SingleValue","SourcingOutReachFilters","CompanyListSourcingOutReach","_query$filters","_sessionSettings$sour","useInjectCompanyCard","useInjectCompanyGraphs","useInjectTouches","useInitFavorites","useInjectAddCompany","persistedTableGridQuery","selectedColumnName","selectedAnalystIds","shouldFetchCompanies","isFirstRender","_useHistory","dom","analystNamesList","analystNameSelected","listOfAnalystNamesSelected","parsed","sessionTableGridQuery","sourcing_outreach_filters","fetchCompaniesList","handleGoBack","handleColumnName","columnNameValue","ArrowLeftOutlined","Notes","CompanyProfile","Login","CompanyList","MyCompanies","AddToEquityTouch","UserLists","ErrorComponent","HomePage","SourcingOutreachSummary","UserProfile","ChromeExtension","ScheduledTouches","EquityTouchIntegration","ChecklistResearchInsights","EquityTouchBulk","SalesloftBulk","AllReports","AnalystHome","AdminHome","Switch","headContent","Helmet","titleTemplate","defaultTitle","ToastContainer","POSITION","TOP_CENTER","App","useInjectRequest","ThemeProvider","_matchPath","_props$location","isExact","createBrowserHistory","injectedReducers","connectRouter","middlewares","notficationMiddeware","sagaMiddleware","createSagaMiddleware","hostname","coreMiddlewares","routerMiddleware","runSaga","run","enhancers","applyMiddleware","createInjectorsEnhancer","createStore","composeWithDevTools","injectedSagas","configureStore","MOUNT_NODE","ReactDOM","ConnectedRouter","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.e416f216.chunk.js","sourcesContent":["import { toast, ToastOptions } from 'react-toastify';\nimport { merge } from 'lodash';\n\nclass NotificationService {\n private static defaultSettings: ToastOptions = {\n position: 'top-right',\n autoClose: 2000,\n };\n\n /**\n * Disable message notifications.\n */\n public static forceLock: boolean = false;\n\n private static mergeSettings = (newSettings?: ToastOptions) => {\n return newSettings\n ? merge({}, NotificationService.defaultSettings, newSettings)\n : NotificationService.defaultSettings;\n };\n\n static success(message: string, settings?: ToastOptions) {\n if (NotificationService.forceLock) {\n return;\n }\n\n toast.success(message, NotificationService.mergeSettings(settings));\n }\n\n static info(message: string, settings?: ToastOptions) {\n if (NotificationService.forceLock) {\n return;\n }\n\n toast.info(message, this.mergeSettings(settings));\n }\n\n static error(message: string, settings?: ToastOptions) {\n if (NotificationService.forceLock) {\n return;\n }\n\n const toastOptions = NotificationService.mergeSettings(settings);\n const toastId = toast.error(message, toastOptions);\n\n setTimeout(() => {\n toast.dismiss(toastId);\n }, toastOptions.autoClose || 3000);\n }\n\n static warn(message: string, settings?: ToastOptions) {\n if (NotificationService.forceLock) {\n return;\n }\n\n toast.warn(message, this.mergeSettings(settings));\n }\n}\n\nexport default NotificationService;\n","import { LoginHeaders } from '@optx/models/auth';\nimport ApiClient, { API_URL } from './axios-client';\n\nclass AuthService {\n static client: ApiClient = new ApiClient(`${API_URL}/auth`);\n\n /**\n * Login/check authentication token.\n * @param payload\n */\n static login = (payload: { headers: LoginHeaders }) => {\n // @ts-ignore\n return AuthService.client.get('/token', { headers: payload.headers });\n };\n\n static getCognitoURL = () => AuthService.client.get('/cognito_login_url');\n\n static getCognitoLogOutURL = () => AuthService.client.get('/cognito_logout_url');\n\n static logout = () => AuthService.client.post('/logout', {});\n}\n\nexport default AuthService;\n","import queryString from 'query-string';\nimport { Dictionary } from 'lodash';\nimport { UserInformation, RegionOptions } from '@optx/models/user';\nimport { CompanyNotification, CompanyUserValue } from '@optx/models/Company';\nimport { NotesSearchQuery } from '@optx/redux/company/notes/search/interfaces';\nimport { AxiosRequestConfig } from 'axios';\nimport { AddTagPayload } from '@optx/redux/company/tags/interfaces';\nimport { ShareList } from '@optx/redux/user/share/interfaces';\nimport { CombineSearch } from '@optx/features/combine-search/state/interfaces';\nimport { ShareListRequest } from '@optx/models/feature/shareList/ShareListRequest';\nimport { UpdateUserSettingsPayload, ClearMatchedFromListPayload } from '@optx/models/api/user';\n// utils\nimport { cleanPayload } from '@utils/api/cleanPayload';\nimport { mapSearchCounterQuery, mapSortQuery, mapPaginationQuery } from '@optx/utils/search';\nimport { UserListPayload } from '@optx/redux/user/user-list/interfaces';\nimport { UpdateFieldsPayload } from '@optx/features/company/edit-fields/state/interfaces';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { SaveResearchRationalePayload } from '@optx/features/add-research-rationale/state/interfaces';\nimport { AddCompanyReviewPayload } from '@optx/features/company-review/state/interfaces';\n\nimport ApiClient, { API_URL } from './axios-client';\nimport { UpdateListAssociation, PublicWatchListActionPayload } from '@optx/models/WatchList';\n\nclass UserService {\n static client: ApiClient = new ApiClient(`${API_URL}/user`);\n\n // user info\n static getUserInfo() {\n return UserService.client.get<UserInformation>('');\n }\n\n static updateSettings(settings: Partial<UpdateUserSettingsPayload> = {}) {\n return UserService.client.put<void>('/settings', settings);\n }\n\n static updateProfilePicture(picture: Blob) {\n const data = new FormData();\n data.append('image', picture);\n\n const config: AxiosRequestConfig = {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n responseType: 'blob',\n };\n\n return UserService.client.post('/save_img', data, config);\n }\n\n static resetPassword(currentPassword: string, nextPassword: string) {\n const data = {\n password: currentPassword,\n new_password: nextPassword,\n };\n\n return UserService.client.post(`/change_password?${queryString.stringify(data)}`);\n }\n\n static getRegionOptions() {\n return UserService.client.get<Array<RegionOptions>>('/region_settings');\n }\n\n // notes\n static getNotes(companyId?: number) {\n const payload = companyId === undefined ? {} : { company_id: companyId };\n\n return UserService.client.get(`/notes?${queryString.stringify(payload)}`);\n }\n\n static searchNotes(queryData: NotesSearchQuery) {\n const payload = {\n query: queryData.query,\n page: queryData.pageNumber,\n per_page: queryData.pageSize,\n };\n const query = queryString.stringify(payload);\n\n return UserService.client.get(`/notes?${query}`);\n }\n\n static createCompanyNote = (companyId: number, title: string, noteText: string) => {\n const payload = {\n company_id: companyId,\n title,\n note_text: noteText,\n };\n\n return UserService.client.post('/notes', payload);\n };\n\n static updateCompanyNote(note: CompanyNotification, noteText: string) {\n const payload = {\n title: note.note_title,\n unique_id: note.note_unique_id,\n note_text: noteText,\n };\n\n return UserService.client.put('/notes', payload);\n }\n\n static deleteCompanyNote = (noteId: number) => {\n const payload = {\n note_id: noteId,\n };\n\n return UserService.client.delete(`/notes?${queryString.stringify(payload)}`);\n };\n\n // favorites\n static getFavorites = () => {\n const query = 'company_id';\n\n return UserService.client.get(`/favorites?query=${query}`);\n };\n\n static addFavorite = (companyId: number) =>\n UserService.client.put('/favorites', { company_id: companyId });\n\n static deleteFavorite = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return UserService.client.delete(`/favorites?${queryString.stringify(payload)}`);\n };\n\n // evaluation\n static updateFitEvaluation = (payload: UpdateFieldsPayload) =>\n UserService.client.post('/interesting/edit_history', {\n company_id: payload.companyId,\n is_interesting: payload.value,\n rationale: payload.rationale,\n });\n\n // alerts\n static getAlerts = (history?: boolean, pageNr?: number, pageSize = 25, sorting?: string) => {\n const payload = {\n history,\n page: pageNr,\n per_page: pageSize,\n sorting,\n };\n\n return UserService.client.get(`/alerts?${queryString.stringify(payload)}`);\n };\n\n static updateAlerts = (ids: Array<number>) =>\n UserService.client.put(\n '/alerts',\n queryString.stringify({ alert_id: ids }, { arrayFormat: 'comma' })\n );\n\n static dismissAlert = (id: number) => {\n UserService.client.put('/alerts/history', queryString.stringify({ alert_id: id }));\n };\n\n static dismissAllAlerts = () => {\n UserService.client.put('/alerts/history_bulk');\n };\n\n // tags\n static addCompanyTag = (data: AddTagPayload) => {\n const payload = {\n company_id: data.companyId,\n name: data.name,\n };\n\n return UserService.client.post('/company_tag', payload);\n };\n\n // disable user\n static disableUser(id: number) {\n const data = {\n id,\n status: 'No Access',\n };\n\n return UserService.client.patch(`?${queryString.stringify(data, { arrayFormat: 'comma' })}`);\n }\n\n // unlock user\n static unlockUser(id: number) {\n const data = { user_id: id };\n\n return UserService.client.put(`/unlock_user_account?${queryString.stringify(data)}`);\n }\n\n // get user list\n static fetchUserList(queryPayload: UserListPayload, isFetchPSG?: boolean) {\n const query = queryString.stringify(queryPayload);\n\n return UserService.client.get(\n `/list?${query}${isFetchPSG ? '&psg=True' : '&senior_advisor=true'}`\n );\n }\n\n // share user list\n static shareList(shareData: ShareList | ShareListRequest) {\n return UserService.client.post('/share_list', shareData);\n }\n\n static publicList(payload: PublicWatchListActionPayload) {\n return UserService.client.post('/public_list', payload);\n }\n\n static getShareListInfo(listId: number) {\n const queryPayload = {\n list_id: listId,\n };\n const query = queryString.stringify(queryPayload);\n\n return UserService.client.get(`/list/share_menu?${query}`);\n }\n\n // software evaluation\n static addCompanySoftwareEvaluation = (payload: UpdateFieldsPayload) => {\n const queryData = {\n company_id: payload.companyId,\n evaluation: payload.value,\n rationale: payload.rationale,\n };\n\n return UserService.client.post(\n `/software_company_evaluation?${queryString.stringify(queryData)}`\n );\n };\n\n // business evaluation\n static addCompanyInBusinessEvaluation = (payload: UpdateFieldsPayload) => {\n const queryData = {\n company_id: payload.companyId,\n evaluation: payload.value,\n };\n\n // need to update endpoint\n return UserService.client.post(`/business_evaluation?${queryString.stringify(queryData)}`);\n };\n\n // update company user values\n static updateCompanyUserValues(payload: CompanyUserValue | UpdateFieldsPayload) {\n return UserService.client.post('/company_info', payload);\n }\n\n // get cards data for \"My Companies\" section under \"Manage My Pipeline\"\n static fetchMyCompaniesCards = (\n searchKey: string,\n searchType: string,\n filter: Dictionary<undefined | string | (string | number)[]>,\n selectedCard?: string\n ) => {\n const payload = mapSearchCounterQuery(searchKey, searchType, filter);\n\n if (selectedCard) {\n payload.selected_card = selectedCard;\n }\n\n const updatedPayload = cleanPayload(payload);\n\n return UserService.client.post('/pipeline', updatedPayload);\n };\n\n // bulk Watchlist\n\n static bulkAddToWatchlist = (\n companyIds: number[],\n existingListIds: number[],\n newTitles: string[]\n ) => {\n const payload = {\n company_ids: companyIds,\n existing_list_ids: existingListIds,\n new_titles: newTitles,\n };\n\n return UserService.client.put('/lists/favorites_bulk/', payload);\n };\n\n static bulkRemoveFromWatchList = (companyIds: number[], listId: string) => {\n const payload = {\n company_id: companyIds,\n list_id: listId,\n };\n\n return UserService.client.delete('/bulk_delete_companies_from_list', { data: payload });\n };\n\n static bulkMergeCompanies = (companyIds: number[]) => {\n const payload = {\n company_ids: companyIds,\n };\n\n return UserService.client.post('/merge_companies', payload);\n };\n\n // bulk software evaluation\n static bulkCompanySoftwareEvaluation = (\n companyId: number[] | string[],\n isSoftware = false,\n rationale?: string\n ) => {\n const queryData = {\n company_ids: companyId,\n evaluation: isSoftware,\n rationale,\n };\n\n return UserService.client.post('/bulk_software_company_evaluation', queryData);\n };\n\n static removeSharedList(listId: number | string) {\n const queryPayload = {\n list_id: listId,\n };\n\n return UserService.client.delete(`/remove_shared_list?${queryString.stringify(queryPayload)}`);\n }\n\n static getScheduledTouchesDashboard() {\n return UserService.client.get('/user_touches/data_settings');\n }\n\n static getScheduledTouches(\n tab: string,\n startDate: string,\n endDate: string,\n sortBy: Array<SortByRule<any>>,\n pagination: PageInfo,\n touchType: string,\n stageType: string,\n rankType: string\n ) {\n const sort = mapSortQuery(sortBy);\n const pag = mapPaginationQuery(pagination);\n\n const queryPayload = {\n ...sort,\n ...pag,\n start_date: startDate,\n end_date: endDate,\n tab: tab !== '*' ? tab : undefined,\n touch_type: touchType !== '*' ? touchType : undefined,\n stage_type: stageType !== '*' ? stageType : undefined,\n pipeline_rank: rankType !== 'All' ? Number(rankType) : undefined,\n };\n\n return UserService.client.get(`/user_touches?${queryString.stringify(queryPayload)}`);\n }\n\n static getScheduledTouchesCount(\n startDate: string,\n endDate: string,\n touchType: string,\n stageType: string,\n rankType: string\n ) {\n const queryPayload = {\n start_date: startDate,\n end_date: endDate,\n touch_type: touchType !== '*' ? touchType : undefined,\n stage_type: stageType !== '*' ? stageType : undefined,\n pipeline_rank: rankType !== 'All' ? Number(rankType) : undefined,\n };\n\n return UserService.client.get(`/user_touches/count?${queryString.stringify(queryPayload)}`);\n }\n\n static unmergeCompanies = (mainCompanyId: number, companyIds: number[], copyData: boolean) => {\n const payload = {\n main_company_id: mainCompanyId,\n source_companies_ids: companyIds,\n copy_data: copyData,\n };\n\n return UserService.client.post('/unmerge_companies', payload);\n };\n\n static sendOptxScoreRationale = (\n companyId: number,\n rationale: string | null,\n optxScoreVerified: boolean | null,\n rationaleReasonLower: string | null,\n rationaleReasonUpper: string | null,\n scoreType: string\n ) => {\n const payload = {\n company_id: companyId,\n rationale,\n optx_score_verified: optxScoreVerified,\n rationale_reason_lower: rationaleReasonLower,\n rationale_reason_upper: rationaleReasonUpper,\n score_type: scoreType,\n };\n\n return UserService.client.post('/optx_score_rationale', payload);\n };\n\n static sendResearchRationale = (payload: SaveResearchRationalePayload) => {\n return UserService.client.post('/save_all_rationale', payload);\n };\n\n // Sub Vertical\n static subVertical = (payload: UpdateFieldsPayload) => {\n const data = {\n company_id: payload.companyId,\n user_values: {\n sub_vertical: payload.value as string[],\n },\n };\n\n return UserService.client.post('/company_info', data);\n };\n\n static updateNote = (payload: { companyId: number; note: string }) => {\n const data = {\n company_id: payload.companyId,\n user_values: { company_notes: payload.note },\n };\n\n return UserService.client.post('/company_info', data);\n };\n\n static updateAiMl = (payload: UpdateFieldsPayload) => {\n const data = {\n company_ids: payload.companyId,\n evaluation: payload.value,\n };\n\n return UserService.client.post('/ai_ml_evaluation', data);\n };\n\n // bulk AI / ML\n static bulkCompanyAiMl = (companyId: number[], isAiMl: boolean | null) => {\n const queryData = {\n company_ids: companyId,\n evaluation: isAiMl,\n is_bulk_action: true,\n };\n\n return UserService.client.post('/ai_ml_evaluation', queryData);\n };\n\n // review company\n static reviewCompany = (payload: AddCompanyReviewPayload) => {\n const customPayload = {\n company_id: payload.companyId,\n user_id: payload.userId,\n };\n\n return UserService.client.post('/company_review', customPayload);\n };\n\n static updateFavoriteListAddon(payload: UpdateListAssociation) {\n const query = { list_id: payload.listId, addon_company: payload.addonCompany };\n\n return UserService.client.put(`/set_addon_for_list_companies?${queryString.stringify(query)}`);\n }\n\n static createCombineSearch = (payload: CombineSearch) => {\n return UserService.client.post('/combined_search', payload);\n };\n\n /**\n * Clears new matches from user lists.\n *\n * This method sends a POST request to the '/list/clean_matches' endpoint\n * to remove new matches from the specified user lists.\n */\n static clearNewMatchesFromLists(payload: ClearMatchedFromListPayload) {\n return UserService.client.post<void>('/list/clean_matches', payload);\n }\n}\n\nexport default UserService;\n","import queryString from 'query-string';\nimport ApiClient, { API_URL } from './axios-client';\nimport { FilterGroup } from '../../models/filters';\n\nclass FilterService {\n static client: ApiClient = new ApiClient(`${API_URL}/filter`);\n\n /**\n * Get filters options from a filter group.\n * @param filterGroup type of filter groups.\n * @param filterNames filter names. If no filter names list is provided or value is set to null will\n * get all available filters options from specified group.\n */\n static getOptions(filterGroup: FilterGroup = FilterGroup.Company, filterNames?: Array<string>) {\n const payload = {\n filter_names: filterNames || '*',\n filter_group: filterGroup,\n };\n\n return FilterService.client.get(\n `/options?${queryString.stringify(payload, { arrayFormat: 'comma' })}`\n );\n }\n\n static companiesOutReachFilters() {\n return FilterService.client.get('/sourcing_companies_options');\n }\n\n static getAnalystLeaderboardOptions() {\n return FilterService.client.get('/leaderboard_options');\n }\n}\n\nexport default FilterService;\n","import queryString from 'query-string';\nimport { Dictionary } from 'lodash';\nimport { AxiosRequestConfig } from 'axios';\nimport { searchTypeKey } from '@features/grid/search-type/state/constants';\n\n// models\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { SaveSearchAsListPayload } from '@optx/models/api/WatchLists';\nimport { CompanyWatchList } from '@optx/models/WatchList';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport Company from '@optx/models/Company';\nimport { ColumnKeys } from '@optx/models/table/Columns';\nimport {\n ListsSearchData,\n FavoriteListsSearchData,\n InitialFavoriteListsSearchData,\n} from '@optx/models/lists/search';\n// utils\nimport { cleanObjectWithEmptyValues } from '@optx/utils/filters/filterHelpers';\nimport { mapSearchQuery, mapSortQuery } from '@optx/utils/search';\nimport { cleanPayload } from '@utils/api/cleanPayload';\n// local\nimport ApiClient, { API_URL } from './axios-client';\n\nclass SavedSearchesService {\n static client: ApiClient = new ApiClient(`${API_URL}/user/lists`);\n\n // company saved search\n static getCompanySearches(searchData: ListsSearchData | undefined) {\n const payload = {\n ...(searchData && searchData.query && { query: searchData!.query }),\n ...(searchData && searchData.pagination && { page: searchData.pagination.pageNumber }),\n ...(searchData && searchData.pagination && { per_page: searchData.pagination.pageSize }),\n ...(searchData && searchData.sortBy?.length && { sort_by: searchData?.sortBy?.[0]?.id }),\n ...(searchData &&\n searchData.sortBy?.length && { sort_order: searchData.sortBy[0].desc ? 'desc' : 'asc' }),\n };\n\n const query = queryString.stringify(payload);\n\n return SavedSearchesService.client.get(`/overview?${query}`);\n }\n\n static createCompanySearch(\n title: string,\n searchKey: string,\n searchType: string,\n searchCount: number,\n filters?: Dictionary<string | Array<number | string>>,\n sorting?: SortByRule<Company>[],\n columns?: string,\n columnOrder?: ColumnKeys[],\n pinnedColumns?: string,\n isDefault?: boolean,\n id?: number,\n newTitle?: string,\n defaultOptx?: string\n ) {\n let sortQuery = {};\n let lastPinnedColumns;\n let lastColumns;\n let lastColumnOrder;\n\n if (sorting) {\n sortQuery = mapSortQuery(sorting);\n }\n\n if (defaultOptx === 'il') {\n lastColumns = columns?.split(',').filter((item: string) => {\n if (item === 'score') {\n return false;\n }\n\n return true;\n });\n\n lastPinnedColumns = pinnedColumns?.split(',').filter((item: string) => {\n if (item === 'score') {\n return false;\n }\n\n return true;\n });\n lastColumnOrder = columnOrder?.filter((item: string) => {\n if (item === 'score') {\n return false;\n }\n\n return true;\n });\n }\n\n if (defaultOptx !== 'il') {\n lastColumns = columns?.split(',').filter((item: string) => {\n if (item === 'il_optx_score') {\n return false;\n }\n\n return true;\n });\n\n lastPinnedColumns = pinnedColumns?.split(',').filter((item: string) => {\n if (item === 'il_optx_score') {\n return false;\n }\n\n return true;\n });\n lastColumnOrder = columnOrder?.filter((item: string) => {\n if (item === 'il_optx_score') {\n return false;\n }\n\n return true;\n });\n }\n\n const queryPayload = {\n ...(searchKey ? { [searchTypeKey[searchType]]: searchKey } : {}),\n ...sortQuery,\n columns: lastColumns?.join() ?? null,\n column_order: lastColumnOrder?.join() ?? null,\n pinned_columns: lastPinnedColumns?.join() ?? null,\n // for a saved search to be unset as default, send empty value for is_default\n is_default: isDefault || '',\n unique_id: id,\n number_of_results: searchCount,\n new_list_title: newTitle,\n };\n\n const appliedFilters = cleanObjectWithEmptyValues({ ...filters });\n const data = {\n ...appliedFilters,\n ...queryPayload,\n list_title: decodeURIComponent(title),\n };\n\n return SavedSearchesService.client.post('', data, {\n headers: {\n 'content-type': 'application/json',\n },\n });\n }\n\n static renameCompanySearch(listId: number | string, title: string) {\n const payload = {\n title,\n list_id: listId,\n };\n\n return SavedSearchesService.client.put('/title', payload);\n }\n\n static deleteCompanySearch(id: number) {\n const payload = {\n list_id: id,\n };\n\n return SavedSearchesService.client.delete(`?${queryString.stringify(payload)}`);\n }\n\n // lists\n /**\n * Fetch favorite lists except data for predefined favorite list.\n */\n\n static initialFetchFavoriteLists(searchData: InitialFavoriteListsSearchData | null) {\n const payload = {\n ...(searchData && { show_empty_lists: searchData.showEmptyLists }),\n ...(searchData && searchData.sortBy?.length && { sort_by: searchData.sortBy[0].id }),\n ...(searchData &&\n searchData.sortBy?.length && { sort_order: searchData.sortBy[0].desc ? 'desc' : 'asc' }),\n ...(searchData && { show_empty_lists: searchData.showEmptyLists }),\n ...(searchData && searchData.popup && { popup: searchData.popup }),\n };\n\n const query = queryString.stringify(payload);\n\n return SavedSearchesService.client.get(`/favorites/overview?${query}`);\n }\n\n static getFavoriteLists(searchData: FavoriteListsSearchData | null, excludeCompanyId?: number) {\n let payload;\n\n if (excludeCompanyId) {\n payload = { exclude_company_id: excludeCompanyId };\n } else if (searchData?.fetchAll && searchData?.sortBy) {\n const payload = {\n ...(searchData!.query && { query: searchData!.query }),\n ...(searchData && searchData.sortBy.length && { sort_by: searchData.sortBy[0].id }),\n ...(searchData && searchData.pagination && { page: searchData.pagination.pageNumber }),\n ...(searchData && searchData.pagination && { per_page: searchData.pagination.pageSize }),\n ...(searchData &&\n searchData.sortBy.length && { sort_order: searchData.sortBy[0].desc ? 'desc' : 'asc' }),\n ...(searchData && { show_empty_lists: searchData.showEmptyLists }),\n };\n const query = queryString.stringify(payload);\n\n return SavedSearchesService.client.get(`/favorites/overview?${query}`);\n } else {\n payload = {\n ...(searchData!.query && { query: searchData!.query }),\n ...(searchData && searchData.pagination && { page: searchData.pagination.pageNumber }),\n ...(searchData && searchData.pagination && { per_page: searchData.pagination.pageSize }),\n ...(searchData && searchData.sortBy?.length && { sort_by: searchData.sortBy[0].id }),\n ...(searchData &&\n searchData.sortBy?.length && { sort_order: searchData.sortBy[0].desc ? 'desc' : 'asc' }),\n ...(searchData && { show_empty_lists: searchData.showEmptyLists }),\n };\n }\n\n const query = queryString.stringify(payload);\n\n return SavedSearchesService.client.get(`/favorites/overview?${query}`);\n }\n\n static getFavoriteByTitle(title: string) {\n const payload = {\n title,\n };\n const query = queryString.stringify(payload);\n\n return SavedSearchesService.client.get(`/favorites?${query}`);\n }\n\n // TODO: Change this when the API is ready\n // static getFavoriteById(id: number) {\n // const payload = { list_id: id };\n // const query = queryString.stringify(payload);\n\n // return SavedSearchesService.client.get(`/favorites?${query}`);\n // }\n\n static deleteFavoriteList(listId: number) {\n const queryPayload = {\n list_id: listId,\n };\n\n return SavedSearchesService.client.delete(`/favorites?${queryString.stringify(queryPayload)}`);\n }\n\n static renameFavoriteList(payload: { title: string; list_id: number }) {\n return SavedSearchesService.client.put(`/favorites/title?${queryString.stringify(payload)}`);\n }\n\n /**\n * Create a list or add company to existing list.\n * @param payload\n */\n static addCompanyToList(payload: {\n title: string;\n company_id: number;\n error_on_conflict?: boolean;\n }) {\n const config: AxiosRequestConfig = {\n headers: {\n 'content-type': 'application/x-www-form-urlencoded',\n },\n };\n const query = queryString.stringify(payload);\n\n return SavedSearchesService.client.put(`/favorites?${query}`, {}, config);\n }\n\n static deleteCompanyInList(payload: { list_id: number[]; company_id: number }) {\n return SavedSearchesService.client.delete(\n `/favorites/company?${queryString.stringify(payload, { arrayFormat: 'comma' })}`\n );\n }\n\n /**\n * Save search as a named list.\n * @param title list title.\n * @param searchData search parameterss.\n */\n static saveSearchAsList(title: string, searchData: SearchPayloadRequest) {\n const payload = mapSearchQuery(searchData) as unknown as SaveSearchAsListPayload;\n payload.list_title = title;\n\n const body = cleanPayload(payload);\n\n return SavedSearchesService.client.post<CompanyWatchList>('/save_search', body);\n }\n\n static getCompanyListByTitle = (title: string) =>\n SavedSearchesService.client.get(`?title=${title}`);\n\n // contacts\n static getContactSearches(searchData: ListsSearchData) {\n const payload = {\n ...(searchData.query && { query: searchData!.query }),\n ...(searchData.pagination && { page: searchData.pagination.pageNumber }),\n ...(searchData.pagination && { per_page: searchData.pagination.pageSize }),\n };\n\n const query = queryString.stringify(payload);\n\n return SavedSearchesService.client.get(`/contacts/overview?${query}`);\n }\n\n static createContactSearch(\n title: string,\n searchKey: string,\n filters: Dictionary<string | Array<number | string>>\n ) {\n const queryPayload = {\n ...filters,\n ...(searchKey ? { query: searchKey } : {}),\n };\n let query = queryString.stringify(queryPayload, { arrayFormat: 'comma' });\n // list_title needs to be at the end of the query due to API constraints.\n query += `&list_title=${encodeURIComponent(title)}`;\n\n const config: AxiosRequestConfig = {\n headers: {\n 'content-type': 'application/x-www-form-urlencoded',\n },\n };\n\n return SavedSearchesService.client.put(`/contacts?${query}`, {}, config);\n }\n\n static renameContactSearch(listId: number | string, title: string) {\n const payload = {\n title,\n list_id: listId,\n };\n\n return SavedSearchesService.client.put('/contacts/title', payload);\n }\n\n static deleteContactSearch(id: number | string) {\n const payload = {\n list_id: id,\n };\n\n return SavedSearchesService.client.delete(`/contacts?${queryString.stringify(payload)}`);\n }\n\n // suggested searches\n static getSuggestedSearches = () => SavedSearchesService.client.get('/system/overview');\n}\n\nexport default SavedSearchesService;\n","import queryString from 'query-string';\nimport { AsyncMultiSelectPayload } from '@optx/redux/async-multiselect/interfaces';\nimport ApiClient, { API_URL } from './axios-client';\n\nclass AsyncMultiSelect {\n static client: ApiClient = new ApiClient(`${API_URL}`);\n\n static getOptions(payload: AsyncMultiSelectPayload) {\n const queryPayload = {\n query: payload.query,\n ...(payload.additionalOptions && payload.additionalOptions),\n };\n const query = queryString.stringify(queryPayload, { arrayFormat: 'comma' });\n\n return AsyncMultiSelect.client.get(`${payload.endpoint}?${query}`);\n }\n}\n\nexport default AsyncMultiSelect;\n","export const emailUser = `Greetings from OPTX,\n\nPlease follow the link below to the OPTX platform\n\n{link}\n\nAccess pending, one login registration which will be set by PSG IT.\nTo access OPTX you will need to be connected to the PSG network or connected via VPN.\n\nFrom the {link} page select \"Connect using OneLogin\"\n\n{login_form_image}\n\nThank you for registering.\nSincerely,\nPSG`;\n\nexport const emailAdmin = `Greetings from OPTX,\n\nPlease provision SSO for new OPTX User.\n\n{email_list}\n\nThank you.\nSincerely,\nPSG`;\n","import queryString from 'query-string';\n// models\nimport { SortByRule } from '@models/table/sorting';\nimport { UserInfo } from '@optx/models/UserManagement';\n// constants\nimport { emailUser, emailAdmin } from '@constants/email';\nimport SORT_ORDER from '@constants/table/sortOrder';\n// services\nimport ApiClient, { API_URL } from './axios-client';\n\nclass UserManagement {\n static client: ApiClient = new ApiClient(`${API_URL}/admin`);\n\n static getUserList(sorting: Array<SortByRule<any>>) {\n const payload = {\n sort_field: sorting[0].id,\n sort_order: sorting[0].desc ? SORT_ORDER.DESCENDING : SORT_ORDER.ASCENDING,\n };\n const query = queryString.stringify(payload, { arrayFormat: 'comma' });\n\n return UserManagement.client.get(`/users?${query}`);\n }\n\n static setInvite(result: { email: string; role: string }) {\n const payload = {\n email: result.email,\n role_id: result.role,\n message_user: emailUser,\n message_admin: emailAdmin,\n };\n const query = queryString.stringify(payload);\n\n return UserManagement.client.post('/invite', query);\n }\n\n static setResendInvitation(result: { userId: number }) {\n const payload = {\n user_id: result,\n message: emailUser,\n };\n const query = queryString.stringify(payload);\n\n return UserManagement.client.post('/resend_invitation', query);\n }\n\n static getUserEditInfo(userId: number) {\n const payload = {\n user_id: userId,\n };\n const query = queryString.stringify(payload);\n\n return UserManagement.client.get(`/user_edit_info?${query}`);\n }\n\n static postUserInfo(payload: UserInfo) {\n return UserManagement.client.put('/user_edit_info', payload);\n }\n}\n\nexport default UserManagement;\n","import queryString from 'query-string';\nimport { SearchPayload } from '@optx/redux/user/source-scrub-lists/interfaces';\nimport ApiClient, { API_URL } from './axios-client';\n\nclass UserService {\n static client: ApiClient = new ApiClient(`${API_URL}/lists`);\n\n // fetch source scrub lists\n static searchSourceScrubLists(searchData: SearchPayload) {\n const payload = {\n ...(searchData.query && { query: searchData.query }),\n page: searchData.pagination.pageNumber,\n per_page: searchData.pagination.pageSize,\n ...(searchData.sortBy.length && { sort_by: searchData.sortBy[0].id }),\n ...(searchData.sortBy.length && { sort_order: searchData.sortBy[0].desc ? 'desc' : 'asc' }),\n };\n\n return UserService.client.get(\n `/source_scrub?${queryString.stringify(payload, { arrayFormat: 'comma' })}`\n );\n }\n\n // fetch source scrub total\n static getSourceScrubListsTotal() {\n return UserService.client.get('/source_scrub/count');\n }\n\n // fetch source scrub list by id\n static getSourceScrubList(listId: number) {\n const payload = { list_id: listId };\n\n return UserService.client.get(`/source_scrub?${queryString.stringify(payload)}`);\n }\n}\n\nexport default UserService;\n","import {\n SalesloftEditData,\n SalesloftCadences,\n SalesloftBulkPostData,\n} from '@optx/models/Salesloft';\nimport ApiClient, { API_URL } from './axios-client';\n\nclass SalesloftService {\n static client: ApiClient = new ApiClient(`${API_URL}/salesloft`);\n\n // fetch authentication url\n static getAuthUrl() {\n return SalesloftService.client.get('/oauth_login_url');\n }\n\n // fetch cadences\n static getCadences() {\n return SalesloftService.client.get('/cadences');\n }\n\n // post data\n static postSalesloftData(data: SalesloftEditData) {\n return SalesloftService.client.post('/add_person', data);\n }\n\n // add new contact\n static addPersonBulk(cadence: SalesloftCadences, companies: SalesloftBulkPostData[]) {\n const postData = {\n cadence_id: cadence.id,\n team_cadence: cadence.team_cadence,\n cadence_name: cadence.name,\n companies,\n };\n\n return SalesloftService.client.post('/add_person_bulk', postData);\n }\n\n // make this request after authorization call to improve performance\n static preloadContacts() {\n return SalesloftService.client.get('/preload_people');\n }\n}\n\nexport default SalesloftService;\n","// local\nimport ApiClient, { API_URL } from './axios-client';\nimport queryString from 'query-string';\n\nexport class AdminService {\n static client: ApiClient = new ApiClient(`${API_URL}/admin`);\n\n static getCompanyActivity = () => {\n // From API\n // GET /admin/home/company_activity?limit_lists=10&\n // limit_search_lists=5&\n // limit_assigned_companies=8&\n // limit_viewed_companies=10\n // we can also implement limits in the future but for now we will use defaults\n return AdminService.client.get('/home/company_activity');\n };\n\n static getDataSettings = () => {\n return AdminService.client.get('/home/v1/data_settings');\n };\n\n static getHomeActivity = (payload: { ddate_lower: string; ddate_upper: string }) => {\n const query = queryString.stringify(payload);\n\n return AdminService.client.get('/home/v1/activity_insights?' + query);\n };\n\n static getHomeInsightsStats = () => {\n return AdminService.client.get('/home/v1?source_tag_filter=et-1-0');\n };\n}\n","import ApiClient, { API_URL } from './axios-client';\n\nclass ColumnService {\n static client: ApiClient = new ApiClient(`${API_URL}/column_state`);\n\n static getColumnState = (gridId: number | number[]) => {\n let query;\n\n if (typeof gridId === 'number') {\n query = gridId;\n } else {\n query = gridId.join(',');\n }\n\n return ColumnService.client.get(`?grid_ids=${query}`);\n };\n}\n\nexport default ColumnService;\n","export const FETCH_USER_INFORMATION = 'FETCH_USER_INFORMATION';\nexport const FETCH_USER_INFORMATION_SUCCESS = 'FETCH_USER_INFORMATION_SUCCESS';\nexport const FETCH_USER_INFORMATION_FAIL = 'FETCH_USER_INFORMATION_FAIL';\n\nexport const UPDATE_USER_SETTINGS = 'UPDATE_USER_SETTINGS';\nexport const UPDATE_USER_SETTINGS_SUCCESS = 'UPDATE_USER_SETTINGS_SUCCESS';\nexport const UPDATE_USER_SETTINGS_FAIL = 'UPDATE_USER_SETTINGS_FAIL';\n\nexport const UPDATE_USER_SETTINGS_FROM_AUTO_SAVE = 'UPDATE_USER_SETTINGS_FROM_AUTO_SAVE';\nexport const UPDATE_USER_SETTINGS_FROM_AUTO_SAVE_SUCCESS =\n 'UPDATE_USER_SETTINGS_FROM_AUTO_SAVE_SUCCESS';\nexport const UPDATE_USER_SETTINGS_FROM_AUTO_SAVE_FAIL = 'UPDATE_USER_SETTINGS_FROM_AUTO_SAVE_FAIL';\n\nexport const UPDATE_USER_SETTINGS_FOR_USER_LISTS = 'UPDATE_USER_SETTINGS_FOR_USER_LISTS';\nexport const UPDATE_USER_SETTINGS_FOR_USER_LISTS_SUCCESS =\n 'UPDATE_USER_SETTINGS_FOR_USER_LISTS_SUCCESS';\nexport const UPDATE_USER_SETTINGS_FOR_USER_LISTS_FAIL = 'UPDATE_USER_SETTINGS_FOR_USER_LISTS_FAIL';\n\nexport const UPDATE_USER_SETTINGS_FOR_SS_LISTS = 'UPDATE_USER_SETTINGS_FOR_SS_LISTS';\nexport const UPDATE_USER_SETTINGS_FOR_SS_LISTS_SUCCESS =\n 'UPDATE_USER_SETTINGS_FOR_SS_LISTS_SUCCESS';\nexport const UPDATE_USER_SETTINGS_FOR_SS_LISTS_FAIL = 'UPDATE_USER_SETTINGS_FOR_SS_LISTS_FAIL';\n\nexport const UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS = 'UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS';\nexport const UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS_SUCCESS =\n 'UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS_SUCCESS';\nexport const UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS_FAIL =\n 'UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS_FAIL';\n\nexport const UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES =\n 'UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES';\nexport const UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES_SUCCESS =\n 'UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES_SUCCESS';\nexport const UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES_FAIL =\n 'UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES_FAIL';\n\nexport const UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES =\n 'UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES';\nexport const UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES_SUCCESS =\n 'UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES_SUCCESS';\nexport const UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES_FAIL =\n 'UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES_FAIL';\n","// models\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { UserInformation } from '@models/user';\nimport { UpdateUserSettingsPayload } from '@models/api/user';\n// redux\nimport { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\n\n// Update user settings - general\n\nexport const updateUserSettings = createAction(\n types.UPDATE_USER_SETTINGS,\n (payload: Partial<UpdateUserSettingsPayload>, callback?: SuccessErrorCallback) => ({\n payload,\n meta: callback,\n })\n);\n\nexport const updateUserSettingsSuccess = createAction<Partial<UpdateUserSettingsPayload>>(\n types.UPDATE_USER_SETTINGS_SUCCESS\n);\n\nexport const updateUserSettingsFail = createAction<string>(types.UPDATE_USER_SETTINGS_FAIL);\n\n// Update users settings from autosave\n\nexport const updateUserSettingsFromAutoSave = createAction(\n types.UPDATE_USER_SETTINGS_FROM_AUTO_SAVE,\n (payload: Partial<UpdateUserSettingsPayload>, callback?: SuccessErrorCallback) => ({\n payload,\n meta: callback,\n })\n);\n\nexport const updateUserSettingsFromAutoSaveSuccess = createAction<\n Partial<UpdateUserSettingsPayload>\n>(types.UPDATE_USER_SETTINGS_FROM_AUTO_SAVE_SUCCESS);\n\nexport const updateUserSettingsFromAutoSaveFail = createAction<string>(\n types.UPDATE_USER_SETTINGS_FROM_AUTO_SAVE_FAIL\n);\n\n// Update users settings for user lists\n\nexport const updateUserSettingsForUserList = createAction(\n types.UPDATE_USER_SETTINGS_FOR_USER_LISTS,\n (payload: Partial<UpdateUserSettingsPayload>, callback?: SuccessErrorCallback) => ({\n payload,\n meta: callback,\n })\n);\n\nexport const updateUserSettingsForUserListSuccess = createAction<\n Partial<UpdateUserSettingsPayload>\n>(types.UPDATE_USER_SETTINGS_FOR_USER_LISTS_SUCCESS);\n\nexport const updateUserSettingsForUserListFail = createAction<string>(\n types.UPDATE_USER_SETTINGS_FOR_USER_LISTS_FAIL\n);\n\n// Update users settings for watchlists\n\nexport const updateUserSettingsForFavoritesList = createAction(\n types.UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS,\n (payload: Partial<UpdateUserSettingsPayload>, callback?: SuccessErrorCallback) => ({\n payload,\n meta: callback,\n })\n);\n\nexport const updateUserSettingsForFavoritesListSuccess = createAction<\n Partial<UpdateUserSettingsPayload>\n>(types.UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS_SUCCESS);\n\nexport const updateUserSettingsForFavoritesListFail = createAction<string>(\n types.UPDATE_USER_SETTINGS_FOR_FAVORITES_LISTS_FAIL\n);\n\n// Update user settings for source scrub list\n\nexport const updateUserSettingsForSSList = createAction(\n types.UPDATE_USER_SETTINGS_FOR_SS_LISTS,\n (payload: Partial<UpdateUserSettingsPayload>, callback?: SuccessErrorCallback) => ({\n payload,\n meta: callback,\n })\n);\nexport const updateUserSettingsForSSListSuccess = createAction<Partial<UpdateUserSettingsPayload>>(\n types.UPDATE_USER_SETTINGS_FOR_SS_LISTS_SUCCESS\n);\n\nexport const updateUserSettingsForSSListFail = createAction<string>(\n types.UPDATE_USER_SETTINGS_FOR_SS_LISTS_FAIL\n);\n\n// Update user settings for saved contact search\n\nexport const updateUserSettingsForSavedContactSearches = createAction(\n types.UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES,\n (payload: Partial<UpdateUserSettingsPayload>, callback?: SuccessErrorCallback) => ({\n payload,\n meta: callback,\n })\n);\n\nexport const updateUserSettingsForSavedContactSearchesSuccess = createAction<\n Partial<UpdateUserSettingsPayload>\n>(types.UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES_SUCCESS);\n\nexport const updateUserSettingsForSavedContactSearchesFail = createAction<string>(\n types.UPDATE_USER_SETTINGS_FOR_SAVED_CONTACT_SEARCHES_FAIL\n);\n\n// Update users settings for suggested searches\n\nexport const updateUserSettingsForSuggestedSearches = createAction(\n types.UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES,\n (payload: Partial<UpdateUserSettingsPayload>, callback?: SuccessErrorCallback) => ({\n payload,\n meta: callback,\n })\n);\n\nexport const updateUserSettingsForSuggestedSearchesSuccess = createAction<\n Partial<UpdateUserSettingsPayload>\n>(types.UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES_SUCCESS);\n\nexport const updateUserSettingsForSuggestedSearchesFail = createAction<string>(\n types.UPDATE_USER_SETTINGS_FOR_SUGGESTED_SEARCHES_FAIL\n);\n\n// Updates for user information\n\nexport const fetchUserInformation = createAction(types.FETCH_USER_INFORMATION);\n\nexport const fetchUserInformationSuccess = createAction<UserInformation>(\n types.FETCH_USER_INFORMATION_SUCCESS\n);\n\nexport const fetchUserInformationFail = createAction<string>(types.FETCH_USER_INFORMATION_FAIL);\n","export const sessionPropList = [\n 'contact_filters',\n 'company_filters',\n 'sourcing_outreach_detail_filters',\n 'sourcing_outreach_detail_sorting',\n 'my_companies_filters',\n 'analysts_leaderboard_filters',\n 'company_display_columns',\n 'my_companies_columns',\n 'user_list_filters',\n 'user_list_display_columns',\n 'user_list_show_quick_filters',\n 'search_view_home',\n 'search_view_my_companies',\n 'search_view_list',\n 'company_sorting',\n 'user_list_sorting',\n 'favorites_list_sorting',\n 'favorites_list_popup_sorting',\n 'saved_company_serches_sorting',\n 'source_scrub_list_sorting',\n 'profile_lists_tab_sorting',\n 'my_companies_sorting',\n 'contact_sorting',\n 'et_form_auto_save',\n 'search_results_page_number',\n 'contact_results_page_number',\n 'my_companies_results_page_number',\n 'user_list_search_results_page_number',\n 'ss_list_search_results_page_number',\n 'source_scrub_list_page_number',\n 'favorites_list_page_number',\n 'saved_company_serches_page_number',\n 'saved_contact_serches_page_number',\n 'new_et_companies_page_number',\n 'new_et_companies_sorting',\n];\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, each } from 'lodash';\nimport queryString from 'query-string';\n// constants\nimport {\n UserInformation,\n UserSettingsType,\n UserSessionType,\n UserSettings,\n UserSessionSettings,\n RegionOptions,\n} from '@optx/models/user';\nimport { UpdateUserSettingsPayload } from '@optx/models/api/user';\nimport globalConfig from '@constants/config';\nimport { sessionPropList } from '@constants/user';\n// utils\nimport { dataURItoBlob } from '@utils/string';\n// models\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { actions as eqtActions } from '@redux/company/equity-touch';\nimport { UserInformationState } from './interfaces';\n// redux\nimport * as actions from './actions';\nimport { actions as profileImageActions } from '../profile-image';\nimport { actions as regionOptionsActions } from '../region-settings';\n\nimport { fetchReducer, fetchFailReducer } from '../../feature/fetch/reducers';\n\nexport const initialState: UserInformationState = {\n data: null,\n authorizedComponents: {},\n regionOptions: {\n settings: [],\n loading: false,\n fetchedAt: null,\n error: '',\n },\n loading: false,\n error: '',\n fetchedAt: null,\n picture: '',\n};\n\nconst fetchUserInformationSuccessReducer: CaseReducer<\n UserInformationState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const { components, settings } = action.payload;\n\n draftState.data = action.payload;\n draftState.loading = false;\n draftState.fetchedAt = new Date().toISOString();\n\n draftState.authorizedComponents = components.reduce<Dictionary<boolean>>(\n (acumulator, componentType) => {\n const newAcumulator = acumulator;\n newAcumulator[componentType] = true;\n\n return newAcumulator;\n },\n {}\n );\n\n // update user image\n const pictureBase64 = action.payload.profile.picture;\n const imageBlob = dataURItoBlob(pictureBase64);\n\n if (imageBlob) {\n window.URL.revokeObjectURL(draftState.picture);\n draftState.picture = window.URL.createObjectURL(imageBlob);\n }\n\n // update global config\n\n if (\n settings.region_settings &&\n (settings.region_settings.short_date || settings.region_settings.grid_date)\n ) {\n globalConfig.short_date.DATE_FORMAT = settings.region_settings.short_date.date_format;\n globalConfig.grid_date.DATE_FORMAT = settings.region_settings.grid_date.date_format;\n }\n\n // Show my companies cards if user didn't yet used hide button to update API.\n if (\n draftState.data?.settings?.show_my_companies_cards &&\n typeof settings.show_my_companies_cards !== 'boolean'\n ) {\n draftState.data.settings.show_my_companies_cards = true;\n }\n\n // restore default filter values if new curated List is opened from profile list tab\n const search = window.location.search;\n const path = window.location.pathname;\n\n if (search.length && (path.startsWith('/ss-list') || path.startsWith('/user-lists'))) {\n const prevFilters = settings.session_settings.user_list_filters;\n const listId = path.split('/')[2];\n const isSameAsCurrentList = prevFilters?.indexOf(listId) !== -1;\n\n if (!isSameAsCurrentList) {\n const normalizedPrevFilters = prevFilters\n ? queryString.parse(prevFilters, { arrayFormat: 'comma' })\n : '';\n\n if (\n normalizedPrevFilters &&\n (normalizedPrevFilters.saved_list_id || normalizedPrevFilters.ss_list_id)\n ) {\n const filterKey = normalizedPrevFilters.saved_list_id ? 'saved_list_id' : 'ss_list_id';\n const filterKeysToRemove = Object.keys(normalizedPrevFilters).filter(\n key => key !== filterKey\n );\n\n filterKeysToRemove.forEach(e => delete normalizedPrevFilters[e]);\n draftState.data.settings.session_settings.user_list_filters =\n queryString.stringify(normalizedPrevFilters);\n }\n }\n }\n};\n\n// fetch region settings\nconst fetchRegionOptionsSuccessReducer: CaseReducer<\n UserInformationState,\n PayloadAction<Array<RegionOptions>>\n> = (draftState, action) => {\n draftState.regionOptions.settings = action.payload;\n draftState.regionOptions.loading = false;\n draftState.regionOptions.fetchedAt = new Date().toISOString();\n};\n\nconst updateUserSettingsReducer: CaseReducer<\n UserInformationState,\n PayloadAction<Partial<UpdateUserSettingsPayload>>\n> = (draftState, action) => {\n if (\n action.payload.column_widths_advanced_search ||\n action.payload.column_widths_lists ||\n action.payload.column_widths_my_companies\n ) {\n return;\n }\n\n draftState.loading = true;\n draftState.error = '';\n};\n\nconst updateUserSettingsSuccessReducer: CaseReducer<\n UserInformationState,\n PayloadAction<Partial<UpdateUserSettingsPayload>>\n> = (draftState, action) => {\n const settings = action.payload;\n\n // separate user settings from session settings into separate objects\n // and use them to update the store\n const userSettings: Partial<UserSettings> = {};\n const sessionSettings: Partial<UserSessionSettings> = {};\n\n each(settings, (value, key) => {\n if (sessionPropList.includes(key)) {\n sessionSettings[key as UserSessionType] = value as undefined;\n } else {\n userSettings[key as UserSettingsType] = value as undefined;\n }\n });\n\n if (userSettings.region_settings?.grid_date || userSettings.region_settings?.short_date) {\n globalConfig.short_date.DATE_FORMAT = userSettings.region_settings.short_date.date_format;\n globalConfig.grid_date.DATE_FORMAT = userSettings.region_settings.grid_date.date_format;\n }\n\n if (draftState.data) {\n if (draftState.data.settings) {\n draftState.data!.settings! = {\n ...draftState.data!.settings,\n ...userSettings,\n };\n\n draftState.data!.settings!.session_settings = {\n ...draftState.data!.settings!.session_settings,\n ...sessionSettings,\n };\n }\n }\n\n draftState.loading = false;\n};\n\nconst updateProfileImageReducer: CaseReducer<\n UserInformationState,\n PayloadAction<Blob | null, any, SuccessErrorCallback>\n> = (draftState, action) => {\n // release the memory for old picture and create new url\n window.URL.revokeObjectURL(draftState.picture);\n draftState.picture = window.URL.createObjectURL(action.payload as Blob);\n};\n\nconst resetEquityTocuhReducer: CaseReducer<UserInformationState> = draftState => {\n draftState.data!.settings!.session_settings!.et_form_auto_save = null;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchUserInformation, fetchReducer)\n .addCase(actions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n .addCase(actions.fetchUserInformationFail, fetchFailReducer)\n .addCase(regionOptionsActions.fetchRegionOptionsSuccess, fetchRegionOptionsSuccessReducer)\n .addCase(actions.updateUserSettings, updateUserSettingsReducer)\n .addCase(actions.updateUserSettingsSuccess, updateUserSettingsSuccessReducer)\n .addCase(actions.updateUserSettingsFail, fetchFailReducer)\n .addCase(actions.updateUserSettingsForFavoritesList, updateUserSettingsReducer)\n .addCase(actions.updateUserSettingsForFavoritesListSuccess, updateUserSettingsSuccessReducer)\n .addCase(actions.updateUserSettingsForFavoritesListFail, fetchFailReducer)\n .addCase(actions.updateUserSettingsForUserList, updateUserSettingsReducer)\n .addCase(actions.updateUserSettingsForUserListSuccess, updateUserSettingsSuccessReducer)\n .addCase(actions.updateUserSettingsForUserListFail, fetchFailReducer)\n .addCase(actions.updateUserSettingsForSSList, updateUserSettingsReducer)\n .addCase(actions.updateUserSettingsForSSListSuccess, updateUserSettingsSuccessReducer)\n .addCase(actions.updateUserSettingsForSSListFail, fetchFailReducer)\n .addCase(actions.updateUserSettingsForSavedContactSearches, updateUserSettingsReducer)\n .addCase(\n actions.updateUserSettingsForSavedContactSearchesSuccess,\n updateUserSettingsSuccessReducer\n )\n .addCase(actions.updateUserSettingsForSavedContactSearchesFail, fetchFailReducer)\n .addCase(actions.updateUserSettingsForSuggestedSearches, updateUserSettingsReducer)\n .addCase(\n actions.updateUserSettingsForSuggestedSearchesSuccess,\n updateUserSettingsSuccessReducer\n )\n .addCase(actions.updateUserSettingsForSuggestedSearchesFail, fetchFailReducer)\n .addCase(actions.updateUserSettingsFromAutoSave, updateUserSettingsReducer)\n .addCase(actions.updateUserSettingsFromAutoSaveSuccess, updateUserSettingsSuccessReducer)\n .addCase(actions.updateUserSettingsFromAutoSaveFail, fetchFailReducer)\n .addCase(profileImageActions.updateProfileImage, updateProfileImageReducer)\n .addCase(eqtActions.resetAddToEquityTouch, resetEquityTocuhReducer)\n);\n\nexport default reducer;\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, put, takeLatest } from 'redux-saga/effects';\n// models\nimport { UpdateUserSettingsPayload } from '@optx/models/api/user';\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { UserService } from '@services/api';\n// redux\nimport { AxiosResponse } from 'axios';\nimport { UserInformation } from '@optx/models/user';\nimport * as actions from './actions';\n// storage\nimport { AnalystStorage, AdminStorage, PartnerStorage } from '@optx/storage/localStorage';\n\nexport function* updateUserSettingsSaga(\n action: PayloadAction<Partial<UpdateUserSettingsPayload>, any, SuccessErrorCallback>\n) {\n const { meta: callback } = action;\n\n try {\n yield call(UserService.updateSettings, action.payload);\n\n if (action.type === actions.updateUserSettingsFromAutoSave.type) {\n yield put(actions.updateUserSettingsFromAutoSaveSuccess(action.payload));\n } else if (action.type === actions.updateUserSettingsForFavoritesList.type) {\n yield put(actions.updateUserSettingsForFavoritesListSuccess(action.payload));\n } else if (action.type === actions.updateUserSettingsForSSList.type) {\n yield put(actions.updateUserSettingsForSSListSuccess(action.payload));\n } else if (action.type === actions.updateUserSettingsForUserList.type) {\n yield put(actions.updateUserSettingsForUserListSuccess(action.payload));\n } else if (action.type === actions.updateUserSettingsForSavedContactSearches.type) {\n yield put(actions.updateUserSettingsForSavedContactSearchesSuccess(action.payload));\n } else if (action.type === actions.updateUserSettingsForSuggestedSearches.type) {\n yield put(actions.updateUserSettingsForSuggestedSearchesSuccess(action.payload));\n } else {\n yield put(actions.updateUserSettingsSuccess(action.payload));\n }\n\n callback && callback(true);\n } catch (e: any) {\n const errorMsg = `Failed to update user settings!!! (${Object.keys(action.payload).join(\n ' | '\n )})`;\n callback && callback(null, errorMsg);\n !callback && NotificationService.error(errorMsg);\n }\n}\n\nexport function* fetchUserInformationSaga() {\n try {\n const res: AxiosResponse<UserInformation> = yield call(UserService.getUserInfo);\n\n if (res.data) {\n yield put(actions.fetchUserInformationSuccess(res.data));\n /**\n * This section relates to the user's role.\n * If the user is an analyst, we need to redirect him from the start page to the 'analyst home' page.\n * Otherwise, redirect to the 'advanced search' page. For this purpose, we need to fetch user data.\n */\n let isAnalyst = false;\n let isAdmin = false;\n let isPartner = false;\n const { components } = res.data;\n\n if (components) {\n isAnalyst =\n components.includes('analyst_general') &&\n !components.includes('admin_portal_link') &&\n !components.includes('partner_user');\n\n isAdmin = components.includes('admin_portal_link');\n\n isPartner = components.includes('partner_user');\n }\n\n AnalystStorage.setIsAnalyst(isAnalyst);\n AdminStorage.setIsAdmin(isAdmin);\n PartnerStorage.setIsPartner(isPartner);\n } else {\n const errorMessage = 'Failed to fetch User Information!!!';\n yield put(actions.fetchUserInformationFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch User Information!!!';\n yield put(actions.fetchUserInformationFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* userSaga() {\n yield takeLatest(actions.updateUserSettings, updateUserSettingsSaga);\n yield takeLatest(actions.updateUserSettingsFromAutoSave, updateUserSettingsSaga);\n yield takeLatest(actions.updateUserSettingsForSSList, updateUserSettingsSaga);\n yield takeLatest(actions.updateUserSettingsForFavoritesList, updateUserSettingsSaga);\n yield takeLatest(actions.updateUserSettingsForUserList, updateUserSettingsSaga);\n yield takeLatest(actions.updateUserSettingsForSavedContactSearches, updateUserSettingsSaga);\n yield takeLatest(actions.updateUserSettingsForSuggestedSearches, updateUserSettingsSaga);\n yield takeLatest(actions.fetchUserInformation, fetchUserInformationSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\n\nexport function createFeatureActionType(featureName: string, actionName: string) {\n return `[${featureName}] ${actionName}`;\n}\n\nexport function createFeatureAction<P = void, T extends string = string>(\n featureName: string,\n type: T\n) {\n return createAction<P, T>(createFeatureActionType(featureName, type) as T);\n}\n","// common reusable reducers\nimport { PayloadAction } from '@reduxjs/toolkit';\n\ntype FetchState = Required<{\n loading: boolean;\n error: string | null;\n}>;\n\ntype FetchSuccessLoading = Required<{\n loading: boolean;\n error: string | null;\n}>;\n\ntype FetchSuccessState = FetchState & { data: any };\n\n/**\n * Reducer to handle default fetch call response.\n * @param draftState\n */\nexport const fetchReducer = (draftState: FetchState) => {\n draftState.loading = true;\n draftState.error = '';\n};\n\n/**\n * Reducer to handle default fetch success call response.\n * @param draftState\n * @param action\n */\nexport const fetchSuccessReducer = (draftState: FetchSuccessState, action: PayloadAction<any>) => {\n draftState.loading = false;\n draftState.data = action.payload;\n};\n\n/**\n * Reducer to handle default fetch success call response\n * for cases where we only need to change the loading\n * @param draftState\n */\nexport const fetchSuccessLoadingReducer = (draftState: FetchSuccessLoading) => {\n draftState.loading = false;\n};\n\n/**\n * Reducer to handle default fetch error call response.\n * @param draftState\n * @param action\n */\nexport const fetchFailReducer = (draftState: FetchState, action: PayloadAction<string>) => {\n draftState.loading = false;\n draftState.error = action.payload;\n};\n","export const DEFAULT_EMPTY_VALUE = '-';\nexport const NOT_AVAILABLE_VALUE = 'N/A';\nexport const NEGATIVE_SIGN = '−';\n","import { message as antdMessage } from 'antd';\n\nexport const DEFAULT_CELL_VALUE = '-';\n\nexport const DEFAULT_LAST_TOUCH = 'Never';\nexport const DEFAULT_NEXT_TOUCH = 'Not Scheduled';\nexport const ABBREVIATION_ERROR_MESSAGE =\n 'Field only supports digits and letters for abbreviation (K, M, B, T)';\n\nexport const ABBREVIATION_WITH_NEGATIVE_VALUES_ERROR_MESSAGE =\n 'Characters allowed: - for negative values, digits, letters (K, M, B, T)';\n\nexport const ABBR_NEGATIVE_VALUES_SPECIAL_OPTIONS_ERROR_MESSAGE =\n 'Characters allowed: - for negative values, digits, letters (K, M, B, T), special options';\n\nexport const ONLY_DIGITS_ERROR_MESSAGE = 'Field only supports digits';\nexport const ONLY_DIGITS_AND_PERCENTAGE_ERROR_MESSAGE =\n 'Field only supports digits and percentage symbol';\nexport const ONLY_DIGITS_AND_OPTIONS_ERROR_MESSAGE =\n 'Field only supports digits and special options';\n\nexport const ABBREVIATION_AND_OPTIONS_ERROR_MESSAGE =\n 'Field only supports digits, letters for abbreviation (K, M, B, T) and special options';\n\nexport const message = () => {\n antdMessage.config({ maxCount: 1, duration: 1.2 });\n\n return antdMessage;\n};\n\nexport const LINK_URL_VALUE_ERROR_MESSAGE = 'Field only supports valid URL links';\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, omit } from 'lodash';\nimport queryString from 'query-string';\n// models\nimport { SearchState as GridSearchState } from './interfaces';\nimport Company, {\n ProductCategory,\n CompanyUserValue,\n FinancialFieldType,\n OpportunityPresentation,\n UpdateOpporutunityFinancials,\n CompanyUserValuesKeys,\n UpdateOpportunityDealPreparation,\n UpdateOpportunityTechnology,\n UpdateOpportunityCustomerKpis,\n CompanyFundingRounds,\n Addon,\n} from '@models/Company';\nimport {\n AdditionalFiltersPayload,\n AdditionalFiltersResponse,\n AdditionalFiltersFailPayload,\n} from '@optx/redux/company/addon-management/interfaces';\nimport { GridPayloadMain, GridKeys, GridPayload } from '@models/grid';\nimport { ViewSuccess, SearchState, LoadSearch } from '@models/search';\nimport { RouteAliases } from '@models/routes';\nimport { ChartBarIntervalKeys } from '@models/charts/data';\nimport { SelectOption } from '@models/Option';\nimport { UpdateCompanyET } from '@models/equityTouch';\nimport { PreselectedFilter } from '@models/filters';\nimport { EquityTouchBulkSuccess } from '@models/bulkActions';\nimport {\n AddCompanyToWatchListBulk,\n AddCompanyToWatchList,\n DeleteCompanyFromWatchList,\n CompanyWatchList,\n} from '@models/WatchList';\nimport { UserInformation } from '@models/user';\nimport {\n SaveResearchRationaleResponse,\n ScoreRationaleResponse,\n} from '@features/add-research-rationale/state/interfaces';\nimport { SearchPayload } from '@models/api/contacts';\nimport { BulkEditFieldsSuccess } from '@features/bulk-actions/edit-fields/state/interfaces';\nimport { BulkSoftwareSuccess } from '@features/bulk-actions/bulk-software/state/interfaces';\nimport { BulkAiMlSuccess } from '@features/bulk-actions/bulk-ai-ml/state/interfaces';\nimport { EditCompanyFund } from '@components/feature/company-individual-edit/state/fund/interfaces';\nimport { EditOpportunityType } from '@components/feature/company-individual-edit/state/oportunityType/interfaces';\nimport { AiDescriptionResponse } from '@optx/redux/company/profile/interfaces';\nimport {\n CustomValue,\n EditFieldSuccess,\n MultipleFieldsValue,\n UpdateFieldsPayload,\n UpdateVerifyCompanyPayload,\n} from '@features/company/edit-fields/state/interfaces';\nimport {\n TrendingLinesUpdate,\n EmployeeGrowthPercentage,\n} from '@redux/company/user-values/interfaces';\nimport { DeleteTagPayload, SuccessCompanyTag } from '@redux/company/tags/interfaces';\nimport { CompanyActivePayload } from '@redux/company/active/interfaces';\nimport { OptxScoreRationale } from '@redux/company/score/interfaces';\nimport { TouchesFinancialPayload } from '@models/api/touches';\nimport { CompanyTouchSuccessResponse } from '@optx/models/company/CompanyTouch';\nimport { SortByRule } from '@optx/models/table/sorting';\n// constants\nimport { GRID_KEYS_SEARCH, SEARCH_INITIAL_STATE } from '@constants/grid';\nimport { YEARS_LABELS } from '@optx/constants/search';\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\nimport {\n DEFAULT_FUND_VALUE,\n DEFAULT_COMPANY_OWNER_VALUE,\n DEFAULT_OPPORTUNITY_TYPE,\n} from '@constants/table/company';\nimport { ADD_TOUCH_LOCALSTORAGE_KEY_PREFIX } from '@optx/constants/autosave';\n// utils\nimport {\n generateGridReducerInitialState,\n getLocationMainGridKey,\n getGridKeyFromReferral,\n} from '@utils/grid';\nimport { generateDynamicColumnKeys } from '@optx/utils/columns';\nimport { updateRevenueList } from '@utils/company';\nimport { getRouteAlias } from '@utils/routes';\nimport { updateFinancialValues } from '@utils/editFields';\nimport { showRationaleForStage } from '@optx/utils/helpers';\nimport { deleteSavedValues } from '@optx/storage/localStorage/autoSaveStorage';\n// redux\nimport * as actions from './actions';\nimport * as fetchReducers from '@redux/feature/fetch/reducers';\nimport { actions as paginationActions } from '@features/grid/pagination';\nimport { actions as viewActions } from '@features/grid/view';\nimport {\n createCompanyToListSuccess,\n deleteCompanyToListSuccess,\n} from '@redux/common/list/reducers';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { actions as researchRationaleActions } from '@features/add-research-rationale/state';\n// eslint-disable-next-line max-len\nimport { actions as companyOportunityTypeActions } from '@components/feature/company-individual-edit/state/oportunityType';\nimport { actions as fundActions } from '@components/feature/company-individual-edit/state/fund';\nimport { actions as bulkEditActions } from '@features/bulk-actions/edit-fields';\nimport { actions as bulkSoftwareActions } from '@features/bulk-actions/bulk-software';\nimport { actions as bulkAiMlActions } from '@features/bulk-actions/bulk-ai-ml';\nimport { actions as bulkEqtActions } from '@features/bulk-actions/equity-touch';\nimport { actions as outreachFilterActions } from '@redux/company-outreach/filters';\nimport { actions as myCompaniesFilterCardsActions } from '@optx/redux/my-companies/filters-cards';\nimport * as favoriteListsActions from '@redux/favorite-lists/lists/actions';\nimport * as favoriteListsActionsPopup from '@redux/favorite-lists/lists-popup/actions';\nimport { actions as companyProfileActions } from '@redux/company/profile';\nimport { actions as fundingRoundActions } from '@redux/company/funding-rounds';\nimport { actions as companyEditFields } from '@features/company/edit-fields/state';\nimport { actions as sortActions } from '@features/grid/sort';\nimport { actions as inBusinessEvaluationActions } from '@redux/company/in-business';\nimport { actions as companyUserActions } from '@redux/company/user-values';\nimport { actions as equityTouchActions } from '@redux/company/equity-touch';\nimport { updateCompanyETData } from '@redux/company/equity-touch/reducer';\nimport { actions as tagsActions } from '@redux/company/tags';\nimport { actions as portfolioActions } from '@redux/company/portfolio';\nimport { addCompanyActiveSuccess } from '@redux/company/active/actions';\nimport {\n sendNewOptxScoreRationaleSuccess,\n sendOptxScoreRationaleSuccess,\n} from '@redux/company/score/actions';\nimport { actions as addonActions } from '@redux/company/addon-management';\nimport { actions as updateCompanyInfoActions } from '@redux/ui/modals/company-touches';\nimport { actions as paginationLongCardActions } from '@features/grid/pagination-long-card';\nimport { actions as editAllInfoActions } from '@optx/features/edit-all-info/state';\nimport { actions as opportunityPresentationActions } from '@redux/company/opportunity-presentation';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches';\nimport { actions as presentationActions } from '@redux/company/opportunity-presentation/index';\n\nconst initialState: GridSearchState = generateGridReducerInitialState(\n GRID_KEYS_SEARCH,\n SEARCH_INITIAL_STATE\n);\n\nconst initialSearchCompaniesReducer: CaseReducer<\n GridSearchState,\n PayloadAction<GridPayloadMain<Partial<SearchPayload> | undefined>>\n> = (draftState, action) => {\n const { gridKey } = action.payload;\n\n fetchReducers.fetchReducer(draftState[gridKey]);\n};\n\nconst searchCompaniesReducer: CaseReducer<\n GridSearchState,\n PayloadAction<GridPayloadMain<Partial<SearchState> | undefined>>\n> = (draftState, action) => {\n const { gridKey, data } = action.payload;\n\n if (gridKey === 'addons' && data?.companyId) draftState[gridKey].companyId = data.companyId;\n\n fetchReducers.fetchReducer(draftState[gridKey]);\n};\n\nexport const searchCompaniesSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<Company[], any, GridPayloadMain<Partial<SearchPayload>>>\n) => {\n const {\n payload: gridSearchCompaniesResponse,\n meta: { gridKey, data },\n } = action;\n\n const allGridSearchCompaniesById = {} as Dictionary<Company>;\n let searchCompaniesResponse: Company[] = gridSearchCompaniesResponse;\n\n if (gridKey === 'advancedSearch') {\n const gridSearchCompaniesResponseMapped = gridSearchCompaniesResponse.map(company => {\n updateRevenueList(company);\n\n return {\n ...company,\n ebitda_year:\n (company.ebitda_year as unknown as string) === '-' ? null : company.ebitda_year,\n last_rev_update_year:\n (company.last_rev_update_year as unknown as string) === '-'\n ? null\n : company.last_rev_update_year,\n };\n });\n\n searchCompaniesResponse = gridSearchCompaniesResponseMapped;\n }\n\n searchCompaniesResponse.forEach((listItem: Company) => {\n allGridSearchCompaniesById[listItem.company_id] = listItem;\n });\n\n draftState[gridKey].byId = allGridSearchCompaniesById;\n draftState[gridKey].allIds = gridSearchCompaniesResponse.map(listItem => listItem.company_id);\n draftState[gridKey].loading = false;\n draftState[gridKey].fetchedAt = new Date().toISOString();\n draftState[gridKey].searchTitle = data.searchTitle;\n draftState[gridKey].listType = data.listType;\n draftState[gridKey].list_id = data.list_id;\n\n if (typeof data.searchKey === 'string') draftState[gridKey].searchKey = data.searchKey;\n\n if (gridKey === 'addons') {\n draftState[gridKey].companyId = data.companyId;\n }\n};\n\nexport const searchCompaniesFailReducer = (\n draftState: GridSearchState,\n action: PayloadAction<GridPayloadMain<string>>\n) => {\n const { gridKey, data } = action.payload;\n fetchReducers.fetchFailReducer(draftState[gridKey], { payload: data, type: action.type });\n};\n\nexport const changeSortReducer = (\n draftState: GridSearchState,\n action: PayloadAction<GridPayload<SortByRule<any>[], GridKeys>>\n) => {\n const { gridKey } = action.payload;\n\n if (gridKey === 'addons') {\n draftState[gridKey].loading = true;\n }\n};\n\nexport const fetchReducer = (draftState: GridSearchState) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n fetchReducers.fetchReducer(draftState[gridKey]);\n};\n\nexport const fetchFailReducer = (draftState: GridSearchState, action: PayloadAction<string>) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n fetchReducers.fetchFailReducer(draftState[gridKey], action);\n};\n\nexport const fetchSuccessLoadingReducer = (\n draftState: GridSearchState,\n action: PayloadAction<ViewSuccess>\n) => {\n const { pageAlias, label } = action.payload;\n\n const gridKey = getLocationMainGridKey(pageAlias);\n\n if (!gridKey) return;\n\n draftState[gridKey].searchTitle = label || '';\n\n fetchReducers.fetchSuccessLoadingReducer(draftState[gridKey]);\n};\n\nconst cancelCompaniesSearchReducer: CaseReducer<\n GridSearchState,\n PayloadAction<GridPayloadMain<boolean>>\n> = (draftState, action) => {\n const { gridKey, data } = action.payload;\n\n draftState[gridKey].loading = data;\n\n draftState[gridKey].cancelled = data;\n};\n\nconst shouldUpdateSourcingOutReachAnalystInfoReducer: CaseReducer<\n GridSearchState,\n PayloadAction<boolean>\n> = (draftState, action) => {\n draftState.outreachDetails.shouldUpdateSourcingOutReachAnalystInfo = action.payload;\n};\n\nconst saveSearchTitleReducer: CaseReducer<\n GridSearchState,\n PayloadAction<GridPayloadMain<string>>\n> = (draftState, action) => {\n const { gridKey, data } = action.payload;\n const pageAlias: RouteAliases | null = getRouteAlias();\n\n if (pageAlias === 'advancedSearch') {\n draftState[gridKey].searchTitle = data;\n }\n};\n\nconst deleteSearchTitleReducer: CaseReducer<\n GridSearchState,\n PayloadAction<GridPayloadMain<string>>\n> = (draftState, action) => {\n const { gridKey, data } = action.payload;\n\n if (draftState[gridKey].searchTitle === data) {\n draftState[gridKey].searchTitle = '';\n }\n};\n\nconst hideCancelSearchReducer: CaseReducer<\n GridSearchState,\n PayloadAction<GridPayloadMain<boolean>>\n> = (draftState, action) => {\n const { gridKey, data } = action.payload;\n\n draftState[gridKey].hideCancelSearch = data;\n};\n\nconst addToEquityTouchBulkSuccessReducer: CaseReducer<\n GridSearchState,\n PayloadAction<EquityTouchBulkSuccess>\n> = (draftState, action) => {\n const gridKey = getLocationMainGridKey();\n if (gridKey) draftState[gridKey].fetchedAt = '';\n};\n\nconst updateTrendingReducer: CaseReducer<\n GridSearchState,\n PayloadAction<GridPayloadMain<ChartBarIntervalKeys>>\n> = (draftState, action) => {\n const { gridKey, data } = action.payload;\n\n draftState[gridKey].trending = data;\n};\n\nconst resetSearchKeyReducer: CaseReducer<GridSearchState> = draftState => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n draftState[gridKey].searchKey = '';\n};\n\nconst updateSourcingOutReachAnalystInfoReducer: CaseReducer<\n GridSearchState,\n PayloadAction<{ tableGridQuery: string }>\n> = (draftState, action) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n if (gridKey === 'outreachDetails')\n draftState[gridKey].tableGridQuery = action.payload.tableGridQuery;\n};\n\nconst fetchCompaniesByFilterReducer: CaseReducer<\n GridSearchState,\n PayloadAction<GridPayloadMain<PreselectedFilter>>\n> = (draftState, action) => {\n const { gridKey } = action.payload;\n\n fetchReducers.fetchReducer(draftState[gridKey]);\n};\n\n// GRID Reducers\n\nexport const inBusinessEvaluationSuccessReducer = (\n draftState: GridSearchState, // advancedSearch && myCompanies\n action: PayloadAction<{\n score: number;\n score_v3: number;\n companyId: number;\n il_score: number;\n il_score_growth: number;\n isInBusiness: boolean;\n }>\n) => {\n const { companyId, isInBusiness, score, il_score: IlScore, score_v3 } = action.payload;\n\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n draftState[gridKey].byId[companyId]!.is_in_business = isInBusiness || false;\n draftState[gridKey].byId[companyId]!.score = score;\n draftState[gridKey].byId[companyId]!.score_v3 = score_v3;\n draftState[gridKey].byId[companyId]!.il_optx_score = IlScore;\n }\n};\n\nexport const editFieldsSuccessReducer = (\n draftState: GridSearchState, // advancedSearch && myCompanies && addons\n action: PayloadAction<EditFieldSuccess>\n) => {\n // if company is found in any of these grids, we\n // need to update the edited field with the new value\n const gridKeys: GridKeys[] = [\n 'advancedSearch',\n 'lists',\n 'myCompanies',\n 'addons',\n 'outreachDetails',\n ];\n\n const {\n companyId,\n fieldName,\n value,\n score,\n scoreGrowth,\n newScore,\n newScoreGrowth,\n isPartner,\n companyOwnerData,\n ilScore,\n ilScoreGrowth,\n defaultOptxScore,\n isPsgCompany,\n raiseDate,\n lastRevenueGrowth,\n } = action.payload;\n\n const optionSelected = (value as UpdateFieldsPayload).value as SelectOption;\n const fieldKeyValue = (value as UpdateFieldsPayload).value;\n const fieldKey = (value as UpdateFieldsPayload).fieldKey as CompanyUserValuesKeys;\n const rationale = (value as UpdateFieldsPayload).rationale;\n\n gridKeys.forEach(gridKey => {\n const company = draftState[gridKey].byId[companyId];\n\n if (company) {\n if (defaultOptxScore === 'il') {\n if (ilScore !== undefined) {\n company.il_optx_score = ilScore;\n }\n\n if (typeof ilScoreGrowth === 'number') {\n company.il_score_growth = ilScoreGrowth.toString();\n }\n } else {\n if (score !== undefined) {\n company.score = score;\n }\n\n if (newScore !== undefined) {\n company.score_v3 = newScore;\n }\n\n if (typeof scoreGrowth === 'number') {\n company.score_growth = scoreGrowth.toString();\n }\n\n if (typeof newScoreGrowth === 'number') {\n company.score_v3_growth = newScoreGrowth.toString();\n }\n }\n\n if (!Array.isArray(fieldName)) {\n if (fieldName === 'Software Company') {\n company.is_software =\n ((value as UpdateFieldsPayload).value as unknown as boolean) || false;\n\n company.is_software_rationale = rationale as string;\n\n if (isPartner) {\n company.is_software_verified = false;\n } else {\n company.is_software_verified = true;\n }\n\n company.score = score as number;\n company.score_v3 = newScore as number;\n }\n\n if (fieldName === 'PSG Fit' && typeof score === 'number') {\n company.is_interesting = (value as UpdateFieldsPayload).value as unknown as boolean;\n\n company.interesting_rationale = rationale as string;\n\n company.score = score;\n\n if (typeof newScore === 'number') {\n company.score_v3 = newScore;\n }\n }\n\n if (fieldName === 'Company Owner') {\n if (companyOwnerData) {\n company.company_owner =\n companyOwnerData.company_owner_name === null\n ? DEFAULT_COMPANY_OWNER_VALUE\n : companyOwnerData.company_owner_name;\n } else {\n company.company_owner = DEFAULT_COMPANY_OWNER_VALUE;\n }\n }\n\n if (fieldName === 'Sub-Sector') {\n company.sub_sector = optionSelected.label;\n }\n\n if (fieldName === 'Sector') {\n company.sector = optionSelected.label;\n }\n\n if (fieldName === 'Pipeline Rank') {\n company.pipeline_rank = optionSelected.label;\n }\n\n if (fieldName === 'Senior Advisor Thesis') {\n company.senior_advisor_thesis = optionSelected.label;\n }\n\n if (fieldName === 'Lead Source') {\n company.lead_source = optionSelected.label;\n }\n\n if (fieldName === 'Fund') {\n company.fund = optionSelected.label;\n company.is_psg_company = isPsgCompany as boolean;\n }\n\n if (fieldName === 'Stage') {\n // update previous stage before\n company.prev_stage = company.stage;\n company.stage = optionSelected.label;\n company.is_psg_company = isPsgCompany as boolean;\n\n if (showRationaleForStage(optionSelected.label)) {\n company.stage_rationale = rationale as string;\n } else {\n company.stage_rationale = null;\n }\n }\n\n if (fieldName === 'Number of Employees') {\n company[fieldKey!] = fieldKeyValue as never;\n company.score = score as number;\n company.score_v3 = newScore as number;\n }\n\n if (fieldName === 'Last Raised Amount') {\n company[fieldKey!] = fieldKeyValue as never;\n\n if (raiseDate) {\n company.raise_date = raiseDate;\n }\n }\n\n if (fieldName === 'Opportunity Type') {\n company.opportunity_type = optionSelected.label;\n }\n\n if (fieldName === 'Active on Pipeline') {\n company.active = (value as UpdateFieldsPayload).value as unknown as boolean;\n }\n\n if (fieldName === 'In Business') {\n company.is_in_business = (value as UpdateFieldsPayload).value as unknown as boolean;\n }\n\n if (fieldName === 'Last Funding Date') {\n company[fieldKey!] = fieldKeyValue as never;\n }\n\n if (fieldKey === 'ebitda_list' || fieldKey === 'revenue_list') {\n updateFinancialValues(company, fieldKey, fieldKeyValue as CustomValue);\n company.last_rev_growth =\n lastRevenueGrowth || lastRevenueGrowth === 0 ? lastRevenueGrowth?.toString() : null;\n }\n\n if (fieldKey === 'annual_recurring_revenue') {\n company[fieldKey!] = fieldKeyValue as never;\n }\n\n if (fieldKey === 'gross_margin_list') {\n company[fieldKey!] = fieldKeyValue as never;\n }\n\n if (fieldName === 'Capital Raised') {\n company[fieldKey!] = fieldKeyValue as never;\n }\n\n if (fieldName === 'Product Category') {\n const newCategories = ((value as UpdateFieldsPayload).value as string)\n .split(',')\n .map(item => ({\n category: item,\n is_valid: true,\n }));\n\n const previousCategories = [...(company.product_category || [])] as ProductCategory[];\n\n const combinedArray = newCategories.map(value => {\n const duplicateValue = previousCategories.find(\n item => item.category === value.category\n );\n\n return duplicateValue !== undefined ? duplicateValue : value;\n });\n\n company.product_category = ['blank'].includes(\n (value as UpdateFieldsPayload).value as string\n )\n ? null\n : combinedArray;\n }\n\n if (fieldName === 'Sub Vertical') {\n company.sub_vertical = (value as UpdateFieldsPayload).value as string[];\n }\n\n if (fieldName === 'Add-on') {\n const newAddon = ((value as UpdateFieldsPayload).value as CustomValue)\n .optionalValue as Addon;\n\n company.addon = newAddon;\n company.addon_bool = ((value as UpdateFieldsPayload).value as CustomValue)\n .value as boolean;\n draftState[gridKey].byId[companyId].addon = newAddon;\n draftState[gridKey].byId[companyId].addon_bool = (\n (value as UpdateFieldsPayload).value as CustomValue\n ).value as boolean;\n }\n\n if (fieldName === 'Date Presented') {\n const selectedValue = (value as UpdateFieldsPayload).value as string[];\n company.date_presented = selectedValue;\n }\n\n if (fieldName === 'Next Steps') {\n company.next_steps = optionSelected.label;\n company.next_steps_opinion = (value as UpdateFieldsPayload).extraValues\n ? ((value as UpdateFieldsPayload).extraValues as string[])[0]\n : null;\n }\n\n if (fieldName === 'Company Type') {\n company.company_type = optionSelected.label;\n }\n\n if (fieldName === 'Linkedin Profile') {\n company.linkedin = fieldKeyValue as never;\n }\n\n if (fieldName === 'Website Status') {\n company.url_status = fieldKeyValue ? 'active' : 'not active';\n }\n\n if (fieldName === 'Location') {\n const { city, country, state } = action.payload;\n company.city = city as string;\n company.country = country as string;\n company.state = state as string;\n }\n\n if (fieldName === 'AI / ML') {\n company.is_ai_ml = fieldKeyValue as boolean;\n }\n\n if (fieldName === 'Rationale') {\n company.rationale =\n (value as UpdateFieldsPayload).value !== 'blank'\n ? ((value as UpdateFieldsPayload).value as string)\n : '';\n }\n } else {\n if (fieldName.includes('Stage')) {\n const optionSelected = (value as MultipleFieldsValue).value.Stage;\n company.stage = optionSelected.label;\n company.is_psg_company = isPsgCompany as boolean;\n\n if (showRationaleForStage(optionSelected.label)) {\n company.stage_rationale = rationale as string;\n } else {\n company.stage_rationale = null;\n }\n }\n\n if (fieldName.includes('Pipeline Rank')) {\n const optionSelected = (value as MultipleFieldsValue).value['Pipeline Rank'];\n company.pipeline_rank = optionSelected.label;\n }\n\n if (fieldName.includes('Company Owner')) {\n if (companyOwnerData) {\n company.company_owner =\n companyOwnerData.company_owner_name === null\n ? DEFAULT_COMPANY_OWNER_VALUE\n : companyOwnerData.company_owner_name;\n } else {\n company.company_owner = DEFAULT_COMPANY_OWNER_VALUE;\n }\n }\n }\n\n if (fieldName === 'Year Founded') {\n company.year_founded = optionSelected.value.toString();\n }\n\n if (fieldName === 'Commentary') {\n company.transaction_notes = optionSelected.toString();\n }\n }\n });\n};\n\nexport const updateVerifiedSoftwareSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<UpdateVerifyCompanyPayload>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { companyId, value: isVerified } = action.payload;\n\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n draftState[gridKey].byId[companyId]!.is_software_verified = isVerified || false;\n }\n};\n\nexport const updateCompanyUserValuesSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<CompanyUserValue>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { companyId, fieldKey, value, lastRoundData, financialList } = action.payload;\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n // when updating a company user value, the value returned\n // to update the store is either a string or a number\n if (fieldKey === 'last_raised_amount') {\n draftState[gridKey].byId[companyId]![fieldKey] = Number(value);\n draftState[gridKey].byId[companyId]!.last_round = lastRoundData?.last_round as string;\n draftState[gridKey].byId[companyId]!.last_round_id = lastRoundData?.last_round_id as number;\n\n if (lastRoundData?.parentcompany) {\n let data: string;\n if (lastRoundData?.parentcompany === 'blank') data = '';\n else data = lastRoundData.parentcompany;\n\n draftState[gridKey].byId[companyId]!.parentcompany = data;\n } else draftState[gridKey].byId[companyId]!.parentcompany = '';\n }\n\n if (financialList) {\n (draftState[gridKey].byId[companyId]![fieldKey] as FinancialFieldType[]) = financialList;\n }\n\n if (value === null) {\n (draftState[gridKey].byId[companyId]![fieldKey] as null) = value;\n }\n }\n};\n\nexport const updateCompanyTrendLinesReducer = (\n draftState: GridSearchState,\n action: PayloadAction<TrendingLinesUpdate>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { employeeCountTrends, optxScoreTrends, companyId, newOptxScoreTrends } = action.payload;\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n if (employeeCountTrends)\n draftState[gridKey].byId[companyId]!.employee_count_trends = employeeCountTrends;\n if (optxScoreTrends) draftState[gridKey].byId[companyId]!.optx_score_trends = optxScoreTrends;\n if (newOptxScoreTrends)\n draftState[gridKey].byId[companyId]!.optx_score_v3_trends = newOptxScoreTrends;\n }\n};\n\nexport const updateCompanyEmployeeGrowthPercentageReducer = (\n draftState: GridSearchState,\n action: PayloadAction<EmployeeGrowthPercentage>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { empGrowthPercent, companyId } = action.payload;\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n if (empGrowthPercent)\n draftState[gridKey].byId[companyId]!.emp_growth_percent = empGrowthPercent;\n }\n};\n\nexport const updateCompanyETDataReducer = (\n draftState: GridSearchState,\n action: PayloadAction<UpdateCompanyET>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const {\n updateData: { companyId },\n } = action.payload;\n\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n updateCompanyETData(draftState[gridKey].byId[companyId]!, action.payload);\n }\n};\n\nexport const bulkSoftwareSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<{ data: BulkSoftwareSuccess[]; count: number; isAdminOrAnalyst?: boolean }>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { payload } = action;\n\n if (payload) {\n payload.data.forEach(item => {\n const {\n company_id: companyId,\n optx_score_growth: scoreGrowth,\n optx_score_trends: optxScoreTrends,\n optx_score: score,\n score_v3: newScore,\n optx_score_v3_trends: newOptxScoreTrends,\n score_v3_growth: newScoreGrowth,\n is_software: software,\n is_software_rationale: rationale,\n } = item;\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n draftState[gridKey].byId[companyId]!.optx_score_trends = optxScoreTrends;\n draftState[gridKey].byId[companyId]!.score = score;\n draftState[gridKey].byId[companyId]!.is_software = software;\n draftState[gridKey].byId[companyId]!.score_growth = scoreGrowth;\n draftState[gridKey].byId[companyId]!.is_software_rationale = rationale as string;\n draftState[gridKey].byId[companyId]!.score_v3 = newScore;\n draftState[gridKey].byId[companyId]!.score_v3_growth = newScoreGrowth;\n draftState[gridKey].byId[companyId]!.optx_score_v3_trends = newOptxScoreTrends;\n\n if (payload.isAdminOrAnalyst) {\n draftState[gridKey].byId[companyId]!.is_software_verified = true;\n } else {\n draftState[gridKey].byId[companyId]!.is_software_verified = false;\n }\n }\n });\n }\n};\n\nexport const bulkAiMlSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<{ data: BulkAiMlSuccess[]; count: number }>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { payload } = action;\n\n if (payload && payload.data) {\n payload.data.forEach(item => {\n const { company_id: companyId, is_ai_ml: aiMl } = item;\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n draftState[gridKey].byId[companyId]!.is_ai_ml = aiMl;\n }\n });\n }\n};\n\nexport const addCompanyTagSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<SuccessCompanyTag>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { companyId, ...tag } = action.payload;\n\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n // Add empty list if is null.\n if (!draftState[gridKey].byId[companyId]!.specialties) {\n draftState[gridKey].byId[companyId]!.specialties = [];\n }\n\n if (Array.isArray(draftState[gridKey].byId[companyId]!.specialties)) {\n draftState[gridKey].byId[companyId]!.specialties?.push(tag);\n }\n\n draftState[gridKey].byId[companyId]!.cs_tags += `|${tag.tag}`;\n }\n};\n\nexport const deleteCompanyTagSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<DeleteTagPayload>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { label, companyId } = action.payload;\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n const csTagsArray = draftState[gridKey].byId[companyId]!.cs_tags?.split('|').slice(1);\n const tagIndex = csTagsArray.findIndex(item => item === label);\n\n if (tagIndex !== -1) {\n const removeTag = csTagsArray?.splice(tagIndex, 1);\n draftState[gridKey].byId[companyId]!.cs_tags = draftState[gridKey].byId[\n companyId\n ]!.cs_tags.replace(`|${removeTag.join('|')}`, '');\n }\n }\n};\n\nexport const addFundReducer = (\n draftState: GridSearchState,\n action: PayloadAction<EditCompanyFund>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { companyId, fundName } = action.payload;\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n draftState[gridKey].byId[companyId]!.fund = fundName === null ? DEFAULT_FUND_VALUE : fundName;\n }\n};\n\nexport const addCompanyPortfolioSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<{ company_id: number; is_portfolio?: boolean }>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { company_id: companyId, is_portfolio: isPortfolio } = action.payload;\n\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n if (draftState[gridKey].byId[companyId]!.company_id === companyId) {\n draftState[gridKey].byId[companyId]!.is_portfolio = isPortfolio ?? false;\n draftState[gridKey].byId[companyId]!.is_platform = isPortfolio ?? false;\n // its for tags. is_portfolio and is_platform used for the same thing.\n }\n }\n};\n\nexport const addCompanyToListBulkSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<AddCompanyToWatchListBulk>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { companyIds, watchLists, ownerName } = action.payload;\n\n companyIds.map(companyId => {\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n const companyData = createCompanyToListSuccess(\n draftState[gridKey].byId[companyId]!,\n watchLists,\n true,\n ownerName\n );\n draftState[gridKey].byId[companyId] = companyData;\n }\n\n return null;\n });\n};\n\nexport const addCompanyToListSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<AddCompanyToWatchList>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { watchLists, companyId } = action.payload;\n let company = draftState[gridKey].byId[companyId];\n\n if (company) {\n watchLists.forEach(list => {\n company = createCompanyToListSuccess(company as Company, list);\n });\n\n draftState[gridKey].byId[companyId] = company;\n }\n};\n\nexport const deleteCompanyToListSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<DeleteCompanyFromWatchList>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { listId, companyId } = action.payload;\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n const companyData = deleteCompanyToListSuccess(draftState[gridKey].byId[companyId]!, listId);\n draftState[gridKey].byId[companyId] = companyData;\n }\n};\n\nexport const createCompanyToListSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<{\n companyId: number;\n list: CompanyWatchList;\n }>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { companyId, list } = action.payload;\n const company: Company | undefined =\n companyId !== undefined ? draftState[gridKey].byId[companyId] : undefined;\n\n if (company) {\n const companyData = createCompanyToListSuccess(\n draftState[gridKey].byId[companyId as number]!,\n list\n );\n draftState[gridKey].byId[companyId as number] = companyData;\n }\n};\n\nexport const fetchUserInformationSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<UserInformation>\n) => {\n const pageAlias: RouteAliases | null = getRouteAlias();\n const userSettings = action.payload.settings;\n\n if (pageAlias === 'companyOutReach') {\n const persistedSearch = userSettings.session_settings\n ? action.payload.settings.session_settings.sourcing_outreach_detail_filters\n : undefined;\n\n if (persistedSearch !== undefined && /^.*query.*$/.test(persistedSearch)) {\n const filter = queryString.parse(persistedSearch);\n draftState.outreachDetails.searchKey = filter.query as string;\n }\n }\n\n if (pageAlias === 'myCompanies') {\n const persistedSearch = userSettings.session_settings\n ? action.payload.settings.session_settings.my_companies_filters\n : undefined;\n\n if (userSettings.session_settings.my_companies_trending) {\n draftState.myCompanies.trending = userSettings.session_settings.my_companies_trending;\n }\n\n // set query or company_name_or_url string as searchKey\n if (persistedSearch !== undefined && /^.*query.*$/.test(persistedSearch)) {\n const filter = queryString.parse(persistedSearch);\n draftState.myCompanies.searchKey = filter.query as string;\n } else if (persistedSearch !== undefined && /^.*company_name_or_url.*$/.test(persistedSearch)) {\n const filter = queryString.parse(persistedSearch);\n draftState.myCompanies.searchKey = filter.company_name_or_url as string;\n }\n }\n\n if (pageAlias === 'advancedSearch') {\n if (userSettings.session_settings.search_trending) {\n draftState.advancedSearch.trending = userSettings.session_settings.search_trending;\n }\n }\n\n if (pageAlias === 'userLists') {\n if (userSettings.session_settings.user_list_trending) {\n draftState.lists.trending = userSettings.session_settings.user_list_trending;\n }\n }\n};\n\nexport const activeSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<CompanyActivePayload>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { companyId, active } = action.payload;\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n draftState[gridKey].byId[companyId]!.active = active || false;\n }\n};\n\nexport const addOpportunityTypeSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<EditOpportunityType>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { companyId, opportunityTypeName, scoreValues } = action.payload;\n const company: Company | undefined = draftState[gridKey].byId[companyId];\n\n if (company) {\n draftState[gridKey].byId[companyId]!.senior_advisor_thesis =\n opportunityTypeName === null ? DEFAULT_OPPORTUNITY_TYPE : opportunityTypeName;\n\n if (scoreValues) {\n draftState[gridKey].byId[companyId]!.score = scoreValues.optx_score;\n draftState[gridKey].byId[companyId]!.score_growth =\n scoreValues.optx_score_growth?.toString() || null;\n draftState[gridKey].byId[companyId]!.score_v3 = scoreValues.score_v3;\n draftState[gridKey].byId[companyId]!.score_v3_growth =\n scoreValues.score_v3_growth?.toString() || null;\n draftState[gridKey].byId[companyId]!.il_optx_score = scoreValues.il_optx_score;\n draftState[gridKey].byId[companyId]!.il_score_growth =\n scoreValues.il_optx_score_growth?.toString() || null;\n }\n }\n};\n\nexport const submitResearchRationaleSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<SaveResearchRationaleResponse>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const {\n company_id: companyId,\n fields,\n scoreValues,\n scoreRationale,\n newScoreRationale,\n } = action.payload;\n\n if (draftState[gridKey].byId[companyId]) {\n if (fields.psg_fit) {\n draftState[gridKey].byId[companyId]!.is_interesting = fields.psg_fit.value as boolean | null;\n draftState[gridKey].byId[companyId]!.interesting_rationale = fields.psg_fit.rationale as\n | string\n | null;\n // score values for default score\n draftState[gridKey].byId[companyId]!.score = scoreValues?.fitScore as number;\n draftState[gridKey].byId[companyId]!.score_growth =\n scoreValues?.fitScoreGrowth?.toString() || null;\n // core values for new optx score\n draftState[gridKey].byId[companyId]!.score_v3 = scoreValues?.fitNewScore as number;\n draftState[gridKey].byId[companyId]!.score_v3_growth =\n scoreValues?.fitNewScoreGrowth?.toString() || null;\n // score values for israel score\n draftState[gridKey].byId[companyId]!.il_optx_score = scoreValues?.fitIsraelScore as number;\n draftState[gridKey].byId[companyId]!.il_score_growth =\n scoreValues?.fitIsraelScoreGrowth?.toString() || null;\n }\n\n if (fields.software_company) {\n if (!draftState[gridKey].byId[companyId]!.is_software_verified) {\n draftState[gridKey].byId[companyId]!.is_software_verified =\n !draftState[gridKey].byId[companyId]!.is_software_verified;\n }\n\n draftState[gridKey].byId[companyId]!.is_software = fields.software_company.value as boolean;\n draftState[gridKey].byId[companyId]!.is_software_rationale = fields.software_company\n .rationale as string | null;\n // score values for default score\n draftState[gridKey].byId[companyId]!.score = scoreValues?.softwareScore as number;\n draftState[gridKey].byId[companyId]!.score_growth =\n scoreValues?.softwareScoreGrowth?.toString() || null;\n // score values for new opt score\n draftState[gridKey].byId[companyId]!.score_v3 = scoreValues?.softwareNewScore as number;\n draftState[gridKey].byId[companyId]!.score_v3_growth =\n scoreValues?.softwareNewScoreGrowth?.toString() || null;\n // score values for israel score\n draftState[gridKey].byId[companyId]!.il_optx_score =\n scoreValues?.softwareIsraelScore as number;\n draftState[gridKey].byId[companyId]!.il_score_growth =\n scoreValues?.softwareIsraelScoreGrowth?.toString() || null;\n }\n\n // if api returns false for this property, it means no verification was sent for optx score\n if (scoreRationale !== false) {\n if ((scoreRationale as ScoreRationaleResponse).score_type === 'il_optx_score') {\n draftState[gridKey].byId[companyId]!.il_optx_score_rationale = (\n scoreRationale as ScoreRationaleResponse\n ).rationale;\n draftState[gridKey].byId[companyId]!.il_optx_score_rationale_reason = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason;\n draftState[gridKey].byId[companyId]!.il_optx_score_rationale_reason_type = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason_type;\n draftState[gridKey].byId[companyId]!.il_optx_score_verified = (\n scoreRationale as ScoreRationaleResponse\n ).optx_score_verified;\n } else {\n draftState[gridKey].byId[companyId]!.optx_score_rationale = (\n scoreRationale as ScoreRationaleResponse\n ).rationale;\n draftState[gridKey].byId[companyId]!.optx_score_rationale_reason = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason;\n draftState[gridKey].byId[companyId]!.optx_score_rationale_reason_type = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason_type;\n draftState[gridKey].byId[companyId]!.optx_score_verified = (\n scoreRationale as ScoreRationaleResponse\n ).optx_score_verified;\n }\n }\n\n if (\n newScoreRationale !== false &&\n (newScoreRationale as ScoreRationaleResponse).score_type === 'score_v3'\n ) {\n draftState[gridKey].byId[companyId]!.optx_score_v3_rationale = (\n newScoreRationale as ScoreRationaleResponse\n ).rationale;\n draftState[gridKey].byId[companyId]!.optx_score_v3_rationale_reason = (\n newScoreRationale as ScoreRationaleResponse\n ).rationale_reason;\n draftState[gridKey].byId[companyId]!.optx_score_v3_rationale_reason_type = (\n newScoreRationale as ScoreRationaleResponse\n ).rationale_reason_type;\n draftState[gridKey].byId[companyId]!.optx_score_v3_verified = (\n newScoreRationale as ScoreRationaleResponse\n ).optx_score_verified;\n }\n }\n};\n\nexport const gridSendOptxScoreRationaleSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<OptxScoreRationale>\n) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const {\n companyId,\n rationale,\n defaultScore,\n optxScoreRationaleReason,\n optxScoreRationaleReasonType,\n optxScoreVerified,\n scoreType,\n } = action.payload;\n\n if (\n draftState[gridKey].byId[companyId] &&\n draftState[gridKey].byId[companyId]!.company_id === companyId\n ) {\n if (defaultScore === 'us') {\n if (scoreType === 'score_v3') {\n draftState[gridKey].byId[companyId]!.optx_score_v3_rationale = rationale;\n draftState[gridKey].byId[companyId]!.optx_score_v3_verified = optxScoreVerified;\n draftState[gridKey].byId[companyId]!.optx_score_v3_rationale_reason =\n optxScoreRationaleReason;\n draftState[gridKey].byId[companyId]!.optx_score_v3_rationale_reason_type =\n optxScoreRationaleReasonType;\n } else {\n draftState[gridKey].byId[companyId]!.optx_score_rationale = rationale;\n draftState[gridKey].byId[companyId]!.optx_score_verified = optxScoreVerified;\n draftState[gridKey].byId[companyId]!.optx_score_rationale_reason = optxScoreRationaleReason;\n draftState[gridKey].byId[companyId]!.optx_score_rationale_reason_type =\n optxScoreRationaleReasonType;\n }\n }\n\n if (defaultScore === 'il') {\n draftState[gridKey].byId[companyId]!.il_optx_score_rationale = rationale;\n draftState[gridKey].byId[companyId]!.il_optx_score_verified = optxScoreVerified;\n draftState[gridKey].byId[companyId]!.il_optx_score_rationale_reason =\n optxScoreRationaleReason;\n draftState[gridKey].byId[companyId]!.il_optx_score_rationale_reason_type =\n optxScoreRationaleReasonType;\n }\n }\n};\n\n// BULK\n\n// reducer used to update company grids with new values for edited fields\nconst bulkEditFieldSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<BulkEditFieldsSuccess>\n) => {\n const gridKey = getLocationMainGridKey(null, action.payload.companyIds);\n if (!gridKey) return;\n\n let { field, companyIds, selectedData, additionalInfo, rationale, additionalAddonId } =\n action.payload;\n const companies = Object.values(draftState[gridKey].byId);\n\n // special case for company owner.\n // we need to send company_owner_id to api,\n // but in grid we need to update company_owner value\n if (field === 'company_owner_id') {\n field = 'company_owner';\n }\n\n if (companies.length) {\n companyIds.forEach(id => {\n const company: Company | undefined = draftState[gridKey].byId[id];\n let companyInfo = null;\n\n if ((field === 'company_owner' || field === 'stage') && additionalInfo) {\n companyInfo = additionalInfo.find(company => company.company_id === id);\n }\n\n if (company) {\n const label =\n (selectedData[0] as SelectOption).label === 'None'\n ? '-'\n : (selectedData[0] as SelectOption).label;\n\n if (field === 'product_category') {\n // typescript throws an error because properties fund and rationale don't exist\n // on type Company. we are inside a condition that checks for these two properties\n\n const categories = (selectedData as SelectOption[]).map(data => ({\n category: data.label,\n is_valid: true,\n }));\n\n const alphabeticalCategories = categories.sort((a, b) => {\n if (a.category < b.category) {\n return -1;\n }\n\n if (a.category > b.category) {\n return 1;\n }\n\n return 0;\n });\n\n draftState[gridKey].byId[id]![field] = [...alphabeticalCategories];\n }\n\n if (field === 'cs_tags') {\n const tags = `|${(selectedData as SelectOption<string>[])\n .map(data => data.label)\n .join('|')}`;\n\n if (draftState[gridKey].byId[id]![field] === '-') {\n draftState[gridKey].byId[id]![field] = tags;\n } else {\n draftState[gridKey].byId[id]![field] += tags;\n }\n } else if (field !== 'product_category') {\n if (field === 'stage' && companyInfo) {\n // update Score\n if (typeof companyInfo.score === 'number') {\n draftState[gridKey].byId[id].score = companyInfo.score;\n }\n\n if (typeof companyInfo.score_v3 === 'number') {\n draftState[gridKey].byId[id].score_v3 = companyInfo.score_v3;\n }\n\n if (typeof companyInfo.il_optx_score !== 'undefined') {\n draftState[gridKey].byId[id].il_optx_score = isNaN(Number(companyInfo.il_optx_score))\n ? draftState[gridKey].byId[id].il_optx_score\n : Number(companyInfo.il_optx_score);\n }\n\n if (typeof companyInfo.score_growth === 'number') {\n draftState[gridKey].byId[id].score_growth = companyInfo.score_growth.toString();\n }\n\n if (typeof companyInfo.score_v3_growth === 'number') {\n draftState[gridKey].byId[id].score_v3_growth = companyInfo.score_v3_growth.toString();\n }\n\n if (typeof companyInfo.il_score_growth === 'number') {\n draftState[gridKey].byId[id].il_score_growth = companyInfo.il_score_growth.toString();\n }\n\n if (typeof companyInfo.optx_score_trends !== 'undefined') {\n draftState[gridKey].byId[id].optx_score_trends = companyInfo.optx_score_trends;\n }\n\n if (typeof companyInfo.optx_score_v3_trends !== 'undefined') {\n draftState[gridKey].byId[id].optx_score_v3_trends = companyInfo.optx_score_v3_trends;\n }\n\n if (typeof companyInfo.il_optx_score_trends !== 'undefined') {\n draftState[gridKey].byId[id].il_optx_score_trends = companyInfo.il_optx_score_trends;\n }\n\n // update previous stage before\n const prevStage = draftState[gridKey].byId[id].stage;\n draftState[gridKey].byId[id].prev_stage = prevStage;\n\n if (showRationaleForStage(label)) {\n // @ts-ignore\n draftState[gridKey].byId[id].stage_rationale = rationale as string;\n } else {\n // @ts-ignore\n draftState[gridKey].byId[id].stage_rationale = null;\n }\n } else if (field === 'addon') {\n const hasBlankOption = (selectedData as SelectOption[]).some(\n option => option.value === 'None'\n );\n\n let addons: Addon | null = null;\n\n if (!hasBlankOption) {\n const currentAddons = draftState[gridKey].byId[id][field];\n\n const newAddons = (selectedData as SelectOption[]).reduce((acc, curr) => {\n return { ...acc, [curr.value]: curr.id };\n }, {});\n\n addons = { ...currentAddons, ...newAddons };\n }\n\n draftState[gridKey].byId[id][field] = addons;\n draftState[gridKey].byId[id].addon_bool = additionalAddonId ? true : false;\n } else if (field === 'rationale') {\n draftState[gridKey].byId[id].rationale = selectedData as string;\n } else if (field === 'company_owner' && companyInfo) {\n if (typeof companyInfo.score === 'number') {\n draftState[gridKey].byId[id].score = companyInfo.score;\n }\n\n if (typeof companyInfo.score_v3 === 'number') {\n draftState[gridKey].byId[id].score_v3 = companyInfo.score_v3;\n }\n\n if (typeof companyInfo.il_optx_score !== 'undefined') {\n draftState[gridKey].byId[id].il_optx_score = isNaN(Number(companyInfo.il_optx_score))\n ? draftState[gridKey].byId[id].il_optx_score\n : Number(companyInfo.il_optx_score);\n }\n\n if (typeof companyInfo.score_growth === 'number') {\n draftState[gridKey].byId[id].score_growth = companyInfo.score_growth.toString();\n }\n\n if (typeof companyInfo.score_v3_growth === 'number') {\n draftState[gridKey].byId[id].score_v3_growth = companyInfo.score_v3_growth.toString();\n }\n\n if (typeof companyInfo.il_score_growth === 'number') {\n draftState[gridKey].byId[id].il_score_growth = companyInfo.il_score_growth.toString();\n }\n\n if (typeof companyInfo.optx_score_trends !== 'undefined') {\n draftState[gridKey].byId[id].optx_score_trends = companyInfo.optx_score_trends;\n }\n\n if (typeof companyInfo.optx_score_v3_trends !== 'undefined') {\n draftState[gridKey].byId[id].optx_score_v3_trends = companyInfo.optx_score_v3_trends;\n }\n\n if (typeof companyInfo.il_optx_score_trends !== 'undefined') {\n draftState[gridKey].byId[id].il_optx_score_trends = companyInfo.il_optx_score_trends;\n }\n } else {\n // @ts-ignore\n draftState[gridKey].byId[id][field] = label;\n }\n }\n }\n });\n }\n};\n\nconst removeCompanyFromAddonManagementReducer = (draftState: GridSearchState) => {\n fetchReducers.fetchReducer(draftState.addons);\n};\n\nconst removeCompanyFromAddonManagementSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<{ companyId: number }>\n) => {\n const { companyId } = action.payload;\n\n const companyIsPresent = draftState.addons.allIds?.find(id => id === companyId);\n\n if (companyIsPresent) {\n draftState.addons.allIds = draftState.addons.allIds?.filter(id => id !== companyId) ?? null;\n draftState.addons.byId = omit(draftState.addons.byId, companyId);\n\n draftState.addons.total -= 1;\n }\n\n draftState.addons.loading = false;\n};\n\nconst removeCompanyFromAddonManagementFailReducer: CaseReducer<\n GridSearchState,\n PayloadAction<string>\n> = (draftState, action) => {\n fetchReducers.fetchFailReducer(draftState.addons, {\n payload: action.payload,\n type: action.type,\n });\n};\n\nconst fetchAddonAdditionalFiltersReducer = (\n draftState: GridSearchState,\n action: PayloadAction<AdditionalFiltersPayload>\n) => {\n const { shouldBeAddedToLoading } = action.payload;\n\n if (shouldBeAddedToLoading) {\n fetchReducers.fetchReducer(draftState.addons);\n }\n};\n\nconst fetchAddonAdditionalFiltersFailReducer = (\n draftState: GridSearchState,\n action: PayloadAction<AdditionalFiltersFailPayload>\n) => {\n const { error, shouldBeAddedToLoading } = action.payload;\n\n if (shouldBeAddedToLoading) {\n fetchReducers.fetchFailReducer(draftState.addons, {\n payload: error,\n type: action.type,\n });\n }\n};\n\nconst fetchAddonAdditionalFiltersSuccessReducer = (\n draftState: GridSearchState,\n action: PayloadAction<AdditionalFiltersResponse>\n) => {\n const { shouldBeAddedToLoading } = action.payload;\n\n if (shouldBeAddedToLoading) {\n draftState.addons.loading = false;\n }\n};\n\nconst clearAddonManagementFetchedAtReducer = (draftState: GridSearchState) => {\n draftState.addons.fetchedAt = '';\n};\n\nconst updateCompanyInfoSuccessReducer: CaseReducer<\n GridSearchState,\n PayloadAction<Partial<TouchesFinancialPayload>>\n> = (draftState, { payload }) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { company_id: companyId } = payload;\n\n if (companyId && draftState[gridKey].byId[companyId]) {\n if (payload.general_info) {\n draftState[gridKey].byId[companyId]!.num_employees =\n payload.general_info?.num_employees ?? null;\n }\n\n if (payload.funding) {\n draftState[gridKey].byId[companyId]!.raise_date = payload.funding.last_round_date ?? '';\n draftState[gridKey].byId[companyId]!.last_round = payload.funding.last_round?.label ?? '';\n draftState[gridKey].byId[companyId]!.last_round_id =\n payload.funding.last_round?.value ?? null;\n draftState[gridKey].byId[companyId]!.last_raised_amount =\n payload.funding.last_round_amount ?? null;\n draftState[gridKey].byId[companyId]!.last_investors = payload.funding.last_investors ?? [];\n draftState[gridKey].byId[companyId]!.parentcompany = payload.funding.acquiring_company ?? '';\n }\n }\n};\n\nconst addTouchToCompanySuccessReducer: CaseReducer<\n GridSearchState,\n PayloadAction<CompanyTouchSuccessResponse>\n> = (draftState, { payload }) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const {\n companyid: companyId,\n next_touch_date: nextTouchDate,\n last_touch_date: lastTouchDate,\n iscomplete: isComplete,\n psg_attendees: psgAttendees,\n } = payload;\n\n if (companyId && draftState[gridKey].byId[companyId]) {\n if (isComplete) {\n draftState[gridKey].byId[companyId]!.last_touch_date = lastTouchDate;\n } else {\n draftState[gridKey].byId[companyId]!.next_touch_date = nextTouchDate;\n }\n\n if (psgAttendees !== undefined) {\n draftState[gridKey].byId[companyId]!.psg_attendees = psgAttendees;\n }\n }\n\n deleteSavedValues(ADD_TOUCH_LOCALSTORAGE_KEY_PREFIX, companyId);\n};\n\nconst updateAllCompanyEditAllInfoSuccessReducer: CaseReducer<\n GridSearchState,\n PayloadAction<Partial<TouchesFinancialPayload>>\n> = (draftState, { payload }) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const { company_id: companyId } = payload;\n\n if (companyId && draftState[gridKey].byId[companyId]) {\n draftState[gridKey].byId[companyId] = {\n ...draftState[gridKey].byId[companyId],\n ...payload,\n };\n }\n};\n\nconst companyFundingRoundsSuccessReducer: CaseReducer<\n GridSearchState,\n PayloadAction<CompanyFundingRounds, any, number>\n> = (draftState, action) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n const companyId = action.meta;\n\n if (draftState[gridKey].byId[companyId]) {\n const { total_raised, last_round } = action.payload;\n\n if (total_raised !== null) {\n draftState[gridKey].byId[companyId].capital_raised = total_raised;\n draftState[gridKey].byId[companyId].is_capital_raise_has_unknown =\n total_raised.includes('(plus Unknown)');\n }\n\n if (last_round?.amount !== null) {\n draftState[gridKey].byId[companyId].last_raised_amount =\n last_round?.amount as unknown as number;\n }\n }\n};\n\nconst aiDescriptionSuccessReducer: CaseReducer<\n GridSearchState,\n PayloadAction<AiDescriptionResponse>\n> = (draftState, action) => {\n const gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n const { description, companyId } = action.payload;\n\n if (typeof companyId === 'number') {\n if (draftState[gridKey].byId[companyId]) {\n draftState[gridKey].byId[companyId].company_description = description;\n }\n }\n};\n\nconst updateGridFinancialSuccessReducer: CaseReducer<\n GridSearchState,\n PayloadAction<OpportunityPresentation>\n> = (draftState, { payload }) => {\n const gridKey = getGridKeyFromReferral();\n\n if (!gridKey) return;\n\n const { company_id: companyId, financial, deal_preparation } = payload;\n\n const company = draftState[gridKey].byId[companyId];\n\n if (company) {\n if (financial) {\n const { revenue_model: revenueModel, cashflow } = financial as UpdateOpporutunityFinancials;\n const {\n banker,\n banker_name: bankerName,\n asking_amount: askingAmount,\n } = payload.deal_preparation as UpdateOpportunityDealPreparation;\n\n const {\n delivery_model: deliveryModel,\n architecture,\n cloud_provider: cloudProvider,\n } = payload.technology as UpdateOpportunityTechnology;\n\n const {\n sales_cycle: salesCycle,\n customer_type: customerType,\n sales_and_marketing: salesAndMarketing,\n } = payload.customer_kpis as UpdateOpportunityCustomerKpis;\n\n if (revenueModel) {\n company.revenue_model = revenueModel.value as string[] | null;\n }\n\n if (salesCycle) {\n company.sales_cycle = salesCycle.value as string[] | null;\n }\n\n if (customerType) {\n company.customer_type = (customerType.value as string[]) || [];\n\n if (\n customerType.extra_data &&\n typeof customerType.extra_data.customer_other_rationale === 'string'\n ) {\n company.customer_other_rationale = customerType.extra_data.customer_other_rationale;\n }\n }\n\n if (salesAndMarketing) {\n company.sales_and_marketing = salesAndMarketing.value as string;\n }\n\n if (deliveryModel) {\n company.delivery_model = deliveryModel.value as string[] | null;\n }\n\n if (cloudProvider) {\n company.cloud_provider = cloudProvider.value as string;\n }\n\n if (architecture) {\n company.architecture = architecture.value as string[] | null;\n }\n\n if (banker || bankerName) {\n company.banker = banker.value as boolean | null;\n company.banker_name = bankerName;\n }\n\n if (cashflow) {\n company.cashflow = cashflow.value as string;\n }\n\n if (askingAmount) {\n company.asking_amount = askingAmount as string;\n }\n\n if (financial.revenue) {\n company.revenue_list = financial.revenue\n .map(item => ({\n estimated: item.estimated,\n value: item.value,\n year: item.year,\n }))\n .sort((a, b) => (b.year as number) - (a.year as number));\n }\n\n if (financial.ebitda) {\n company.ebitda_list = financial.ebitda\n .map(item => ({\n estimated: item.estimated,\n value: item.value,\n year: item.year,\n }))\n .sort((a, b) => (b.year as number) - (a.year as number));\n }\n\n if (financial.annual_recurring_revenue) {\n company.annual_recurring_revenue = financial.annual_recurring_revenue\n .map(item => ({\n estimated: item.estimated,\n value: item.value,\n year: item.year,\n }))\n .sort((a, b) => (b.year as number) - (a.year as number));\n }\n\n if (financial.gm) {\n company.gross_margin_list = financial.gm\n .map(item => ({\n estimated: item.estimated,\n value: item.value,\n year: item.year,\n }))\n .sort((a, b) => (b.year as number) - (a.year as number));\n }\n }\n\n if (deal_preparation) {\n if (deal_preparation.asking_amount || deal_preparation.asking_amount === null) {\n company.asking_amount = deal_preparation.asking_amount as string;\n }\n\n if (deal_preparation.deal_type) {\n company.deal_type = deal_preparation.deal_type.value as string;\n }\n }\n }\n};\n\nconst fetchOpportunityPresentationSuccessReducer: CaseReducer<\n GridSearchState,\n PayloadAction<OpportunityPresentation | null>\n> = (draftState, { payload }) => {\n const gridKey = getLocationMainGridKey();\n\n if (!payload?.financial) return;\n\n if (!gridKey) return;\n\n const { company_id: companyId, financial } = payload;\n\n const company = draftState[gridKey].byId[companyId];\n\n const currentYearGrowth = financial.growth_full.find(\n item => item.year === Number(YEARS_LABELS.current)\n )?.value;\n const listOfYearsGrowth = financial.growth_full.map(item => item.year);\n\n const mostRecentYear = Math.max(...listOfYearsGrowth);\n\n const mostRecentYearGrowth = financial.growth_full.find(\n item => item.year === mostRecentYear\n )?.value;\n\n if (company) {\n const currentGrowthYear = `${generateDynamicColumnKeys('growth', 'current')}` as keyof Company;\n\n (company[currentGrowthYear] as number | string) = currentYearGrowth || DEFAULT_CELL_VALUE;\n company.last_rev_growth = mostRecentYearGrowth?.toString() || null;\n }\n};\n\nconst setLoaderReducer: CaseReducer<GridSearchState> = draftState => {\n draftState.advancedSearch.loading = true;\n};\n\nconst loadSearchReducer: CaseReducer<\n GridSearchState,\n PayloadAction<GridPayloadMain<LoadSearch>>\n> = (draftState, action) => {\n const { gridKey } = action.payload;\n\n fetchReducers.fetchReducer(draftState[gridKey]);\n};\n\nconst reducer = createReducer<GridSearchState>(initialState, builder =>\n builder\n .addCase(actions.initialCompaniesSearch, initialSearchCompaniesReducer)\n .addCase(actions.searchCompanies, searchCompaniesReducer)\n .addCase(actions.searchCompaniesSuccess, searchCompaniesSuccessReducer)\n .addCase(actions.searchCompaniesFail, searchCompaniesFailReducer)\n .addCase(actions.cancelCompanySearch, cancelCompaniesSearchReducer)\n .addCase(actions.hideCancelSearch, hideCancelSearchReducer)\n .addCase(actions.updateTrending, updateTrendingReducer)\n .addCase(actions.clearSearch, fetchReducer)\n .addCase(actions.resetSearch, fetchReducer)\n .addCase(actions.loadSavedSearch, fetchReducer)\n .addCase(actions.loadSuggestedSearch, fetchReducer)\n .addCase(actions.deleteSavedList, deleteSearchTitleReducer)\n // clear filter\n .addCase(actions.resetFilter, fetchReducer)\n // load autocomplete search\n .addCase(actions.loadAutocompleteSearch, fetchReducer)\n .addCase(actions.loadCompaniesByFilter, fetchCompaniesByFilterReducer)\n // add the search title to the store\n .addCase(actions.saveSearchTitle, saveSearchTitleReducer)\n // external reducers\n .addCase(actions.removeFilter, fetchReducer)\n .addCase(actions.updateSourcingOutReachAnalystInfo, updateSourcingOutReachAnalystInfoReducer)\n .addCase(\n actions.shouldUpdateSourcingOutReachAnalystInfo,\n shouldUpdateSourcingOutReachAnalystInfoReducer\n )\n .addCase(viewActions.applyView, fetchReducer)\n .addCase(outreachFilterActions.resetStoreFilter, resetSearchKeyReducer)\n .addCase(outreachFilterActions.changeCardSubfilter, fetchReducer)\n .addCase(outreachFilterActions.changeCard, fetchReducer)\n\n .addCase(myCompaniesFilterCardsActions.initializeMyCompaniesCards, fetchReducer)\n .addCase(myCompaniesFilterCardsActions.fetchMyCompaniesCards, fetchReducer)\n .addCase(myCompaniesFilterCardsActions.changeCardSubfilter, fetchReducer)\n .addCase(myCompaniesFilterCardsActions.changeCard, fetchReducer)\n .addCase(myCompaniesFilterCardsActions.fetchMyCompaniesCardsFail, fetchFailReducer)\n .addCase(sortActions.changeSort, changeSortReducer)\n .addCase(sortActions.resetSort, fetchReducer)\n .addCase(paginationActions.changePagination, fetchReducer)\n .addCase(savedSearchesActions.applyViewSuccess, fetchSuccessLoadingReducer)\n .addCase(\n inBusinessEvaluationActions.addCompanyInBusinessEvaluationSuccess,\n inBusinessEvaluationSuccessReducer\n )\n .addCase(companyEditFields.updateFieldsSuccess, editFieldsSuccessReducer)\n .addCase(\n updateCompanyInfoActions.updateTouchCompanyInfoSuccess,\n updateCompanyInfoSuccessReducer\n )\n .addCase(updateCompanyInfoActions.addTouchToCompanySuccess, addTouchToCompanySuccessReducer)\n\n .addCase(editAllInfoActions.updateCompanyEditAllInfoSuccess, updateCompanyInfoSuccessReducer)\n .addCase(\n editAllInfoActions.updateAllCompanyEditAllInfoSuccess,\n updateAllCompanyEditAllInfoSuccessReducer\n )\n .addCase(\n companyEditFields.updateVerifyCompanySoftwareSuccess,\n updateVerifiedSoftwareSuccessReducer\n )\n .addCase(\n companyUserActions.updateCompanyUserValuesSuccess,\n updateCompanyUserValuesSuccessReducer\n )\n .addCase(companyUserActions.updateCompanyTrendingLines, updateCompanyTrendLinesReducer)\n .addCase(\n companyUserActions.updateCompanyEmployeeGrowthPercentage,\n updateCompanyEmployeeGrowthPercentageReducer\n )\n .addCase(equityTouchActions.updateCompanyETData, updateCompanyETDataReducer)\n .addCase(bulkEditActions.bulkEditFieldSuccess, bulkEditFieldSuccessReducer)\n .addCase(bulkSoftwareActions.bulkSoftwareSuccess, bulkSoftwareSuccessReducer)\n .addCase(bulkAiMlActions.bulkAiMlSuccess, bulkAiMlSuccessReducer)\n .addCase(bulkEqtActions.addToEquityTouchBulkSuccess, addToEquityTouchBulkSuccessReducer)\n .addCase(tagsActions.addCompanyTagSuccess, addCompanyTagSuccessReducer)\n .addCase(tagsActions.deleteCompanyTagSuccess, deleteCompanyTagSuccessReducer)\n .addCase(fundActions.addFund, addFundReducer)\n .addCase(portfolioActions.updateCompanyPortfolioSuccess, addCompanyPortfolioSuccessReducer)\n .addCase(\n favoriteListsActions.addCompanyToListBulkActionSuccess,\n addCompanyToListBulkSuccessReducer\n )\n .addCase(favoriteListsActions.addCompanyToListSuccess, addCompanyToListSuccessReducer)\n .addCase(favoriteListsActions.deleteCompanyFromListSuccess, deleteCompanyToListSuccessReducer)\n .addCase(favoriteListsActions.createFavoriteListSuccess, createCompanyToListSuccessReducer)\n .addCase(\n favoriteListsActionsPopup.addCompanyToListPopupBulkActionSuccess,\n addCompanyToListBulkSuccessReducer\n )\n .addCase(favoriteListsActionsPopup.addCompanyToListPopupSuccess, addCompanyToListSuccessReducer)\n .addCase(\n favoriteListsActionsPopup.deleteCompanyFromListPopupSuccess,\n deleteCompanyToListSuccessReducer\n )\n .addCase(\n favoriteListsActionsPopup.createFavoriteListPopupSuccess,\n createCompanyToListSuccessReducer\n )\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n .addCase(addCompanyActiveSuccess, activeSuccessReducer)\n .addCase(\n companyOportunityTypeActions.addOpportunityTypeSuccess,\n addOpportunityTypeSuccessReducer\n )\n .addCase(\n opportunityPresentationActions.updateOpportunityPresentationSuccess,\n updateGridFinancialSuccessReducer\n )\n .addCase(\n presentationActions.fetchOpportunityPresentationSuccess,\n fetchOpportunityPresentationSuccessReducer\n )\n .addCase(\n researchRationaleActions.submitResearchRationaleSuccess,\n submitResearchRationaleSuccessReducer\n )\n .addCase(sendOptxScoreRationaleSuccess, gridSendOptxScoreRationaleSuccessReducer)\n .addCase(sendNewOptxScoreRationaleSuccess, gridSendOptxScoreRationaleSuccessReducer)\n .addCase(addonActions.removeCompanyFromAddonManagement, removeCompanyFromAddonManagementReducer)\n .addCase(\n addonActions.removeCompanyFromAddonManagementSuccess,\n removeCompanyFromAddonManagementSuccessReducer\n )\n .addCase(\n addonActions.removeCompanyFromAddonManagementFail,\n removeCompanyFromAddonManagementFailReducer\n )\n .addCase(paginationLongCardActions.changeLongCardPagination, fetchReducer)\n .addCase(addonActions.fetchAdditionalFilters, fetchAddonAdditionalFiltersReducer)\n .addCase(addonActions.fetchAdditionalFiltersSuccess, fetchAddonAdditionalFiltersSuccessReducer)\n .addCase(addonActions.fetchAdditionalFiltersFail, fetchAddonAdditionalFiltersFailReducer)\n .addCase(addonActions.clearAddonManagementFetchedAt, clearAddonManagementFetchedAtReducer)\n .addCase(fundingRoundActions.getCompanyFundingRoundsSuccess, companyFundingRoundsSuccessReducer)\n .addCase(companyProfileActions.regenerateAiDescriptionSuccess, aiDescriptionSuccessReducer)\n .addCase(savedSearchesActions.setLoader, setLoaderReducer)\n .addCase(actions.loadSearch, loadSearchReducer)\n);\n\nexport default reducer;\n","import { put, select, takeLatest, fork, call, cancel, cancelled, take } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, isEqual } from 'lodash';\nimport queryString from 'query-string';\nimport { push } from 'react-router-redux';\nimport { AxiosResponse } from 'axios';\n// models\nimport Company, { CompanyProfile } from '@models/Company';\nimport {\n BaseFilter,\n Filter,\n FilterSearchOriginName,\n FilterSource,\n PreselectedFilter,\n} from '@models/filters';\nimport { SearchViewType, UserSettings } from '@models/user';\nimport { SearchSave, SearchStateData, LoadSearch } from '@models/search';\nimport { SearchPayload, SearchPayloadRequest } from '@models/api/contacts';\nimport { UpdateUserSettingsPayload, ClearMatchedFromListPayload } from '@models/api/user';\nimport { SortByRule } from '@models/table/sorting';\nimport { PageInfo } from '@models/table/Pagination';\nimport { GridKeys, GridPayloadMain, GetGridSearchData } from '@optx/models/grid';\nimport { SuccessErrorCallback } from '@models/callback';\nimport { LoadSuggestedSearch, ResetFilter } from './interfaces';\nimport { ColumnKeys } from '@models/table/Columns';\nimport { SearchAutocomplete } from '@models/search-autocomplete';\nimport { SelectOption } from '@models/Option';\nimport { ChartBarIntervalKeys } from '@models/charts/data';\nimport { AddonManagementPayload } from '@optx/redux/company/addon-management/interfaces';\nimport { TableGridQuery } from '@optx/screens/App/AllReports/interface';\nimport { CompanyActivityBlock } from '@features/admin-home/state/interfaces';\n// constants\nimport {\n COMPANY_DEFAULT_SORT,\n MYCOMPANIES_DEFAULT_SORT_IL,\n MYCOMPANIES_DEFAULT_SORT_US,\n ANALYST_HOME_DEFAULT_SORT_IL,\n ANALYST_HOME_DEFAULT_SORT_US,\n COMPANY_LIST_NEW_MATCHED_SORT,\n} from '@constants/table/sort/defaultSort';\nimport {\n ADVANCED_SEARCH,\n MY_COMPANIES_PENDO,\n TRENDING_VALUES,\n MY_COMPANIES_TRENDING_VALUES,\n} from '@optx/constants/pendoAction';\nimport { LONG_CARD_VIEW_DEFAULT_PAGE_SIZE } from '@constants/pagination';\nimport routes from '@constants/routes';\nimport {\n defaultSearchType,\n searchTypeKey,\n searchTypeOptions,\n} from '@features/grid/search-type/state/constants';\n// services\nimport NotificationService from '@services/NotificationService';\nimport {\n SearchService,\n FilterService,\n SavedSearchesService,\n UserService,\n CompanyService,\n} from '@services/api';\n// utils\nimport { mapPreselectedFilters } from '@utils/filters/preselectedValues';\nimport { sendPendoData } from '@optx/utils/utils';\nimport { sortSimilarCompanies } from '@optx/utils/utils';\nimport {\n preProcessSearch,\n mapSortQuery,\n isCustomUIView,\n matchView,\n hasFilters,\n} from '@utils/search';\nimport { injectFilter } from '@utils/filters/injectFilter';\nimport { getRouteAliasFromGridKey } from '@utils/routes';\nimport { getLocationMainGridKey, getSearchOriginKeyFromGridKey } from '@utils/grid';\nimport { getCompanyOwner, myCompaniesCardsFilters, processCardList } from '@utils/myCompanies';\nimport { removeAllParametersFromURL, removeParameterFromURL, updateHistoryState } from '@utils/url';\nimport { removeTouchFilters } from '../utils/filters';\n// redux\nimport { actions as scrollHistoryActions } from '@features/scroll-history';\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport { selectors as columnSelectors } from '@features/grid/columns';\nimport * as actions from './actions';\nimport { actions as searchCountActions } from '@features/grid/search-count';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport * as selectors from './selectors';\nimport {\n initializeLongCardSearchSaga,\n initialCompanySearchSaga,\n searchCompanies,\n searchCompaniesFail,\n updateFilterSettings,\n} from './sagasReusable';\nimport {\n selectors as filterSourcesSelectors,\n actions as filterActions,\n} from '@redux/company/filters';\nimport {\n actions as suggestedSearchActions,\n selectors as suggestedSearchSelectors,\n} from '@redux/company/suggested-searches';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport { getFiltersQuery, handleTouchFilters } from '@redux/company/search/search/sagasReusable';\nimport { actions as longCardPaginationActions } from '@features/grid/pagination-long-card';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport {\n selectors as userInformationSelectors,\n actions as userInformationActions,\n} from '@redux/user/information';\nimport { actions as gridColumnActions } from '@features/grid/columns';\nimport { getSearch as getSearchSavedSearchSelectors } from '@redux/company/saved-searches/selectors';\nimport { applyViewSuccess as applyViewSuccessSavedSearchesActions } from '@redux/company/saved-searches/actions';\nimport {\n getViews as getViewsSavedSearchSelectors,\n getSavedSearches as getSavedSearchesSavedSearchSelectors,\n} from '@redux/company/saved-searches/selectors';\nimport { actions as longCardActions } from '@features/long-card/company-card';\nimport { selectors as filterSelectors } from '@features/grid/filter';\nimport {\n actions as listsDetailsActions,\n selectors as listsDetailsSelectors,\n} from '@redux/lists/details';\nimport { userInfoUpdateSaga, getGridSearchDataSaga } from '@features/grid/state/sagasReusable';\nimport { getSourcingOutReachFilters } from '@redux/company-outreach/search/saga';\nimport { selectors as outreachSearchSelectors } from '@redux/company-outreach/search';\nimport {\n selectors as outreachFilterSelectors,\n actions as outreachFilterActions,\n} from '@redux/company-outreach/filters';\nimport {\n selectors as myCompaniesFilterCardsSelectors,\n actions as myCompaniesFilterCardsActions,\n} from '@optx/redux/my-companies/filters-cards';\nimport {\n selectors as histogramSelectors,\n actions as histogramActions,\n} from '@features/grid/histograms';\nimport { selectors as addonSelectors } from '@redux/company/addon-management';\nimport { incrementFetchedCount } from '../../fetched-count/state/actions';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\nimport {\n actions as adminActions,\n selectors as adminCompanyActivitySelectors,\n} from '@optx/features/admin-home/state';\n\nfunction* initializeSearch(gridKey: GridKeys, tableGridQuery: string) {\n let view: SearchViewType = 'table';\n\n switch (gridKey) {\n case 'advancedSearch':\n view = yield select(viewTypeSelectors.searchView('advancedSearch'));\n break;\n\n case 'lists':\n view = yield select(viewTypeSelectors.searchView('lists'));\n break;\n\n case 'outreachDetails':\n view = yield select(viewTypeSelectors.searchView('outreachDetails'));\n const shouldUpdateSourcingOutReachAnalystInfo: boolean = yield select(\n selectors.shouldUpdateSourcingOutReachAnalystInfo\n );\n\n if (shouldUpdateSourcingOutReachAnalystInfo) yield fork(getSourcingOutReachFilters);\n\n break;\n\n default:\n break;\n }\n\n yield fork(\n view === 'long-card' ? initializeLongCardSearchSaga : initialCompanySearchSaga,\n gridKey,\n tableGridQuery\n );\n}\n\nfunction* initializeSearchSaga(\n action: PayloadAction<GridPayloadMain<Partial<SearchPayload> | undefined>>\n) {\n const { gridKey, data } = action.payload;\n\n let tableGridQuery = '';\n if (data?.tableGridQuery) tableGridQuery = data.tableGridQuery;\n\n if (gridKey !== 'outreach') {\n const isColumnFetched: boolean = yield select(columnSelectors.isColumnsFetched(gridKey));\n\n if (!isColumnFetched) {\n yield put(gridColumnActions.fetchColumns({ gridName: gridKey }));\n\n // we need to wait for columns before dispatching search action\n yield take(gridColumnActions.fetchColumnsSuccess);\n }\n }\n\n yield call(initializeSearch, gridKey, tableGridQuery);\n}\n\nexport function* searchWithCountSaga(\n action: PayloadAction<GridPayloadMain<Partial<SearchPayload> | undefined>, any, boolean>\n) {\n const { gridKey, data } = action.payload;\n const prevSearchKey: string = yield select(selectors.getSearchKey(gridKey));\n const isSourceScrub: boolean = yield select(listsDetailsSelectors.isSourceScrubRoute);\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey);\n const defaultOptxScore: string = yield select(userInformationSelectors.getDefaultScore);\n const isSimilarCompaniesSorting: boolean | undefined = yield select(\n sortSelectors.isSimilarCompaniesSort(gridKey)\n );\n let { sortBy, searchKey, originalFilter: filter, view, pagination, searchType } = gridSearchData;\n\n if (data) {\n searchKey = data.searchKey ? preProcessSearch(data.searchKey) : '';\n\n if (data.searchType) {\n searchType = data.searchType;\n }\n\n if (!data.filter) {\n filter = {\n ...filter,\n [searchTypeKey[searchType]]: searchKey,\n };\n } else {\n filter = data.filter;\n }\n } else {\n searchKey = preProcessSearch(prevSearchKey);\n }\n\n // there are two exceptions when sorting needs to be either removed or set to default\n // 1. when making a search with a new search term the request will not include sorting\n // 2. when making a new search right after the one from point 1., without changing the search term\n // the request will include default sorting\n // After the search including new search term the next searches changes will include sorting.\n\n if (\n (searchKey === '' && searchKey !== prevSearchKey && !sortBy?.length) ||\n (searchKey !== '' && searchKey === prevSearchKey && !sortBy?.length)\n ) {\n if (gridKey === 'myCompanies') {\n sortBy =\n defaultOptxScore === 'us' ? MYCOMPANIES_DEFAULT_SORT_US : MYCOMPANIES_DEFAULT_SORT_IL;\n } else {\n sortBy = COMPANY_DEFAULT_SORT;\n }\n } else if (searchKey !== '' && searchKey !== prevSearchKey) {\n sortBy = [];\n }\n\n if (gridKey === 'lists') {\n const listId: string = yield select(listsDetailsSelectors.getRouteListId);\n\n // Ensures to filter by the selected list\n filter = {\n ...filter,\n ...(isSourceScrub ? { ss_list_id: listId } : { saved_list_id: listId }),\n };\n }\n\n if (data?.shouldHandleTouchFilters) filter = yield call(handleTouchFilters, filter);\n\n if (gridKey === 'outreachDetails') {\n const sourcingOutReachDateFilter: string = yield select(\n outreachFilterSelectors.getSourcingFilterOptionsDateValue\n );\n\n filter = {\n ...filter,\n ddate: sourcingOutReachDateFilter,\n };\n }\n\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(getFiltersQuery, filter);\n\n if (data?.shouldResetPageNumber) {\n pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? pagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n }\n\n if (data?.shouldBeAnalystHomePageSorting) {\n sortBy =\n defaultOptxScore === 'us' ? ANALYST_HOME_DEFAULT_SORT_US : ANALYST_HOME_DEFAULT_SORT_IL;\n }\n\n if (isSimilarCompaniesSorting) {\n const currentOptxScore = defaultOptxScore === 'us' ? 'score' : 'il_optx_score';\n sortBy = [{ id: currentOptxScore, desc: true }];\n }\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterQuery,\n pagination,\n sortBy,\n perMultiplePages: data?.perMultiplePages,\n perPage: data?.perPage,\n };\n\n if (gridKey === 'addons') {\n const additionalFilterQuery: Dictionary<string | (string | number)[]> = yield select(\n addonSelectors.getAdditionalFiltersQuery\n );\n\n searchData.companyId = data?.companyId;\n searchData.filter = { ...searchData.filter, ...additionalFilterQuery };\n }\n\n if (gridKey === 'myCompanies') {\n const selectedCard: SearchStateData = yield select(\n myCompaniesFilterCardsSelectors.getSelectedCard\n );\n const subFilter: string = action.meta\n ? ''\n : yield select(myCompaniesFilterCardsSelectors.getSubFilter);\n\n const savedListId = selectedCard.filter?.saved_list_id\n ? { saved_list_id: selectedCard.filter?.saved_list_id }\n : { saved_list_id: undefined };\n\n searchData.filter = subFilter\n ? {\n ...selectedCard.filter,\n // @ts-ignore\n ...selectedCard.data[subFilter],\n ...filterQuery,\n ...savedListId,\n source_tag_filter: selectedCard.filter.source_tag_filter,\n ...myCompaniesCardsFilters(selectedCard, {\n nextTouchDate: filterQuery.next_touch_date as any,\n lastTouchDateDays: filterQuery.last_touch_date_days as any,\n stage: filterQuery.stage as any,\n }),\n [searchTypeKey[searchType]]: searchKey,\n }\n : {\n ...selectedCard.filter,\n ...filterQuery,\n ...savedListId,\n source_tag_filter: selectedCard.filter.source_tag_filter,\n [searchTypeKey[searchType]]: searchKey,\n ...myCompaniesCardsFilters(selectedCard, {\n nextTouchDate: filterQuery.next_touch_date as any,\n lastTouchDateDays: filterQuery.last_touch_date_days as any,\n stage: filterQuery.stage as any,\n }),\n };\n }\n\n if (gridKey === 'outreachDetails') {\n const analystIdFilter: [string | null, string | null] | SelectOption<string> | undefined =\n yield select(outreachFilterSelectors.getSourcingOptitonsFilterValues('analyst_id'));\n const tableGridQuery: string = yield select(selectors.getTableGridQuery('outreachDetails'));\n\n const columnNameSourcingOutReachFilter:\n | [string | null, string | null]\n | SelectOption<string>\n | undefined = yield select(\n outreachFilterSelectors.getSourcingOptitonsFilterValues('column_name')\n );\n\n // @ts-ignore\n const listOfAnalystIds: number[] = analystIdFilter?.map(\n (list: { label: string; value: number }) => list.value\n );\n\n const sourcingOutReachColumnName = (columnNameSourcingOutReachFilter as SelectOption<string>)\n ?.value;\n\n searchData.analystId = listOfAnalystIds?.toString();\n searchData.tableGridQuery = tableGridQuery;\n searchData.sourcingOutReachColumnName = sourcingOutReachColumnName;\n }\n\n try {\n // Only update filters if it is not the first call.\n // This will also allow us to load specific filters from URL in new tab without interfering with main tab settings.\n const isInitialSearch: boolean = yield select(selectors.isInitialSearch(gridKey));\n\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n searchData.pagination,\n true\n );\n\n let isUpdatedSessionSettings = isEqual(userSettings, {}) ? !isInitialSearch : userSettings;\n\n if (gridKey === 'advancedSearch' && data?.isSimilarCompaniesSearch) {\n isUpdatedSessionSettings = true;\n yield put(sortActions.similarCompaniesSortingAction(true));\n }\n\n yield call(\n searchCompanies,\n searchData,\n gridKey,\n filter,\n false,\n undefined,\n isUpdatedSessionSettings\n );\n\n if (!sortBy.length) {\n yield put(sortActions.changeSortSuccess({ gridKey, data: sortBy }));\n }\n\n if (view === 'long-card') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey,\n data: pagination,\n })\n );\n } else {\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey,\n data: searchData.pagination,\n })\n );\n }\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n}\n\n// clear\nfunction* clearSearchSaga(\n action: PayloadAction<\n GridPayloadMain<Dictionary<PreselectedFilter> | boolean>,\n any,\n SuccessErrorCallback\n >\n) {\n const { gridKey, data } = action.payload;\n const callback = action.meta;\n\n const isSourceScrub: boolean = yield select(listsDetailsSelectors.isSourceScrubRoute);\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey);\n let {\n filter: filterQuery,\n originalFilter: filter,\n subFilter,\n pagination,\n view,\n clearedFilters,\n } = gridSearchData;\n\n // data can either be boolean when coming from my companies page in order to reset the subfilter\n // or a Dictionary of PreselectedFilter. Only in the second case can filter be updated with the passed data.\n if (data && typeof data !== 'boolean') {\n filter = data;\n } else {\n filter = clearedFilters;\n }\n\n if (gridKey === 'outreachDetails') {\n filter = yield select(outreachSearchSelectors.getClearedFilter);\n } else if (gridKey === 'lists') {\n const listId: string = yield select(listsDetailsSelectors.getRouteListId);\n\n // Ensures to filter by the selected list\n filter = {\n ...filter,\n ...(isSourceScrub ? { ss_list_id: listId } : { saved_list_id: listId }),\n };\n } else if (gridKey === 'myCompanies') {\n const authorizedComponents: Dictionary<boolean> = yield select(\n userInformationSelectors.authorizedComponents\n );\n let customClearedFilter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getCustomClearedFilter('myCompanies')\n );\n let companyOwner: Array<{ value: string; label: string }> | undefined;\n\n // for analysts we need to apply company owner filter\n // check is user is analyst, search for company owner filter,\n // get the company owner id for the current user\n if (!authorizedComponents.admin_portal_link) {\n const filterSources: FilterSource[] = yield select(filterSourcesSelectors.getCompanyFilters);\n const userName: string = yield select(userInformationSelectors.getFullName);\n\n companyOwner = getCompanyOwner(filterSources, userName);\n customClearedFilter = { ...customClearedFilter, company_owner_id: companyOwner };\n }\n\n filter = customClearedFilter;\n }\n\n filterQuery = yield call(getFiltersQuery, filter);\n\n pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? pagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const searchData: SearchPayloadRequest = {\n searchKey: '',\n searchType: defaultSearchType,\n filter: filterQuery,\n pagination,\n sortBy: COMPANY_DEFAULT_SORT,\n };\n\n if (gridKey === 'outreachDetails') {\n const tableGridQuery: string = yield select(selectors.getTableGridQuery('outreachDetails'));\n searchData.tableGridQuery = tableGridQuery;\n const defaultColumnName: SelectOption<string> | undefined = yield select(\n outreachSearchSelectors.getDefaultColumnName\n );\n const defaultAnalystId: SelectOption<string> | undefined = yield select(\n outreachSearchSelectors.getDefaultAnalystId\n );\n const defaultDateRange: [string | null, string | null] = yield select(\n outreachSearchSelectors.getDefaultDateRange\n );\n\n yield put(\n outreachFilterActions.updateSourcingFilterOptions({\n filterKey: 'ddate',\n value: defaultDateRange,\n })\n );\n yield put(\n outreachFilterActions.updateSourcingFilterOptions({\n filterKey: 'analyst_id',\n value: defaultAnalystId,\n })\n );\n yield put(\n outreachFilterActions.updateSourcingFilterOptions({\n filterKey: 'column_name',\n value: defaultColumnName,\n })\n );\n\n // clear all the filters that were applied in the filters panel\n yield put(outreachFilterActions.updateSourcingOutReachFilters({ panelFiltersQuery: '' }));\n\n // update panel filters in the history state so that after reload,\n // if user clears the filters, they should stay cleared\n if ((window.history.state?.state as TableGridQuery)?.panel_filters) {\n updateHistoryState('panel_filters', '');\n }\n }\n\n try {\n if (gridKey === 'myCompanies') {\n const selectedCardId: string = yield select(\n myCompaniesFilterCardsSelectors.getSelectedCardId\n );\n\n const res: AxiosResponse<Dictionary<SearchStateData>> = yield call(\n UserService.fetchMyCompaniesCards,\n '',\n defaultSearchType,\n filterQuery,\n selectedCardId ? (selectedCardId as string) : 'card1'\n );\n\n if (res.data) {\n const defaultOptxScore: string = yield select(userInformationSelectors.getDefaultScore);\n const defaultSortBy =\n defaultOptxScore === 'us' ? MYCOMPANIES_DEFAULT_SORT_US : MYCOMPANIES_DEFAULT_SORT_IL;\n const selectedCard: SearchStateData = yield select(\n myCompaniesFilterCardsSelectors.getSelectedCard\n );\n const cardsList = processCardList(res.data);\n yield put(myCompaniesFilterCardsActions.fetchMyCompaniesCardsSuccess(cardsList));\n searchData.filter =\n !data && subFilter\n ? {\n ...filterQuery,\n // @ts-ignore\n ...selectedCard.data[subFilter],\n ...cardsList[selectedCardId].filter,\n }\n : {\n ...filterQuery,\n ...cardsList[selectedCardId].filter,\n };\n searchData.sortBy = defaultSortBy;\n\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true,\n true\n );\n yield call(\n searchCompanies,\n searchData,\n gridKey,\n filter,\n false,\n undefined,\n userSettings,\n callback\n );\n\n const allFiltersWithHistograms: string[] = yield select(\n histogramSelectors.allFiltersWithHistograms(gridKey)\n );\n\n yield put(\n histogramActions.fetchHistogramFilters(gridKey, filter, allFiltersWithHistograms)\n );\n\n if (data) {\n yield put(\n actions.clearFilterSuccess({\n ...selectedCard,\n filter: cardsList[selectedCardId].filter,\n })\n );\n }\n\n if (view === 'long-card') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n } else {\n yield put(paginationActions.changePaginationSuccess({ gridKey, data: pagination }));\n }\n\n yield put(sortActions.resetSortSuccess({ gridKey, data: defaultSortBy }));\n } else {\n const errorMessage = 'Error fetching My Companies!';\n yield put(myCompaniesFilterCardsActions.fetchMyCompaniesCardsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } else {\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true,\n true\n );\n yield call(\n searchCompanies,\n searchData,\n gridKey,\n filter,\n false,\n undefined,\n userSettings,\n callback\n );\n\n if (gridKey === 'lists') {\n yield put(histogramActions.fetchHistogramFilters(gridKey, filter));\n } else if (gridKey !== 'outreachDetails') {\n yield put(histogramActions.fetchHistogramFilters(gridKey, filter));\n }\n\n if (view === 'long-card') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey,\n data: pagination,\n })\n );\n } else {\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey,\n data: pagination,\n })\n );\n }\n\n yield put(sortActions.resetSortSuccess({ gridKey, data: undefined }));\n }\n\n removeAllParametersFromURL();\n } catch (e: any) {\n if (gridKey === 'myCompanies') {\n const errorMessage = `Error fetching My Companies - ${e}`;\n yield put(myCompaniesFilterCardsActions.fetchMyCompaniesCardsFail(errorMessage));\n NotificationService.error(errorMessage);\n } else {\n yield call(searchCompaniesFail, gridKey, e);\n }\n }\n}\n\nexport function* resetSearchToDefaultSaga(\n action: PayloadAction<GridPayloadMain<boolean>, any, SuccessErrorCallback>\n) {\n const { gridKey, data } = action.payload;\n const callback = action.meta;\n\n const filterSourcesDefaultFilters: Dictionary<PreselectedFilter> = yield select(\n filterSourcesSelectors.getDefaultFilters\n );\n const defaultSearchkey: string = yield select(filterSourcesSelectors.getDefaultSearchkey);\n const defaultSorting: SortByRule<any>[] = yield select(filterSourcesSelectors.getDefaultSorting);\n\n const cancelSearch: boolean = yield select(selectors.isCancelled(gridKey));\n\n const view: SearchViewType = yield select(viewTypeSelectors.searchView(gridKey));\n const isSourceScrub: boolean = yield select(listsDetailsSelectors.isSourceScrubRoute);\n\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n\n let pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey, pagination);\n let { sortBy, originalFilter: filter, defaultFilters } = gridSearchData;\n\n if (Object.keys(filterSourcesDefaultFilters).length) filter = filterSourcesDefaultFilters;\n else filter = defaultFilters;\n\n if (gridKey === 'lists') {\n const listId: string = yield select(listsDetailsSelectors.getRouteListId);\n\n // Ensures to filter by the selected list\n filter = {\n ...filter,\n ...(isSourceScrub ? { ss_list_id: listId } : { saved_list_id: listId }),\n };\n }\n\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(getFiltersQuery, filter);\n\n pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? pagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const searchData: SearchPayloadRequest = {\n searchKey: defaultSearchkey,\n searchType: defaultSearchType,\n filter: filterQuery,\n pagination,\n sortBy: data ? defaultSorting || COMPANY_DEFAULT_SORT : sortBy,\n };\n\n try {\n if (gridKey === 'advancedSearch') {\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true,\n true\n );\n yield call(\n searchCompanies,\n searchData,\n gridKey,\n filter,\n false,\n undefined,\n userSettings,\n callback\n );\n }\n\n if (gridKey === 'lists') {\n yield call(searchCompanies, searchData, gridKey, filter, false);\n yield call(userInfoUpdateSaga, gridKey, pagination, false, true);\n }\n\n if (view === 'long-card') {\n if (gridKey === 'lists') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n } else if (gridKey === 'advancedSearch') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n }\n } else {\n yield put(paginationActions.changePaginationSuccess({ gridKey, data: pagination }));\n }\n\n yield put(sortActions.resetSortSuccess({ gridKey, data: undefined }));\n\n if (cancelSearch) {\n yield cancel();\n }\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n } finally {\n // @ts-ignore\n if (yield cancelled()) {\n yield put(actions.cancelCompanySearch({ gridKey, data: false }));\n }\n }\n}\n\n// load saved search\nexport function* loadCompanySavedSearchSaga(\n action: PayloadAction<\n GridPayloadMain<{\n searchId: number | string;\n title: string;\n listType: string;\n newOnly?: boolean;\n hasNewMatches?: boolean;\n }>\n >\n) {\n const {\n gridKey,\n data: { searchId, title, listType, newOnly, hasNewMatches },\n } = action.payload;\n const savedSearch: SearchSave = yield select(state =>\n getSearchSavedSearchSelectors(state, searchId)\n );\n let {\n searchKey,\n filters,\n sortBy,\n columns,\n column_order: columnOrder,\n pinned_columns: pinnedColumns,\n } = savedSearch;\n\n if (gridKey !== 'outreach') {\n const isColumnFetched: boolean = yield select(columnSelectors.isColumnsFetched(gridKey));\n\n if (!isColumnFetched) {\n yield put(gridColumnActions.fetchColumns({ gridName: gridKey }));\n }\n }\n\n let view: SearchViewType = yield select(viewTypeSelectors.searchView(gridKey));\n\n const isSourceScrub: boolean = yield select(listsDetailsSelectors.isSourceScrubRoute);\n\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const isSimilarCompaniesSorting: boolean | undefined = yield select(\n sortSelectors.isSimilarCompaniesSort(gridKey)\n );\n\n if (isSimilarCompaniesSorting) {\n yield put(sortActions.similarCompaniesSortingAction(false));\n }\n\n const pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridKey));\n\n if (gridKey === 'lists') {\n const listId: string = yield select(listsDetailsSelectors.getRouteListId);\n\n filters = {\n ...filters,\n ...(isSourceScrub\n ? { ss_list_id: listId, saved_list_id: undefined }\n : { saved_list_id: listId, ss_list_id: undefined }),\n };\n }\n\n if (newOnly || hasNewMatches) {\n filters = {\n ...filters,\n new_date_matched: '1',\n };\n sortBy = COMPANY_LIST_NEW_MATCHED_SORT;\n }\n\n let filterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n filters\n );\n\n const searchData: SearchPayloadRequest = {\n searchKey: searchKey ? preProcessSearch(searchKey) : '',\n searchType: filterQuery.company_name_or_url\n ? searchTypeOptions.companyNameOrUrl\n : filterQuery.query\n ? searchTypeOptions.defaultSearchType\n : searchType,\n filter: filterQuery,\n pagination,\n sortBy: sortBy || COMPANY_DEFAULT_SORT,\n fromSavedList: searchId,\n listType,\n ...(savedSearch && savedSearch.unique_id !== 'sourcingOrder'\n ? { list_id: savedSearch.unique_id }\n : {}),\n };\n\n if ((gridKey === 'advancedSearch' && !isCustomUIView(searchId)) || gridKey === 'lists') {\n searchData.fromSavedList = searchId;\n }\n\n try {\n let customSearchData = { ...searchData };\n\n if (hasNewMatches) {\n customSearchData = {\n ...searchData,\n newMatchesSavedSearchTitle: savedSearch.title,\n clearNewMatches: {\n list_id: searchId as number,\n },\n };\n }\n\n yield call(searchCompanies, customSearchData, gridKey, filters, false, title, false);\n\n if (hasNewMatches) {\n yield put(\n sortActions.changeSortSuccess({\n gridKey: gridKey,\n data: COMPANY_LIST_NEW_MATCHED_SORT,\n })\n );\n }\n\n // Update session settings filters and hide show quick filters by default.\n let sessionSettings: Partial<UpdateUserSettingsPayload> = {};\n\n if (sortBy) {\n const sortQuery = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n sessionSettings.company_sorting = sortQuery;\n }\n\n if (columns !== null) {\n sessionSettings.company_display_columns = columns;\n\n if (columnOrder) {\n sessionSettings.company_column_order = columnOrder;\n }\n }\n\n if (pinnedColumns !== null) {\n sessionSettings.company_pinned_columns = pinnedColumns;\n }\n\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true\n );\n\n sessionSettings = { ...sessionSettings, ...userSettings };\n\n if (gridKey === 'advancedSearch') {\n yield put(\n gridColumnActions.updateColumn({\n columns,\n columnOrder,\n pinnedColumns,\n gridName: gridKey,\n })\n );\n\n const actionType = hasNewMatches || newOnly ? 'add_as_first_column' : 'add_column';\n\n yield put(gridColumnActions.addRemoveDateMatched(actionType));\n } else if (gridKey === 'lists') {\n yield put(\n gridColumnActions.updateColumn({ columns, columnOrder, pinnedColumns, gridName: gridKey })\n );\n }\n\n yield fork(updateFilterSettings, searchData, gridKey, sessionSettings);\n\n if (gridKey === 'lists') {\n yield put(histogramActions.fetchHistogramFilters(gridKey, filters));\n } else {\n yield put(histogramActions.fetchHistogramFilters(gridKey, filters));\n }\n\n if (view === 'long-card') {\n if (gridKey === 'lists') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey,\n data: pagination,\n })\n );\n } else if (gridKey === 'advancedSearch') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n }\n } else {\n yield put(paginationActions.changePaginationSuccess({ gridKey, data: pagination }));\n }\n\n yield put(sortActions.changeSortSuccess({ gridKey, data: sortBy || [] }));\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n}\n\n// load suggested search\nfunction* loadSuggestedSearchSaga(action: PayloadAction<GridPayloadMain<LoadSuggestedSearch>>) {\n const {\n gridKey,\n data: { title },\n } = action.payload;\n\n // check if filters are loaded, if not get them first and then load the suggested search,\n // otherwise just make the search\n const filtersLoaded: boolean = yield select(filterSourcesSelectors.filtersLoaded);\n const shouldFetch: boolean = yield select(suggestedSearchSelectors.shouldFetch);\n const isAnalyst: boolean = yield select(userInformationSelectors.getIsAnalyst);\n const isAdmin: boolean = yield select(userInformationSelectors.getIsAdmin);\n\n if (!filtersLoaded && shouldFetch) {\n const settings: UserSettings = yield select(userInformationSelectors.getSettings);\n\n try {\n // @ts-ignore\n const filterRes = yield call(FilterService.getOptions);\n\n if (filterRes.data) {\n yield put(\n filterActions.fetchCompanyFiltersSuccess(filterRes.data.filters, {\n defaultViews: filterRes.data.default_views,\n searchOrigin: filterRes.data.search_origin,\n settings,\n isAnalystOrIsAdmin: isAnalyst || isAdmin,\n })\n );\n\n yield call(fetchSuggestedSearches, filterRes.data.filters, gridKey, title);\n } else {\n yield put(filterActions.fetchCompanyFiltersFail('Error fetch company filters!'));\n yield put(actions.loadCompaniesByFilterCompleted());\n }\n } catch (e: any) {\n yield put(filterActions.fetchCompanyFiltersFail('Error fetch company filters!'));\n yield put(actions.loadCompaniesByFilterCompleted());\n }\n } else if (shouldFetch) {\n const filterSources: FilterSource[] = yield select(filterSourcesSelectors.getCompanyFilters);\n yield call(fetchSuggestedSearches, filterSources, gridKey, title);\n } else {\n yield put(push(isAnalyst || isAdmin ? routes.advancedSearch : routes.home));\n yield call(loadSuggestedSearch, title, gridKey);\n }\n}\n\n/**\n * load the suggested search\n * @param {number} id - list unique id\n * @param {GridKeys} gridKey - grid key\n * @param {LoadSearch} searchPayload - searchPayload key\n * if searchPayload is not provided, it will be taken from suggested Searches based on title\n */\nfunction* loadSuggestedSearch(title: string, gridKey: GridKeys, searchPayload?: LoadSearch) {\n const suggestedSearch: SearchSave = yield select(\n suggestedSearchSelectors.getSuggestedSearch(title)\n );\n const {\n searchKey,\n filters,\n sortBy,\n columns,\n column_order: columnOrder,\n pinned_columns: pinnedColumns,\n } = searchPayload ? searchPayload : suggestedSearch;\n\n const filterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n filters\n );\n const view: SearchViewType = yield select(viewTypeSelectors.searchView('advancedSearch'));\n const userPageNumber: number = yield select(userInformationSelectors.getResultsPageNumber);\n\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const isSimilarCompaniesSorting: boolean | undefined = yield select(\n sortSelectors.isSimilarCompaniesSort(gridKey)\n );\n\n if (isSimilarCompaniesSorting) {\n yield put(sortActions.similarCompaniesSortingAction(false));\n }\n\n const pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridKey));\n\n const searchData: SearchPayloadRequest = {\n searchKey: searchKey ? preProcessSearch(searchKey) : '',\n searchType,\n filter: filterQuery,\n searchTitle: title,\n pagination,\n sortBy: sortBy || COMPANY_DEFAULT_SORT,\n };\n\n const sortQuery = queryString.stringify(mapSortQuery(sortBy || COMPANY_DEFAULT_SORT), {\n arrayFormat: 'comma',\n });\n\n try {\n yield call(searchCompanies, searchData, gridKey, filters, false, title, {\n ...(columnOrder && { company_column_order: columnOrder }),\n ...(columns && { company_display_columns: columns }),\n ...(pinnedColumns && { company_pinned_columns: pinnedColumns }),\n });\n yield put(\n gridColumnActions.updateColumn({\n columns,\n columnOrder,\n pinnedColumns,\n gridName: 'advancedSearch',\n })\n );\n\n // Update session settings filters and hide show quick filters by default.\n\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield fork(\n updateFilterSettings,\n searchData,\n gridKey,\n {\n company_sorting: sortQuery,\n search_results_page_number: searchData.pagination.pageNumber,\n },\n 'loadSuggestedSearch'\n );\n } else {\n yield fork(\n updateFilterSettings,\n searchData,\n gridKey,\n {\n company_sorting: sortQuery,\n },\n 'loadSuggestedSearch'\n );\n }\n\n if (gridKey === 'lists') {\n yield put(histogramActions.fetchHistogramFilters(gridKey, filters));\n } else {\n yield put(histogramActions.fetchHistogramFilters(gridKey, filters));\n }\n\n if (view === 'long-card') {\n if (gridKey === 'lists' || gridKey === 'advancedSearch') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n }\n } else {\n yield put(paginationActions.changePaginationSuccess({ gridKey, data: pagination }));\n }\n\n yield put(sortActions.changeSortSuccess({ gridKey, data: sortBy || [] }));\n\n yield put(actions.loadCompaniesByFilterCompleted());\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n}\n\n/**\n * the suggested searches will be called once only when clicking on Browse by Recently Funded\n * menu item and only after getting the filters from api\n * @param { FilterSource<Filter<any>>[]} filterSources\n */\nfunction* fetchSuggestedSearches(\n filterSources: FilterSource<Filter<any>>[],\n gridKey: GridKeys,\n title: string\n) {\n const isAnalyst: boolean = yield select(userInformationSelectors.getIsAnalyst);\n const isAdmin: boolean = yield select(userInformationSelectors.getIsAdmin);\n\n try {\n // @ts-ignore\n const searchRes = yield call(SavedSearchesService.getSuggestedSearches);\n\n if (searchRes.data) {\n yield put(\n suggestedSearchActions.fetchSuggestedSearchesSuccess(\n searchRes.data.lists,\n filterSources,\n mapPreselectedFilters(filterSources, false)\n )\n );\n yield put(push(isAnalyst || isAdmin ? routes.advancedSearch : routes.home));\n yield call(loadSuggestedSearch, title, gridKey);\n } else {\n const errorMessage = 'Error fetching suggested searches!';\n yield put(suggestedSearchActions.fetchSuggestedSearchesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Error fetching suggested searches!';\n yield put(suggestedSearchActions.fetchSuggestedSearchesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\n// Reset filter when tag is removed.\nexport function* resetFilterSaga(action: PayloadAction<GridPayloadMain<ResetFilter>>) {\n const { gridKey, data } = action.payload;\n const { filterTags: allTags, selectedTag: filterTag } = data;\n\n const view: SearchViewType = yield select(viewTypeSelectors.searchView(gridKey));\n const isSourceScrub: boolean = yield select(listsDetailsSelectors.isSourceScrubRoute);\n const isSimilarCompaniesSorting: boolean | undefined = yield select(\n sortSelectors.isSimilarCompaniesSort(gridKey)\n );\n const similarCompanyInfo: SelectOption<string> = yield select(\n filterSelectors.getSimilarCompanyName()\n );\n\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey, pagination);\n let { sortBy, searchKey, originalFilter, clearedFilters, searchType } = gridSearchData;\n\n const normalizedFilterSources: Dictionary<BaseFilter<any>> = yield select(\n filterSourcesSelectors.getFiltersMap\n );\n\n let filters = injectFilter(\n normalizedFilterSources,\n originalFilter,\n clearedFilters,\n filterTag.filter,\n filterTag.optionId\n );\n\n const clearedFields = removeTouchFilters(filters, filterTag);\n\n if (filterTag.resetFor?.length) {\n filterTag.resetFor.forEach((filterKey: string) => {\n const selectedToClear = allTags.find(tag => tag.filter === filterKey);\n\n if (selectedToClear) {\n filters = injectFilter(\n normalizedFilterSources,\n filters,\n clearedFilters,\n selectedToClear.filter,\n selectedToClear.optionId\n );\n }\n });\n }\n\n filters = { ...filters, ...clearedFields };\n\n if (gridKey === 'lists') {\n const listId: string = yield select(listsDetailsSelectors.getRouteListId);\n\n // Ensures to filter by the selected list\n filters = {\n ...filters,\n ...(isSourceScrub ? { ss_list_id: listId } : { saved_list_id: listId }),\n };\n }\n\n const filterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n filters\n );\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterQuery,\n pagination,\n sortBy,\n };\n\n try {\n const searchOriginKey = getSearchOriginKeyFromGridKey(gridKey);\n\n const filtersSearchOriginValue: number = yield select(state =>\n filterSourcesSelectors.getFilterSearchOrigin(state, searchOriginKey)\n );\n\n let payloadData = { ...searchData };\n\n if (typeof filtersSearchOriginValue === 'number') {\n payloadData = {\n ...payloadData,\n searchOrigin: filtersSearchOriginValue,\n };\n }\n\n let columns: string = '';\n let columnOrder: ColumnKeys[] = [];\n let pinnedColumns: string = '';\n let companyId: number | undefined = undefined;\n\n if (gridKey === 'addons') {\n companyId = yield select(profileSelectors.getCompanyId);\n }\n\n if (gridKey !== 'outreach') {\n columns = yield select(columnSelectors.getVisibleColumnString(gridKey));\n columnOrder = yield select(columnSelectors.getColumnOrder(gridKey));\n pinnedColumns = yield select(columnSelectors.getPinnedColumnsString(gridKey));\n }\n\n const savedSearches: SearchSave[] = yield select(getSavedSearchesSavedSearchSelectors);\n const suggestedSearches: SearchSave[] = yield select(\n suggestedSearchSelectors.getSuggestedSearches\n );\n const { defaultOptxView } = yield select(getViewsSavedSearchSelectors);\n const ignoreSort = searchData.sortBy.find(sort => sort.id === 'date_matched');\n\n const includeCombined =\n payloadData.filter.list_id &&\n savedSearches.find(\n search =>\n search.unique_id === payloadData.filter.list_id && search.search_info.type === 'combined'\n );\n const filteredSavedSearches = includeCombined\n ? savedSearches\n : savedSearches.filter(view => view.search_info.type !== 'combined');\n\n const { matchedTitle, matchedView } = matchView(\n searchData,\n columns.replace('date_matched', '').replace(',,', ','),\n columnOrder.filter(col => col !== 'date_matched').join(),\n pinnedColumns,\n suggestedSearches ? [...suggestedSearches, ...filteredSavedSearches] : filteredSavedSearches,\n defaultOptxView,\n gridKey,\n undefined,\n ignoreSort ? true : undefined\n );\n\n let searchRes: AxiosResponse<Company[]>;\n\n if (gridKey === 'addons') {\n const companyId: number = yield select(profileSelectors.getCompanyId);\n // we don't need search origin and date range filters on addon page\n delete payloadData.searchOrigin;\n delete payloadData.filter.ddate_lower;\n delete payloadData.filter.ddate_upper;\n payloadData.companyId = companyId;\n\n searchRes = yield call(\n CompanyService.fetchCompanyAddonManagement,\n payloadData as AddonManagementPayload\n );\n } else {\n if (\n matchedView &&\n matchedView.unique_id !== 'sourcingOrder' &&\n matchedView.unique_id !== 'default' &&\n ((matchedView.search_info.type !== 'combined' && payloadData.listType !== 'combined') ||\n (matchedView.search_info.type === 'combined' && payloadData.listType === 'combined'))\n ) {\n // used only for saved searches\n payloadData.list_id = matchedView.unique_id;\n payloadData.fromSavedList = matchedView.unique_id;\n }\n\n if (matchedView?.unique_id && matchedView.unique_id !== 'default') {\n yield put(gridColumnActions.addRemoveDateMatched('add_column'));\n } else {\n yield put(gridColumnActions.addRemoveDateMatched('remove_column'));\n }\n\n if (!payloadData.fromSavedList) {\n delete payloadData.filter.new_date_matched;\n\n if (payloadData.sortBy.find(sort => sort.id === 'date_matched')) {\n payloadData.sortBy = COMPANY_DEFAULT_SORT;\n }\n }\n\n searchRes = yield call(SearchService.searchCompanies, payloadData);\n }\n\n if (gridKey === 'advancedSearch') {\n yield put(histogramActions.fetchHistogramFilters(gridKey, filters));\n } else if (gridKey === 'lists') {\n yield put(histogramActions.fetchHistogramFilters(gridKey, filterQuery));\n }\n\n const cancelSearch: boolean = yield select(selectors.isCancelled(gridKey));\n\n if (cancelSearch) {\n yield cancel();\n }\n\n yield put(\n applyViewSuccessSavedSearchesActions({\n id: matchedView && matchedView.unique_id ? matchedView.unique_id : '',\n label: matchedTitle || '',\n pageAlias: getRouteAliasFromGridKey(gridKey),\n })\n );\n\n if (gridKey === 'advancedSearch') {\n yield put(longCardActions.fetchCompanyProfileSuccess(searchRes.data[0] as CompanyProfile));\n }\n\n const companies: Company[] =\n gridKey === 'addons'\n ? (searchRes.data as unknown as { data: Company[] }).data\n : searchRes.data;\n\n if (gridKey === 'advancedSearch') {\n const oldListId: string | number | undefined = yield select(\n selectors.getAdvancedSearchListId('advancedSearch')\n );\n\n if (oldListId && (oldListId !== payloadData.list_id || !payloadData.list_id)) {\n const clearNewMatches = {\n list_id: Number(oldListId) ?? 0,\n };\n\n yield call(UserService.clearNewMatchesFromLists, clearNewMatches);\n }\n }\n\n // remove new_date_matched filter\n if (!payloadData.filter.new_date_matched) {\n delete filters.new_date_matched;\n }\n\n yield put(\n actions.searchCompaniesSuccess(\n sortSimilarCompanies(isSimilarCompaniesSorting, companies, similarCompanyInfo),\n {\n gridKey,\n data: {\n ...searchData,\n filter: filters,\n searchTitle:\n matchedView &&\n matchedView.unique_id.toString() !== 'default' &&\n hasFilters(matchedView.search_criteria)\n ? matchedTitle\n : '',\n ...(gridKey === 'addons' && { companyId: yield select(profileSelectors.getCompanyId) }),\n },\n }\n )\n );\n\n if (view === 'long-card') {\n if (gridKey === 'lists' || gridKey === 'advancedSearch') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n }\n } else {\n yield put(paginationActions.changePaginationSuccess({ gridKey, data: pagination }));\n }\n\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true\n );\n\n yield call(\n updateFilterSettings,\n searchData,\n gridKey,\n isEqual(userSettings, {}) ? undefined : userSettings\n );\n\n // also make call to count\n if (gridKey === 'lists') {\n yield put(\n searchCountActions.searchCount({\n gridKey,\n data: searchData,\n })\n );\n } else {\n yield put(searchCountActions.searchCount({ gridKey, data: searchData, companyId }));\n }\n\n // remove filter from URL\n removeParameterFromURL(filterTag.filter);\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n } finally {\n // @ts-ignore\n if (yield cancelled()) {\n yield put(actions.cancelCompanySearch({ gridKey, data: false }));\n }\n }\n}\n\nexport function* removeFilterSaga(action: PayloadAction<GridPayloadMain<ResetFilter>>) {\n const { gridKey, data } = action.payload;\n const { selectedTag: filterTag, filterTags: allTags } = data;\n\n const { filter: tagName, optionId: tagId } = filterTag;\n\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n\n const view: SearchViewType = yield select(viewTypeSelectors.searchView(gridKey));\n\n let pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey, pagination);\n let { sortBy, subFilter, searchKey, originalFilter, clearedFilters, searchType } = gridSearchData;\n\n // if we're removing the tag we just need to make a call to company cards endppoint,\n // if we're remving the card subfilter we just need to make a call to search endpoint,\n // if we're removing a regular filter, update filter list and make call to company cards\n // every call made to fetch my companies cards also makes a call to search companies\n if (tagName === 'keyword' && gridKey === 'myCompanies') {\n yield put(\n myCompaniesFilterCardsActions.fetchMyCompaniesCards({\n searchKey: '',\n filter: originalFilter,\n shouldResetPageNumber: true,\n })\n );\n } else if (tagName === subFilter) {\n const filterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n originalFilter\n );\n\n pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? pagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterQuery,\n pagination,\n sortBy,\n };\n\n if (gridKey === 'myCompanies') {\n const selectedCard: SearchStateData = yield select(\n myCompaniesFilterCardsSelectors.getSelectedCard\n );\n\n searchData.filter = {\n ...selectedCard.filter,\n ...filterQuery,\n saved_list_id: selectedCard.filter.saved_list_id,\n };\n }\n\n try {\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true,\n true\n );\n yield call(\n searchCompanies,\n searchData,\n gridKey,\n originalFilter,\n false,\n undefined,\n userSettings\n );\n\n yield put(actions.clearFilterSuccess());\n\n if (view === 'long-card') {\n switch (gridKey) {\n case 'advancedSearch':\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n break;\n\n case 'lists':\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n break;\n\n case 'outreachDetails':\n yield put(\n longCardPaginationActions.changeLongCardPagination({\n gridKey: 'outreachDetails',\n data: pagination,\n })\n );\n break;\n\n case 'myCompanies':\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n break;\n\n default:\n break;\n }\n } else {\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey,\n data: pagination,\n })\n );\n }\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n } else {\n const normalizedFilterSources: Dictionary<BaseFilter<any>> = yield select(\n filterSourcesSelectors.getFiltersMap\n );\n\n let filter = injectFilter(\n normalizedFilterSources,\n originalFilter,\n clearedFilters,\n tagName,\n tagId\n );\n\n const clearedFields = removeTouchFilters(filter, filterTag);\n\n if (filterTag.resetFor?.length) {\n filterTag.resetFor.forEach((filterKey: string) => {\n const selectedToClear = allTags.find(tag => tag.filter === filterKey);\n\n if (selectedToClear) {\n filter = injectFilter(\n normalizedFilterSources,\n filter,\n clearedFilters,\n selectedToClear.filter,\n selectedToClear.optionId\n );\n }\n });\n }\n\n filter = { ...filter, ...clearedFields };\n\n const data: Partial<SearchPayload> = {\n searchKey,\n filter,\n shouldResetPageNumber: true,\n };\n\n if (gridKey === 'outreachDetails') {\n yield put(\n outreachFilterActions.updateSourcingOutReachFilters({\n panelFiltersQuery: tagName,\n shouldRemoveFilter: true,\n })\n );\n\n // update panel filters in the history state so that after reload,\n // if user removes the filter, it should stay removed\n const panelFilters = (window.history.state?.state as TableGridQuery)?.panel_filters;\n\n if (panelFilters) {\n const parsedPanelFilters = queryString.parse(panelFilters, { arrayFormat: 'comma' });\n\n delete parsedPanelFilters[tagName];\n\n updateHistoryState('panel_filters', queryString.stringify(parsedPanelFilters));\n }\n }\n\n if (gridKey === 'myCompanies') {\n yield put(myCompaniesFilterCardsActions.fetchMyCompaniesCards({ ...data, searchType }));\n } else {\n yield put(actions.searchCompanies({ gridKey, data }));\n }\n }\n}\n\nexport function* loadAutocompleteSearch(\n action: PayloadAction<GridPayloadMain<SearchAutocomplete>>\n) {\n const { gridKey, data: autocompleteInfo } = action.payload;\n\n let view: SearchViewType = yield select(viewTypeSelectors.searchView(gridKey));\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey);\n let { defaultFilters, pagination, searchType } = gridSearchData;\n\n const isSourceScrub: boolean = yield select(listsDetailsSelectors.isSourceScrubRoute);\n\n pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? pagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n if (gridKey === 'lists') {\n const listId: string = yield select(listsDetailsSelectors.getRouteListId);\n\n // Ensures to filter by the selected list\n defaultFilters = {\n ...defaultFilters,\n ...(isSourceScrub ? { ss_list_id: listId } : { saved_list_id: listId }),\n };\n }\n\n const filterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n defaultFilters\n );\n\n if (\n autocompleteInfo.search_info?.keyword &&\n autocompleteInfo.search_criteria.includes('company_name_or_url')\n ) {\n searchType = searchTypeOptions.companyNameOrUrl;\n } else if (autocompleteInfo.search_info?.keyword) {\n searchType = searchTypeOptions.defaultSearchType;\n }\n\n const searchData: SearchPayloadRequest = {\n searchKey: preProcessSearch(autocompleteInfo.search_info.keyword),\n searchType: searchType,\n filter: filterQuery,\n pagination,\n sortBy: [],\n };\n\n try {\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true\n );\n yield call(\n searchCompanies,\n searchData,\n gridKey,\n defaultFilters,\n false,\n undefined,\n userSettings\n );\n\n const cancelSearch: boolean = yield select(selectors.isCancelled(gridKey));\n\n if (cancelSearch) {\n yield cancel();\n }\n\n if (gridKey === 'lists') {\n yield put(histogramActions.fetchHistogramFilters(gridKey, defaultFilters));\n } else {\n yield put(histogramActions.fetchHistogramFilters(gridKey, defaultFilters));\n }\n\n if (view === 'long-card') {\n if (gridKey === 'lists' || gridKey === 'advancedSearch') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n }\n } else {\n yield put(paginationActions.changePaginationSuccess({ gridKey, data: pagination }));\n }\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n } finally {\n // @ts-ignore\n if (yield cancelled()) {\n yield put(actions.cancelCompanySearch({ gridKey, data: false }));\n }\n }\n}\n\n/**\n * perform the search by loading filters outside filter modal\n * @param {string} filterValue\n * @param {string} filterKey\n * @param {Dictionary<PreselectedFilter>} clearedFilter\n * @param {GridKeys} gridKey\n */\nfunction* loadFilter(\n filterValue: string,\n filterKey: string,\n clearedFilter: Dictionary<PreselectedFilter>,\n gridKey: GridKeys\n) {\n const view: SearchViewType = yield select(viewTypeSelectors.searchView('advancedSearch'));\n const userPageNumber: number = yield select(userInformationSelectors.getResultsPageNumber);\n\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n // include the special filter in filters.\n const filter: Dictionary<PreselectedFilter> = {\n ...clearedFilter,\n [filterKey]:\n filterKey === 'company_tag' || filterKey === 'sub_sector'\n ? [{ value: filterValue, label: filterValue }]\n : filterValue,\n };\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(getFiltersQuery, filter);\n\n const searchData: SearchPayloadRequest = {\n searchKey: '',\n searchType: defaultSearchType,\n filter: filterQuery,\n pagination,\n sortBy: COMPANY_DEFAULT_SORT,\n };\n\n const sortQuery = queryString.stringify(mapSortQuery(COMPANY_DEFAULT_SORT), {\n arrayFormat: 'comma',\n });\n\n try {\n const searchOriginKey: FilterSearchOriginName = 'profile_page';\n const filtersSearchOriginValue: number = yield select(state =>\n filterSourcesSelectors.getFilterSearchOrigin(state, searchOriginKey)\n );\n\n let payloadData = { ...searchData };\n\n if (typeof filtersSearchOriginValue === 'number') {\n payloadData = {\n ...payloadData,\n searchOrigin: filtersSearchOriginValue,\n };\n }\n\n const res: AxiosResponse<Company[]> = yield call(\n SearchService.searchCompanies,\n payloadData,\n false\n );\n\n yield put(\n actions.searchCompaniesSuccess(res.data, {\n gridKey,\n data: { ...searchData, filter },\n })\n );\n\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield call(updateFilterSettings, searchData, gridKey, {\n company_sorting: sortQuery,\n search_results_page_number: searchData.pagination.pageNumber,\n });\n } else {\n yield call(updateFilterSettings, searchData, gridKey, { company_sorting: sortQuery });\n }\n\n yield put(listsDetailsActions.clearCompanyList());\n\n if (view === 'long-card') {\n if (gridKey === 'lists' || gridKey === 'advancedSearch') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey: gridKey,\n data: pagination,\n })\n );\n }\n } else {\n yield put(paginationActions.changePaginationSuccess({ gridKey, data: pagination }));\n }\n\n // make call to count\n if (gridKey === 'lists') {\n yield put(\n searchCountActions.searchCount({\n gridKey,\n data: searchData,\n })\n );\n } else {\n yield put(searchCountActions.searchCount({ gridKey, data: searchData }));\n }\n\n yield put(actions.loadCompaniesByFilterCompleted());\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n}\n\n/**\n * Load companies by specific filter, from outside filter modal\n * @param action\n */\nexport function* loadCompaniesByFilterSaga(\n action: PayloadAction<GridPayloadMain<string>, any, string>\n) {\n // check if filters are loaded, if not get them first and then perform the search with the special filter,\n // otherwise just make the search\n const filtersLoaded: boolean = yield select(filterSourcesSelectors.filtersLoaded);\n const isAnalyst: boolean = yield select(userInformationSelectors.getIsAnalyst);\n const isAdmin: boolean = yield select(userInformationSelectors.getIsAdmin);\n const {\n payload: { gridKey, data: filterValue },\n meta: filterKey,\n } = action;\n\n if (!filtersLoaded) {\n const settings: UserSettings = yield select(userInformationSelectors.getSettings);\n\n try {\n // @ts-ignore\n const res = yield call(FilterService.getOptions);\n\n if (res.data) {\n yield put(\n filterActions.fetchCompanyFiltersSuccess(res.data.filters, {\n defaultViews: res.data.default_views,\n searchOrigin: res.data.search_origin,\n settings,\n isAnalystOrIsAdmin: isAnalyst || isAdmin,\n })\n );\n\n yield call(\n loadFilter,\n filterValue,\n filterKey,\n mapPreselectedFilters(res.data.filters, false),\n gridKey\n );\n\n yield put(push(isAnalyst || isAdmin ? routes.advancedSearch : routes.home));\n } else {\n yield put(filterActions.fetchCompanyFiltersFail('Error fetch company filters!'));\n yield put(actions.loadCompaniesByFilterCompleted());\n }\n } catch (e: any) {\n yield put(filterActions.fetchCompanyFiltersFail('Error fetch company filters!'));\n yield put(actions.loadCompaniesByFilterCompleted());\n }\n } else {\n const clearedFilter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getClearedFilter('advancedSearch')\n );\n yield put(push(isAnalyst || isAdmin ? routes.advancedSearch : routes.home));\n yield call(loadFilter, filterValue, filterKey, clearedFilter, gridKey);\n }\n}\n\ntype CompanyKey = keyof Company;\nconst diversityKey: CompanyKey = 'diversity';\n\nfunction* loadDiversityFilterSaga(action: PayloadAction<string>) {\n const value = action.payload;\n const options: Array<SelectOption> = yield select(state =>\n filterSourcesSelectors.getSelectOptions(state, diversityKey)\n );\n const option = options.find(option => option.value === value);\n\n if (option) {\n let gridKey = getLocationMainGridKey();\n if (!gridKey) return;\n\n yield put(\n actions.loadCompaniesByFilter(diversityKey, {\n gridKey,\n data: [option],\n })\n );\n }\n}\n\nfunction* saveTrendingInSessionSaga(action: PayloadAction<GridPayloadMain<ChartBarIntervalKeys>>) {\n const { gridKey } = action.payload;\n\n const trending: ChartBarIntervalKeys = yield select(selectors.getTrending(gridKey));\n\n const updateUserSettingsData: { [key: string]: ChartBarIntervalKeys } = {};\n\n switch (gridKey) {\n case 'advancedSearch':\n updateUserSettingsData.search_trending = trending;\n sendPendoData(`${ADVANCED_SEARCH}_${TRENDING_VALUES[trending]}`);\n break;\n\n case 'lists':\n updateUserSettingsData.user_list_trending = trending;\n break;\n\n case 'outreachDetails':\n updateUserSettingsData.sourcing_outreach_trendings = trending;\n break;\n\n case 'myCompanies':\n updateUserSettingsData.my_companies_trending = trending;\n\n sendPendoData(`${MY_COMPANIES_PENDO}_${MY_COMPANIES_TRENDING_VALUES[trending]}`);\n break;\n\n default:\n break;\n }\n\n yield put(userInformationActions.updateUserSettings(updateUserSettingsData));\n}\n\n/**\n * Each time the user makes a new search reset scroll history if needed.\n */\nfunction* searchCompaniesSuccessSaga(\n action: PayloadAction<Company[], any, GridPayloadMain<Partial<SearchPayload>>>\n) {\n const { gridKey } = action.meta;\n const isAnalyst: boolean = yield select(userInformationSelectors.getIsAnalyst);\n const isAdmin: boolean = yield select(userInformationSelectors.getIsAdmin);\n let route = isAnalyst || isAdmin ? routes.advancedSearch : routes.home;\n\n switch (gridKey) {\n case 'myCompanies':\n route = routes.myCompanies;\n break;\n\n case 'lists':\n route = routes.userLists.list;\n break;\n }\n\n yield put(scrollHistoryActions.resetScrollHistory(route));\n yield put(incrementFetchedCount(gridKey));\n}\n\nexport function* loadSearchSaga(action: PayloadAction<GridPayloadMain<LoadSearch>>) {\n const { gridKey, data: payload } = action.payload;\n\n const isAnalyst: boolean = yield select(userInformationSelectors.getIsAnalyst);\n const isAdmin: boolean = yield select(userInformationSelectors.getIsAdmin);\n\n yield put(push(isAnalyst || isAdmin ? routes.advancedSearch : routes.home));\n yield call(loadSuggestedSearch, '', gridKey, payload);\n}\n\nexport function* clearDateMatchesSaga(action: PayloadAction<ClearMatchedFromListPayload>) {\n yield call(UserService.clearNewMatchesFromLists, action.payload);\n\n const isAdmin: boolean = yield select(userInformationSelectors.getIsAdmin);\n\n if (isAdmin) {\n const newMatchSavedSearches: CompanyActivityBlock | undefined = yield select(\n adminCompanyActivitySelectors.newMatchSavedSearches\n );\n\n if (newMatchSavedSearches) {\n yield put(adminActions.company.fetchAdminCompanyActivity());\n }\n }\n}\n\nexport default function* searchSaga() {\n yield takeLatest(actions.initialCompaniesSearch, initializeSearchSaga);\n yield takeLatest(actions.searchCompanies, searchWithCountSaga);\n yield takeLatest(actions.clearSearch, clearSearchSaga);\n yield takeLatest(actions.resetSearch, resetSearchToDefaultSaga);\n yield takeLatest(actions.loadSavedSearch, loadCompanySavedSearchSaga);\n yield takeLatest(actions.loadSuggestedSearch, loadSuggestedSearchSaga);\n yield takeLatest(actions.loadAutocompleteSearch, loadAutocompleteSearch);\n yield takeLatest(actions.resetFilter, resetFilterSaga);\n yield takeLatest(actions.removeFilter, removeFilterSaga);\n yield takeLatest(actions.loadCompaniesByFilter, loadCompaniesByFilterSaga);\n yield takeLatest(actions.loadDiversityFilter, loadDiversityFilterSaga);\n yield takeLatest(actions.updateTrending, saveTrendingInSessionSaga);\n yield takeLatest(actions.searchCompaniesSuccess, searchCompaniesSuccessSaga);\n yield takeLatest(actions.loadSearch, loadSearchSaga);\n yield takeLatest(actions.clearDateMatches, clearDateMatchesSaga);\n}\n","export const CompanyProfileTabs = {\n PROFILE_OVERVIEW: '1',\n RELATIONSHIP_MANAGEMENT: '2',\n PROPRIETARY_INFO: '3',\n ADDON_MGMT: '4',\n LISTS: '5',\n SOCIAL_MEDIA: '6',\n HISTORY: '7',\n FILES: '8',\n NEWS_FEED: '9',\n};\n\nexport const ADMIN_ROUTES = {\n users: '/admin/users',\n};\n\nexport const USER_ROUTES = {\n profile: '/user/profile',\n};\n\nexport const LISTS_ROUTES = {\n myWatchList: '/lists',\n companySavedSearches: '/lists/company-searches',\n suggestedSearches: '/lists/suggested-searches',\n sourceScrubLists: '/lists/source-scrub-lists',\n contactSearches: '/lists/saved-searches',\n};\n\nexport const ALL_REPORTS = {\n allReports: '/all-reports',\n sourcingAnalystsLeaderboard: '/all-reports/analysts-leaderboard',\n checklistResearchInsights: '/all-reports/checklist-research-insights',\n equityTouchIntegration: '/all-reports/admin/etintegration',\n pipelineReport: '/all-reports/admin/pipeline-report',\n sourcingOutreachSummary: '/all-reports/sourcing-outreach-summary',\n sourcingOutreachSummaryCompanies: '/all-reports/sourcing-outreach/companies-list',\n};\n\nexport const DEFAULT_REPORTS = {\n allReports: '/all-reports',\n sourcingAnalystsLeaderboard: '/all-reports/analysts-leaderboard',\n checklistResearchInsights: '/all-reports/checklist-research-insights',\n sourcingOutreachSummary: '/all-reports/sourcing-outreach-summary',\n sourcingOutreachSummaryCompanies: '/all-reports/sourcing-outreach/companies-list',\n pipelineReport: '/all-reports/admin/pipeline-report',\n};\n\nexport const USER_LISTS_ROUTES = {\n list: '/user-lists/:id',\n sourceScrubLists: '/ss-lists/:id',\n};\n\nconst ROUTES = {\n admin: ADMIN_ROUTES,\n contacts: '/contacts',\n home: '/',\n lists: LISTS_ROUTES,\n advancedSearch: '/search',\n analystHome: '/analyst-home',\n adminHome: '/admin-home',\n login: '/login',\n notes: '/notes',\n user: USER_ROUTES,\n myCompanies: '/my-companies',\n profile: '/profile/:id',\n reports: ALL_REPORTS,\n defaultReports: DEFAULT_REPORTS,\n userLists: USER_LISTS_ROUTES,\n addToEquityTouch: '/add-to-equity-touch/:id',\n addToSalesloft: '/add-to-salesloft/:id',\n chromeExtension: '/chrome-extension-new',\n scheduledTouches: '/scheduled-touches',\n};\n\nexport default ROUTES;\n","import { SelectOption } from '@optx/models/Option';\n\nconst CB = 'CompanyBanner';\n\nexport const CP = 'CompanyPage';\n\nconst OW = 'Overview';\n\nconst RM = 'RelationshipManagement';\n\nexport const COMPANY_PAGE_NEWS_FEED_GOOGLE_NEWS = `${CP}_NewsFeed_GoogleNews`;\n\nexport const PROPRIETARY_INFO = 'ProprietaryInfo_Financials_Edit';\n\nexport const COMPANY_PAGE_ACTION = `${CP}_ActionMenu`;\n\nexport const NavigationPane = {\n notifications: 'Navigation_Notifications',\n advancedSearch: 'Navigation_AdvancedSearch',\n myCompanies: 'Navigation_MyCompanies',\n myWatchlist: 'Navigation_MyWatchlist',\n contacts: 'Navigation_Contacts',\n reports: 'AllReports',\n savedCompanySearches: 'Navigation_SavedCompanySearches',\n savedContactSearches: 'Navigation_SavedContactSearches',\n touchManagement: 'Navigation_TouchManagement',\n suggestedSearches: 'Navigation_SuggestedSearches',\n sourceScrubLists: 'Navigation_SourceScrubLists',\n browseByRecentlyFunded: 'Navigation_BrowseByRecentlyFunded',\n myProfilePage: 'Navigation_MyProfilePage',\n logout: 'Navigation_LogOut',\n};\n\nexport const companyPageTop = {\n website: `${CP}_Top_WebsiteIcon`,\n 'sub-sector': `${CP}_Top_SubSectorIcon`,\n linkedin: `${CP}_Top_LinkedInIcon`,\n twitter: `${CP}_Top_TwitterIcon`,\n equitytouch: `${CP}_Top_EquityTouchIcon`,\n sourcescrub: `${CP}_Top_SourceScrubIcon`,\n g2crowd: `${CP}_Top_G2Icon`,\n crunchbase: `${CP}_Top_CrunchbaseIcon`,\n facebook: `${CP}_Top_FacebookIcon`,\n addTouchNote: `${CP}_Top_AddTouchNoteButton`,\n editCompanyInfo: `${CP}_Top_EditCompanyInfoButton`,\n changeDescription: `${CP}_Top_ChangeDescription`,\n psgFitThumbsUp: `${CP}_Top_PSGFit_ThumbsUp`,\n psgFitThumbsDown: `${CP}_Top_PSGFit_ThumbsDown`,\n addTagButton: `${CP}_Top_AddTagButton`,\n MarkAsReviewedButton: `${CP}_Top_MarkAsReviewedButton`,\n editDateFounded: `${CP}_Top_EditDateFounded`,\n addToFavorites: `${CP}_Top_AddToFavorites`,\n searchResultsBreadcrumb: `${CP}_Top_SearchResultsBreadcrumb`,\n};\n\nexport const CompanyPageOverviewPendo = {\n active: `${CP}_${OW}_KeyInformation_Active`,\n stage: `${CP}_${OW}_KeyInformation_Stage`,\n rank: `${CP}_${OW}_KeyInformation_Pipeline Rank`,\n owner: `${CP}_${OW}_KeyInformation_Company Owner`,\n fit: `${CP}_${OW}_KeyInformation_PSG Fit`,\n date: `${CP}_${OW}_KeyInformation_Date Presented`,\n psgPlatformCompany: `${CP}_${OW}_KeyInformation_PSG Platform Company`,\n addOn: `${CP}_${OW}_KeyInformation_Add-on`,\n addOnFor: `${CP}_${OW}_KeyInformation_Add-on for`,\n leadSource: `${CP}_${OW}_KeyInformation_Lead Source`,\n seniorAdvisorThesis: `${CP}_${OW}_KeyInformation_Senior Advisor Thesis`,\n seniorDealTeamLead: `${CP}_${OW}_KeyInformation_Senior Deal Team Lead`,\n inBusiness: `${CP}_${OW}_KeyInformation_In Business`,\n opsTeam: `${CP}_${OW}_KeyInformation_OPS Team`,\n icStatusDate: `${CP}_${OW}_KeyInformation_IC Status Date`,\n expectedCloseDate: `${CP}_${OW}_KeyInformation_Expected Close Date`,\n dealTeam: `${CP}_${OW}_KeyInformation_Deal Team`,\n fund: `${CP}_${OW}_KeyInformation_Fund`,\n nextSteps: `${CP}_${OW}_KeyInformation_Next Steps`,\n lastRound: `${CP}_${OW}_Financial_LastRound`,\n revenue: `${CP}_${OW}_Financial_Revenue`,\n lastFundingDate: `${CP}_${OW}_Financial_LastFundingDate`,\n ebitda: `${CP}_${OW}_Financial_EBITDA`,\n softwareCompany: `${CP}_${OW}_Taxonomy_SoftwareCompany`,\n companyType: `${CP}_${OW}_Taxonomy_CompanyType`,\n opportunityType: `${CP}_${OW}_Taxonomy_OpportunityType`,\n sector: `${CP}_${OW}_Taxonomy_Sector`,\n subsector: `${CP}_${OW}_Taxonomy_SubSector`,\n productCategory: `${CP}_${OW}_Taxonomy_ProductCategory`,\n fundingRounds3M: `${CP}_${OW}_FundingRounds_3M`,\n fundingRounds6M: `${CP}_${OW}_FundingRounds_6M`,\n fundingRounds1Y: `${CP}_${OW}_FundingRounds_1Y`,\n fundingRounds2Y: `${CP}_${OW}_FundingRounds_2Y`,\n fundingRoundsALL: `${CP}_${OW}_FundingRounds_ALL`,\n optxScore3M: `${CP}_${OW}_OPTXScore_3M`,\n optxScore6M: `${CP}_${OW}_OPTXScore_6M`,\n optxScore1Y: `${CP}_${OW}_OPTXScore_1Y`,\n optxScore2Y: `${CP}_${OW}_OPTXScore_2Y`,\n employeeCount3M: `${CP}_${OW}_EmployeeCount_3M`,\n employeeCount6M: `${CP}_${OW}_EmployeeCount_6M`,\n employeeCount1Y: `${CP}_${OW}_EmployeeCount_1Y`,\n employeeCount2Y: `${CP}_${OW}_EmployeeCount_2Y`,\n similarCompanies_profileLink: `${CP}_${OW}_SimilarCompanies_CompanyProfileLink`,\n};\n\nexport const CompanyPageRelationshipManagement = {\n equityTouchHistory_addTouchNote: `${CP}_${RM}_EquityTouchHistory_AddTouchNote`,\n equityTouchHistory_touchType_all: `${CP}_${RM}_EquityTouchHistory_TouchType_All`,\n equityTouchHistory_touchType_call: `${CP}_${RM}_EquityTouchHistory_TouchType_Call`,\n equityTouchHistory_touchType_email: `${CP}_${RM}_EquityTouchHistory_TouchType_Email`,\n equityTouchHistory_touchType_internalNote: `${CP}_${RM}_EquityTouchHistory_TouchType_InternalNote`,\n equityTouchHistory_touchType_meeting: `${CP}_${RM}_EquityTouchHistory_TouchType_Meeting`,\n equityTouchHistory_touchType_other: `${CP}_${RM}_EquityTouchHistory_TouchType_Other`,\n equityTouchHistory_createdBy: `${CP}_${RM}_EquityTouchHistory_CreatedBy`,\n equityTouchHistory_scheduledTouches: `${CP}_${RM}_EquityTouchHistory_ScheduledTouches`,\n equityTouchHistory_previousTouches_touchpoint: `${CP}_${RM}_EquityTouchHistory_PreviousTouches_Touchpoint`,\n equityTouchHistory_editTouch: `${CP}_${RM}_EquityTouchHistory_EditTouch`,\n equityTouchHistory_emailAttendees: `${CP}_${RM}_EquityTouchHistory_EmailAttendees`,\n equityTouchHistory_expandTouchPointArrow: `${CP}_${RM}_EquityTouchHistory_ExpandTouchPointArrow`,\n primaryContacts_addContact: `${CP}_${RM}_PrimaryContacts_AddContact`,\n primaryContacts_editContact: `${CP}_${RM}_PrimaryContacts_EditContact`,\n};\n\nexport const CompanyPageFilesEquityTouchFilesDownload = `${CP}_Files_EquityTouchFilesDownload`;\n\nexport const CompanyPageProprietaryInfo = {\n dealPreparation_datePresented: `${CP}_ProprietaryInfo_DealPreparation_DatePresented`,\n dealPreparation_equityCheck: `${CP}_ProprietaryInfo_DealPreparation_EquityCheck`,\n dealPreparation_banker: `${CP}_ProprietaryInfo_DealPreparation_Banker`,\n dealPreparation_nameOfBanker: `${CP}_ProprietaryInfo_DealPreparation_NameOfBanker`,\n dealPreparation_dealType: `${CP}_ProprietaryInfo_DealPreparation_DealType`,\n financials_addYears: `${CP}_ProprietaryInfo_Financials_AddYears`,\n};\n\nconst ADDON_MGMT = `${CP}_AddOnMGMT`;\n\nexport const CompanyPageAddOnMGMT = {\n search: `${ADDON_MGMT}_Search`,\n stageType: `${ADDON_MGMT}_StageType`,\n showActiveCompanies: `${ADDON_MGMT}_ShowActiveCompanies`,\n nextSteps: `${ADDON_MGMT}_NextSteps`,\n origin: `${ADDON_MGMT}_Origin`,\n filter: `${ADDON_MGMT}_Filter`,\n exportSaveSearch: `${ADDON_MGMT}_ExportSaveSearch`,\n fullScreen: `${ADDON_MGMT}_FullScreen`,\n sortByCompanyName: `${ADDON_MGMT}_SortByCompanyName`,\n sortByPsgFit: `${ADDON_MGMT}_SortByPSGFit`,\n sortByOptxScore: `${ADDON_MGMT}_SortByOPTXScore`,\n sortByStage: `${ADDON_MGMT}_SortByStage`,\n sortByNextsteps: `${ADDON_MGMT}_SortByNextSteps`,\n sortByLastTouch: `${ADDON_MGMT}_SortByLastTouch`,\n sortByFutureTouch: `${ADDON_MGMT}_SortByFutureTouch`,\n sortByAction: `${ADDON_MGMT}_SortByAction`,\n};\n\nconst LISTS = `${CP}_Lists`;\n\nexport const CompanyPageLists = {\n SortByDateUpdated: `${LISTS}_SortByDateUpdated`,\n ListName: `${LISTS}_ListName`,\n};\n\nconst HISTORY = `${CP}_History`;\n\nexport const CompanyPageHistory = {\n auditTrail_search: `${HISTORY}_AuditTrail_Search`,\n auditTrail_startDate: `${HISTORY}_AuditTrail_StartDate`,\n auditTrail_endDate: `${HISTORY}_AuditTrail_EndDate`,\n auditTrail_all: `${HISTORY}_AuditTrail_All`,\n auditTrail_editField: `${HISTORY}_AuditTrail_EditField`,\n mergeHistory_checkBox_unmergeCompanies: `${HISTORY}_MergeHistory_CheckBox_UnmergeCompanies`,\n};\n\nexport const MenuNotifications = {\n viewOptxRoadmap: 'Notifications_ViewOPTXRoadmap',\n inbox: 'Notifications_Inbox',\n history: 'Notifications_History',\n history_newestToOldest: 'Notifications_History_NewestToOldest',\n upcomingTouches: 'Notifications_UpcomingTouches',\n pastDue: 'Notifications_PastDue',\n};\n\nconst FNC = 'FindNewCompanies';\n\nexport const MenuFindNewCompaniesSuggestedSearches = {\n SuggestedSearches: `${FNC}_SuggestedSearches`,\n MyWatchlists: `${FNC}_SuggestedSearches_MyWatchlists`,\n SourceScrubLists: `${FNC}_SuggestedSearches_SourceScrubLists`,\n SavedCompanySearches: `${FNC}_SuggestedSearches_SavedCompanySearches`,\n SavedContactSearches: `${FNC}_SuggestedSearches_SavedContactSearches`,\n};\n\nconst FNCSSL = 'FindNewCompanies_SourceScrubLists';\n\nexport const FindNewCompaniesSourceScrubLists = {\n source_scrub_lists: `${FNCSSL}`,\n title: `${FNCSSL}_ListName`,\n startdate: `${FNCSSL}_StartDate`,\n enddate: `${FNCSSL}_EndDate`,\n last_refreshed_at: `${FNCSSL}_LastRefreshedDate`,\n number_of_companies: `${FNCSSL}_NumberOfCompanies`,\n number_of_companies_in_et: `${FNCSSL}_NumberOfCompaniesInET`,\n number_of_companies_not_in_et: `${FNCSSL}_NumberNotInET`,\n number_of_last_touch_over_6_months: `${FNCSSL}_NumberWOaTouchLessThan6M`,\n number_of_future_touches: `${FNCSSL}_NumberOfFutureTouches`,\n source_scrub_lists_action: `${FNCSSL}_Action`,\n};\n\nexport const FIND_NEW_COMPANIES_BROWSE_BY_RECENTLY_FUNDED = `${FNC}_BrowseByRecentlyFunded`;\n\nconst TR = 'TopRibbon';\nconst TRATN = `${TR}_Actions_AddTouchNote`;\n\nconst LOG = 'LogCompleteTouch';\n\nconst SCHEDULE = 'ScheduleFollowUpTouch';\n\nconst ADD_NEW_CONTACT = `${CP}_Contacts_AddNewContact`;\n\nconst TOUCHES = `${CP}_Touches`;\n\nconst ACTION_VERIFY = `${TR}_Actions_VerifyKeyInfo`;\n\nexport const OPTXChromePlugin = {\n topHeader: {\n addTouchNote: {\n note: `${TRATN}`,\n stages: {\n stage: `${TRATN}_Stage`,\n portfolioCompany: `${TRATN}_Stage_PortfolioCompany`,\n dead: `${TRATN}_Stage_Dead`,\n pass: `${TRATN}_Stage_Pass`,\n lead: `${TRATN}_Stage_Lead`,\n qualifiedLead: `${TRATN}_Stage_QualifiedLead`,\n track: `${TRATN}_Stage_Track`,\n vwia: `${TRATN}_Stage_VWIA`,\n target: `${TRATN}_Stage_Target`,\n priority: `${TRATN}_Stage_Priority`,\n ioiPresented: `${TRATN}_Stage_IOIPresented`,\n loiPresented: `${TRATN}_Stage_LOIPresented`,\n loiSigned: `${TRATN}_Stage_LOISigned`,\n },\n ranks: {\n rank: `${TRATN}_Rank`,\n none: `${TRATN}_Rank_None`,\n 1: `${TRATN}_Rank_1`,\n 2: `${TRATN}_Rank_2`,\n 3: `${TRATN}_Rank_3`,\n 4: `${TRATN}_Rank_4`,\n 5: `${TRATN}_Rank_5`,\n },\n cancel: `${TRATN}_Cancel`,\n save: `${TRATN}_Save`,\n logs: {\n log: `${TRATN}_${LOG}`,\n type: `${TRATN}_${LOG}_Type`,\n type_call: `${TRATN}_${LOG}_Type_Call`,\n type_contactImport: `${TRATN}_${LOG}_Type_ContactImport`,\n type_crunchbase: `${TRATN}_${LOG}_Type_Crunchbase`,\n type_documentUpload: `${TRATN}_${LOG}_Type_DocumentUpload`,\n type_email: `${TRATN}_${LOG}_Type_Email`,\n type_internalNote: `${TRATN}_${LOG}_Type_InternalNote`,\n type_meeting: `${TRATN}_${LOG}_Type_Meeting`,\n type_ndaSigned: `${TRATN}_${LOG}_Type_NDASigned`,\n type_stageModified: `${TRATN}_${LOG}_Type_StageModified`,\n type_transferred: `${TRATN}_${LOG}_Type_Transferred`,\n type_voiceMail: `${TRATN}_${LOG}_Type_Voicemail`,\n initator: `${TRATN}_${LOG}_Initator`,\n otherpsgAttendees: `${TRATN}_${LOG}_OtherPSGAttendees`,\n date: `${TRATN}_${LOG}_Date`,\n schedule: `${TRATN}_${LOG}_${SCHEDULE}`,\n schedule_1week: `${TRATN}_${LOG}_${SCHEDULE}_1Week`,\n schedule_2weeks: `${TRATN}_${LOG}_${SCHEDULE}_2weeks`,\n schedule_1month: `${TRATN}_${LOG}_${SCHEDULE}_1Month`,\n schedule_3months: `${TRATN}_${LOG}_${SCHEDULE}_3months`,\n schedule_6months: `${TRATN}_${LOG}_${SCHEDULE}_6months`,\n schedule_1year: `${TRATN}_${LOG}_${SCHEDULE}_1year`,\n schedule_customdate: `${TRATN}_${LOG}_${SCHEDULE}_CustomRange`,\n schedule_type: `${TRATN}_${LOG}_${SCHEDULE}_Type`,\n schedule_type_call: `${TRATN}_${LOG}_${SCHEDULE}_Type_Call`,\n schedule_type_contactImport: `${TRATN}_${LOG}_${SCHEDULE}_Type_ContactImport`,\n schedule_type_crunchbase: `${TRATN}_${LOG}_${SCHEDULE}_Type_Crunchbase`,\n schedule_type_documentUpload: `${TRATN}_${LOG}_${SCHEDULE}_Type_DocumentUpload`,\n schedule_type_email: `${TRATN}_${LOG}_${SCHEDULE}_Type_Email`,\n schedule_type_internalNote: `${TRATN}_${LOG}_${SCHEDULE}_Type_InternalNote`,\n schedule_type_meeting: `${TRATN}_${LOG}_${SCHEDULE}_Type_Meeting`,\n schedule_type_ndaSigned: `${TRATN}_${LOG}_${SCHEDULE}_Type_NDASigned`,\n schedule_type_stageModified: `${TRATN}_${LOG}_${SCHEDULE}_Type_StageModified`,\n schedule_type_transferred: `${TRATN}_${LOG}_${SCHEDULE}_Type_Transferred`,\n schedule_type_voiceMail: `${TRATN}_${LOG}_${SCHEDULE}_Type_Voicemail`,\n schedule_date: `${TRATN}_${LOG}_${SCHEDULE}_Date`,\n schedule_subject: `${TRATN}_${LOG}_${SCHEDULE}_Subject`,\n },\n },\n view: `${TR}_ViewinOPTX `,\n xout: `${TR}_XOut `,\n actions: {\n action: `${TR}_Actions `,\n verifyKeyInfos: {\n verifyKeyInfo: `${ACTION_VERIFY}`,\n cancel: `${ACTION_VERIFY}_Cancel`,\n save: `${ACTION_VERIFY}_Save`,\n softwareCompanyThumbsUp: `${ACTION_VERIFY}_SoftwareCompanyThumbsUp`,\n softwareCompanyThumbsDown: `${ACTION_VERIFY}_SoftwareCompanyThumbsDown`,\n psgFitThumbsUp: `${ACTION_VERIFY}_PSGFitThumbsUp`,\n psgFitThumbsDown: `${ACTION_VERIFY}_PSGFitThumbsDown`,\n },\n openInEquityTouch: `${TR}_Actions_OpenInEquityTouch`,\n addtoSalesloft: `${TR}_Actions_AddtoSalesloft`,\n addtoList: `${TR}_Actions_AddtoList`,\n hideOPTXTab: `${TR}_Actions_HideOPTXTab`,\n logout: `${TR}_Actions_LogOut`,\n },\n },\n companyBanner: {\n company_icon: `${CB}_CompanyLink`,\n website_icon: `${CB}_WebsiteIcon`,\n linkedin_icon: `${CB}_LinkedinIcon`,\n twitter_icon: `${CB}_TwitterIcon`,\n equitytouch_icon: `${CB}_EquityTouchIcon`,\n sourcescrub_icon: `${CB}_SourceScrubIcon`,\n g2crowd_icon: `${CB}_G2Icon`,\n bvdorbis_icon: `${CB}_BvdorbisIcon`,\n capterra_icon: `${CB}_CapterraIcon`,\n crunchbase_icon: `${CB}_CrunchbaseIcon`,\n },\n companyPage: {\n stats: `${CP}_OPTXStats`,\n click_ceo_email: `${CP}_OPTXStats_Click_CEO_Email`,\n descriptions: {\n description: `${CP}_OPTXStats_Description`,\n equityTouch: `${CP}_OPTXStats_Description_EquityTouch`,\n sourceScrub: `${CP}_OPTXStats_Description_SourceScrub`,\n crunchbaseShort: `${CP}_OPTXStats_Description_CrunchbaseShort`,\n crunchbaseLong: `${CP}_OPTXStats_Description_CrunchbaseLong`,\n glassDoor: `${CP}_OPTXStats_Description_Glassdoor`,\n capterra: `${CP}_OPTXStats_Description_Capterra`,\n addTag: `${CP}_OPTXStats_Description_AddTag`,\n },\n employeeCount3M: `${CP}_OPTXStats_EmployeeCount_3M`,\n employeeCount6M: `${CP}_OPTXStats_EmployeeCount_6M`,\n employeeCount1Y: `${CP}_OPTXStats_EmployeeCount_1Y`,\n employeeCount2Y: `${CP}_OPTXStats_EmployeeCount_2Y`,\n optxScore3M: `${CP}_OPTXStats_OPTXScore_3M`,\n optxScore6M: `${CP}_OPTXStats_OPTXScore_6M`,\n optxScore1Y: `${CP}_OPTXStats_OPTXScore_1Y`,\n optxScore2Y: `${CP}_OPTXStats_OPTXScore_2Y`,\n touches: TOUCHES,\n clickTouchpoint: `${TOUCHES}_ClickTouchpoint`,\n threeDotsAction: `${TOUCHES}_ThreeDotsAction`,\n threeDotsAction_editTouch: `${TOUCHES}_ThreeDotsAction_EditTouch`,\n threeDotsAction_emailAttendees: `${TOUCHES}_ThreeDotsAction_EmailAttendees`,\n arrowToExpand: `${TOUCHES}_ArrowtoExpand`,\n funding: `${CP}_Funding`,\n contacts: `${CP}_Contacts`,\n contacts_addNewContact: ADD_NEW_CONTACT,\n primaryContactButton: `${ADD_NEW_CONTACT}_PrimaryContactButton`,\n psgFunctions: {\n psgFunction: `${ADD_NEW_CONTACT}_PSGFunction`,\n selectAllNone: `${ADD_NEW_CONTACT}_PSGFunction_SelectAllNone`,\n ceo: `${ADD_NEW_CONTACT}_PSGFunction_CEO`,\n coo: `${ADD_NEW_CONTACT}_PSGFunction_COO`,\n corporateDevelopment: `${ADD_NEW_CONTACT}_PSGFunction_CorporateDevelopment`,\n cto: `${ADD_NEW_CONTACT}_PSGFunction_CTO`,\n customerSuccessSupport: `${ADD_NEW_CONTACT}_PSGFunction_CustomerSuccessSupport`,\n executiveChairman: `${ADD_NEW_CONTACT}_PSGFunction_ExecutiveChairman`,\n finance: `${ADD_NEW_CONTACT}_PSGFunction_Finance`,\n hr: `${ADD_NEW_CONTACT}_PSGFunction_HR`,\n legal: `${ADD_NEW_CONTACT}_PSGFunction_Legal`,\n marketing: `${ADD_NEW_CONTACT}_PSGFunction_Marketing`,\n presidentCoo: `${ADD_NEW_CONTACT}_PSGFunction_PresidentCOO`,\n product: `${ADD_NEW_CONTACT}_PSGFunction_Product`,\n sales: `${ADD_NEW_CONTACT}_PSGFunction_Sales`,\n technology: `${ADD_NEW_CONTACT}_PSGFunction_Technology`,\n },\n slackChannels: {\n slackChannel: `${ADD_NEW_CONTACT}_SlackChannel`,\n selectAllNone: `${ADD_NEW_CONTACT}_SlackChannel_SelectAllNone`,\n psgCeo: `${ADD_NEW_CONTACT}_SlackChannel_PSGCEO`,\n psgCfo: `${ADD_NEW_CONTACT}_SlackChannel_PSGCFO`,\n psgExecutiveTeams: `${ADD_NEW_CONTACT}_SlackChannel_PSGExecutiveTeams`,\n psgGtm: `${ADD_NEW_CONTACT}_SlackChannel_PSGGTM`,\n psgHr: `${ADD_NEW_CONTACT}_SlackChannel_PSGHR`,\n psgTechleader: `${ADD_NEW_CONTACT}_SlackChannel_PSGTechLeader`,\n },\n portfolioExecutiveButton: `${ADD_NEW_CONTACT}_PortfolioExecutiveButton`,\n addNewEmailAddress: `${ADD_NEW_CONTACT}_AddNewEmailAddress`,\n addNewPhoneNumber: `${ADD_NEW_CONTACT}_AddNewPhoneNumber`,\n cancel: `${ADD_NEW_CONTACT}_Cancel`,\n save: `${ADD_NEW_CONTACT}_Save`,\n contacts_threeDotsAction: `${CP}_Contacts_ThreeDotsAction`,\n contacts_threeDotsAction_editContact: `${CP}_Contacts_ThreeDotsAction_EditContact`,\n lists: `${CP}_Lists`,\n lists_startDate: `${CP}_Lists_Startdate`,\n lists_dateUpdated: `${CP}_Lists_DateUpdated`,\n lists_clickCompanyName: `${CP}_Lists_ClickCompanyName`,\n news: `${CP}_News`,\n news_clickNewsIcon: `${CP}_News_ClickNewsIcon`,\n similar_companies: `${CP}_Similar_Compamies`,\n similar_companies_clickCompanyProfileLink: `${CP}__SimilarCompanies_clickCompanyProfileLink`,\n },\n};\n\nconst MMP = 'ManageMyPipeline';\n\nconst MC = 'MyCompanies';\n\nexport const TDA = 'ThreeDotsAction';\n\nexport const SS = 'SourceScrubLists';\n\nexport const MY_COMPANIES_PAGE = `${MMP}_${MC}`;\n\nexport const MY_WATCHLIST = `${MMP}_MyWatchlist`;\n\nexport const MY_WATCHLIST_ACTIONS = `${MY_WATCHLIST}_MyWatchlists_Action`;\n\nexport const SS_LIST_ACTIONS = `${SS}_SourceScrubLists_Action`;\n\nexport const SAVED_COMPANY_SEARCHES = `${MMP}_SavedCompanySearches_Threedots`;\n\nexport const TOUCH_MANAGEMENT = `${MMP}_TouchManagement`;\n\nexport const CONTACTS = 'Contacts_AllContacts';\n\nexport const ALL_REPORTS = 'AllReports_AnalystSourcingStats';\n\nexport const NT = 'NumberofTouches';\n\nexport const ALL_USERS = 'AdminPortal_AllUsers';\n\nexport const PENDO_PAGE_TRACK_NUMBER = 5;\n\nexport const PENDO_PER_PAGE_TRACK_NUMBERS = [50, 150, 500];\n\nexport const mapColumnsToActions: { [key: string]: string } = {\n title: 'ListName',\n owner_name: 'Owner',\n origin: 'Origin',\n addon_company: 'AssociatedCompany',\n date: 'DateCreated',\n modified_at: 'DateUpdated',\n startdate: 'StartDate',\n enddate: 'EndDate',\n last_refreshed_at: 'LastRefreshedDate',\n number_of_companies: '#ofCompanies',\n number_of_companies_in_et: '#ofCompaniesinET',\n number_of_companies_not_in_et: '#NotinET',\n number_of_last_touch_over_6_months: '#WOaTouch<6M',\n number_of_future_touches: '#ofFutureTouches',\n display_name: 'User',\n email: 'Email',\n last_activity: 'LastActivity',\n role: 'Role',\n status: 'Status',\n};\n\nexport const mapTouchesToActions: { [key: string]: string } = {\n '*': 'AllTouches',\n all_open_touches: 'AllOpenTouches',\n past_due: 'PastDue',\n scheduled: 'Scheduled',\n completed: 'Completed',\n};\n\nexport const mapAnalystStatsToActions = (key: string, filterKey: string): string => {\n if (filterKey === 'pipeline_companies_rank') {\n if (key === 'is_rank_of_5') {\n return 'Rankof5';\n } else {\n return 'All';\n }\n }\n\n if (filterKey === 'companies_reached_status') {\n switch (key) {\n case 'is_rank_of_5':\n return 'Rankof5';\n case 'is_first_touch':\n return 'New';\n default:\n return 'All';\n }\n }\n\n if (filterKey === 'stage_change_status') {\n switch (key) {\n case 'is_positive':\n return 'Positive';\n case 'is_negative':\n return 'Negative';\n case 'is_deal':\n return 'DealsClosed';\n default:\n return 'SelectAllNone';\n }\n }\n\n switch (key) {\n case 'is_on_time':\n return 'Completed';\n case 'is_past_due':\n return 'PastDue';\n case 'is_open':\n return 'Future';\n default:\n return 'AllTouchStatus';\n }\n};\n\nexport const transformPendoString = (input: string) => {\n return input.replace(/\\b\\w/g, char => char.toUpperCase()).replace(/\\s+/g, '');\n};\n\nexport const handleMultipleActions = (array: Array<SelectOption>, filterKey: string) => {\n let path = '#ofStageChanges';\n\n if (filterKey === 'touch_type_id') {\n path = 'NumberofTouches';\n } else if (filterKey === 'deal_stage_id') {\n path = '#ofCompaniesReached';\n }\n\n if (array.length === 12) {\n window.pendo.track(`${ALL_REPORTS}_${path}_AllStages`);\n } else if (array.length > 0) {\n array.forEach((item: SelectOption) => {\n window.pendo.track(\n `${ALL_REPORTS}_${path}_${\n item.label === 'E-mail' ? 'EmailReceived' : item.label.replace(/[\\s/]+/g, '')\n }`\n );\n });\n } else {\n window.pendo.track(`${ALL_REPORTS}_${path}_SelectAllNone`);\n }\n};\n\nexport const mapSortToActions: { [key: string]: string } = {\n 'score.asc': 'OPTXScoreDescending',\n 'score.desc': 'OPTXScoreAscending',\n 'touch_start_date.desc': 'DateNewesttoOldest',\n 'touch_start_date.asc': 'DateOldesttoNewest',\n};\n\nexport const mapContactsToActions: { [key: string]: string } = {\n source_db: 'Source',\n first_name: 'FirstName',\n last_name: 'LastName',\n title: 'Title',\n ceo_approval: 'CEOApproval',\n display_location: 'Location',\n company_name: 'Company',\n tenure_start_date: 'Tenure',\n cb_rank: 'CrunchbaseRank',\n country_code: 'CountryCode',\n state_code: 'StateCode',\n city: 'City',\n portfolio_executive: 'PortfolioExecutive',\n psg_function: 'PSGFunction',\n slack_channel: 'SlackChannel',\n};\n\nexport const mapReportTouchesToActions: { [key: string]: string } = {\n touches: 'NumberofTouches',\n companies_reached: '#ofCompaniesReached',\n stage_changes: '#ofStageChanges',\n};\n\nexport const mapStagesToActions: { [key: string]: string } = {\n '5': 'Dead',\n '4': 'IoIPresented',\n '3': 'Lead',\n '9': 'LOIPresented',\n '2': 'LOISigned',\n blank: 'None',\n '1': 'Pass',\n '8': 'PriorityCompany',\n '7': 'Priority',\n '6': 'QualifiedLead',\n '10': 'Target',\n '11': 'Track',\n '12': 'VWIA',\n};\n\nexport const ManageMyPipeline = {\n myCompanies: {\n editOwner: `${MMP}_${MC}_EditCompanyOwner`,\n editPipelineRank: `${MMP}_${MC}_EditPipelineRank`,\n editStage: `${MMP}_${MC}_EditStage`,\n numberOfEmployees: `${MMP}_${MC}_NumberOfEmployees`,\n lastFunding: `${MMP}_${MC}_LastFunding`,\n lastRaisedAmount: `${MMP}_${MC}_LastRaisedAmount`,\n totalRaised: `${MMP}_${MC}_TotalRaised`,\n revenueYear: `${MMP}_${MC}_RevenueYear`,\n },\n};\n","import { AxiosError } from 'axios';\nimport { map, Dictionary } from 'lodash';\nimport APIErrorResponse from '@models/api/ApiErrorResponse';\nimport ErrorMessage from '@models/api/ErrorMessage';\n\nconst getAPIErrors = (error: AxiosError<APIErrorResponse>) => {\n if (error.isAxiosError && error.response) {\n const response = error.response;\n\n return map<Dictionary<string>, ErrorMessage>(response.data?.errors, (value, key) => ({\n type: key,\n description: value,\n }));\n }\n\n return [];\n};\n\nexport const errorResponseFormat = (errorMessages: Array<ErrorMessage>) =>\n errorMessages.map(errorMessage => errorMessage.description).join('/n');\n\n/**\n * Get messages from API error response or normal Javascript error.\n * @param error API error or simple error.\n * @param defaultError default error to be returned if the error is not from API.\n * @param errorMessagesFormat formatter function for api error messages.\n * OBS: axios error is an extension of Error.\n */\nexport const getErrorMessage = (\n error: AxiosError<APIErrorResponse> | Error,\n defaultError: string,\n errorMessagesFormat = errorResponseFormat\n) => {\n // If is Javascript error.\n if (!(error as AxiosError).isAxiosError) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n return defaultError;\n }\n\n // API error.\n const errorMessages = getAPIErrors(error as AxiosError<APIErrorResponse, any>);\n\n if (errorMessages.length) {\n return errorMessagesFormat(errorMessages);\n }\n\n return defaultError;\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { CompanyFiltersMeta, SearchSaveResponse } from '@models/search';\nimport { FilterSource } from '@models/filters';\nimport * as types from './actionTypes';\nimport { NextSteps, AlertSettingsResponse, FormRationaleResponse } from './interfaces';\n\nexport const fetchCompanyFilters = createAction(types.FETCH_COMPANY_FILTERS);\n\nexport const fetchCompanyFiltersForNotifications = createAction(\n types.FETCH_COMPANY_FILTERS_FOR_NOTIFICATIONS\n);\n\nexport const fetchCompanyFiltersSuccess = createAction(\n types.FETCH_COMPANY_FILTERS_SUCCESS,\n (filters: Array<FilterSource>, meta: CompanyFiltersMeta) => ({\n payload: filters,\n meta,\n })\n);\n\nexport const fetchCompanyFiltersForNotificationsSuccess = createAction(\n types.FETCH_COMPANY_FILTERS_FOR_NOTIFICATIONS_SUCCESS,\n (filters: Array<FilterSource>, meta: CompanyFiltersMeta) => ({\n payload: filters,\n meta,\n })\n);\n\nexport const fetchCompanyFiltersFail = createAction<string>(types.FETCH_COMPANY_FILTERS_FAILURE);\n\nexport const fetchCompanyFiltersForNotificationsFail = createAction<string>(\n types.FETCH_COMPANY_FILTERS_FOR_NOTIFICATIONS_FAILURE\n);\n\n// This action stops saga for calling company filters when we get an authorization (401) error.\nexport const stopFetchingFilters = createAction<boolean>(types.STOP_FETCHING_FILTERS);\n\nexport const changeDefaultView = createAction<SearchSaveResponse | undefined>(\n types.CHANGE_DEFAULT_VIEW\n);\n\nexport const setFormRationales = createAction<FormRationaleResponse>(types.SET_FORM_RATIONALES);\n\nexport const setAlertSettings = createAction<AlertSettingsResponse>(types.SET_ALERT_SETTINGS);\nexport const setNextSteps = createAction<NextSteps[]>(types.SET_NEXT_STEPS);\n","export const FETCH_COMPANY_FILTERS = 'FETCH_COMPANY_FILTERS';\nexport const FETCH_COMPANY_FILTERS_SUCCESS = 'FETCH_COMPANY_FILTERS_SUCCESS';\nexport const FETCH_COMPANY_FILTERS_FAILURE = 'FETCH_COMPANY_FILTERS_FAILURE';\nexport const STOP_FETCHING_FILTERS = 'STOP_FETCHING_FILTERS';\n\nexport const FETCH_COMPANY_FILTERS_FOR_NOTIFICATIONS = 'FETCH_COMPANY_FILTERS_FOR_NOTIFICATIONS';\nexport const FETCH_COMPANY_FILTERS_FOR_NOTIFICATIONS_SUCCESS =\n 'FETCH_COMPANY_FILTERS_FOR_NOTIFICATIONS_SUCCESS';\nexport const FETCH_COMPANY_FILTERS_FOR_NOTIFICATIONS_FAILURE =\n 'FETCH_COMPANY_FILTERS_FOR_NOTIFICATIONS_FAILURE';\n\nexport const CHANGE_DEFAULT_VIEW = 'CHANGE_DEFAULT_VIEW';\n\nexport const SET_FORM_RATIONALES = 'SET_FORM_RATIONALES';\nexport const SET_NEXT_STEPS = 'SET_NEXT_STEPS';\n\nexport const SET_ALERT_SETTINGS = 'SET_ALERT_SETTINGS';\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\nimport queryString from 'query-string';\n// models\nimport { Filter, CompanyFilterColumn, FilterSource } from '@models/filters';\nimport { CompanyFiltersMeta, SearchSaveResponse } from '@models/search';\nimport Option from '@models/Option';\nimport { UserInformation } from '@optx/models/user';\n// constants\nimport { customUIViews } from '@optx/constants/table/columnDisplay/company-search';\nimport { defaultSearchType } from '@optx/features/grid/search-type/state/constants';\n// utils\nimport { mapFiltersOptions } from '@utils/filters/mapFiltersOptions';\nimport { normalizeFiltersByColumn } from '@utils/filters/normalize';\nimport { preselectedValues } from '@utils/filters/preselectedValues';\nimport { parseFilter } from '@utils/filters/parseFilters';\nimport { parseSorting } from '@utils/filters/parseSorting';\nimport { hasFilters } from '@utils/search';\n// redux\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { fetchReducer, fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport * as actions from './actions';\nimport {\n CompanyFiltersState,\n NormalizedFilters,\n FormRationaleResponse,\n NextSteps,\n AlertSettingsResponse,\n} from './interfaces';\n\nconst initialState: CompanyFiltersState = {\n data: [],\n error: '',\n loading: false,\n fetchedAt: null,\n filters: {},\n normalizedFilters: {\n location: {},\n },\n preselected: {},\n options: {},\n defaultViews: {\n data: [],\n filters: {},\n searchKey: '',\n searchType: defaultSearchType,\n sortBy: null,\n columns: null,\n columnOrder: null,\n pinnedColumns: null,\n },\n shouldNotFetch: false,\n formRationale: {},\n nextSteps: [],\n alertSettings: {},\n searchOrigin: [],\n};\n\nconst updateDefaultView = (draftState: CompanyFiltersState, payload: SearchSaveResponse) => {\n const {\n search_criteria: searchCriteria,\n columns,\n column_order: columnOrder,\n pinned_columns: pinnedColumns,\n } = payload;\n\n draftState.defaultViews.data = [payload];\n draftState.defaultViews.columns = null;\n draftState.defaultViews.columnOrder = null;\n draftState.defaultViews.pinnedColumns = null;\n draftState.defaultViews.searchKey = '';\n\n if (hasFilters(searchCriteria)) {\n const [parsedFilters] = parseFilter(searchCriteria, draftState.data);\n draftState.defaultViews.filters = parsedFilters;\n } else {\n const [parsedFilters] = parseFilter('', draftState.data);\n draftState.defaultViews.filters = parsedFilters;\n }\n\n if (/^.*query.*$/.test(searchCriteria)) {\n const data = queryString.parse(searchCriteria);\n draftState.defaultViews.searchKey = data.query as string;\n }\n\n const { sortBy } = parseSorting(searchCriteria);\n draftState.defaultViews.sortBy = sortBy.length ? sortBy : null;\n\n if (columns !== null) {\n draftState.defaultViews.columns = columns;\n\n if (columnOrder) {\n draftState.defaultViews.columnOrder = columnOrder;\n }\n }\n\n if (pinnedColumns !== null) {\n draftState.defaultViews.pinnedColumns = pinnedColumns;\n }\n};\n\n/**\n * Normalize specific filters needed in other places.\n * @param filters\n */\nfunction getNormalizedFilters(filters: Dictionary<Filter>) {\n const normalizedFilters: NormalizedFilters = { location: {} };\n\n // handle locations\n if (filters.location) {\n const locationData = filters['location' as CompanyFilterColumn].data as Array<Option<string>>;\n normalizedFilters.location = locationData.reduce<Dictionary<string>>((acumulator, option) => {\n const newAcumulator = acumulator;\n newAcumulator[option.value] = option.name!;\n\n return newAcumulator;\n }, {});\n }\n\n return normalizedFilters;\n}\n\nconst fetchCompanyFiltersSuccessReducer: CaseReducer<\n CompanyFiltersState,\n PayloadAction<Array<FilterSource>, any, CompanyFiltersMeta>\n> = (draftState, action) => {\n draftState.loading = false;\n const normalizedByColumn = normalizeFiltersByColumn(action.payload);\n // @ts-ignore for now\n draftState.filters = normalizedByColumn;\n draftState.normalizedFilters = getNormalizedFilters(normalizedByColumn);\n draftState.fetchedAt = new Date().toISOString();\n draftState.preselected = preselectedValues(action.payload);\n draftState.data = action.payload;\n draftState.searchOrigin = action.meta.searchOrigin;\n // @ts-ignore weird issue. Same type from method and model and still showing error :(.\n draftState.options = mapFiltersOptions(action.payload);\n\n if (action.meta && action.meta.defaultViews.length) {\n const {\n search_criteria: searchCriteria,\n columns,\n column_order: columnOrder,\n pinned_columns: pinnedColumns,\n } = action.meta.defaultViews[0];\n const [parsedFilters] = parseFilter(searchCriteria, action.payload);\n const { sortBy } = parseSorting(searchCriteria);\n draftState.defaultViews.data = action.meta.defaultViews;\n draftState.defaultViews.filters = parsedFilters;\n draftState.defaultViews.sortBy = sortBy.length ? sortBy : null;\n\n // related to views\n // we need to update column related settings, if the values don't come back as null\n if (columns !== null) {\n draftState.defaultViews.columns = columns;\n\n if (columnOrder) {\n draftState.defaultViews.columnOrder = columnOrder;\n }\n }\n\n if (pinnedColumns !== null) {\n draftState.defaultViews.pinnedColumns = pinnedColumns;\n }\n\n if (/^.*query.*$/.test(searchCriteria)) {\n const data = queryString.parse(searchCriteria);\n\n draftState.defaultViews.searchKey = data.query as string;\n }\n }\n};\n\nconst changeDefaultViewReducer: CaseReducer<\n CompanyFiltersState,\n PayloadAction<SearchSaveResponse | undefined>\n> = (draftState, action) => {\n if (action.payload) {\n // weird typescript issue. \"CompanyFiltersState\" type is set for draftState in this\n // reducer function and on \"updateDefaultView\" where it is being passed, yet\n // typescript is throwing an error anyway\n // @ts-ignore\n updateDefaultView(draftState, action.payload);\n } else {\n draftState.defaultViews = initialState.defaultViews;\n }\n};\n\nconst stopFetchingFiltersReducer: CaseReducer<CompanyFiltersState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.shouldNotFetch = action.payload;\n};\n\nconst fetchUserInformationSuccessReducer: CaseReducer<\n CompanyFiltersState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const customUIViewId = action.payload.settings?.default_view;\n\n if (customUIViewId) {\n // @ts-ignore\n updateDefaultView(draftState, customUIViews[customUIViewId]);\n }\n};\n\nconst setFormRationalesReducer: CaseReducer<\n CompanyFiltersState,\n PayloadAction<FormRationaleResponse>\n> = (draftState, action) => {\n draftState.formRationale = action.payload;\n};\n\nconst setNextStepsReducer: CaseReducer<CompanyFiltersState, PayloadAction<NextSteps[]>> = (\n draftState,\n action\n) => {\n draftState.nextSteps = action.payload;\n};\n\nconst setAlertSettingsReducer: CaseReducer<\n CompanyFiltersState,\n PayloadAction<AlertSettingsResponse>\n> = (draftState, action) => {\n draftState.alertSettings = action.payload;\n};\n\nconst reducer = createReducer<CompanyFiltersState>(initialState, builder =>\n builder\n .addCase(actions.fetchCompanyFilters, fetchReducer)\n .addCase(actions.fetchCompanyFiltersForNotifications, fetchReducer)\n .addCase(actions.fetchCompanyFiltersSuccess, fetchCompanyFiltersSuccessReducer)\n .addCase(actions.fetchCompanyFiltersForNotificationsSuccess, fetchCompanyFiltersSuccessReducer)\n .addCase(actions.fetchCompanyFiltersFail, fetchFailReducer)\n .addCase(actions.fetchCompanyFiltersForNotificationsFail, fetchFailReducer)\n .addCase(actions.stopFetchingFilters, stopFetchingFiltersReducer)\n .addCase(actions.changeDefaultView, changeDefaultViewReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n .addCase(actions.setFormRationales, setFormRationalesReducer)\n .addCase(actions.setAlertSettings, setAlertSettingsReducer)\n .addCase(actions.setNextSteps, setNextStepsReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest, takeLeading, select } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { FilterResponse } from '@optx/models/filters';\nimport { UserSettings } from '@optx/models/user';\n// services\nimport { FilterService } from '@services/api';\nimport NotificationService from '@optx/services/NotificationService';\n// utils\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\nimport * as actions from './actions';\n// storage\nimport { PartnerStorage } from '@optx/storage/localStorage';\n\nfunction* getCompanyFiltersSaga(action: PayloadAction) {\n const settings: UserSettings = yield select(userSelectors.getSettings);\n const isAnalyst: boolean = yield select(userSelectors.getIsAnalyst);\n const isAdmin: boolean = yield select(userSelectors.getIsAdmin);\n const isPartnerStorage = PartnerStorage.getIsPartner();\n const isPartnerSelector: boolean = yield select(userSelectors.getIsPartner);\n const isPartner = isPartnerStorage || isPartnerSelector;\n const isForNotifications = action.type === actions.fetchCompanyFiltersForNotifications.type;\n\n try {\n const res: AxiosResponse<FilterResponse> = yield call(FilterService.getOptions);\n\n if (res.data) {\n const data = {\n defaultViews: res.data.default_views,\n searchOrigin: res.data.search_origin,\n settings,\n isAnalystOrIsAdmin: isAnalyst || isAdmin,\n };\n\n if (isPartner) {\n const updatedFilters = res.data.filters[2].data.filter(\n item => item.column !== 'last_viewed_group'\n );\n res.data.filters[2].data = updatedFilters;\n }\n\n if (isForNotifications) {\n yield put(actions.fetchCompanyFiltersForNotificationsSuccess(res.data.filters, data));\n } else {\n yield put(actions.fetchCompanyFiltersSuccess(res.data.filters, data));\n }\n\n yield put(actions.setFormRationales(res.data?.forms?.rationales || {}));\n yield put(actions.setNextSteps(res.data?.forms?.next_steps?.next_step_choices || []));\n yield put(actions.setAlertSettings(res.data?.forms?.alert_settings || {}));\n } else {\n const errorMessage = 'Error fetch company filters!';\n\n if (isForNotifications) {\n yield put(actions.fetchCompanyFiltersForNotificationsFail(errorMessage));\n } else {\n yield put(actions.fetchCompanyFiltersFail(errorMessage));\n }\n\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Error fetch company filters!');\n\n if (isForNotifications) {\n yield put(actions.fetchCompanyFiltersForNotificationsFail(errorMessage));\n } else {\n yield put(actions.fetchCompanyFiltersFail(errorMessage));\n }\n\n NotificationService.error(errorMessage);\n\n if (e.response.status === 401) {\n yield put(actions.stopFetchingFilters(true));\n }\n }\n}\n\nexport default function* companyFiltersSaga() {\n yield takeLeading(actions.fetchCompanyFilters, getCompanyFiltersSaga);\n yield takeLatest(actions.fetchCompanyFiltersForNotifications, getCompanyFiltersSaga);\n}\n","import { Dictionary, each as _each, isArray } from 'lodash';\nimport moment from 'moment';\nimport { SorterResult } from 'antd/lib/table/interface';\n// models\nimport { ViewOption } from '@optx/models/search';\nimport { SelectOption } from '@optx/models/Option';\nimport Company from '@optx/models/Company';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { BaseFilter } from '@optx/models/filters';\nimport { FieldValue } from '@optx/features/company/audit-trail/state/interfaces';\nimport { typeOptionsEditFieldSingleSelect } from '@optx/features/company/edit-fields/state/interfaces';\nimport { CompanyWatchList } from '@optx/models/WatchList';\nimport { SourceScrubList } from '@optx/models/SourceScrubList';\nimport { UserManagement as UserManagementTable } from '@optx/models/UserManagement';\nimport { MultiSelectFilterColumns } from '@optx/models/feature/analystsLeaderboard/filters';\n// constants\nimport { DEFAULT_EMPTY_VALUE, NEGATIVE_SIGN } from '@optx/constants/value';\nimport { LABEL_PREFIX } from '@optx/constants/descriptions';\nimport {\n ADVANCED_SEARCH,\n MY_COMPANIES_PENDO,\n FILTER_MODAL_DATA_SOURCE_VALUES,\n FILTER_MODAL_OPTX_SCORE_VALUES,\n PaginationPendoActions,\n SUB_SECTOR_NORMALIZED_VALUES,\n DATA_SOURCES_NAMES,\n FUND_PSG_NAMES,\n STAGE_TYPE_OPTIONS,\n DIVERSITY_SPOTLIGHT_OPTIONS,\n SUB_VERTICAL_OPTIONS,\n LAST_ROUND_OPTIONS,\n} from '@optx/constants/pendoAction';\nimport {\n CP,\n PROPRIETARY_INFO,\n COMPANY_PAGE_ACTION,\n MY_WATCHLIST,\n SS,\n mapColumnsToActions,\n ALL_USERS,\n ALL_REPORTS,\n CONTACTS,\n mapStagesToActions,\n PENDO_PAGE_TRACK_NUMBER,\n PENDO_PER_PAGE_TRACK_NUMBERS,\n} from '@optx/constants/pendoActions';\nimport { MY_COMPANIES_PAGE, TDA } from '@constants/pendoActions';\n// utils\nimport { mapOptionsToLabeledValues } from '@optx/components/common/select/Select/PrefixedSelectionItem';\nimport { getLocationMainGridKey } from './grid';\n\n/**\n * normalize array of objects\n * @param {string} key the key to be used for each object\n */\nexport const normalizeData = (key: string) => {\n return (data: any, item: any) => {\n // eslint-disable-next-line no-param-reassign\n data[item[key]] = item;\n\n return data;\n };\n};\n\n/**\n * Checks if the given date is in the future.\n *\n * @param {string} date - The date to be checked.\n * @returns {boolean} Returns true if the date is in the future, false otherwise.\n */\nexport const isDateInFuture = (date: string) => {\n const currentDate = moment();\n\n return moment(date).isAfter(currentDate);\n};\n\n/**\n * Reorders a list of companies based on the similarity criteria and the current location context.\n *\n * @param {boolean | undefined} isSimilarCompanies - Flag indicating whether similar companies should be considered.\n * @param {Company[]} companies - The list of companies to be reordered.\n * @param {SelectOption<string>} similarCompanyInfo - Information about the similar company, including its ID.\n * @returns {Company[]} - The reordered list of companies, with the similar company (if found) placed at the beginning.\n *\n * This function checks if the `isSimilarCompanies` flag is true and if the current location is 'advancedSearch'.\n * If both conditions are met, it attempts to find the similar company in the provided list of companies using the ID\n * from `similarCompanyInfo`. If the similar company is found, it is placed at the beginning of the list, followed by\n * the remaining companies. If the similar company is not found, the original list of companies is returned.\n * If the `isSimilarCompanies` flag is false or the location is not 'advancedSearch', the original list of companies\n * is returned unchanged.\n */\nexport const sortSimilarCompanies = (\n isSimilarCompanies: boolean | undefined,\n companies: Company[],\n similarCompanyInfo: SelectOption<string>\n) => {\n const location = getLocationMainGridKey();\n\n if (isSimilarCompanies && location === 'advancedSearch') {\n let sortedCompaniesList: Company[] = [];\n const similarCompanyId = similarCompanyInfo?.value.split(',').pop()!;\n const similarMainCompany = companies.find(\n company => company.company_id === Number(similarCompanyId)\n );\n const filteredCompaniesList = companies.filter(\n company => company.company_id !== Number(similarCompanyId)\n );\n\n if (similarMainCompany) {\n sortedCompaniesList = [similarMainCompany!, ...filteredCompaniesList];\n } else {\n sortedCompaniesList = [...companies];\n }\n\n return sortedCompaniesList;\n }\n\n return companies;\n};\n\n/**\n * @description Normalizes a given string by replacing hyphen-minus sign with a minus sign\n *\n * @param {string} value - The string to be normalized\n *\n * @returns {string} The normalized string\n */\nexport const normalizeNegativeSignValues = (value: string) => {\n const splitedValues = value?.split('-');\n\n if (splitedValues?.some(list => list !== '')) {\n return value.split('-').join(NEGATIVE_SIGN);\n }\n\n return value;\n};\n\n/**\n * Capitalizes the first letter of each word in a given string.\n *\n * @param str - The input string to be capitalized.\n * @returns A new string with the first letter of each word capitalized.\n */\nconst capitalizeString = (str: string) => {\n const words = str.split(' ');\n const capitalizedWords = words.map(word => {\n return word.charAt(0).toUpperCase() + word.slice(1);\n });\n\n return capitalizedWords.join(' ');\n};\n\n/**\n * Sends the provided data to Pendo if it does not contain the substring 'undefined' after splitting by underscore.\n *\n * @param data - The data to be sent to Pendo\n */\nexport const sendPendoData = (data: string) => {\n if (!data.includes('undefined')) {\n window.pendo?.track(data);\n }\n};\n\n/**\n * Normalizes Pendo data for Europe by tier based on the provided filter key and filter data.\n *\n * @param filterKey - The key to be used for filtering.\n * @param currentFilter - The current filter data in the form of a dictionary.\n * @param currentNormalizedFilter - The current normalized filter data in the form of a dictionary of BaseFilter.\n * @param filterKeyObject - The object containing the filter key for reference.\n */\nconst normalizePendoDataEuropeByTier = (\n filterKey: string,\n currentFilter: Dictionary<string | (string | number)[]>,\n currentNormalizedFilter: Dictionary<BaseFilter>,\n filterKeyObject: Record<string, string>,\n filterLocation: 'AdvancedSearch' | 'ManageMyPipeline_MyCompanies'\n) => {\n if (filterKey === 'country') {\n const tierList = currentNormalizedFilter.europe_tier.data.map(\n (item: { entries: string | (string | number)[] }, index: number) => item\n );\n\n const numberOfTiersLists: number = currentNormalizedFilter.europe_tier.data.filter(\n (item: { name: string }) => item.name\n ).length;\n\n const filteredTierLists: [{ name: string }] = tierList.filter((item: any) => {\n return item.entries.every((item: { value: string }) => {\n return currentFilter[filterKey].includes(item.value);\n });\n });\n\n if (filteredTierLists.length === numberOfTiersLists) {\n sendPendoData(`${filterLocation}_${filterKeyObject.europeByTier}_SelectAllNone`);\n } else {\n filteredTierLists.forEach((_, index) => {\n sendPendoData(\n `${filterLocation}_${filterKeyObject.europeByTier}_${filteredTierLists[\n index\n ].name.replace(' ', '')}`\n );\n });\n }\n }\n};\n\n/**\n * Normalize the Pendo actions filter modal.\n *\n * @param filterKey - The key of the filter.\n * @param filterValue - The value of the filter, which can be a string or an array of strings or numbers.\n * @param currentFilter - The current filter as a dictionary of strings or arrays of strings or numbers.\n * @param currentNormalizedFilter - The current normalized filter as a dictionary of BaseFilter objects.\n * @param filterKeyObject - An object containing filter keys and their corresponding values.\n * @param isSecondaryQuickFilter - A boolean indicating whether the filter is a secondary quick filter.\n *\n * @returns void\n */\nexport const normalizePendoActionsFilterModal = (\n filterKey: string,\n filterValue: string | (string | number)[],\n currentFilter: Dictionary<string | (string | number)[]>,\n currentNormalizedFilter: Dictionary<BaseFilter>,\n filterKeyObject: Record<string, string>,\n isSecondaryQuickFilter: boolean,\n isMyCompanies?: boolean\n) => {\n let isSendPendoDataCalled = false;\n const filterLocation = isMyCompanies ? MY_COMPANIES_PENDO : ADVANCED_SEARCH;\n\n if (isArray(filterValue)) {\n filterValue.forEach(value => {\n if (filterKey === 'score_lower') {\n if (typeof value === 'number') {\n const scoreValues = ['Minimum', 'Maximum'];\n\n scoreValues.forEach((_, index) => {\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}${scoreValues[index]}`);\n });\n } else {\n sendPendoData(\n `${filterLocation}_${filterKeyObject[filterKey]}${FILTER_MODAL_OPTX_SCORE_VALUES[value]}`\n );\n }\n }\n\n if (filterKey === 'pipeline_rank') {\n const normalizedValue = value === 'blank' ? 'Blank' : value;\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}${normalizedValue}`);\n }\n\n if (filterKey === 'sw_website_rank_per_country') {\n let normalizedValue;\n const listOfValues = ['1_10000', '10000_49999', '50000_99999', '100000_200000', 'blank'];\n\n if (!listOfValues.includes(value.toString())) {\n normalizedValue = 'CustomRange';\n } else {\n normalizedValue =\n value === '1_10000'\n ? '<10000'\n : value.toString().charAt(0).toUpperCase() +\n value.toString().slice(1).replace('_', '');\n }\n\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}${normalizedValue}`);\n }\n\n if (filterKey === 'sw_website_rank_lower') {\n let normalizedValue;\n const defautValues: Record<number, string> = {\n 0: '<10000',\n 10000: '1000049999',\n 50000: '5000099999',\n 100000: '100000200000',\n 200000: '2000001000000',\n 1000000: 'BlankOr>1000000',\n };\n\n if (defautValues[value as number]) {\n normalizedValue = defautValues[value as number];\n } else {\n normalizedValue = 'CustomRange';\n }\n\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}${normalizedValue}`);\n }\n\n if (filterKey === 'url_status') {\n const defaultValues: Record<string, string> = {\n active: 'Active',\n 'not active': 'NotActive',\n };\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}${defaultValues[value]}`);\n }\n\n if (filterKey === 'is_interesting') {\n const defaultValues: Record<number | string, string> = {\n 1: 'Yes',\n 0: 'No',\n blank: 'Unknown',\n };\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}${defaultValues[value]}`);\n }\n\n if (filterKey === 'is_on_linkedin') {\n const defaultValues: Record<number | string, string> = {\n 1: 'Yes',\n 0: 'No',\n };\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}${defaultValues[value]}`);\n }\n\n if (\n filterKey === 'g2_rating_lower' ||\n filterKey === 'g2_review_count_lower' ||\n filterKey === 'ct_rating_lower' ||\n filterKey === 'cb_rank_lower' ||\n filterKey === 'last_rev_update_amount_lower' ||\n filterKey === 'ebitda_numeric_lower' ||\n filterKey === 'last_valuation_lower' ||\n filterKey === 'last_raised_amount_lower'\n ) {\n let normalizedValue;\n const defaultRangeValues = ['Minimum', 'Maximum'];\n\n if (filterKey === 'cb_rank_lower') {\n normalizedValue = value === 'not_blank' ? 'ExcludeUnranked' : defaultRangeValues;\n } else {\n normalizedValue = value === 'not_blank' ? 'ExcludeUnknown' : defaultRangeValues;\n }\n\n if (isArray(normalizedValue)) {\n defaultRangeValues.forEach((item, index) => {\n sendPendoData(\n `${filterLocation}_${filterKeyObject[filterKey]}${defaultRangeValues[index]}`\n );\n });\n } else {\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}${normalizedValue}`);\n }\n }\n\n if (filterKey === 'num_employees_lower' || filterKey === 'capital_raised_lower') {\n let normalizedValue;\n const defaultRangeValues = ['Minimum', 'Maximum'];\n\n if (typeof value === 'number') {\n defaultRangeValues.forEach(item => {\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_${item}`);\n });\n } else {\n normalizedValue = value === 'blank' ? 'UnknownOnly' : 'ExcludeUnknown';\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_${normalizedValue}`);\n }\n }\n\n if (\n filterKey === 'emp_growth_percent_lower' ||\n filterKey === 'job_openings_lower' ||\n filterKey === 'job_openings_percent_lower'\n ) {\n let normalizedValue;\n const defaultRangeValues = ['Minimum', 'Maximum'];\n\n if (typeof value === 'number') {\n defaultRangeValues.forEach(item => {\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_${item}`);\n });\n } else {\n normalizedValue = 'ExcludeUnknown';\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_${normalizedValue}`);\n }\n }\n\n if (\n new Set([\n 'sub_sector',\n 'sector',\n 'opportunity_type',\n 'company_type',\n 'stage',\n 'stage_type',\n 'diversity',\n 'sub_vertical',\n 'lead_source',\n 'completed_touch',\n 'schedule_touch',\n 'fund',\n 'next_steps',\n 'last_round',\n ]).has(filterKey)\n ) {\n // eslint-disable-next-line no-useless-escape\n const regex = /[\\/'\\-\\s]/g;\n let normalizedValue = value.toString().replace(regex, '');\n\n if (\n currentFilter[filterKey].length === currentNormalizedFilter[filterKey].data.length &&\n !isSendPendoDataCalled\n ) {\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_SelectAllNone`);\n isSendPendoDataCalled = true;\n } else if (\n currentFilter[filterKey].length !== currentNormalizedFilter[filterKey].data.length\n ) {\n if (filterKey === 'sub_sector' || filterKey === 'sector') {\n normalizedValue =\n value === 'blank'\n ? 'Unknown'\n : SUB_SECTOR_NORMALIZED_VALUES[normalizedValue] || normalizedValue;\n } else if (filterKey === 'completed_touch' || filterKey === 'schedule_touch') {\n normalizedValue = value === 'blank' ? 'NoTouches' : normalizedValue;\n } else if (filterKey === 'next_steps' || filterKey === 'lead_source') {\n normalizedValue = value === 'blank' ? 'None' : normalizedValue;\n } else if (filterKey === 'opportunity_type') {\n normalizedValue =\n normalizedValue === 'AccountingFirm' ? 'AccountFirm' : normalizedValue;\n } else if (filterKey === 'company_type') {\n normalizedValue = normalizedValue === 'Other(Retired)' ? 'Other' : normalizedValue;\n } else if (filterKey === 'fund') {\n normalizedValue = FUND_PSG_NAMES[normalizedValue.replace(' ', '')] || normalizedValue;\n } else if (filterKey === 'stage_type') {\n normalizedValue = STAGE_TYPE_OPTIONS[normalizedValue] || normalizedValue;\n } else if (filterKey === 'diversity') {\n normalizedValue = DIVERSITY_SPOTLIGHT_OPTIONS[normalizedValue] || normalizedValue;\n } else if (filterKey === 'sub_vertical') {\n normalizedValue = SUB_VERTICAL_OPTIONS[normalizedValue] || normalizedValue;\n } else if (filterKey === 'last_round') {\n normalizedValue = LAST_ROUND_OPTIONS[normalizedValue] || normalizedValue;\n }\n\n sendPendoData(\n `${filterLocation}_${filterKeyObject[filterKey]}_${capitalizeString(normalizedValue)}`\n );\n }\n }\n\n if (filterKey === 'country' || filterKey === 'state' || filterKey === 'city') {\n if (!isSendPendoDataCalled) {\n normalizePendoDataEuropeByTier(\n filterKey,\n currentFilter,\n currentNormalizedFilter,\n filterKeyObject,\n filterLocation\n );\n\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}`);\n isSendPendoDataCalled = true;\n }\n }\n\n if (filterKey === 'geo_range') {\n if (!isSendPendoDataCalled) {\n const secondaryQuickFiltersKeys = ['Country', 'PostalCode', 'Range'];\n\n if (isSecondaryQuickFilter) {\n secondaryQuickFiltersKeys.forEach(item => {\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_${item}`);\n });\n } else {\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}`);\n }\n\n isSendPendoDataCalled = true;\n }\n }\n\n if (filterKey === 'year_founded_lower') {\n const defaultValues: Record<string, string> = {\n blank: 'UnknownOnly',\n not_blank: 'ExcludeUnknown',\n };\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_${defaultValues[value]}`);\n }\n\n if (filterKey === 'product_category') {\n if (!isSendPendoDataCalled) {\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}`);\n isSendPendoDataCalled = true;\n }\n }\n\n if (filterKey === 'source_tag_filter') {\n const dataSourceFilterKey = value.toString().split('-');\n const dataSourceFilterValue = `${dataSourceFilterKey[1]}-${dataSourceFilterKey[2]}`;\n\n if (filterKeyObject[filterKey] && DATA_SOURCES_NAMES[dataSourceFilterKey[0]]) {\n sendPendoData(\n `${filterLocation}_${filterKeyObject[filterKey]}_${\n DATA_SOURCES_NAMES[dataSourceFilterKey[0]]\n }_${FILTER_MODAL_DATA_SOURCE_VALUES[dataSourceFilterValue]}`\n );\n } else {\n sendPendoData(\n `${filterLocation}_${filterKeyObject[dataSourceFilterKey[0]]}_${\n FILTER_MODAL_DATA_SOURCE_VALUES[dataSourceFilterValue]\n }`\n );\n }\n\n isSendPendoDataCalled = true;\n }\n\n if (filterKey === 'stage_type_date') {\n const defaultValues: Record<string, string> = {\n '1_0': 'InLastMonth',\n '3_1': '2or3Months',\n '6_3': '4or6Months',\n '12_6': '7or12Months',\n '120_12': '1+year',\n blank: 'Never',\n };\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_${defaultValues[value]}`);\n isSendPendoDataCalled = true;\n }\n\n if (filterKey === 'completed_touch_type_date') {\n const defaultValues: Record<string, string> = {\n '0_-1': 'InCurrentMonth',\n '1_0': 'InLastMonth',\n '3_1': '2or3Months',\n '6_3': '4or6Months',\n '12_6': '7or12Months',\n '120_12': '1+year',\n blank: 'Never',\n };\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_${defaultValues[value]}`);\n isSendPendoDataCalled = true;\n }\n\n if (filterKey === 'schedule_touch_type_date') {\n const defaultValues: Record<string, string> = {\n 'day_-120_day_0': 'PastDue',\n month_0_month_1: 'ThisMonth',\n month_1_month_2: 'NextMonth',\n month_2_month_6: 'Next3or6Months',\n month_6_month_120: '6+months',\n blank: 'NotScheduled',\n };\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_${defaultValues[value]}`);\n isSendPendoDataCalled = true;\n }\n\n if (filterKey === 'addon') {\n const normalizedValue = value === 'blank' ? 'None' : value;\n sendPendoData(`${filterLocation}_${filterKeyObject[filterKey]}_${normalizedValue}`);\n isSendPendoDataCalled = true;\n }\n });\n } else {\n if (\n filterKey === 'is_software' ||\n filterKey === 'is_company_reviewed' ||\n filterKey === 'has_date_presented'\n ) {\n const defaultValues: Record<number | string, string> = {\n 1: 'Yes',\n 0: 'No',\n 'Show all companies': 'ShowAllCompanies',\n };\n\n sendPendoData(\n `${filterLocation}_${filterKeyObject[filterKey]}_${defaultValues[filterValue as string]}`\n );\n isSendPendoDataCalled = true;\n }\n\n if (filterKey === 'is_software_verified') {\n const defaultValues: Record<number | string, string> = {\n 1: 'Verified',\n 0: 'NotVerified',\n 'Show all companies': 'ShowAllCompanies',\n };\n sendPendoData(\n `${filterLocation}_${filterKeyObject[filterKey]}_${defaultValues[filterValue as string]}`\n );\n }\n\n if (filterKey === 'has_parent') {\n const defaultValues: Record<number | string, string> = {\n 1: 'Yes',\n 0: 'No',\n 'Show all': 'ShowAll',\n };\n sendPendoData(\n `${filterLocation}_${filterKeyObject[filterKey]}_${defaultValues[filterValue as string]}`\n );\n isSendPendoDataCalled = true;\n }\n\n if (filterKey === 'is_in_business' || filterKey === 'active') {\n const defaultValues: Record<number | string, string> = {\n 1: 'Yes',\n 0: 'No',\n 'Show all companies': 'ShowAllCompanies',\n };\n sendPendoData(\n `${filterLocation}_${filterKeyObject[filterKey]}_${defaultValues[filterValue as string]}`\n );\n isSendPendoDataCalled = true;\n }\n\n if (filterKey === 'ebitda_string') {\n const valuesArr = filterValue.split(',');\n\n valuesArr.forEach(value => {\n sendPendoData(\n `${filterLocation}_${filterKeyObject[filterKey]}_${capitalizeString(value as string)}`\n );\n });\n }\n }\n};\n\n/**\n * Filters the list of filters and normalizes them using the provided parameters.\n *\n * @param listOfFilters - A dictionary containing the list of filters to be processed.\n * @param normalizedFilters - A dictionary containing the normalized filters.\n * @param filterKeyObject - An object containing the filter keys.\n * @param isSecondaryQuickFilter - A boolean indicating whether it is a secondary quick filter.\n */\nexport const pendoActionsFilterModal = (\n listOfFilters: Dictionary<string | (string | number)[]>,\n normalizedFilters: Dictionary<BaseFilter>,\n filterKeyObject: Record<string, string>,\n isSecondaryQuickFilter: boolean,\n isMyCompanies?: boolean\n) => {\n let filtersList = listOfFilters;\n\n if (!('is_software' in listOfFilters) && !isSecondaryQuickFilter) {\n filtersList = {\n ...filtersList,\n is_software: 'Show all companies',\n };\n }\n\n if (!('is_software_verified' in listOfFilters) && !isSecondaryQuickFilter) {\n filtersList = {\n ...filtersList,\n is_software_verified: 'Show all companies',\n };\n }\n\n Object.entries(filtersList).forEach(([key, value], index) => {\n normalizePendoActionsFilterModal(\n key,\n value,\n listOfFilters,\n normalizedFilters,\n filterKeyObject,\n isSecondaryQuickFilter,\n isMyCompanies\n );\n });\n};\n\n/**\n * Normalizes the view columns based on the default score value\n *\n * @param {ViewOption} viewData - The view data\n * @param {string} defaultScoreValue - The default score value\n * @returns {Object} - An object containing the validated columns and the validated columns order\n */\nexport const normalizeViewsColumns = (viewData: ViewOption, defaultScoreValue: string) => {\n let validatedColumns = null;\n let validatedColumnsOrder = null;\n\n if (defaultScoreValue === 'us') {\n validatedColumns = viewData.columns\n ? viewData.columns\n .split(',')\n .filter(column => column !== 'il_optx_score' && column !== 'date_matched')\n .join(',')\n : null;\n validatedColumnsOrder = viewData.column_order\n ? viewData.column_order\n .split(',')\n .filter(column => column !== 'il_optx_score' && column !== 'date_matched')\n .join(',')\n : null;\n } else if (defaultScoreValue === 'il') {\n validatedColumns = viewData.columns\n ? viewData.columns\n .split(',')\n .filter(column => column !== 'score' && column !== 'date_matched')\n .join(',')\n : null;\n validatedColumnsOrder = viewData.column_order\n ? viewData.column_order\n .split(',')\n .filter(column => column !== 'score' && column !== 'date_matched')\n .join(',')\n : null;\n }\n\n return {\n validatedColumns,\n validatedColumnsOrder,\n };\n};\n\n/**\n * returns the sur name of a full name\n * @param value term to be checked\n * @param typeOptions typeOptions of EditFieldSingleSelect\n */\n\nexport const checkSurName = (value: FieldValue, typeOptions: typeOptionsEditFieldSingleSelect) => {\n if (typeOptions === 'Company Owner' && typeof value === 'string') {\n return value?.split(' ').pop() || value;\n }\n\n return value;\n};\n\n/**\n * normalizeCommaValues\n *\n * @description Normalizes an array of strings by sorting them alphabetically and joining them with a comma\n *\n * @param {string[]} values - The array of strings to normalize\n *\n * @returns {string} - The normalized string\n */\nexport const normalizeCommaValues = (values: string[]) => {\n const spreadValues = [...values];\n const noramalizedValues = spreadValues.sort((a, b) =>\n a.toLowerCase().localeCompare(b.toLowerCase())\n );\n\n return noramalizedValues.join(', ');\n};\n\n/**\n * Used on async multiselect select\n * function used to remove empty spaces and unwanted commas\n * @param value value to be formatted\n */\n\nexport const formattingSquareBrackets = (value: string) => {\n if (value === '[, ]') {\n return '';\n }\n\n const valueSplited = value.split('');\n\n if (valueSplited[1] === ',') {\n return value.replace(',', '').replace(' ', '');\n }\n\n return value;\n};\n\n/**\n * Used to format analyst Names with commas or show All with the param is not array of String\n * @param analystNames list of Analyst Names\n */\n\nexport const getAnalystNames = (analystNames?: string[]) => {\n const listOfAnalystNames = analystNames?.sort((a, b) => a.localeCompare(b));\n\n if (analystNames?.length === 0) {\n return 'Any';\n }\n\n return listOfAnalystNames?.join(', ');\n};\n\n/**\n * Used on virtualized tables\n * Checks if there is overflow. Needed to hide scroll wrapper when there is not.\n * @param {string | undefined} el HTML element of external scroll\n */\nexport function checkOverflow(el: Element | null) {\n if (el) {\n const tableBody = document.getElementsByClassName('ant-table-body')[0];\n const tableBodyHeight = tableBody.clientHeight;\n const tableHeaderHeight = document.getElementsByClassName('ant-table-header')[0].clientHeight;\n const tableContentParentHeight = tableBody.parentElement?.clientHeight || 0;\n const tableContentHeight = tableBodyHeight + tableHeaderHeight;\n const heightDifference = tableContentParentHeight - tableContentHeight;\n\n return heightDifference;\n }\n\n return null;\n}\n\n/**\n * updateContacts updates the contact data of a person in the given array of contacts\n * @param {CompanyUserContact[]} tempDataContacts - array of contact data\n * @param {number} personId - id of the person to update\n * @param {string|null} tenureEndDate - end date of the tenure\n * @param {string|null} tenureStartDate - start date of the tenure\n * @returns {CompanyUserContact[] | null} - updated contact data or null if person not found\n */\nexport const updateContacts = (\n tempDataContacts: CompanyUserContact[],\n personId: number,\n tenureEndDate: string | null,\n tenureStartDate: string | null\n): CompanyUserContact[] | null => {\n const isInContacts = tempDataContacts.find(contact => contact.person_id === personId);\n\n if (isInContacts) {\n const updatedContacts = tempDataContacts.map(contact => {\n if (contact.person_id === personId) {\n return {\n ...contact,\n tenure_end_date: tenureEndDate,\n tenure_start_date: tenureStartDate,\n };\n }\n\n return contact;\n });\n\n return updatedContacts;\n }\n\n return null;\n};\n\n/**\n * Maps description options to select options with labels and values.\n *\n * @param descriptions - A dictionary of descriptions to be mapped.\n * @returns {SelectOption[]} An array of select options with labels and values.\n */\nexport const mapDescriptionOptions = (descriptions: Dictionary<string> = {}) => {\n const newOptions: Array<SelectOption> = [];\n\n _each(descriptions, (description, key) => {\n newOptions.push({\n label: key === 'AI' ? 'Generated' : key,\n value: key,\n });\n });\n\n return mapOptionsToLabeledValues(LABEL_PREFIX, newOptions);\n};\n\n/**\n * Get the text for Tooltip components.\n *\n * @param valueList - A string list containing the options\n * @returns A string containing either the list concatenated,\n * or the default value for when list is empty\n */\nexport const getTooltipText = (valueList?: string[]) => {\n return valueList?.length ? normalizeCommaValues(valueList) : DEFAULT_EMPTY_VALUE;\n};\n\n/**\n * Create dynamic action name for Pendo with year and type.\n *\n * @param year - Year of the company\n * @param type - Type of the company\n * @returns A string\n */\nexport const companyPageProprietaryInfo = (year: number, type: string) => {\n if (year && type) {\n return `${CP}_${PROPRIETARY_INFO}${year}${type}`;\n }\n};\n\n/**\n * Create the action name for Pendo,\n * removes space between words, converts to lowercase and capitalizes the first letter of the second word.\n * @param action - action\n * @returns A string\n */\nexport const createPendoActions = (action: string): string => {\n const words = action.split(' ');\n\n // Convert the first word to lowercase\n words[0] = words[0].toLowerCase();\n\n // Convert the first letter of the second word to uppercase\n if (words.length > 1) {\n words[1] = words[1].charAt(0).toUpperCase() + words[1].slice(1).toLowerCase().replace('/', '');\n }\n\n return words.join('');\n};\n\n/**\n * Generates a Pendo action string based on the provided action.\n * @param {string} action - The action to generate the Pendo action string for.\n * @returns {string} The generated Pendo action string.\n */\nexport const handlePendoAction = (action: string): string => {\n if (window.location.pathname === '/my-companies') {\n return `${MY_COMPANIES_PAGE}_${TDA}_${action}`;\n } else if (window.location.pathname === '/search' || window.location.pathname === '/') {\n return `${ADVANCED_SEARCH}_${TDA}_${action}`;\n } else {\n return `${COMPANY_PAGE_ACTION}_${action}`;\n }\n};\n\n/**\n * Tracks user actions on the \"My Companies\" page using Pendo.\n * @param {string} action - The specific action performed by the user that needs to be tracked.\n */\nexport const trackMyCompaniesPendoActions = (action: string) => {\n if (window.location.pathname === '/my-companies') {\n window.pendo.track(`${MY_COMPANIES_PAGE}_${TDA}_${action}`);\n }\n};\n\n/**\n * Tracks user actions on the \"My Watchlist\" feature using Pendo.\n *\n */\nexport const trackMyWatchlistPendoActios = (\n column: SorterResult<CompanyWatchList> | SorterResult<CompanyWatchList>[]\n) => {\n const field = Array.isArray(column) ? column[0].field : column.field;\n\n if (typeof field === 'string') {\n window.pendo.track(`${MY_WATCHLIST}_MyWatchlists_${mapColumnsToActions[field]}`);\n }\n};\n\n/**\n * Tracks user actions on the \"Source Scrub Lists\" feature using Pendo.\n *\n */\nexport const trackSSlistPendoActions = (\n column: SorterResult<SourceScrubList> | SorterResult<SourceScrubList>[]\n) => {\n const field = Array.isArray(column) ? column[0].field : column.field;\n\n if (typeof field === 'string') {\n window.pendo.track(`${MY_WATCHLIST}_${SS}_${mapColumnsToActions[field]}`);\n }\n};\n\n/**\n * Tracks user actions on the \"Users\" feature using Pendo.\n *\n */\nexport const trackUsersPendoActios = (\n column: SorterResult<UserManagementTable> | SorterResult<UserManagementTable>[]\n) => {\n const field = Array.isArray(column) ? column[0].field : column.field;\n\n if (typeof field === 'string') {\n window.pendo.track(`${ALL_USERS}_${mapColumnsToActions[field]}`);\n }\n};\n\n/**\n * Capitalizes the first letter of a given string.\n *\n * @param {string} word - The string whose first letter is to be capitalized.\n * @returns {string} The input string with its first letter capitalized.\n *\n */\nexport const capitalizeFirstLetter = (word: string) => {\n if (word === 'rankType') {\n return 'Rank';\n }\n\n return word.charAt(0).toUpperCase() + word.slice(1);\n};\n\n/**\n * Tracks email copy actions on specific pages using Pendo.\n *\n */\nexport const trackCopyEmailPendoActions = () => {\n if (window.location.pathname === '/contacts') {\n window.pendo.track(`${CONTACTS}_CopyContactEmail`);\n }\n\n if (window.location.pathname === '/admin/users') {\n window.pendo.track(`${ALL_USERS}_Email_CopyEmail`);\n }\n};\n\nexport const trackAnalystPendoActions = (\n filterKey: MultiSelectFilterColumns | undefined,\n action: string | undefined\n) => {\n if (!action) {\n switch (filterKey) {\n case 'touch_type_id':\n window.pendo.track(`${ALL_REPORTS}_NumberofTouches_SelectAllNone`);\n break;\n\n case 'deal_stage_id':\n window.pendo.track(`${ALL_REPORTS}_#ofCompaniesReached_All`);\n break;\n\n case 'past_stage_id':\n window.pendo.track(`${ALL_REPORTS}_#ofStageChanges_AllStages`);\n break;\n }\n }\n\n if (action) {\n switch (filterKey) {\n case 'touch_type_id':\n window.pendo.track(`${ALL_REPORTS}_NumberofTouches_${action.replace(/\\s/g, '')}`);\n break;\n\n case 'deal_stage_id':\n window.pendo.track(`${ALL_REPORTS}_#ofCompaniesReached_${mapStagesToActions[action]}`);\n break;\n\n case 'past_stage_id':\n window.pendo.track(`${ALL_REPORTS}_#ofStageChanges_${mapStagesToActions[action]}`);\n break;\n }\n }\n};\n\n/**\n * Creates and sends a Pendo action based on the specified grid name.\n *\n * @param sendPendoData - A callback function that sends Pendo data. It takes a string as an argument.\n * @param gridName - The name of the grid where the action is being performed. It can be one of the following:\n * 'Lists', 'My Companies', or 'Advanced Search'.\n * @param pendoData - The Pendo data to be sent if the grid name is 'Advanced Search'.\n *\n * @remarks\n * This function will only send the Pendo data if the grid name is 'Advanced Search'. For other grid names,\n * the function will not perform any action.\n */\nexport const createSendPendoAction = (\n sendPendoData: (data: string) => void,\n gridName: 'Lists' | 'My Companies' | 'Advanced Search',\n pendoData: string\n) => {\n if (gridName === 'Advanced Search') {\n sendPendoData(pendoData);\n }\n};\n\n/**\n * Tracks pagination actions in Pendo for specified grids.\n *\n * This function sends tracking events to Pendo based on the pagination value and the grid name.\n * It supports both action click on page number and on arrow/double arrow sign.\n *\n * @param {number | PaginationPendoActions} value - The pagination value or action to be tracked.\n * @param {'myCompanies' | 'Contacs'} gridName - The name of the grid for which the pagination action is being tracked.\n *\n */\nexport const trackPendoPagination = (\n value: number | PaginationPendoActions,\n gridName: 'myCompanies' | 'contacts' | 'advancedSearch'\n) => {\n if (typeof value === 'number' && value <= PENDO_PAGE_TRACK_NUMBER) {\n if (gridName === 'myCompanies') {\n window.pendo.track(`${MY_COMPANIES_PAGE}_BottomRibbon_${value}`);\n }\n\n if (gridName === 'contacts') {\n window.pendo.track(`${CONTACTS}_BottomRibbon_${value}`);\n }\n\n if (gridName === 'advancedSearch') {\n window.pendo.track(`${ADVANCED_SEARCH}_BottomRibbon_${value}`);\n }\n }\n\n if (typeof value === 'number' && PENDO_PER_PAGE_TRACK_NUMBERS.includes(value)) {\n if (gridName === 'advancedSearch') {\n window.pendo.track(`${ADVANCED_SEARCH}_BottomRibbon_${value}`);\n }\n }\n\n if (typeof value !== 'number') {\n if (gridName === 'myCompanies') {\n window.pendo.track(`${MY_COMPANIES_PAGE}_${value}`);\n }\n\n if (gridName === 'advancedSearch') {\n window.pendo.track(`${ADVANCED_SEARCH}_${value}`);\n }\n\n if (gridName === 'contacts') {\n window.pendo.track(`${CONTACTS}_${value}`);\n }\n }\n};\n\n/**\n * Transforms a given string for Pendo action by:\n * - Replacing hyphens and spaces with underscores.\n * - Converting the entire string to lowercase.\n * - Applying camelCase transformation by converting underscores followed by a lowercase letter to an uppercase letter.\n *\n * @param {string} str - The string to be transformed.\n * @returns {string} The transformed string in camelCase format.\n */\nexport const transformStringForActionPendo = (str: string): string => {\n return str\n .replace(/[-\\s/]/g, '_')\n .toLowerCase()\n .replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n};\n","export const LABEL_PREFIX = 'Description: ';\n","/* eslint-disable max-len */\nimport { Dictionary, each, isEqual } from 'lodash';\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport queryString from 'query-string';\n// services\nimport NotificationService from '@services/NotificationService';\n// constants\nimport appRoutes from '@constants/routes';\nimport { searchTypeKey } from '@optx/features/grid/search-type/state/constants';\nimport { FINANCIAL_YEARS, SEARCH_MINIMUM_CHAR_COUNT } from '@constants/search';\nimport { customUIViewIds, customUIViews } from '@constants/table/columnDisplay/company-search';\nimport {\n COMPANY_DEFAULT_SORT,\n MYCOMPANIES_DEFAULT_SORT_IL,\n MYCOMPANIES_DEFAULT_SORT_US,\n} from '@constants/table/sort/defaultSort';\nimport SORT_ORDER from '@constants/table/sortOrder';\n// models\nimport { PageInfo } from '@models/table/Pagination';\nimport { CustomUIViewIds } from '@optx/models/user';\nimport { SortByRule } from '@models/table/sorting';\nimport Company from '@models/Company';\nimport { PreselectedFilter, BaseFilter } from '@models/filters';\nimport { SearchSave, SearchType } from '@models/search';\nimport {\n SelectOption,\n LogicOption,\n FormCheckableRangeOption,\n FormCheckboxOption,\n} from '@optx/models/Option';\n// utils\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\nimport { validateMinChars } from '@utils/validation';\nimport { removeColumnFromString } from '@utils/columns';\n\ninterface SearchCounterPayload {\n query?: string;\n [k: string]: any;\n}\n\ninterface SearchPayload extends SearchCounterPayload {\n per_page?: number;\n page?: number;\n column_name?: string;\n analyst_id?: string | number;\n sort_fields?: Array<string>;\n sort_orders?: Array<string>;\n}\n\n/**\n * Map search data to API query data.\n * @param searchData\n */\nexport const mapSearchQuery = (\n searchData: SearchPayloadRequest,\n includePagination = true,\n performanceTesting?: string | null,\n hasCustomColumnYears = true\n) => {\n const {\n pagination: { pageNumber, pageSize },\n sortBy,\n filter,\n searchKey,\n searchType,\n tableGridQuery,\n sourcingOutReachColumnName,\n analystId,\n perMultiplePages,\n perPage,\n } = searchData;\n const payload: SearchPayload = {};\n\n // if function is used for checking filters against\n // saved searches don't include the pagination\n if (includePagination) {\n payload.per_page = pageSize;\n payload.page = pageNumber;\n }\n\n if (hasCustomColumnYears) {\n payload.arr_years = FINANCIAL_YEARS;\n payload.ebitda_years = FINANCIAL_YEARS;\n payload.growth_years = FINANCIAL_YEARS;\n }\n\n if (performanceTesting != null) {\n payload.useormpagination = true;\n }\n\n if (tableGridQuery) {\n const parsedGridQuery = queryString.parse(tableGridQuery);\n\n const parsedGridValues = Object.values(parsedGridQuery);\n\n Object.keys(parsedGridQuery).forEach((key, index) => {\n if (key === 'analyst_name') {\n return;\n }\n\n if (key === 'touch_type' || key === 'so_stage' || key === 'company_owner_id') {\n payload[key] = parsedGridValues[index]?.toString().split(',');\n } else {\n payload[key] = parsedGridValues[index];\n }\n });\n }\n\n if (sourcingOutReachColumnName) {\n payload.column_name = sourcingOutReachColumnName;\n }\n\n if (analystId === '' || analystId) {\n payload.analyst_id = analystId;\n }\n\n // map sort\n if (sortBy && sortBy.length) {\n const sortFields: Array<string> = [];\n const sortOrders: Array<string> = [];\n\n searchData.sortBy.forEach(sortRule => {\n sortFields.push(sortRule.id);\n sortOrders.push(sortRule.desc ? SORT_ORDER.DESCENDING : SORT_ORDER.ASCENDING);\n });\n\n payload.sort_fields = sortFields;\n payload.sort_orders = sortOrders;\n }\n\n Object.keys(filter).forEach(key => {\n if (key === 'last_touch_initiator') {\n payload[`${key}_id`] = filter[key];\n } else {\n payload[key] = filter[key];\n }\n });\n\n // map search key based on searchType\n if (searchKey) {\n payload[searchTypeKey[searchType]] = searchKey;\n }\n\n if (typeof searchData?.searchOrigin === 'number') {\n payload.search_origin = searchData.searchOrigin;\n }\n\n // add list ID in payload\n if (searchData.list_id) {\n payload.list_id = searchData.list_id;\n }\n\n if (perMultiplePages) {\n payload.per_multiple_pages = perMultiplePages;\n payload.per_page = perPage;\n }\n\n return payload;\n};\n\n/**\n * Map sorting to API query data.\n * @param sortBy\n */\nexport const mapSortQuery = (sortBy: Array<SortByRule<any>>) => {\n const payload: SearchPayload = {};\n\n // map sort\n if (sortBy && sortBy.length) {\n const sortFields: Array<string> = [];\n const sortOrders: Array<string> = [];\n\n sortBy.forEach(sortRule => {\n sortFields.push(sortRule.id);\n sortOrders.push(sortRule.desc ? SORT_ORDER.DESCENDING : SORT_ORDER.ASCENDING);\n });\n\n payload.sort_fields = sortFields;\n payload.sort_orders = sortOrders;\n }\n\n return payload;\n};\n\n/**\n * Map pagination to API query data.\n * @param pagination\n */\nexport const mapPaginationQuery = (pagination: PageInfo) => {\n const payload: SearchPayload = {};\n\n // map pagination\n if (pagination) {\n payload.per_page = pagination.pageSize;\n payload.page = pagination.pageNumber;\n }\n\n return payload;\n};\n\nexport const mapSearchCounterQuery = (\n searchKey: string,\n searchType: string,\n filter: Dictionary<undefined | string | Array<string | number>>,\n sourcingOutReachAnalystId?: string | number,\n sourcingOutReachColumnName?: string,\n listType?: string\n) => {\n const payload: SearchCounterPayload = {};\n\n Object.keys(filter).forEach(key => {\n if (key === 'last_touch_initiator') {\n payload[`${key}_id`] = filter[key];\n } else {\n payload[key] = filter[key];\n }\n });\n\n if (sourcingOutReachAnalystId !== undefined) {\n payload.analyst_id = sourcingOutReachAnalystId;\n }\n\n if (sourcingOutReachColumnName) {\n payload.column_name = sourcingOutReachColumnName;\n }\n\n // map search key\n if (searchKey) {\n payload[searchTypeKey[searchType]] = searchKey;\n }\n\n return payload;\n};\n\n// function to check new search requests against saved searches\nexport const matchSavedSearches = (\n data: SearchPayloadRequest,\n savedSearchList: Array<SearchSave>,\n includeSorting = false\n) => {\n let searchTitle = '';\n const filterString = queryString.stringify(\n mapSearchQuery(\n {\n ...data,\n sortBy: includeSorting ? data.sortBy : [],\n },\n false\n ),\n {\n arrayFormat: 'comma',\n encode: false,\n }\n );\n\n savedSearchList.forEach(search => {\n if (search.search_criteria === filterString) {\n searchTitle = search.title;\n }\n });\n\n return searchTitle;\n};\n\n/**\n * stringify filter, sorting and search key into a string to be compared with somewething like\n * the search criteria from a saved search\n * @param {Dictionary<string | Array<number | string>>} filter filter query\n * @param {Array<SortingRule<Company>> | undefined} sortBy sorting\n * @param {string} searchKey the search term\n * @param {string} searchType the search type for specific use of searchKey\n */\n\nexport const getFilterString = (\n filter: Dictionary<string | Array<number | string>>,\n sortBy: Array<SortByRule<Company>> | undefined,\n searchKey: string,\n searchType: string\n) => {\n return queryString.stringify(\n mapSearchQuery(\n {\n pagination: {\n pageNumber: 1,\n pageSize: 50,\n },\n filter,\n searchKey,\n searchType,\n sortBy: sortBy || [],\n },\n false,\n null,\n false\n ),\n {\n arrayFormat: 'comma',\n encode: false,\n }\n );\n};\n\n/**\n * organize saved searches by what settings (filters, sorting, columns) each of them have saved\n * @param {SearchSave[]} views list of saved searches\n */\nconst getArrangedSavedSearches = (views: SearchSave[]) => {\n // arrange the saved searches into separate arrays by priority.\n // we want to return the view with the most data points matched, instead of how old or new it is\n // priority matching is as follows:\n // 01. match filters, sorting, column visibility, column order and pinned columns\n // 02. match filters, sorting, column visibility and column order\n // 03. match filters, sorting, column visibility - for views created before order and pin functionality was added\n // 04. match filters, sorting and pinned columns\n // 05. match filters and sorting\n // 06. match filters, column visibility, column order and pinned columns\n // 07. match filters, column visibility and column order\n // 08. match filters and column visibility\n // 09. match filters and pinned columns\n // 10. match filters\n // 11. match sorting, column visibility, column order and pinned columns\n // 12. match sorting, column visibility and column order\n // 13. match sorting and column visibility - for views created before order and pin functionality was added\n // 14. match sorting and pinned columns\n // 15. match sorting\n // 16. match column visibility, column order and pinned columns\n // 17. match column visibility and column order\n // 18. match column visibility - for views created before order and pin functionality was added\n // 19. match pinned columns\n // 20. match filters, sorting, column, visibility, and pinned column\n // after these iterations try to match OPTX Default view\n // when a match is found return the title and view data and stop the search\n // eslint-disable-next-line\n const arrangedSavedSearches: Array<SearchSave[]> = [\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n ];\n views.forEach(view => {\n const {\n search_criteria: criteria,\n sortBy,\n columns: viewColumns,\n column_order: columnOrder,\n pinned_columns: pinnedColumns,\n searchKey,\n } = view;\n const withFilters = hasFilters(criteria) || searchKey;\n const withVisibility = viewColumns !== null;\n const withOrder = columnOrder !== null;\n const withPins = pinnedColumns !== null && pinnedColumns !== '';\n\n if (withFilters && sortBy && withVisibility && withOrder && withPins) {\n arrangedSavedSearches[0].push(view);\n } else if (withFilters && sortBy && withVisibility && withOrder && !withPins) {\n arrangedSavedSearches[1].push(view);\n } else if (withFilters && sortBy && withVisibility && !withOrder && !withPins) {\n arrangedSavedSearches[2].push(view);\n } else if (withFilters && sortBy && !withVisibility && !withOrder && withPins) {\n arrangedSavedSearches[3].push(view);\n } else if (withFilters && sortBy && !withVisibility && !withOrder && !withPins) {\n arrangedSavedSearches[4].push(view);\n } else if (withFilters && !sortBy && withVisibility && withOrder && withPins) {\n arrangedSavedSearches[5].push(view);\n } else if (withFilters && !sortBy && withVisibility && withOrder && !withPins) {\n arrangedSavedSearches[6].push(view);\n } else if (withFilters && !sortBy && withVisibility && !withOrder && !withPins) {\n arrangedSavedSearches[7].push(view);\n } else if (withFilters && !sortBy && !withVisibility && !withOrder && withPins) {\n arrangedSavedSearches[8].push(view);\n } else if (withFilters && !sortBy && !withVisibility && !withOrder && !withPins) {\n arrangedSavedSearches[9].push(view);\n } else if (!withFilters && sortBy && withVisibility && withOrder && withPins) {\n arrangedSavedSearches[10].push(view);\n } else if (!withFilters && sortBy && withVisibility && withOrder && !withPins) {\n arrangedSavedSearches[11].push(view);\n } else if (!withFilters && sortBy && withVisibility && !withOrder && !withPins) {\n arrangedSavedSearches[12].push(view);\n } else if (!withFilters && sortBy && !withVisibility && !withOrder && withPins) {\n arrangedSavedSearches[13].push(view);\n } else if (!withFilters && sortBy && !withVisibility && !withOrder && !withPins) {\n arrangedSavedSearches[14].push(view);\n } else if (!withFilters && !sortBy && withVisibility && withOrder && withPins) {\n arrangedSavedSearches[15].push(view);\n } else if (!withFilters && !sortBy && withVisibility && withOrder && !withPins) {\n arrangedSavedSearches[16].push(view);\n } else if (!withFilters && !sortBy && withVisibility && !withOrder && !withPins) {\n arrangedSavedSearches[17].push(view);\n } else if (!withFilters && !sortBy && !withVisibility && !withOrder && withPins) {\n arrangedSavedSearches[18].push(view);\n } else if (withFilters && sortBy && withVisibility && !withOrder && withPins) {\n arrangedSavedSearches[19].push(view);\n }\n });\n\n return arrangedSavedSearches;\n};\n\n/**\n * this function is called for each type of arranged saved searches. depending on the type of search\n * we are trying to match with, we set certain values for each saved setting (filter, sort, columns)\n * @param {Dictionary<string | Array<number | string>>} currentFilter applied filter\n * @param {string} searchKey search term used\n * @param {Array<SortingRule<any>>} sortBy applied sorting\n * @param {number} size size of the list of saved searches we are looking through\n * @param {number} index position of the list we are searching through\n * @param {string} filter current saved search's filter string, including sorting\n * @param {string | null} columns current saved search's visible columns\n * @param {string | null} columnOrder current saved search's column order\n * @param {string | null} pinnedColumns current saved search's pinned columns\n */\nconst getUpdatedSavedSearchSettings = (\n currentFilter: Dictionary<string | Array<number | string>>,\n searchKey: string,\n searchType: string,\n sortBy: Array<SortByRule<any>>,\n size: number,\n index: number,\n filter: string,\n columns: string | null,\n columnOrder: string | null,\n pinnedColumns: string | null\n) => {\n let filterString = filter;\n let visibleColumns: string | null = columns;\n let order: string | null = columnOrder;\n let pins: string | null = pinnedColumns;\n\n // depending on the type of saved search we are trying to match update query string and columns\n if (size) {\n switch (index) {\n case 1: {\n pins = '';\n break;\n }\n\n case 2: {\n order = null;\n pins = '';\n break;\n }\n\n case 3: {\n visibleColumns = null;\n order = null;\n break;\n }\n\n case 4: {\n visibleColumns = null;\n order = null;\n pins = '';\n break;\n }\n\n case 5: {\n filterString = getFilterString(currentFilter, undefined, searchKey, searchType);\n break;\n }\n\n case 6: {\n filterString = getFilterString(currentFilter, undefined, searchKey, searchType);\n pins = '';\n break;\n }\n\n case 7: {\n filterString = getFilterString(currentFilter, undefined, searchType, searchType);\n order = null;\n pins = '';\n break;\n }\n\n case 8: {\n filterString = getFilterString(currentFilter, undefined, searchKey, searchType);\n visibleColumns = null;\n order = null;\n break;\n }\n\n case 9: {\n filterString = getFilterString(currentFilter, undefined, searchKey, searchType);\n visibleColumns = null;\n order = null;\n pins = '';\n break;\n }\n\n case 10: {\n filterString = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n break;\n }\n\n case 11: {\n filterString = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n pins = '';\n break;\n }\n\n case 12: {\n filterString = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n order = null;\n pins = '';\n break;\n }\n\n case 13: {\n filterString = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n visibleColumns = null;\n order = null;\n break;\n }\n\n case 14: {\n filterString = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n visibleColumns = null;\n order = null;\n pins = '';\n break;\n }\n\n case 15: {\n filterString = '';\n break;\n }\n\n case 16: {\n filterString = '';\n pins = '';\n break;\n }\n\n case 17: {\n filterString = '';\n order = null;\n pins = '';\n break;\n }\n\n case 18: {\n filterString = '';\n visibleColumns = null;\n order = null;\n break;\n }\n\n case 19: {\n order = null;\n break;\n }\n }\n }\n\n return { filterString, visibleColumns, order, pins };\n};\n\n/**\n * function used to compare filter string for saved searches\n * @param {string | null} searchFilterString filter string from the saved search or null\n * @param {string | null} currentFilterString current filter string or null\n */\nconst compareFilterString = (\n searchFilterString: string | null,\n currentFilterString: string | null,\n ignoreSort?: boolean,\n matchGridOnMyCompanies?: boolean\n) => {\n // filter change could cause changing of filters order\n // in string that we compare\n // to ignore that order we do .split .sort .join\n\n const cleanSearchFilterString = searchFilterString\n ? removeFiltersFromQueryString(searchFilterString, matchGridOnMyCompanies)\n : searchFilterString;\n const cleanCurrentFilterString = currentFilterString\n ? removeFiltersFromQueryString(currentFilterString, matchGridOnMyCompanies)\n : currentFilterString;\n\n const normalizedSearchFilterString = cleanSearchFilterString?.split(/[,&=]/).sort().join('');\n const normalizedCurrentFilterString = cleanCurrentFilterString?.split(/[,&=]/).sort().join('');\n\n if (normalizedSearchFilterString === normalizedCurrentFilterString) {\n return true;\n }\n\n if (ignoreSort && searchFilterString && currentFilterString) {\n const updatedSearchFilterString = removeSortFromQueryString(searchFilterString);\n const updatedCurrentFilterString = removeSortFromQueryString(currentFilterString);\n\n if (updatedSearchFilterString === updatedCurrentFilterString) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * function used to compare column visibility for saved searched created before and\n * after implementation of sorting and pinning functionality\n * @param {string | null} searchColumns column string from the saved search or null\n * @param {string | null} currentColumns current column visibility as string or null\n */\nexport const compareColumnVisibility = (\n searchColumns: string | null,\n currentColumns: string | null\n) => {\n // check for equality first\n if (searchColumns === currentColumns) {\n return true;\n }\n\n // if both values are string, we need to compare every column id,\n // without taking into account the order of the items. this is needed for\n // saved searches with columns saved before implementation of sorting and pinning functionality\n if (searchColumns && currentColumns) {\n // remove row_actions and date_matched from search\n const searchList = removeColumnFromString(\n searchColumns.replace(',row_actions', ''),\n 'date_matched'\n ).split(',');\n const currentList = currentColumns.split(',');\n\n const areShallowEqual = searchList.every(columnId => {\n if (columnId === 'score' || columnId === 'il_optx_score') {\n return currentList.includes('score') || currentList.includes('il_optx_score');\n }\n\n return currentList.includes(columnId);\n });\n\n const filteredSearchList = searchList.filter(\n columnId => columnId !== 'score' && columnId !== 'il_optx_score'\n );\n const filteredCurrentList = currentList.filter(\n columnId => columnId !== 'score' && columnId !== 'il_optx_score'\n );\n\n const areEqual =\n areShallowEqual &&\n filteredSearchList.length === filteredCurrentList.length &&\n filteredSearchList.every(columnId => filteredCurrentList.includes(columnId));\n\n if (areEqual) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * function used to compared pinned columns\n * @param searchPinnedColumns pinned columns string from the saved search or null\n * @param currentPinnedColumns current pinned columns as string or null\n */\nexport const comparePinnedColumns = (\n searchPinnedColumns: string | null,\n currentPinnedColumns: string | null\n) => {\n const normalizedSearchPinnedColumns = searchPinnedColumns\n ?.replace(/[\\s,]/g, '')\n .replace(/il_optx_score|score/g, '');\n const normalizedCurrentPinnedColumns = currentPinnedColumns\n ?.replace(/[\\s,]/g, '')\n .replace(/il_optx_score|score/g, '');\n\n if (normalizedSearchPinnedColumns === normalizedCurrentPinnedColumns) {\n return true;\n }\n\n if (\n (!normalizedSearchPinnedColumns || normalizedSearchPinnedColumns === '') &&\n (!normalizedCurrentPinnedColumns || normalizedCurrentPinnedColumns === '')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * function used to compared column order\n * @param searchColumnOrder column order string from the saved search or null\n * @param currentColumnOrder current column order as string or null\n */\nexport const compareColumnOrder = (\n searchColumnOrder: string | null,\n currentColumnOrder: string | null\n) => {\n if (searchColumnOrder === currentColumnOrder) {\n return true;\n }\n\n if (searchColumnOrder && currentColumnOrder) {\n const searchList = searchColumnOrder\n ? removeColumnFromString(searchColumnOrder, 'date_matched')\n .replace(/[\\s,]/g, '')\n .replace(/il_optx_score|score/g, '')\n : searchColumnOrder;\n const currentList = currentColumnOrder\n ?.replace(/[\\s,]/g, '')\n .replace(/il_optx_score|score/g, '');\n\n const isColumnOrderEqual = searchList === currentList;\n\n return isColumnOrderEqual;\n }\n\n return false;\n};\n\n/**\n * function to try and match a set of filters, sorting and column visiblity list to a view *\n * @param {SearchPayloadRequest} data search data\n * @param {string} columns string list of visible columns\n * @param {SearchSave[]} views saved searches\n * @param {SearchSave} defaultOptxView OPTX Default view\n */\nexport const matchView = (\n data: SearchPayloadRequest,\n columns: string,\n columnOrder: string | null,\n pinnedColumns: string | null,\n views: SearchSave[],\n defaultOptxView: SearchSave,\n gridName?: string,\n myCompaniesSessionSettings?: string,\n ignoreSort?: boolean\n) => {\n const { filter, sortBy, searchKey, searchType, listType } = data;\n const currentFilter = { ...filter };\n let matchedTitle: string | undefined;\n let matchedView: SearchSave | undefined;\n\n if (listType !== 'saved') {\n // specific case for watchlists\n delete currentFilter.saved_list_id;\n delete currentFilter.ss_list_id;\n }\n\n const arrangedSavedSearches: Array<SearchSave[]> = getArrangedSavedSearches(views);\n\n each(arrangedSavedSearches, (searches, index) => {\n const { filterString, visibleColumns, order, pins } = getUpdatedSavedSearchSettings(\n currentFilter,\n searchKey,\n searchType,\n sortBy,\n searches.length,\n index,\n getFilterString(currentFilter, sortBy, searchKey, searchType),\n columns,\n columnOrder,\n pinnedColumns\n );\n\n each(searches, search => {\n if (\n search.columns === null &&\n search.column_order === null &&\n search.pinned_columns === null &&\n compareFilterString(search.search_criteria, filterString, true)\n ) {\n matchedTitle = search.title;\n matchedView = search;\n\n return false;\n }\n\n if (\n compareFilterString(\n search.search_criteria,\n filterString,\n ignoreSort,\n gridName === 'myCompanies'\n ) &&\n compareColumnVisibility(search.columns, visibleColumns) &&\n compareColumnOrder(search.column_order, order) &&\n comparePinnedColumns(\n search.pinned_columns,\n pins ? pins.replace('date_matched', '').replace(',,', ',') : null\n )\n ) {\n matchedTitle = search.title;\n matchedView = search;\n\n return false;\n }\n\n return true;\n });\n\n if (matchedTitle) {\n return false;\n }\n\n return true;\n });\n\n const filterString = getFilterString(currentFilter, sortBy, searchKey, searchType);\n\n const myCompaniesSearchCriteria =\n myCompaniesSessionSettings === undefined && gridName === 'myCompanies';\n\n const isSortByEquals =\n isEqual(\n sortBy,\n gridName === 'myCompanies' ? MYCOMPANIES_DEFAULT_SORT_US : COMPANY_DEFAULT_SORT\n ) ||\n isEqual(\n sortBy,\n gridName === 'myCompanies' ? MYCOMPANIES_DEFAULT_SORT_IL : COMPANY_DEFAULT_SORT\n );\n\n if (\n !matchedTitle &&\n (filterString === defaultOptxView.search_criteria || myCompaniesSearchCriteria) &&\n isSortByEquals &&\n compareColumnVisibility(columns, defaultOptxView.columns) &&\n compareColumnOrder(columnOrder, defaultOptxView.column_order) &&\n comparePinnedColumns(pinnedColumns, defaultOptxView.pinned_columns)\n ) {\n matchedTitle = defaultOptxView.title;\n matchedView = defaultOptxView;\n }\n\n if (\n !matchedTitle &&\n compareColumnOrder(columnOrder, customUIViews.sourcingOrder.column_order) &&\n compareColumnVisibility(columns, customUIViews.sourcingOrder.columns) &&\n comparePinnedColumns(pinnedColumns, customUIViews.sourcingOrder.pinned_columns)\n ) {\n matchedTitle = customUIViews.sourcingOrder.title;\n matchedView = customUIViews.sourcingOrder;\n }\n\n return {\n matchedTitle,\n matchedView,\n };\n};\n\n/**\n * check a stringified query for filters\n * @param {string} query stringified filters and sorting\n */\nexport const hasFilters = (query: string) => {\n const parsedFilters = queryString.parse(query, { arrayFormat: 'comma' });\n const filterKeys = Object.keys(parsedFilters);\n\n if (\n !filterKeys.length ||\n (filterKeys.length === 2 && filterKeys.includes('sort_fields')) ||\n (filterKeys.length === 1 && filterKeys.includes('query'))\n ) {\n return false;\n }\n\n return true;\n};\n\n/**\n * function to make a new search in a new tab applying a specific filter\n * @param {Dictionary<PreselectedFilter>} clearedFilter cleared filter\n * @param {Dictionary<BaseFilter<any>>} sources filter data\n * @param {string} filterKey filter name\n * @param {string} filterValue filter value\n */\nexport const searchInNewTab = (\n clearedFilter: Dictionary<PreselectedFilter>,\n sources: Dictionary<BaseFilter<any>>,\n filterKey: string,\n filterValue:\n | string\n | SelectOption[]\n | FormCheckboxOption[]\n | LogicOption[]\n | FormCheckableRangeOption[],\n extraQueries: Dictionary<string | (string | number)[]> = {},\n searchPathname?: string\n) => {\n // insert filter info in filters.\n const filter: Dictionary<PreselectedFilter> = {\n ...clearedFilter,\n [filterKey]: filterValue,\n };\n\n const mappedFilters = mapFiltersToURLParams(sources, filter);\n const query = queryString.stringify(mappedFilters, {\n arrayFormat: 'comma',\n });\n const extraQueriesString = queryString.stringify(extraQueries, { arrayFormat: 'comma' });\n\n const newLocation = `${window.location.origin}${searchPathname}?${query}${\n extraQueriesString && `&${extraQueriesString}`\n }`;\n window.open(newLocation, '_blank');\n};\n\n/**\n * function to make a new search in a new tab applying a specific filter\n * @param {Dictionary<PreselectedFilter>} clearedFilter cleared filter\n * @param {Dictionary<BaseFilter<any>>} sources filter data\n * @param {string} filterKey filter name\n * @param {string} filterValue filter value\n */\nexport const searchSourceScrubInNewTab = (\n listId: string,\n clearedFilter: Dictionary<PreselectedFilter>,\n sources: Dictionary<BaseFilter<any>>,\n filters: Dictionary<PreselectedFilter>\n) => {\n // insert filter info in filters.\n const filter: Dictionary<PreselectedFilter> = {\n ...clearedFilter,\n ...filters,\n };\n\n const mappedFilters = mapFiltersToURLParams(sources, filter);\n const query = queryString.stringify(mappedFilters, {\n arrayFormat: 'comma',\n });\n const newLocation = `${window.location.origin}${appRoutes.userLists.sourceScrubLists.replace(\n ':id',\n listId\n )}?${query}`;\n window.open(newLocation, '_blank');\n};\n\n/**\n * Remove a trailing slash, remove space character from a string\n * @param {string | undefined} text - keyword of search\n */\n\nexport const preProcessSearch = (text: string | undefined) => {\n return text?.trim()?.replace(/\\/+$/, '') || '';\n};\n\n/**\n * function to validate the input search value and\n * display an error popup and set a boolean state\n * @param {string} value the value that needs to be checked\n * @param setValidSearchKey set state\n */\nexport const validateSearchTerm = (\n value: string,\n setValidSearchKey: React.Dispatch<React.SetStateAction<boolean>>\n) => {\n if (validateMinChars(value, SEARCH_MINIMUM_CHAR_COUNT)) {\n // if string is all spaces\n if (value.trim().length === 0) {\n setValidSearchKey(false);\n NotificationService.error('Search term can not contain only spaces');\n\n return false;\n }\n\n setValidSearchKey(true);\n\n return true;\n }\n\n setValidSearchKey(false);\n NotificationService.error('3 chars or more');\n\n return false;\n};\n\n/**\n * check if a view is a custom ui view\n * @param {string | number} id view id\n */\nexport const isCustomUIView = (id: string | number) =>\n customUIViewIds.includes(id as CustomUIViewIds);\n\n/**\n * Get the data source for the current page.\n *\n * @param companies - The array of companies.\n * @param pageSize - The number of companies per page.\n * @param pageNumber - The current page number.\n * @returns The slice of companies for the current page.\n */\nexport const getDataSource = (companies: any[], pageSize: number, pageNumber: number): any[] => {\n if (companies.length > pageSize) {\n const startIndex = (pageNumber - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n\n return companies.slice(startIndex, endIndex);\n }\n\n return companies;\n};\n\n/**\n * A constant array `excludeFiltersForMyCompanies` that contains a list of filter identifiers\n * which should be excluded when processing data related to \"My Companies\" .\n * Used in Grid View on My Companies page\n *\n * @constant {string[]} excludeFiltersForMyCompanies\n */\nconst excludeFiltersForMyCompanies = [\n 'source_tag_filter',\n 'new_date_matched',\n 'next_touch_date_days',\n 'last_touch_date_days',\n 'wrt_over_6_wks',\n 'wrt_over_6_months',\n 'wrt_nothing_scheduled',\n 'wst_over_6_months',\n 'wst_over_6_wks',\n 'wst_within_6_wks',\n 'mfst_8_to_14_days',\n 'mfst_8_to_14_days',\n 'mfst_next_7_days',\n 'mfst_next_30_days',\n 'mfst_past_due',\n 'stn30_8_to_14_days_away',\n 'stn30_next_7_days',\n 'stn30_next_30_days',\n 'stn30_past_due',\n];\n\n/**\n * Removes specific filters from a query string and optionally excludes certain filters\n * based on the `matchGridOnMyCompanies` flag.\n *\n * This function parses the provided query string and removes filters related to\n * 'list_id' and 'saved_list_id'. If the `matchGridOnMyCompanies` flag is set to true,\n * it further filters out keys specified in the `excludeFiltersForMyCompanies` list.\n * The resulting filters are then converted back into a query string format.\n *\n * @param query - The query string to process, which may contain various filters.\n * @param matchGridOnMyCompanies - A boolean flag indicating whether to exclude certain\n * filters specific to \"My Companies\" view. Defaults to false.\n * @returns A new query string with the specified filters removed or excluded.\n */\nexport const removeFiltersFromQueryString = (\n query: string,\n matchGridOnMyCompanies: boolean = false\n) => {\n const parsedFilters = queryString.parse(query, { arrayFormat: 'comma' });\n const filterKeys = Object.keys(parsedFilters);\n let newFilters = { ...parsedFilters } as Dictionary<string | Array<number | string>>;\n\n if (filterKeys.includes('list_id')) {\n const { list_id, ...restOfFilters } = parsedFilters as Dictionary<\n string | Array<number | string>\n >;\n newFilters = { ...restOfFilters };\n }\n\n if (matchGridOnMyCompanies) {\n const updatedFilters: Dictionary<string | Array<number | string>> = {};\n\n for (const [key, type] of Object.entries(newFilters)) {\n if (!excludeFiltersForMyCompanies.includes(key)) {\n updatedFilters[key] = type;\n }\n }\n\n return queryString.stringify({ ...updatedFilters }, { arrayFormat: 'comma' }) as string;\n }\n\n return queryString.stringify({ ...newFilters }, { arrayFormat: 'comma' }) as string;\n};\n\n/**\n * Removes sorting parameters from a query string.\n *\n * This function takes a query string as input, parses it to identify any sorting\n * parameters, specifically 'sort_fields' and 'sort_orders', and removes them if present.\n * It then reconstructs the query string without these sorting parameters.\n *\n * @param {string} query - The query string from which sorting parameters should be removed.\n * @returns {string} - The modified query string without sorting parameters.\n *\n * @example\n * // Given a query string with sorting parameters:\n * const query = \"category=books&sort_fields=title&sort_orders=asc\";\n * const result = removeSortFromQueryString(query);\n * // result will be \"category=books\"\n *\n */\nexport const removeSortFromQueryString = (query: string) => {\n const parsedFilters = queryString.parse(query, { arrayFormat: 'comma' });\n const filterKeys = Object.keys(parsedFilters);\n\n if (\n !filterKeys.length ||\n (!filterKeys.includes('sort_fields') && !filterKeys.includes('sort_orders'))\n ) {\n return query;\n }\n\n if (parsedFilters.sort_fields) {\n delete parsedFilters.sort_fields;\n }\n\n if (parsedFilters.sort_orders) {\n delete parsedFilters.sort_orders;\n }\n\n return queryString.stringify(parsedFilters, { arrayFormat: 'comma' });\n};\n\n/**\n * Determines the search type and its corresponding ID based on session filters.\n *\n * @param {string | undefined} sessionFilters - A query string containing session filter parameters.\n * @returns {{ searchType?: SearchType; searchId?: number }} An object containing:\n * - `searchType`: The determined search type, if found.\n * - `searchId`: The numeric ID associated with the list type, if found.\n * If no matching key is found, an empty object is returned.\n */\nexport const getSearchTypeInfo = (\n sessionFilters?: string\n): { searchType?: SearchType; searchId?: number } => {\n if (!sessionFilters) return {};\n\n const sessionFiltersQuery = queryString.parse(sessionFilters);\n\n const filterMap: Record<string, SearchType> = {\n combined_search_id: 'combined',\n saved_list_id: 'saved',\n ss_list_id: 'saved',\n };\n\n for (const [key, type] of Object.entries(filterMap)) {\n if (sessionFilters.includes(key)) {\n return { searchType: type, searchId: Number(sessionFiltersQuery[key]) };\n }\n }\n\n return {};\n};\n\n/**\n * Filters out excluded filters from a given filter query.\n *\n * This function takes a dictionary of filters and removes any filters\n * whose keys are present in the `excludeFiltersForMyCompanies` list.\n * The resulting dictionary contains only the filters that are not\n * excluded, preserving the original values associated with each key.\n *\n * @param filterQuery - A dictionary containing filter key-value pairs\n * to be processed. The keys represent the filter\n * names and the values represent the filter criteria.\n * @returns A new dictionary containing only the filters that are not\n * excluded, maintaining the same key-value pairs as the input\n * for the included filters.\n */\nexport function filterOutExcludedFilters(filterQuery: Dictionary<any>): Dictionary<any> {\n const filteredQuery: Dictionary<any> = {};\n\n Object.keys(filterQuery).forEach(key => {\n if (!excludeFiltersForMyCompanies.includes(key) || key === 'source_tag_filter') {\n filteredQuery[key] = filterQuery[key];\n }\n });\n\n return filteredQuery;\n}\n","import { PageInfo } from '@optx/models/table/Pagination';\nimport { URLStatus, DatePresented, FinancialFieldRangeValue } from '@optx/models/Company';\nimport { APIBoolean } from '@optx/models/api/generic';\n\nexport enum FieldChangedValue {\n revenue = 'Revenue',\n lastRaisedAmount = 'Last Raised Amount',\n lastRevUpdateAmount = 'Last Rev Update Amount',\n lastRound = 'Last Round',\n lastInvestors = 'Last Investors',\n parentCompany = 'Parent Company',\n sector = 'Sector',\n subSector = 'Sub-Sector',\n subSectorAPI = 'Sub Sector',\n addonBool = 'Add-on',\n crunchbaseRank = 'Crunchbase Rank',\n optxScore = 'Optx Score',\n numberOfEmployees = 'Number of Employees',\n capitalRaised = 'Capital Raised',\n lastFundingDate = 'Last Funding Date',\n pipelineRank = 'Pipeline Rank',\n stage = 'Stage',\n companyOwner = 'Company Owner',\n addon = 'Add-on For',\n addonCompany = 'Add-on Company',\n datePresented = 'Date Presented',\n softwareCompany = 'Software Company',\n aiMl = 'AI / ML',\n psgFit = 'PSG Fit',\n psgPlatformCompany = 'PSG Platform Company',\n lastRevenue = 'Last Revenue',\n leadSource = 'Lead Source',\n seniorAdvisor = 'Senior Advisor Thesis',\n fund = 'Fund',\n isInBusiness = 'Business Evaluation',\n icStatusDate = 'Ic Status Date',\n expectedCloseDate = 'Expected Close Date',\n productCategory = 'Product Category',\n subVertical = 'Sub Vertical',\n activeOnPipeline = 'Active on Pipeline',\n ebitda = 'EBITDA',\n dealTeam = 'Deal Team',\n opsTeam = 'Ops Team',\n seniorDealTeamLead = 'Senior Deal Team Lead',\n opportunityType = 'Opportunity Type',\n linkedinUrl = 'Linkedin URL',\n useParentCompany = 'Use Parent Company',\n nextSteps = 'Next Steps',\n websiteActive = 'Website Checked As',\n companyType = 'Company Type',\n askingAmount = 'Asking Amount',\n banker = 'Banker',\n bankerName = 'Banker Name',\n dealType = 'Deal Type',\n arr = 'ARR',\n yearFounded = 'Year Founded',\n generatedDescription = 'Generated Description',\n gm = 'GM %',\n rationale = 'Rationale',\n sizeMultiple = 'Size Multiple',\n transactionNotes = 'Transaction Notes',\n}\n\nexport type FinancialField = {\n value: string | number | FinancialFieldRangeValue | null;\n year: number | null;\n};\n\nexport type FieldValue =\n | string\n | string[]\n | number\n | FinancialField\n | boolean\n | null\n | URLStatus\n | DatePresented[];\n\nexport interface ChangedCompanyField {\n modified_at: string;\n user?: string | null;\n field_changed: string;\n before_value: FieldValue | null;\n before_value_rationale?: string | null;\n before_value_opinion?: string | null;\n internal: boolean;\n after_value: FieldValue | null;\n after_value_rationale?: string | null;\n after_value_opinion?: string | null;\n optx?: boolean;\n after_optx?: number | null;\n before_optx?: number | null;\n opinion?: string | null;\n regeneration_type?: string | null;\n score_type?: string;\n}\nexport interface ChangedCompanyFieldsResponse {\n results: ChangedCompanyField[];\n count: number;\n}\n\nexport interface ChangedCompayFieldsState {\n data: ChangedCompanyField[];\n count: number;\n error: string;\n loading: false;\n pagination: PageInfo;\n searchQuery?: string;\n hasReachedResultsEnd: boolean;\n startDate?: string;\n endDate?: string;\n fieldsToFilter: number;\n internal: APIBoolean;\n optx: APIBoolean;\n}\n\nexport interface ChangedCompanyFieldsPayload {\n companyId: number;\n pagination: PageInfo;\n startDate?: string;\n endDate?: string;\n field?: string;\n internal?: APIBoolean;\n optx?: APIBoolean;\n}\n","import React, { useState, useEffect, useRef, useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Radio } from 'antd';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport { CheckCircleTwoTone } from '@ant-design/icons';\n// models\nimport { EditFieldRadioProps } from '@optx/models/feature/edit-field/EditFieldRadioProps';\n// constants\nimport { ADVANCED_SEARCH, MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n// components\nimport { Styled } from '@optx/features/company/edit-fields/components/TableCellFit.styled';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport EditCellPen from '@optx/components/common/table/Companies/styled-cells/EditCellPen';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport { DropdownAddContext } from '@optx/components/DropdownAdd/DropdownAddContext';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\nimport { ThumbsIcon, ThumbsUpIcon } from '@optx/shared/view/molecules/CommonStyled/ThumbsIcon';\n// redux\nimport { getIsPartner } from '@optx/redux/user/information/selectors';\n// hooks\nimport { URLStatus } from '@optx/models/Company';\nimport useUpdateFields from '../hooks/useUpdateFields';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\n\nconst EditFieldRadio: React.FC<EditFieldRadioProps> = ({\n record,\n value,\n fieldName,\n labelValue,\n isFromGrid,\n showOnlyRadio,\n service,\n successMessage,\n errorMessage,\n onClick,\n hidePen,\n isFromHistory,\n triggerLabel,\n placement,\n children,\n onChangeRadioValue,\n callbackComponent,\n actionPendo,\n}) => {\n const isPartner = useSelector(getIsPartner);\n\n const { updateField } = useUpdateFields({\n fieldName,\n companyId: record?.company_id ?? 0,\n companyUrl: record?.company_url ?? null,\n service,\n successMessage,\n errorMessage,\n isPartner,\n isFromHistory,\n });\n const [closePopup, setClosePopup] = useState(false);\n const [radioValue, setRadioValue] = useState<boolean>(value as boolean);\n const afterValue = useRef<string>();\n const currentGridName = useCurrentGridName();\n // Close DropDownAdd popup\n const { setDropdownVisible, dropdownVisible } = useContext(DropdownAddContext);\n\n useEffect(() => {\n setRadioValue(value as boolean);\n }, [value]);\n\n if (!record) return null;\n\n const gridValue = value ? 'Yes' : 'No';\n const gridWebsiteValue = (value as URLStatus) === 'active' ? 'Active' : 'Not Active';\n const gridAiMlValue =\n (value as boolean | undefined) === undefined || value === null || value === DEFAULT_CELL_VALUE\n ? 'Unknown'\n : value\n ? 'Yes'\n : 'No';\n\n const customLabel = isFromGrid && fieldName === 'Software Company' ? 'Software' : fieldName;\n\n let icon: React.ReactNode = '';\n\n const customValue = value === null || value === undefined ? DEFAULT_CELL_VALUE : value;\n\n const customWebsiteValue = fieldName === 'Website Status' ? value === 'active' : customValue;\n\n const handlePopoverLabel = () => {\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n if (fieldName === 'Website Status') {\n return value === 'active' ? 'Active' : 'Not Active';\n }\n\n return 'Unknown';\n };\n\n const handlePendoActionsCallBack = () => {\n if (callbackComponent) {\n callbackComponent();\n } else {\n handlePendoRadioActions(radioValue);\n }\n };\n\n const onChange = (e: RadioChangeEvent) => {\n const value = e.target.value === DEFAULT_CELL_VALUE ? null : e.target.value;\n\n onClick && onClick();\n\n updateField(value, undefined, undefined, handlePendoActionsCallBack);\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n afterValue.current = e.target.value;\n setRadioValue(e.target.value);\n onChangeRadioValue && onChangeRadioValue(e.target.value);\n setClosePopup(true);\n setDropdownVisible(!dropdownVisible);\n };\n\n const handleEqualOptions = () => {\n if (value === radioValue) {\n setClosePopup(true);\n }\n };\n\n const handlePendoRadioActions = (value: boolean | string) => {\n if (fieldName === 'Software Company' && currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_EditSoftwareValue_${value ? 'Yes' : 'No'}`);\n } else if (fieldName === 'Software Company' && currentGridName === 'My Companies') {\n sendPendoData(`${MY_COMPANIES_PENDO}_EditSoftwareValue_${value ? 'Yes' : 'No'}`);\n }\n\n if (fieldName === 'PSG Fit' && currentGridName === 'Advanced Search') {\n const defaultValues: Record<string, string> = {\n [DEFAULT_EMPTY_VALUE]: 'Unknow',\n true: 'Yes',\n false: 'No',\n };\n sendPendoData(`${ADVANCED_SEARCH}_EditPSGFit_${defaultValues[value.toString()]}`);\n }\n };\n\n if (value === true) {\n icon = <ThumbsUpIcon marginLeft={15} iconName=\"thumbs-up\" />;\n } else if (value === false) {\n icon = <ThumbsIcon marginLeft={15} iconName=\"thumbs-down\" />;\n } else {\n icon = <Styled.FitCellInnerTextContainer>Unknown</Styled.FitCellInnerTextContainer>;\n }\n\n const content = (\n <Radio.Group onChange={onChange} value={customWebsiteValue}>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Radio onClick={handleEqualOptions} className=\"d-block\" value>\n {fieldName === 'Website Status' ? 'Active' : 'Yes'}\n {fieldName === 'Software Company' && radioValue}\n </Radio>\n <Radio onClick={handleEqualOptions} value={false}>\n {fieldName === 'Website Status' ? 'Not Active' : 'No'}\n {fieldName === 'Software Company' && !radioValue}\n </Radio>\n {['PSG Fit', 'AI / ML'].includes(fieldName) && (\n <Radio value={DEFAULT_CELL_VALUE}>Unknown</Radio>\n )}\n </div>\n </Radio.Group>\n );\n\n const gridContent = (\n <Styled.TableCellInner>\n {fieldName === 'Website Status'\n ? gridWebsiteValue\n : fieldName === 'AI / ML'\n ? gridAiMlValue\n : gridValue}\n {!labelValue && record.is_software_verified && fieldName === 'Software Company' && (\n <CheckCircleTwoTone twoToneColor=\"#52c41a\" style={{ fontSize: 19, marginLeft: '5px' }} />\n )}\n </Styled.TableCellInner>\n );\n\n if (!isFromGrid && isFromHistory) {\n return (\n <EditPopover\n content={content}\n title={`Edit \"${fieldName}\" value`}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n hidePenIcon={hidePen}\n actionPendo={actionPendo}\n >\n {triggerLabel || labelValue}\n </EditPopover>\n );\n }\n\n if (fieldName === 'Website Status' && record.company_url === null) {\n return (\n <TruncateTooltip title=\"No URL Available\">\n <span>No URL Available</span>\n </TruncateTooltip>\n );\n }\n\n if (isFromGrid) {\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditCellPen\n setClosePopup={setClosePopup}\n closePopup={closePopup}\n content={content}\n title={`Edit \"${customLabel}\" value`}\n />\n }\n fill\n >\n {['Software Company', 'Website Status', 'AI / ML'].includes(fieldName) ? gridContent : icon}\n </InlineEdit>\n );\n }\n\n return showOnlyRadio ? (\n <EditPopover\n content={content}\n title={`Edit \"${fieldName}\" value`}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n hidePenIcon={hidePen}\n placement={placement}\n actionPendo={actionPendo}\n >\n {children}\n </EditPopover>\n ) : (\n <EditPopover\n content={content}\n title={`Edit \"${fieldName}\" value`}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n hidePenIcon={hidePen}\n >\n {labelValue || handlePopoverLabel()}\n {!labelValue && record.is_software_verified && fieldName === 'Software Company' && (\n <CheckCircleTwoTone\n twoToneColor=\"#52c41a\"\n style={{ fontSize: 21, marginLeft: 6, position: 'relative', top: 2 }}\n />\n )}\n </EditPopover>\n );\n};\n\nexport default React.memo(EditFieldRadio);\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { OptionsType } from 'react-select';\nimport { Button } from 'antd';\n// models\nimport { FieldValue } from '@features/company/audit-trail/state/interfaces';\nimport { ServiceType } from '@features/company/edit-fields/state/interfaces';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport {\n CompanyProfile,\n Company,\n ProductCategory,\n CompanyUserValuesKeys,\n UpdateCompanyDataFieldKeys,\n} from '@optx/models/Company';\nimport { SelectOption } from '@optx/models/Option';\nimport { debounce } from 'lodash';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { SEARCH_MINIMUM_CHAR_COUNT } from '@optx/constants/search';\n// utils\nimport { hasBlankOrNoneLabel } from '@optx/utils/helpers';\n// hooks\nimport { useHistoryTab } from '@optx/common/hooks/history';\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useUpdateFields from '../hooks/useUpdateFields';\n// components\nimport { Styled } from '@optx/features/company/edit-fields/components/TableCellFit.styled';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport EditCellPen from '@optx/components/common/table/Companies/styled-cells/EditCellPen';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport { AsyncMultiSelect } from '@optx/shared/view/molecules/Select';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\ninterface EditFieldMultiSelectAsyncProductCategoryProps {\n fieldName: 'Product Category';\n fieldKey?: CompanyUserValuesKeys | UpdateCompanyDataFieldKeys;\n record: Company | CompanyProfile;\n isFromGrid: boolean;\n hidePenIcon?: boolean;\n lastTemporaryFieldValue?: FieldValue;\n service: ServiceType;\n asyncSearchEndpoint: string;\n successMessage: string;\n errorMessage?: string;\n value: ProductCategory[] | null;\n isDynamicPopoverHeight?: boolean;\n destroyOnHide?: boolean;\n getPopupContainer?: ((triggerNode: HTMLElement) => HTMLElement) | undefined;\n actionPendo?: string;\n}\n\nconst EditFieldMultiSelectAsyncProductCategory: React.FC<\n EditFieldMultiSelectAsyncProductCategoryProps\n> = ({\n fieldName,\n value,\n record,\n fieldKey,\n hidePenIcon,\n service,\n successMessage,\n asyncSearchEndpoint,\n isFromGrid,\n getPopupContainer,\n isDynamicPopoverHeight,\n destroyOnHide,\n actionPendo,\n}) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const { updateField } = useUpdateFields({\n fieldName,\n companyId: record.company_id,\n companyUrl: record.company_url,\n service,\n successMessage,\n });\n const { updateHistoryFields } = useHistoryTab();\n const { loadOptions } = useAsyncSearch({ endpoint: asyncSearchEndpoint });\n const [closePopup, setClosePopup] = useState<boolean>(false);\n const popoverContentRef = useRef(null);\n const [selectedOptions, setSelectedOptions] = useState<OptionsType<SelectOption>>([]);\n const [fetchedOptions, setFetchedOptions] = useState<OptionsType<SelectOption>>([]);\n const title = `Edit \"${fieldName}\" value`;\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleCallback = (data?: SuccessErrorCallback, showHistory?: boolean) => {\n if (data) {\n if (showHistory) {\n const beforeValue =\n Array.isArray(value) && value.length\n ? value.map(item => item.category).join(',')\n : 'None';\n\n updateHistoryFields({\n afterValue:\n Array.isArray(selectedOptions) && !selectedOptions.length\n ? 'None'\n : selectedOptions.map(option => option.value).join(','),\n beforeValue,\n fieldChanged: fieldName,\n });\n }\n }\n };\n\n const handleSave = useCallback(() => {\n const mappedValues = selectedOptions.reduce((acc: string[], curr: SelectOption<string>) => {\n if (curr.value !== '') {\n acc.push(curr.value);\n }\n\n return acc;\n }, []);\n\n const alphabeticalMappedValues = mappedValues\n .sort((a, b) => {\n if (a < b) {\n return -1;\n }\n\n if (a > b) {\n return 1;\n }\n\n return 0;\n })\n .toString();\n\n const value = alphabeticalMappedValues.length === 0 ? 'blank' : alphabeticalMappedValues;\n updateField(value, fieldKey, undefined, handleCallback);\n setClosePopup(true);\n }, [handleCallback, selectedOptions, updateField, fieldKey]);\n\n const getLoadOptionsDelay = debounce((query: string, callback: SuccessErrorCallback) => {\n if (query.length >= SEARCH_MINIMUM_CHAR_COUNT) {\n loadOptions(query, options => {\n const callbackResult = callback(options);\n\n // set current filter to a cached variable.\n setFetchedOptions(options);\n\n return callbackResult;\n });\n }\n }, 300);\n\n const valueExceptBlank =\n value?.length &&\n !value?.includes(undefined as never) &&\n value\n ?.map(item =>\n Object.prototype.hasOwnProperty.call(item, 'category') &&\n !hasBlankOrNoneLabel(item.category)\n ? item.category\n : item\n )\n .join(', ');\n\n const handleDefaultValues = useCallback(() => {\n if (!value) {\n setSelectedOptions([]);\n\n return;\n }\n\n const mappedValues = value.map(item => ({\n value: item?.category,\n label: item?.category,\n isValid: item?.is_valid,\n }));\n\n setSelectedOptions(mappedValues);\n }, [value]);\n\n const getIsValueChanged = () => {\n if (selectedOptions.length !== value?.length) return false;\n\n let valid = true;\n value.forEach(item =>\n selectedOptions.find(option => option.value === item.category) ? true : (valid = false)\n );\n\n return valid;\n };\n\n useEffect(() => {\n handleDefaultValues();\n }, [handleDefaultValues]);\n\n useOnClickOutside(popoverContentRef, () => {\n handleDefaultValues();\n });\n\n const handleCancel = useCallback(() => {\n setClosePopup(true);\n handleDefaultValues();\n }, [handleDefaultValues]);\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter' && !getIsValueChanged()) {\n handleSave();\n }\n };\n\n const content = (\n <div\n className=\"addon-popover\"\n role=\"presentation\"\n onKeyDown={handleDropdownKeyEvent}\n ref={containerRef}\n tabIndex={0}\n >\n <AsyncMultiSelect\n defaultMenuIsOpen={true}\n className=\"addon--multiselect-async\"\n onChange={(options, action) => {\n setSelectedOptions(options as SelectOption[]);\n }}\n loadOptions={getLoadOptionsDelay}\n defaultOptions={fetchedOptions}\n defaultValue={selectedOptions}\n loadingMessage={({ inputValue }) => (inputValue.length > 2 ? 'Loading...' : 'Begin typing')}\n closeMenuOnSelect={false}\n onMenuClose={() => containerRef.current && containerRef.current.focus()}\n onSelectResetsInput={false}\n blurInputOnSelect={false}\n controlShouldRenderValue\n maxLength={500}\n closeOnSelect\n />\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={() => handleCancel()}>\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n disabled={getIsValueChanged()}\n onClick={handleSave}\n >\n Save\n </Button>\n </div>\n </div>\n );\n\n if (!isFromGrid) {\n return (\n <EditPopover\n content={content}\n title={title}\n hidePenIcon={hidePenIcon}\n onVisibilityChange={handleCancel}\n getPopupContainer={getPopupContainer}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n isDynamicPopoverHeight={isDynamicPopoverHeight}\n destroyOnHide={destroyOnHide}\n actionPendo={actionPendo}\n >\n {hidePenIcon ? (\n 'Edit Field'\n ) : (\n <TruncateTooltip\n className=\"edit-field--text\"\n placement=\"topLeft\"\n title={valueExceptBlank || DEFAULT_EMPTY_VALUE}\n >\n {valueExceptBlank || DEFAULT_EMPTY_VALUE}\n </TruncateTooltip>\n )}\n </EditPopover>\n );\n }\n\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditCellPen\n content={content}\n title={title}\n closePopup={closePopup}\n onVisibilityChange={handleCancel}\n setClosePopup={setClosePopup}\n placement={'topLeft'}\n />\n }\n fill\n >\n <TruncateTooltip title={valueExceptBlank || DEFAULT_EMPTY_VALUE}>\n <Styled.TableCellInner>{valueExceptBlank || DEFAULT_EMPTY_VALUE}</Styled.TableCellInner>\n </TruncateTooltip>\n </InlineEdit>\n );\n};\n\nexport default React.memo(EditFieldMultiSelectAsyncProductCategory);\n","import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\nimport { OptionsType, InputActionMeta } from 'react-select';\nimport { Button } from 'antd';\nimport styled from 'styled-components';\nimport { debounce } from 'lodash';\n// models\nimport { FieldValue } from '@features/company/audit-trail/state/interfaces';\nimport { ServiceType } from '@features/company/edit-fields/state/interfaces';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { CompanyProfile, Company, CompanyUserValuesKeys } from '@optx/models/Company';\nimport { SelectOption } from '@optx/models/Option';\nimport { TooltipPlacement } from 'antd/lib/tooltip';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// hooks\nimport { useHistoryTab } from '@optx/common/hooks/history';\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useUpdateFields from '../hooks/useUpdateFields';\n// components\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport EditCellPen from '@optx/components/common/table/Companies/styled-cells/EditCellPen';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport { AsyncMultiSelect } from '@optx/shared/view/molecules/Select';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\nimport { Styled } from '@optx/features/company/edit-fields/components/TableCellFit.styled';\n\nconst DefaultTooltip = styled(TruncateTooltip)`\n display: block;\n`;\n\nconst MultiSelectWrapper = styled.div`\n margin-right: 160px;\n`;\n\ninterface EditFieldMultiSelectAsyncCreatableProps {\n fieldName: 'Sub Vertical';\n fieldKey?: CompanyUserValuesKeys;\n record: Company | CompanyProfile;\n isFromGrid?: boolean;\n hidePenIcon?: boolean;\n lastTemporaryFieldValue?: FieldValue;\n service: ServiceType;\n asyncSearchEndpoint: string;\n successMessage: string;\n errorMessage: string;\n value: string[];\n isDynamicPopoverHeight?: boolean;\n destroyOnHide?: boolean;\n getPopupContainer?: ((triggerNode: HTMLElement) => HTMLElement) | undefined;\n tooltipPosition?: TooltipPlacement;\n}\n\nconst EditFieldMultiSelectAsyncCreatable: React.FC<EditFieldMultiSelectAsyncCreatableProps> = ({\n fieldName,\n value,\n record,\n fieldKey,\n hidePenIcon,\n service,\n successMessage,\n errorMessage,\n asyncSearchEndpoint,\n isFromGrid,\n getPopupContainer,\n isDynamicPopoverHeight,\n destroyOnHide,\n tooltipPosition,\n}) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const { updateField } = useUpdateFields({\n fieldName,\n companyId: record.company_id,\n companyUrl: record.company_url,\n service,\n successMessage,\n errorMessage,\n });\n const { updateHistoryFields } = useHistoryTab();\n const { loadOptions } = useAsyncSearch({ endpoint: asyncSearchEndpoint });\n const [closePopup, setClosePopup] = useState<boolean>(false);\n const popoverContentRef = useRef(null);\n const [selectedOptions, setSelectedOptions] = useState<OptionsType<SelectOption>>([]);\n const [fetchedOptions, setFetchedOptions] = useState<OptionsType<SelectOption>>([]);\n const [inputValue, setInputValue] = useState<string>('');\n const title = `Edit \"${fieldName}\" value`;\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleCallback = (data?: SuccessErrorCallback, showHistory?: boolean) => {\n if (data && showHistory) {\n const beforeValue = Array.isArray(value) && value.length ? value.join(',') : 'None';\n\n updateHistoryFields({\n afterValue:\n Array.isArray(selectedOptions) && !selectedOptions.length\n ? 'None'\n : selectedOptions.map(option => option.value).join(','),\n beforeValue,\n fieldChanged: fieldName,\n });\n }\n };\n\n const handleSave = useCallback(() => {\n const mappedValues = selectedOptions.reduce((acc: string[], curr: SelectOption<string>) => {\n if (curr.value !== '') {\n acc.push(curr.value);\n }\n\n return acc;\n }, []);\n\n const alphabeticalMappedValues = mappedValues.sort((a, b) => {\n return a.localeCompare(b);\n });\n\n updateField(alphabeticalMappedValues, fieldKey, undefined, handleCallback);\n setClosePopup(true);\n }, [handleCallback, selectedOptions, updateField, fieldKey]);\n\n const getLoadOptionsDelay = debounce((query: string, callback: SuccessErrorCallback) => {\n if (query.trim().length) {\n loadOptions(query, options => {\n const callbackResult = callback(options);\n\n // set current filter to a cached variable.\n setFetchedOptions(options);\n\n return callbackResult;\n });\n }\n }, 300);\n\n const values = useMemo(\n () => value.length && !value.includes(undefined as never) && value.join(', '),\n [value]\n );\n\n const handleDefaultValues = useCallback(() => {\n setSelectedOptions(\n (value as string[]).map(item => ({\n value: item,\n label: item,\n }))\n );\n }, [value]);\n\n const getIsValueChanged = () => {\n if (selectedOptions.length !== value.length) return false;\n\n return value.every(item => selectedOptions.some(option => option.value === item));\n };\n\n useEffect(() => {\n handleDefaultValues();\n }, [handleDefaultValues]);\n\n useOnClickOutside(popoverContentRef, () => {\n handleDefaultValues();\n });\n\n const handleCancel = useCallback(() => {\n setClosePopup(true);\n handleDefaultValues();\n }, [handleDefaultValues]);\n\n const handleDropdownKeyEvent = useCallback((event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n }, []);\n\n useEffect(() => {\n if (!closePopup) {\n setFetchedOptions([]);\n }\n }, [closePopup]);\n\n const content = (\n <div\n className=\"addon-popover\"\n role=\"presentation\"\n onKeyDown={handleDropdownKeyEvent}\n ref={containerRef}\n tabIndex={0}\n >\n <MultiSelectWrapper>\n <AsyncMultiSelect\n className=\"multiselect-async-creatable\"\n onChange={(options, action) => {\n const optionSet = new Set(\n (options as SelectOption[]).map(option => option.value.trim())\n );\n const updatedOptions = Array.from(optionSet).map(option => ({\n value: option,\n label: option,\n }));\n setSelectedOptions(updatedOptions);\n }}\n isValidNewOption={(\n inputValue: string,\n value: SelectOption[],\n options: SelectOption[]\n ) => {\n const itExists = options.some(option => inputValue.trim() === option.value.trim());\n\n return inputValue.trim() && !itExists;\n }}\n formatCreateLabel={(inputValue: string) => {\n return <span>Create \"{inputValue.trim()}\"</span>;\n }}\n openMenuOnFocus\n loadOptions={getLoadOptionsDelay}\n defaultOptions={fetchedOptions}\n defaultValue={selectedOptions}\n loadingMessage={({ inputValue }) =>\n inputValue.trim().length ? 'Loading...' : 'Begin typing'\n }\n closeMenuOnSelect={false}\n onMenuClose={() => containerRef.current && containerRef.current.focus()}\n blurInputOnSelect={false}\n controlShouldRenderValue\n maxLength={500}\n closeOnSelect\n isCreatable\n inputValue={inputValue}\n onInputChange={(newValue: string, { action }: InputActionMeta) => {\n if (action === 'input-change') {\n setInputValue(newValue);\n } else if (action === 'menu-close') {\n setInputValue('');\n }\n }}\n onKeyDown={e => handleDropdownKeyEvent(e as React.KeyboardEvent<HTMLElement>)}\n />\n </MultiSelectWrapper>\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n disabled={getIsValueChanged()}\n onClick={handleSave}\n >\n Save\n </Button>\n </div>\n </div>\n );\n\n if (!isFromGrid) {\n return (\n <EditPopover\n content={content}\n title={title}\n hidePenIcon={hidePenIcon}\n onVisibilityChange={handleCancel}\n getPopupContainer={getPopupContainer}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n isDynamicPopoverHeight={isDynamicPopoverHeight}\n destroyOnHide={destroyOnHide}\n >\n {hidePenIcon ? (\n 'Edit Field'\n ) : values ? (\n <TruncateTooltip className=\"edit-field--text\" title={values} placement={tooltipPosition}>\n {values}\n </TruncateTooltip>\n ) : (\n <span>{DEFAULT_EMPTY_VALUE}</span>\n )}\n </EditPopover>\n );\n }\n\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditCellPen\n content={content}\n title={title}\n closePopup={closePopup}\n onVisibilityChange={handleCancel}\n setClosePopup={setClosePopup}\n placement={'topLeft'}\n />\n }\n fill\n >\n {values ? (\n <DefaultTooltip title={values}>\n <Styled.TableCellInner>{values}</Styled.TableCellInner>\n </DefaultTooltip>\n ) : (\n <Styled.TableCellInner>{DEFAULT_EMPTY_VALUE}</Styled.TableCellInner>\n )}\n </InlineEdit>\n );\n};\n\nexport default React.memo(EditFieldMultiSelectAsyncCreatable);\n","/* eslint-disable no-nested-ternary */\nimport React, {\n ChangeEvent,\n useState,\n ReactNode,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n} from 'react';\nimport { useLocation } from 'react-router';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Input, Typography, Row, DatePicker } from 'antd';\nimport { OptionsType, ValueType } from 'react-select';\nimport { TagOutlined } from '@ant-design/icons';\nimport styled from 'styled-components';\nimport numeral from 'numeral';\nimport moment, { Moment } from 'moment';\nimport { debounce } from 'lodash';\n// models\nimport Company, { CompanyProfile } from '@optx/models/Company';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { ServiceType } from '../state/interfaces';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { SELECT_UNKNOWN } from '@optx/components/common/select/constants';\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\nimport { COMPANY_NAME_SEARCH_ENDPOINT, LAST_INVESTORS_SEARCH_ENDPOINT } from '@constants/search';\nimport globalConfig from '@optx/constants/config';\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\nimport { SEARCH_MINIMUM_CHAR_COUNT } from '@optx/constants/search';\nimport { regexNegativeAbbreviation } from '@optx/constants/regex';\n// utils\nimport { normalizeMonetaryMinusValues, parseNumberFromAbbreviation } from '@utils/number';\nimport { normalizeNegativeSignValues } from '@optx/utils/utils';\nimport { getLastRoundDisabledDate } from '@optx/utils/date';\n// redux\nimport {\n selectors as fundingRoundsSelectors,\n actions as fundingRoundsActions,\n} from '@redux/company/funding-rounds';\n// hooks\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\nimport { useHistoryTab } from '@optx/common/hooks/history';\nimport useUpdateFields from '../hooks/useUpdateFields';\n// components\nimport EditPopover from '@components/common/popover/EditPopover';\nimport { AsyncSingleSelect, SingleSelect } from '@optx/shared/view/molecules/Select';\nimport AsyncCreatableSelect from '@optx/components/common/select/AsyncCreatableSelect';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\ninterface EditFieldSingleSelectTextProps {\n company: CompanyProfile | Company;\n fieldName: 'Last Round';\n service: ServiceType;\n isFromAuditField?: boolean;\n validation?: (value: string) => boolean;\n getPopupContainer?: ((triggerNode: HTMLElement) => HTMLElement) | undefined;\n formatValue?: (value: number | string | null | undefined) => string;\n lastTemporaryFieldValue?: string | number;\n isProfileInformation?: boolean;\n hidePenIcon?: boolean;\n isDynamicPopoverHeight?: boolean;\n destroyOnHide?: boolean;\n actionPendo?: string;\n}\n\ninterface SelectType {\n label: string | null;\n value: string | number | null;\n}\n\nconst ContentContainer = styled.div`\n .ant-row {\n padding: 2px 0 !important;\n\n .ant-typography {\n padding-bottom: 2px;\n }\n }\n`;\n\nconst SelectAsyncContainer = styled(AsyncSingleSelect)`\n width: 100%;\n`;\nconst SelectContainer = styled(SingleSelect)`\n width: 100%;\n`;\n\nconst loadValue = (\n value: string | number | null,\n formatValue?: (value: number | string | null | undefined) => string\n) => {\n if (!value) return '';\n\n const formattedValue = formatValue && formatValue(value);\n\n return formattedValue === '0' ? '' : formattedValue || value || '';\n};\n\nconst EditFieldSingleSelectText: React.FC<EditFieldSingleSelectTextProps> = ({\n company,\n validation,\n formatValue,\n getPopupContainer,\n isProfileInformation = false,\n hidePenIcon,\n fieldName,\n service,\n isFromAuditField,\n lastTemporaryFieldValue,\n isDynamicPopoverHeight,\n destroyOnHide,\n actionPendo,\n}) => {\n const dispatch = useDispatch();\n const location = useLocation();\n const { updateHistoryFields } = useHistoryTab();\n const { updateField } = useUpdateFields({\n fieldName,\n companyUrl: company.company_url,\n companyId: company.company_id,\n service,\n });\n const [value, setValue] = useState<string | number>(\n loadValue(company.last_raised_amount, formatValue)\n );\n\n const title = `Edit \"${fieldName}\" value`;\n\n const lastTemporaryFieldValueFormatted =\n formatValue && company.last_raised_amount !== null\n ? formatValue(lastTemporaryFieldValue ?? company.last_raised_amount)\n : DEFAULT_EMPTY_VALUE;\n const [label, setLabel] = useState(loadValue(company.last_raised_amount, formatValue));\n const [extraValue, setExtraValue] = useState<string | ReactNode>(\n company.last_round ? `(${company.last_round})` : ''\n );\n const popoverContentRef = useRef(null);\n const lastTemporarySelectedValue = {\n label: company.last_round,\n value: company.last_round_id,\n };\n\n const [selectedType, setSelectedType] = useState<SelectType>({\n label: company.last_round,\n value: company.last_round_id,\n });\n const [selectedAcquiredCompany, setSelectedAcquiredCompany] = useState<SelectType>({\n label: company.parentcompany,\n value: company.parentcompany,\n });\n const [acquiredCompanyFetchedOptions, setAcquiredCompanyFetchedOptions] = useState<\n OptionsType<SelectOption>\n >([SELECT_UNKNOWN]);\n const { loadOptions: loadAcquiredCompanyOptions } = useAsyncSearch({\n endpoint: COMPANY_NAME_SEARCH_ENDPOINT,\n });\n\n const [selectedInvestorName, setSelectedInvestorName] = useState<SelectOption>({\n label: company.last_investors?.[0] || '',\n value: company.last_investors?.[0] || '',\n });\n const [investorNameFetchedOptions, setInvestorNameFetchedOptions] = useState<\n OptionsType<SelectOption>\n >([]);\n const { loadOptions: loadInvestorNameOptions } = useAsyncSearch({\n endpoint: LAST_INVESTORS_SEARCH_ENDPOINT,\n });\n\n const [raiseDate, setRaiseDate] = useState<Moment>(moment(company.raise_date || undefined));\n\n const [closePopup, setClosePopup] = useState(false);\n\n const fundingTypes = useSelector(fundingRoundsSelectors.getFundingTypes);\n const secondToLastRoundDate = useSelector(fundingRoundsSelectors.getSecondToLastRoundDate);\n const numberOfRounds = useSelector(fundingRoundsSelectors.getNumberOfRounds);\n\n const updateValue = useCallback(() => {\n setValue(loadValue(company.last_raised_amount, formatValue));\n setSelectedType({\n label: company.last_round,\n value: company.last_round_id,\n });\n setSelectedAcquiredCompany({\n label: company.parentcompany,\n value: company.parentcompany,\n });\n setSelectedInvestorName({\n label: company.last_investors?.[0] || '',\n value: company.last_investors?.[0] || '',\n });\n setRaiseDate(moment(company.raise_date || undefined));\n }, [company, formatValue]);\n\n useOnClickOutside(popoverContentRef, () => updateValue());\n\n const handleChangeInput = (event: ChangeEvent<HTMLInputElement>) => {\n const value = event.currentTarget.value;\n\n if (validation) {\n if (validation(value)) {\n setValue(value);\n } else {\n return;\n }\n } else {\n setValue(value);\n }\n };\n\n const handleSaveCallback = (data?: SuccessErrorCallback, showHistory?: boolean) => {\n if (data) {\n setLabel(value ? (parseNumberFromAbbreviation(value.toString()) as number) : '$0.0');\n\n if (selectedType?.label) {\n setExtraValue(`(${selectedType?.label})`);\n }\n\n if (showHistory) {\n if (lastTemporaryFieldValueFormatted !== value && formatValue) {\n updateHistoryFields({\n afterValue: value === '' ? null : value,\n beforeValue:\n lastTemporaryFieldValueFormatted === DEFAULT_EMPTY_VALUE\n ? null\n : lastTemporaryFieldValueFormatted,\n fieldChanged: 'Last Raised Amount',\n });\n }\n\n if (\n lastTemporarySelectedValue.value !== undefined &&\n lastTemporarySelectedValue.value !== selectedType.value\n ) {\n updateHistoryFields({\n afterValue: selectedType.label,\n beforeValue: lastTemporarySelectedValue.label,\n fieldChanged: 'Last Round',\n });\n }\n\n updateHistoryFields({\n afterValue: selectedAcquiredCompany.label,\n beforeValue: company.parentcompany,\n fieldChanged: 'Parent Company',\n });\n }\n\n if (location.pathname.includes('profile')) {\n dispatch(fundingRoundsActions.getCompanyFundingRounds(company.company_id));\n }\n }\n };\n\n const handleSave = () => {\n const lastInvestorValue = selectedInvestorName?.value ? [selectedInvestorName?.value] : [];\n\n const lastRound = {\n last_round: (selectedType?.label as string) || 'Unknown',\n last_round_id: (selectedType?.value as number) || 0,\n parentcompany: (selectedAcquiredCompany?.value ?? '') as string,\n last_investors: lastInvestorValue,\n raise_date: raiseDate.format(ISO_DATE_FORMAT),\n };\n const formattedValue = parseNumberFromAbbreviation(value.toString());\n\n const isValueAbbreviated = typeof value === 'string' && regexNegativeAbbreviation.test(value);\n\n updateField(\n isValueAbbreviated ? formattedValue : Number((formattedValue! * 1000000).toFixed(0)),\n 'last_raised_amount',\n lastRound,\n handleSaveCallback\n );\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n setClosePopup(true);\n };\n\n const handleCancel = () => setClosePopup(true);\n\n const handleDashLastRoundAmount = () => {\n if (company.last_round === null) {\n if (company.last_raised_amount !== 'Unknown' && company.last_raised_amount !== null) {\n return normalizeNegativeSignValues(\n numeral(company.last_raised_amount).format(`$${NUMBER_FORMAT}`)\n );\n }\n\n if (company.last_raised_amount === 'Unknown' || company.last_raised_amount === 0) {\n return 'Unknown';\n }\n\n return DEFAULT_EMPTY_VALUE;\n }\n\n if (company.last_raised_amount === 'Unknown' || company.last_raised_amount === 0) {\n return `Unknown ${extraValue}`;\n }\n\n if (company.last_round) {\n return `${normalizeNegativeSignValues(\n numeral(company.last_raised_amount).format(`$${NUMBER_FORMAT}`)\n )} ${extraValue}`;\n }\n\n const lastRoundValue = label\n ? formatValue\n ? `${normalizeMonetaryMinusValues(formatValue(label))}`\n : label\n : DEFAULT_EMPTY_VALUE;\n\n return `${lastRoundValue} ${extraValue}`;\n };\n\n const onVisibilityChange = () => {\n setValue(loadValue(company.last_raised_amount, formatValue));\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n useEffect(() => {\n setValue(loadValue(company.last_raised_amount, formatValue));\n setLabel(loadValue(company.last_raised_amount, formatValue));\n setSelectedType({\n label: company.last_round,\n value: company.last_round_id,\n });\n setSelectedInvestorName({\n label: company.last_investors?.[0] || '',\n value: company.last_investors?.[0] || '',\n });\n setRaiseDate(moment(company.raise_date || undefined));\n setExtraValue(company.last_round ? `(${company.last_round})` : '');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [company]);\n\n const loadAcquiredCompanyOptionsDelay = debounce(\n (query: string, callback: SuccessErrorCallback) => {\n if (query.length >= SEARCH_MINIMUM_CHAR_COUNT) {\n loadAcquiredCompanyOptions(query, options => {\n options.unshift(SELECT_UNKNOWN);\n const callbackResult = callback(options);\n\n // set current filter to a cached variable.\n setAcquiredCompanyFetchedOptions(options);\n\n return callbackResult;\n });\n }\n },\n 300\n );\n\n const loadInvestorNameOptionsDelay = (query: string, callback: SuccessErrorCallback) => {\n if (query.length >= SEARCH_MINIMUM_CHAR_COUNT) {\n loadInvestorNameOptions(query, options => {\n const callbackResult = callback(options);\n\n // set current filter to a cached variable.\n setInvestorNameFetchedOptions(options);\n\n return callbackResult;\n });\n }\n };\n\n // when menu is closed, clear cached values.\n const handleAcquiringCompanyMenuClose = () => {\n setAcquiredCompanyFetchedOptions([SELECT_UNKNOWN]);\n };\n\n // when menu is closed, clear cached values.\n const handleInvestorNameMenuClose = () => {\n setInvestorNameFetchedOptions([{ label: '', value: '' }]);\n };\n\n const handleFundingRoundDateChange = (value: moment.Moment | null) => {\n if (value) setRaiseDate(value);\n };\n\n const handleInvestorNameChange = (option: ValueType<SelectOption<string>> | null) => {\n // avoid label with 'Create' prefix from CreatableSelect\n const value = option ? (option as SelectOption).value : '';\n setSelectedInvestorName({ label: value, value });\n };\n\n const isButtonActive = useMemo(() => {\n const isRaiseDateChanged =\n raiseDate.format(ISO_DATE_FORMAT) !==\n moment(company.raise_date || undefined).format(ISO_DATE_FORMAT);\n const isInvestorNameChanged =\n !(\n selectedInvestorName.value === '' &&\n (!company.last_investors || company.last_investors?.length === 0)\n ) && !company.last_investors?.includes(selectedInvestorName.value);\n\n const someValueChanged =\n selectedType.value !== company.last_round_id ||\n selectedAcquiredCompany.value !== company.parentcompany ||\n isInvestorNameChanged ||\n isRaiseDateChanged ||\n value !== loadValue(company.last_raised_amount, formatValue);\n\n const isAcquiredCompanyFilled =\n selectedType?.label !== 'Acquisition' ||\n (selectedType?.label === 'Acquisition' && selectedAcquiredCompany?.value !== null);\n\n return someValueChanged && isAcquiredCompanyFilled;\n }, [\n selectedInvestorName,\n selectedType.value,\n selectedType?.label,\n company.last_round_id,\n company.parentcompany,\n company.last_investors,\n company.raise_date,\n company.last_raised_amount,\n selectedAcquiredCompany.value,\n raiseDate,\n value,\n formatValue,\n ]);\n\n const lastRoundDisabledDate = getLastRoundDisabledDate(\n raiseDate,\n moment(secondToLastRoundDate),\n numberOfRounds\n );\n\n const content = (\n <ContentContainer className=\"profile-information__financial\" ref={popoverContentRef}>\n <Row>\n <Typography.Text>Funding Type</Typography.Text>\n <SelectContainer\n options={fundingTypes}\n onChange={(input: SelectType) => {\n if (input.label !== 'Acquisition' && selectedAcquiredCompany.label !== null) {\n setSelectedAcquiredCompany({\n label: null,\n value: null,\n });\n }\n\n setSelectedType(input);\n }}\n value={selectedType}\n placeholder=\"Please Select\"\n closeMenuOnSelect\n SearchIcon={null}\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n />\n </Row>\n {selectedType?.label === 'Acquisition' && (\n <Row>\n <Typography.Text>Acquiring company</Typography.Text>\n <SelectAsyncContainer\n className=\"addon--multiselect-async\"\n onChange={(value: SelectOption) => setSelectedAcquiredCompany(value)}\n loadOptions={loadAcquiredCompanyOptionsDelay}\n controlShouldRenderValue\n closeMenuOnSelect\n defaultOptions={acquiredCompanyFetchedOptions}\n required={selectedType?.label === 'Acquisition'}\n defaultValue={selectedAcquiredCompany}\n value={selectedAcquiredCompany}\n closeOnSelect\n onSelectResetsInput={false}\n blurInputOnSelect={false}\n onMenuClose={handleAcquiringCompanyMenuClose}\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n autoFocus\n />\n </Row>\n )}\n <Row>\n <Typography.Text>Funding Amount</Typography.Text>\n <Input\n value={value}\n onChange={handleChangeInput}\n placeholder={'in millions of dollars'}\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n />\n </Row>\n <Row>\n <Typography.Text>Investor Name</Typography.Text>\n <AsyncCreatableSelect\n value={selectedInvestorName}\n loadOptions={loadInvestorNameOptionsDelay}\n options={investorNameFetchedOptions}\n onChange={handleInvestorNameChange}\n onMenuClose={handleInvestorNameMenuClose}\n controlShouldRenderValue\n closeMenuOnSelect\n disableValueRemove\n autoFocus={false}\n onKeyDown={e => e && e.key === 'Enter' && handleSave()}\n tabIndex={0}\n />\n </Row>\n <Row>\n <Typography.Text>Funding Round Date</Typography.Text>\n <DatePicker\n value={raiseDate}\n defaultValue={raiseDate}\n onChange={handleFundingRoundDateChange}\n allowClear={false}\n disabledDate={lastRoundDisabledDate}\n format={globalConfig.short_date.DATE_FORMAT}\n getPopupContainer={trigger => trigger.parentNode as HTMLElement}\n tabIndex={0}\n />\n </Row>\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n disabled={!isButtonActive}\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSave}\n >\n Save\n </Button>\n </div>\n </ContentContainer>\n );\n\n if (isFromAuditField) {\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n onVisibilityChange={onVisibilityChange}\n hidePenIcon={hidePenIcon}\n getPopupContainer={getPopupContainer}\n placement=\"top\"\n isDynamicPopoverHeight={isDynamicPopoverHeight}\n destroyOnHide={destroyOnHide}\n customOverlayStyle={{ zIndex: 1060 }} // make it stay above \"Edit Field\" menu item\n >\n Edit Field\n </EditPopover>\n );\n }\n\n if (isProfileInformation) {\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n onVisibilityChange={onVisibilityChange}\n getPopupContainer={getPopupContainer}\n hidePenIcon={hidePenIcon}\n >\n <TruncateTooltip title={handleDashLastRoundAmount()}>\n {handleDashLastRoundAmount()}\n </TruncateTooltip>\n </EditPopover>\n );\n }\n\n return (\n <div className=\"media-object company-kpi\">\n <div className=\"media-object-section\">\n <div className=\"company-kpi__icon\">\n <TagOutlined />\n </div>\n </div>\n <div className=\"media-object-section\">\n <div className=\"company-kpi__title company-kpi__edit\">\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n onVisibilityChange={onVisibilityChange}\n hidePenIcon={false}\n getPopupContainer={getPopupContainer}\n placement=\"bottom\"\n actionPendo={actionPendo}\n >\n {handleDashLastRoundAmount()}\n </EditPopover>\n </div>\n <div className=\"company-kpi__label\">Last Round</div>\n </div>\n </div>\n );\n};\n\nexport default React.memo(EditFieldSingleSelectText);\n","import { useEffect } from 'react';\nimport { findDOMNode } from 'react-dom';\n\n/**\n * Custom hook that automatically focuses an input element within a given DOM node.\n *\n * @param {React.RefObject<HTMLElement>} ref - A React ref object pointing to a DOM element.\n * @param {boolean} shouldFocus - A boolean indicating whether the input should be focused.\n *\n * @example\n * const checkboxRef = useRef<HTMLElement | null>(null);\n * useAutoFocusCheckbox(checkboxRef, true);\n */\nfunction useAutoFocusCheckbox(ref: React.RefObject<HTMLElement>, shouldFocus: boolean) {\n useEffect(() => {\n const domNode = findDOMNode(ref.current) as HTMLElement;\n\n if (domNode) {\n setTimeout(() => {\n const inputElement = domNode.querySelector('input') as HTMLElement;\n\n if (inputElement && shouldFocus) {\n inputElement.focus({ preventScroll: true });\n }\n }, 100);\n }\n }, [ref, shouldFocus]);\n}\n\nexport default useAutoFocusCheckbox;\n","import { debounce } from 'lodash';\nimport React, { useState, useEffect, useRef } from 'react';\n\nconst PEN_ICON_WIDTH = 16;\nconst SEPARATOR_WIDTH = 7.4;\nconst ELLIPSIS_TEXT = '... ';\nconst FONT_TYPE = '14px SF Pro Display';\n\nconst getTextWidth = (() => {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n return (text: string, font: string) => {\n if (context) {\n context.font = font;\n\n return context.measureText(text).width;\n }\n\n return 0;\n };\n})();\n\nconst getFinalText = (text: string, containerWidth: number, remainingItemsNr: number) => {\n const additionalText =\n remainingItemsNr < 1 ? ELLIPSIS_TEXT : `${ELLIPSIS_TEXT}(${remainingItemsNr} more)`;\n const additionalTextWidth = getTextWidth(additionalText, FONT_TYPE);\n\n for (let c = 0; c < text.length; c++) {\n const subStrWidth = getTextWidth(text.substring(0, c), FONT_TYPE);\n const adjustedTextWidth = Math.ceil(subStrWidth + additionalTextWidth);\n\n if (adjustedTextWidth >= containerWidth) {\n const newText = text.substring(0, c - 1);\n\n return newText.endsWith('; ') || newText.endsWith(';')\n ? newText + `${ELLIPSIS_TEXT}(${remainingItemsNr + 1} more)`\n : newText + additionalText;\n } else if (c === text.length - 1) {\n return remainingItemsNr >= 1 ? text + additionalText : text;\n }\n }\n\n return '';\n};\n\ninterface DynamicListDisplayProps {\n list: string[];\n}\n\nconst DynamicListDisplay: React.FC<DynamicListDisplayProps> = ({ list }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [text, setText] = useState<string>('');\n\n useEffect(() => {\n const currentRefParent = containerRef.current?.parentElement;\n const containerWidth = currentRefParent!.offsetWidth - PEN_ICON_WIDTH || 0;\n\n const updateVisibleNames = () => {\n if (!currentRefParent) return;\n\n if (list.length === 1) {\n const nameWidth = getTextWidth(list[0], FONT_TYPE);\n\n setText(nameWidth > containerWidth ? getFinalText(list[0], containerWidth, 0) : list[0]);\n\n return;\n }\n\n for (let i = 0; i < list.length; i++) {\n const item = list.slice(0, i + 1).join('; ');\n const nameWidth = getTextWidth(item, FONT_TYPE);\n const remainingItems = list.length - (i + 1);\n const additionalText =\n i === list.length - 1 ? ELLIPSIS_TEXT : `${ELLIPSIS_TEXT}(${remainingItems} more)`;\n const additionalTextWidth = getTextWidth(additionalText, FONT_TYPE);\n const testWidth = Math.ceil(nameWidth + additionalTextWidth + i * SEPARATOR_WIDTH);\n\n if (testWidth > containerWidth) {\n setText(getFinalText(item, containerWidth - i * SEPARATOR_WIDTH, remainingItems));\n break;\n } else if (i === list.length - 1) {\n setText(item);\n }\n }\n };\n\n updateVisibleNames();\n\n const handleResize = debounce(updateVisibleNames, 100);\n let resizeObserver: ResizeObserver | null = null;\n\n if (currentRefParent) {\n resizeObserver = new ResizeObserver(handleResize);\n resizeObserver.observe(currentRefParent);\n }\n\n return () => {\n if (resizeObserver && currentRefParent) {\n resizeObserver.unobserve(currentRefParent);\n }\n };\n }, [list]);\n\n return (\n <span ref={containerRef} style={{ cursor: 'pointer' }} data-full-list={list.join(';')}>\n {text}\n </span>\n );\n};\n\nexport default DynamicListDisplay;\n","import styled from 'styled-components';\nimport { Link } from 'react-router-dom';\nimport { Tooltip } from 'antd';\n// components\nimport { AsyncSingleSelect } from '@optx/shared/view/molecules/Select';\n\nconst ContentContainer = styled.div`\n .ant-row {\n padding: 0 !important;\n height: 100%;\n }\n`;\nconst AddOnLinkContainer = styled.div`\n .action-wrapper {\n visibility: hidden;\n position: absolute;\n right: 0;\n top: 0;\n }\n\n &:hover {\n .action-wrapper {\n visibility: visible;\n }\n }\n\n .inline-edit-wrapper {\n display: inline-block;\n padding-right: 30px;\n position: relative;\n width: auto;\n }\n\n .children-wrapper {\n display: inline-block;\n flex: none;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nconst StyledAsyncSingleSelect = styled(AsyncSingleSelect)`\n display: 'block';\n width: 100%;\n`;\n\nconst DefaultTooltip = styled(Tooltip)`\n display: block;\n padding-right: 5px;\n`;\n\nconst NewTabLink = styled(Link)`\n color: #000000;\n padding: 0 3px;\n`;\n\nconst PopoverContent = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n`;\n\nconst ProfileAddonList = styled.span`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: inline-block;\n width: 100%;\n`;\n\nexport const Styled = {\n ContentContainer,\n AddOnLinkContainer,\n StyledAsyncSingleSelect,\n DefaultTooltip,\n NewTabLink,\n PopoverContent,\n ProfileAddonList,\n};\n","import React, { useEffect, useRef, useState, useContext, useCallback } from 'react';\nimport { OptionsType } from 'react-select';\nimport { CheckboxChangeEvent } from 'antd/lib/checkbox';\nimport { Button, Checkbox, Row, Typography } from 'antd';\nimport { Link, useLocation } from 'react-router-dom';\nimport { debounce, isEqual } from 'lodash';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport Company, { Addon, CompanyProfile, CompanyUserValuesKeys } from '@optx/models/Company';\nimport { CustomValue, ServiceType } from '../state/interfaces';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { CompanyProfileTabs } from '@optx/constants/routes';\nimport { COMPANY_NAME_SEARCH_ENDPOINT } from '@constants/search';\nimport { ADVANCED_SEARCH, MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\nimport { SEARCH_MINIMUM_CHAR_COUNT } from '@optx/constants/search';\n// utils\nimport { formatAddon } from '@optx/utils/format';\n// hooks\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\nimport useUpdateFields from '../hooks/useUpdateFields';\nimport useReferrerProfileLink from '@hooks/useReferrerLink';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\nimport useAutoFocusCheckbox from '@optx/common/hooks/useAutoFocusCheckbox';\n// components\nimport EditCellPen from '@optx/components/common/table/Companies/styled-cells/EditCellPen';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport Popover from '@optx/shared/view/molecules/Popover';\nimport { DropdownAddContext } from '@optx/components/DropdownAdd/DropdownAddContext';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\nimport { AsyncMultiSelect } from '@optx/shared/view/molecules/Select';\nimport Icon from '@components/common/Icon';\nimport DynamicListDisplay from '@optx/shared/view/molecules/DynamicListDisplay/DynamicListDisplay';\n// styles\nimport { Styled } from './EditFieldCheckBoxSelectAsync.styled';\n\ninterface EditFieldCheckBoxAsyncProps {\n value: Addon | null;\n record: Company | CompanyProfile | undefined;\n fieldName: 'Add-on';\n fieldKey?: CompanyUserValuesKeys;\n hidePenIcon?: boolean;\n isFromGridDropDown?: boolean;\n dropdownLabel?: string;\n service: ServiceType;\n successMessage: string;\n errorMessage: string;\n type?: 'check' | 'company';\n isFromGrid: boolean;\n hasAddonLink?: boolean;\n isFromHistory?: boolean;\n callbackComponent?: () => void;\n actionPendo?: string;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n}\n\nconst EditFieldCheckBoxSelectAsync: React.FC<EditFieldCheckBoxAsyncProps> = ({\n value,\n record,\n fieldName,\n fieldKey,\n isFromGrid,\n service,\n successMessage,\n errorMessage,\n type = 'check',\n isFromGridDropDown,\n dropdownLabel,\n hidePenIcon,\n hasAddonLink,\n isFromHistory,\n callbackComponent,\n actionPendo,\n getPopupContainer,\n}) => {\n const { setDropdownVisible } = useContext(DropdownAddContext);\n const location = useLocation();\n\n const { updateField } = useUpdateFields({\n fieldName,\n companyId: record?.company_id ?? 0,\n companyUrl: record?.company_url ?? null,\n service,\n successMessage,\n errorMessage,\n isFromHistory,\n });\n\n const addonCheck = value !== null && Object.keys(value).length !== 0;\n\n const popoverContentRef = useRef(null);\n const checkboxRef = useRef<HTMLInputElement | null>(null);\n const [closePopup, setClosePopup] = useState(false);\n const [isFocus, setIsFocus] = useState(false);\n const [isButtonDisabled, setIsButtonDisabled] = useState(false);\n const [checkboxValue, setCheckboxValue] = useState(addonCheck);\n const [associatedCompanies, setAssociatedCompanies] = useState<OptionsType<SelectOption>>([]);\n const [fetchedOptions, setFetchedOptions] = useState<OptionsType<SelectOption>>();\n const { loadOptions } = useAsyncSearch({ endpoint: COMPANY_NAME_SEARCH_ENDPOINT });\n\n const currentGridName = useCurrentGridName();\n const isCheckBoxClicked = useRef(false);\n const { getReferrerUrl } = useReferrerProfileLink();\n\n const handleDefaultValues = useCallback(() => {\n setAssociatedCompanies(\n Object.entries(value || {}).map(([key, value]) => ({\n label: key,\n value: key,\n id: value,\n }))\n );\n }, [value]);\n\n const associatedCompaniesAsAddon = useCallback(() => {\n return associatedCompanies.reduce(\n (acc, company) => ({ ...acc, [company.value]: company.id }),\n {} as Addon\n );\n }, [associatedCompanies]);\n\n useAutoFocusCheckbox(checkboxRef, isFocus);\n\n useEffect(() => {\n if (isEqual(value, associatedCompaniesAsAddon())) {\n setIsButtonDisabled(true);\n } else if (!checkboxValue || (checkboxValue && associatedCompanies.length > 0)) {\n setIsButtonDisabled(false);\n } else {\n setIsButtonDisabled(true);\n }\n }, [checkboxValue, value, associatedCompanies, associatedCompaniesAsAddon]);\n\n useEffect(() => {\n setCheckboxValue(addonCheck);\n handleDefaultValues();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [handleDefaultValues]);\n\n if (!record) return null;\n\n const title = `${fieldName} Management`;\n\n const handlePendoActionCallBack = () => {\n if (callbackComponent) {\n callbackComponent();\n } else {\n if (isCheckBoxClicked.current) {\n handlePendoAction('CheckBox');\n }\n\n handlePendoAction('Save');\n isCheckBoxClicked.current = false;\n }\n };\n\n const updateCompanyAddonCheckbox = (event: CheckboxChangeEvent) => {\n const { checked } = event.target;\n isCheckBoxClicked.current = true;\n setCheckboxValue(checked);\n\n if (checked === false) {\n setAssociatedCompanies([]);\n }\n };\n\n const handleSave = () => {\n setClosePopup(true);\n setDropdownVisible(false);\n const payload: CustomValue = {\n value: checkboxValue,\n optionalValue: associatedCompaniesAsAddon(),\n additionalValue: record.company_id,\n };\n\n if (addonCheck === checkboxValue && isEqual(value, associatedCompaniesAsAddon())) {\n return null;\n }\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n return updateField(payload, fieldKey, undefined, handlePendoActionCallBack);\n };\n\n const handleCancel = () => {\n setCheckboxValue(addonCheck);\n handleDefaultValues();\n setClosePopup(true);\n setIsFocus(false);\n };\n\n const getLoadOptionsDelay = debounce((query: string, callback: SuccessErrorCallback) => {\n if (query.length >= SEARCH_MINIMUM_CHAR_COUNT) {\n loadOptions(query, options => {\n options.unshift();\n const callbackResult = callback(options);\n\n // set current filter to a cached variable.\n setFetchedOptions(options);\n\n return callbackResult;\n });\n }\n }, 300);\n\n const onAsyncMultiselectMenuClose = () => {\n setFetchedOptions([]);\n };\n\n const getDisabledStatus = () => {\n if (!checkboxValue) return false;\n\n if (checkboxValue && (!associatedCompanies || associatedCompanies?.length === 0)) {\n return true;\n }\n\n return false;\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n const handlePendoAction = (action: string) => {\n if (currentGridName === 'Advanced Search' && fieldName === 'Add-on') {\n sendPendoData(`${ADVANCED_SEARCH}_EditAddOn_${action}`);\n } else if (currentGridName === 'My Companies' && fieldName === 'Add-on') {\n sendPendoData(`${MY_COMPANIES_PENDO}_EditAddOn_${action}`);\n }\n };\n\n const content = (\n <Styled.ContentContainer\n className=\"profile-information__financial\"\n ref={popoverContentRef}\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n >\n <Row>\n <Checkbox\n ref={el => {\n checkboxRef.current = el;\n }}\n autoFocus={!isFromGrid}\n defaultChecked={checkboxValue}\n checked={checkboxValue}\n onChange={updateCompanyAddonCheckbox}\n >\n Company is an Add-on\n </Checkbox>\n </Row>\n <Row style={{ marginTop: 8, width: 280 }}>\n <Typography.Text>Associated Company / Platform</Typography.Text>\n <AsyncMultiSelect\n className=\"addon--multiselect-async\"\n onChange={options => {\n const mappedOptions = (options as SelectOption[]).map(option => ({\n ...option,\n label: option.value,\n }));\n\n setAssociatedCompanies(mappedOptions);\n }}\n loadOptions={getLoadOptionsDelay}\n defaultOptions={fetchedOptions}\n defaultValue={associatedCompanies}\n autoFocus={false}\n // addon values can repeat causing multiselect issues\n getOptionValue={(option: SelectOption) => option.id?.toString() || ''}\n loadingMessage={({ inputValue }) =>\n inputValue.length > 2 ? 'Loading...' : 'Begin typing'\n }\n isDisabled={!checkboxValue}\n controlShouldRenderValue\n closeMenuOnSelect={false}\n onMenuClose={onAsyncMultiselectMenuClose}\n onSelectResetsInput={false}\n blurInputOnSelect={false}\n maxLength={500}\n closeOnSelect\n />\n {getDisabledStatus() && (\n <Typography.Text type=\"danger\">Select a parent company</Typography.Text>\n )}\n </Row>\n <div\n className=\"profile-information__popover-buttons\"\n style={{ margin: getDisabledStatus() ? '7px 0 0 -16px' : '29px 0 0 -16px' }}\n >\n <Button\n className=\"profile-information__cancel\"\n onClick={() => {\n handlePendoAction('Cancel');\n handleCancel();\n }}\n >\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n disabled={isButtonDisabled}\n onClick={handleSave}\n >\n Save\n </Button>\n </div>\n </Styled.ContentContainer>\n );\n\n if (hasAddonLink && value) {\n const editPopover = (\n <EditPopover\n content={content}\n title={title}\n onVisibilityChange={handleCancel}\n closePopup={closePopup}\n hidePenIcon={hidePenIcon}\n setClosePopup={setClosePopup}\n destroyOnHide\n getPopupContainer={getPopupContainer}\n >\n <Styled.ProfileAddonList>{formatAddon(value)}</Styled.ProfileAddonList>\n </EditPopover>\n );\n\n if (value && Object.keys(value).length) {\n return (\n <Popover\n placement=\"bottomLeft\"\n title={null}\n content={\n <Styled.PopoverContent>\n {Object.entries(value).map(([companyName, companyId]) => {\n if (!companyId) return null;\n\n const link =\n `/profile/${companyId}` +\n location.search.replace(/&tab=[^&]*/, `&tab=${CompanyProfileTabs.ADDON_MGMT}`);\n\n return (\n <Styled.AddOnLinkContainer>\n <InlineEdit\n key={companyId}\n action={\n <Styled.NewTabLink to={link} target=\"_blank\">\n <Icon iconName=\"open-in-new\" />\n </Styled.NewTabLink>\n }\n >\n <span>\n <Link to={link}>{companyName}</Link>\n </span>\n </InlineEdit>\n </Styled.AddOnLinkContainer>\n );\n })}\n </Styled.PopoverContent>\n }\n >\n {editPopover}\n </Popover>\n );\n }\n\n return editPopover;\n }\n\n if (!isFromGrid || isFromGridDropDown) {\n return (\n <EditPopover\n content={content}\n title={title}\n onVisibilityChange={handleCancel}\n closePopup={closePopup}\n hidePenIcon={hidePenIcon}\n setClosePopup={setClosePopup}\n actionPendo={actionPendo}\n destroyOnHide\n getPopupContainer={getPopupContainer}\n >\n {isFromHistory\n ? 'Edit Field'\n : isFromGrid ||\n (type === 'check' ? (\n <Checkbox checked={addonCheck} style={{ pointerEvents: 'none' }} />\n ) : (\n <TruncateTooltip title={formatAddon(value)} placement=\"topLeft\">\n {formatAddon(value)}\n </TruncateTooltip>\n ))}\n {dropdownLabel && dropdownLabel}\n </EditPopover>\n );\n }\n\n return (\n <InlineEdit\n action={\n <EditCellPen\n content={content}\n title={title}\n onVisibilityShow={() => {\n setIsFocus(true);\n }}\n destroyOnHide={false}\n onVisibilityChange={handleCancel}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n getPopupContainer={getPopupContainer}\n />\n }\n fill\n >\n {value && Object.keys(value).length ? (\n <Popover\n placement=\"topLeft\"\n title={null}\n trigger=\"click\"\n content={\n <Styled.PopoverContent>\n {Object.entries(value).map(([companyName, companyId]) => {\n if (!companyId) return null;\n\n const link = getReferrerUrl(companyId) + `&tab=${CompanyProfileTabs.ADDON_MGMT}`;\n\n return (\n <Styled.AddOnLinkContainer>\n <InlineEdit\n key={companyId}\n action={\n <Styled.NewTabLink to={link} target=\"_blank\">\n <Icon iconName=\"open-in-new\" />\n </Styled.NewTabLink>\n }\n >\n <span>\n <Link to={link}>{companyName}</Link>\n </span>\n </InlineEdit>\n </Styled.AddOnLinkContainer>\n );\n })}\n </Styled.PopoverContent>\n }\n >\n <div>\n <DynamicListDisplay list={Object.keys(value)} />\n </div>\n </Popover>\n ) : (\n DEFAULT_EMPTY_VALUE\n )}\n </InlineEdit>\n );\n};\n\nexport default React.memo(EditFieldCheckBoxSelectAsync);\n","export const VALIDATE_EDIT_FINANCIAL_FIELD_KEYS = {\n revenue_list: 'Revenue',\n ebitda_list: 'EBITDA',\n annual_recurring_revenue: 'ARR',\n gross_margin_list: 'GM %',\n};\n\nexport const MAX_RANGE_VALUE = 4100000000000;\n","import { Dispatch, SetStateAction } from 'react';\nimport { isEqual } from 'lodash';\n// models\nimport { FinancialFieldType } from '@optx/models/Company';\nimport { SelectOption } from '@optx/models/Option';\nimport { FieldOptions } from '../state/interfaces';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport {\n ABBR_NEGATIVE_VALUES_SPECIAL_OPTIONS_ERROR_MESSAGE,\n ABBREVIATION_WITH_NEGATIVE_VALUES_ERROR_MESSAGE,\n} from '@optx/constants/table/cells';\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\n// utils\nimport {\n getMostRecentAmount,\n getMostRecentYear,\n isOptionChecked,\n getMostRecentSource,\n} from '@optx/utils/option';\nimport { roundNumber, normalizeMonetaryMinusValues } from '@optx/utils/number';\nimport { validateFloatAbbreviation } from '@optx/utils/validation';\n\ninterface FinancialFieldProps {\n amount: string | undefined;\n fieldListValues: FinancialFieldType[] | null;\n options: SelectOption<string>[] | undefined;\n isFromSource: boolean | undefined;\n setLabel: Dispatch<SetStateAction<string>>;\n setAmount: Dispatch<SetStateAction<string | undefined>>;\n setYear: Dispatch<SetStateAction<string | number | undefined>>;\n setIsFromSource: Dispatch<SetStateAction<boolean | undefined>>;\n setDisabled: Dispatch<SetStateAction<boolean>>;\n setError: Dispatch<SetStateAction<string>>;\n fieldName: FieldOptions;\n customFinancialYear?: number;\n}\n\nconst useFinancialField = ({\n amount,\n fieldListValues,\n options,\n isFromSource,\n setLabel,\n setAmount,\n setYear,\n setIsFromSource,\n setDisabled,\n setError,\n fieldName,\n customFinancialYear,\n}: FinancialFieldProps) => {\n const updateFinancialFields = () => {\n if (fieldListValues?.length) {\n const amountValue = getMostRecentAmount(fieldListValues, customFinancialYear);\n setIsFromSource(getMostRecentSource(fieldListValues));\n\n // check to see if value for amount was a string option, a number or range option\n if (typeof amountValue === 'string') {\n setLabel(amountValue === '' ? DEFAULT_EMPTY_VALUE : amountValue);\n setAmount(amountValue === DEFAULT_EMPTY_VALUE ? '' : amountValue);\n } else if (typeof amountValue === 'number' && fieldName === 'GM %') {\n setAmount(amountValue.toString());\n setLabel(`${amountValue.toString()}%`);\n } else if (typeof amountValue === 'number' || !amountValue) {\n const abbrLabel = roundNumber(amountValue, NUMBER_FORMAT);\n setLabel(normalizeMonetaryMinusValues(abbrLabel));\n setAmount((amountValue! / 1000000).toString());\n } else {\n const amountOption = options?.find(option => isEqual(option.rangeValue, amountValue));\n\n if (amountOption) {\n setLabel(amountOption.label);\n setAmount(amountOption.label);\n // fix for old hardcoded range values for gm to display min value\n } else if (!amountOption && fieldName === 'GM %') {\n setAmount(amountValue.min?.toString());\n }\n }\n\n setYear(customFinancialYear || getMostRecentYear(fieldListValues));\n } else {\n setYear(customFinancialYear || new Date().getFullYear());\n setLabel(DEFAULT_EMPTY_VALUE);\n setAmount('');\n }\n };\n\n const isAmountValid = () => {\n if (\n amount !== null &&\n amount !== undefined &&\n (validateFloatAbbreviation(amount, true) || isOptionChecked(amount, options))\n ) {\n return true;\n }\n\n return false;\n };\n\n const validateSave = () => {\n const errorMessage = options\n ? ABBR_NEGATIVE_VALUES_SPECIAL_OPTIONS_ERROR_MESSAGE\n : ABBREVIATION_WITH_NEGATIVE_VALUES_ERROR_MESSAGE;\n let isValid = true;\n\n if (!isAmountValid()) {\n isValid = false;\n setError(errorMessage);\n }\n\n if (!isValid) {\n setDisabled(true);\n }\n\n return isValid;\n };\n\n const isAmountValidForSource = (year: number) => {\n const errorMessage = 'Amount cannot be empty for source!';\n const findSourceInfo = fieldListValues?.filter(item => item.year === year)[0]?.from_source;\n\n if (!findSourceInfo || (findSourceInfo && amount !== '')) {\n return true;\n }\n\n setError(errorMessage);\n\n return false;\n };\n\n return { updateFinancialFields, isAmountValid, validateSave, isAmountValidForSource };\n};\n\nexport default useFinancialField;\n","import styled from 'styled-components';\n\ninterface ContentProps {\n isArr?: boolean;\n}\n\nconst Content = styled.div<ContentProps>`\n width: ${props => (props.isArr ? '265px' : '300px')};\n\n .amount-wrapper {\n position: relative;\n margin-bottom: 16px;\n flex-direction: column;\n }\n\n .error {\n position: absolute;\n top: 58px;\n line-height: 1.2;\n left: 0;\n }\n\n .ant-row {\n padding: 0 !important;\n }\n .ant-input-affix-wrapper {\n margin-bottom: 20px;\n > input.ant-input {\n margin: 0;\n }\n }\n`;\n\nexport default Content;\n","import React, { useState, ChangeEvent, useEffect, useRef } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { MenuInfo } from 'rc-menu/lib/interface';\nimport { Button, Select, Input, Row, Typography } from 'antd';\nimport { isEqual } from 'lodash';\nimport { usePrevious } from '@umijs/hooks';\n// models\nimport { FinancialFieldRangeValue, FinancialFieldType } from '@models/Company';\nimport { ServiceType, FieldOptions } from '@features/company/edit-fields/state/interfaces';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { VALIDATE_EDIT_FINANCIAL_FIELD_KEYS } from '@optx/constants/editFieldFinancials';\nimport { ADVANCED_SEARCH } from '@optx/constants/pendoAction';\nimport { regexNegativeAbbreviation, numberPercentageMatchRegex } from '@optx/constants/regex';\n// utils\nimport { generateYears } from '@optx/utils/option';\nimport { getMostRecentYear, isOptionChecked } from '@optx/utils/option';\nimport { getAmount, validateField, isYearEstimated } from '@optx/utils/editFields';\nimport { normalizeNegativeSignValues, sendPendoData } from '@optx/utils/utils';\nimport { highlightText } from '@optx/utils/text';\nimport { parseNumberFromAbbreviation } from '@optx/utils/number';\nimport { roundingPresentationValues } from '@optx/utils/dealPresentation';\n// components\nimport EditPopover from '@components/common/popover/EditPopover';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport InputWithDropdown from '@optx/shared/view/molecules/FormFields/InputWithDropdown';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n// redux\nimport { actions as opportunityActions } from '@redux/company/opportunity-presentation';\n// hooks\nimport useUpdateFields from '../hooks/useUpdateFields';\nimport useFinancialField from '../hooks/useFinancialField';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\n// styles\nimport Container from './EditFieldFinancial.styled';\n\nconst { Option } = Select;\nconst { Text } = Typography;\n\ninterface EditFieldFinancialProps {\n companyId: number;\n fieldKey: 'revenue_list' | 'ebitda_list' | 'annual_recurring_revenue' | 'gross_margin_list';\n companyUrl: string | null;\n extraKeys?: string[];\n fieldListValues: FinancialFieldType[] | null;\n service: ServiceType | null;\n fieldName: FieldOptions;\n isFromGrid?: boolean;\n dbSource?: string | null;\n hidePenIcon?: boolean;\n isFromHistory?: boolean;\n options: SelectOption[];\n actionPendo?: string;\n customFinancialYear?: number;\n}\n\nconst EditFieldFinancial: React.FC<EditFieldFinancialProps> = ({\n fieldKey,\n // used for property names required by api\n extraKeys,\n companyId,\n companyUrl,\n fieldListValues,\n service,\n fieldName,\n isFromGrid,\n dbSource,\n hidePenIcon,\n isFromHistory,\n options,\n actionPendo,\n customFinancialYear,\n}) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const dispatch = useDispatch();\n const prevFieldListValues = usePrevious(fieldListValues);\n const prevOptions = usePrevious(options);\n\n const [label, setLabel] = useState<string>('');\n const [amount, setAmount] = useState<string | undefined>();\n const [year, setYear] = useState<string | number | undefined>();\n const [isFromSource, setIsFromSource] = useState<boolean | undefined>();\n const [disabled, setDisabled] = useState<boolean>(true);\n const [error, setError] = useState<string>('');\n const [closePopup, setClosePopup] = useState(false);\n const currentGridName = useCurrentGridName();\n\n const { updateField } = useUpdateFields({\n fieldName,\n companyId,\n companyUrl,\n service,\n isFromHistory,\n extraKeys,\n });\n\n const { updateFinancialFields, isAmountValid, isAmountValidForSource } = useFinancialField({\n amount,\n fieldListValues,\n options,\n isFromSource,\n setLabel,\n setAmount,\n setYear,\n setIsFromSource,\n setDisabled,\n setError,\n fieldName,\n customFinancialYear,\n });\n const title = `Edit \"${fieldName}\" value`;\n const placeholder = fieldName === 'GM %' ? title : 'in millions of dollars';\n const opportunityPresentationKey = fieldName === 'ARR' ? 'annual_recurring_revenue' : 'gm';\n\n const handleSelectOption = (event: MenuInfo) => {\n containerRef.current && containerRef.current.focus();\n setAmount(event.key);\n };\n\n const handleAmountChange = (event: ChangeEvent<HTMLInputElement>) => {\n const value = event.currentTarget.value;\n\n setAmount(value);\n };\n\n const handlePendoAction = (value: number | string) => {\n if (currentGridName === 'Advanced Search' && fieldName === 'Revenue') {\n sendPendoData(`${ADVANCED_SEARCH}_RevenueYear_${value}`);\n }\n };\n\n const handleYearChange = (value: number) => {\n // get the amount associated with the selected year\n const amountValue = getAmount(fieldListValues as FinancialFieldType[], Number(value));\n\n if (amountValue === undefined || typeof amountValue === 'string') {\n setAmount(amountValue);\n } else if (typeof amountValue === 'number' && fieldName === 'GM %') {\n setAmount(amountValue.toString());\n } else if (typeof amountValue === 'number') {\n setAmount((Number(amountValue)! / 1000000).toString());\n } else {\n const rangeLabel = options.find(option => isEqual(option.rangeValue, amountValue))?.label;\n setAmount(rangeLabel);\n }\n\n setYear(value);\n\n if (actionPendo) {\n window.pendo.track(`${actionPendo}_${value}`);\n }\n };\n\n const handleCancel = () => {\n updateFinancialFields();\n setError('');\n setClosePopup(true);\n };\n\n const getIsValueChanged = () => {\n // if user doesn't change the current value just close the popover\n const currentValue = getAmount(fieldListValues, Number(year));\n const isAmountAbbreviated =\n typeof amount === 'string' && regexNegativeAbbreviation.test(amount);\n\n const amountValueInMillions =\n amount === '' || amount === undefined\n ? null\n : isAmountAbbreviated\n ? parseNumberFromAbbreviation(amount)\n : Number(amount)! * 1000000;\n\n const isFromDropdown = isOptionChecked(amount || null, options);\n\n let parsedAmount: string | number | null | boolean | FinancialFieldRangeValue =\n isAmountValid() && amountValueInMillions;\n\n if (fieldName === 'GM %') {\n const amountHasPercentage =\n typeof amount === 'string' && numberPercentageMatchRegex.test(amount);\n parsedAmount = null;\n\n if (amount !== undefined && amount !== '') {\n parsedAmount = amountHasPercentage ? parseInt(amount.replace('%', '')) : Number(amount);\n }\n }\n\n if (isFromDropdown && options) {\n const option = options.find(option => option.label === amount);\n parsedAmount = option?.rangeValue ?? option?.value ?? null;\n }\n\n if (!parsedAmount && parsedAmount !== 0) {\n parsedAmount = DEFAULT_EMPTY_VALUE;\n }\n\n let isValueChanged: boolean =\n currentValue === undefined && parsedAmount === DEFAULT_EMPTY_VALUE\n ? false\n : !isEqual(currentValue, parsedAmount);\n\n return { isValueChanged, parsedAmount };\n };\n\n const handlePendoActionCallBack = (value: number | undefined) => {\n if (value) {\n handlePendoAction(value);\n }\n\n handlePendoAction('Save');\n };\n\n const handleSave = () => {\n const { isValueChanged, parsedAmount } = getIsValueChanged();\n const normalizedAmount =\n parsedAmount !== DEFAULT_EMPTY_VALUE && !Number.isNaN(Number(parsedAmount))\n ? roundingPresentationValues(Number(parsedAmount))\n : parsedAmount;\n\n // check if any values were changed\n if (!isValueChanged) {\n setClosePopup(true);\n } else if (\n validateField(amount!, VALIDATE_EDIT_FINANCIAL_FIELD_KEYS[fieldKey], options) &&\n isAmountValidForSource(year as number)\n ) {\n if (fieldKey === 'annual_recurring_revenue' && !isFromGrid) {\n const payload = {\n company_id: companyId,\n financial: {\n annual_recurring_revenue: {\n value: normalizedAmount,\n year: Number(year),\n estimated: isYearEstimated(fieldListValues, year as number),\n },\n },\n };\n\n dispatch(opportunityActions.updateOpportunityPresentation(payload, isFromHistory));\n } else {\n if (fieldKey === 'annual_recurring_revenue' || fieldKey === 'gross_margin_list') {\n const ArrValue = {\n financial: {\n [opportunityPresentationKey]: {\n value: normalizedAmount,\n year: Number(year),\n estimated: isYearEstimated(fieldListValues, year as number),\n },\n },\n };\n updateField(ArrValue, fieldKey);\n } else {\n const normalizedValue =\n normalizedAmount || normalizedAmount === 0 ? normalizedAmount : DEFAULT_EMPTY_VALUE;\n\n updateField(\n { value: normalizedValue, optionalValue: Number(year) },\n fieldKey,\n undefined,\n () => handlePendoActionCallBack(Number(year))\n );\n }\n }\n\n setClosePopup(true);\n\n if (actionPendo) {\n window.pendo.track(`${actionPendo}_Save`);\n }\n }\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n // hook used for updating label and popover input values on first mount\n // and after request is finished and redux store is updated\n useEffect(() => {\n if (!isEqual(fieldListValues, prevFieldListValues) || !isEqual(prevOptions, options)) {\n updateFinancialFields();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fieldListValues, options]);\n\n useEffect(() => {\n // if validation returns error, disable save button until value in input field is valid\n if (disabled && isAmountValid()) {\n setDisabled(false);\n setError('');\n }\n\n if (!getIsValueChanged().isValueChanged) setDisabled(true);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [amount]);\n\n const content = (\n <Container\n isArr={fieldName === 'ARR'}\n className={\n 'profile-information__financial ' +\n (fieldKey === 'ebitda_list' && !isFromGrid ? 'ebitda-value' : '')\n }\n ref={containerRef}\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n >\n <Row className=\"amount-wrapper\">\n <Text>{`${fieldName} Amount`}</Text>\n {!closePopup && options.length !== 0 ? (\n <InputWithDropdown\n options={options}\n placeholder={placeholder}\n value={amount as string | undefined}\n onInputChange={handleAmountChange}\n onSelectOption={handleSelectOption}\n allowClear\n />\n ) : (\n <Input\n placeholder={placeholder}\n value={amount}\n onChange={handleAmountChange}\n allowClear\n />\n )}\n {error && (\n <Text className=\"error\" style={{ maxWidth: '300px;' }} type=\"danger\">\n {error}\n </Text>\n )}\n </Row>\n\n <Row>\n <Text>{`${fieldName} Year`}</Text>\n <Select placeholder=\"select an option\" value={year as number} onChange={handleYearChange}>\n {generateYears(Number(getMostRecentYear(fieldListValues))).map(item => (\n <Option key={item.value} value={item.value}>\n {item.label}\n </Option>\n ))}\n </Select>\n </Row>\n <div className=\"profile-information__popover-buttons\">\n <Button\n className=\"profile-information__cancel\"\n onClick={() => {\n handleCancel();\n handlePendoAction('Cancel');\n\n if (actionPendo) {\n window.pendo.track(`${actionPendo}_Cancel`);\n }\n }}\n >\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n disabled={disabled}\n onClick={handleSave}\n >\n Save\n </Button>\n </div>\n </Container>\n );\n\n if (!isFromGrid) {\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n onVisibilityChange={handleCancel}\n hidePenIcon={hidePenIcon}\n actionPendo={actionPendo}\n >\n {!hidePenIcon && !isFromHistory ? (\n <span style={highlightText(label)}>{normalizeNegativeSignValues(label)}</span>\n ) : (\n 'Edit Field'\n )}\n </EditPopover>\n );\n }\n\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditPopover\n content={content}\n onVisibilityChange={handleCancel}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n />\n }\n fill\n >\n <TruncateTooltip title={normalizeNegativeSignValues(label)}>\n <span style={highlightText(label)}>{normalizeNegativeSignValues(label)}</span>\n </TruncateTooltip>\n </InlineEdit>\n );\n};\n\nexport default React.memo(EditFieldFinancial);\n","import styled, { css } from 'styled-components';\nimport { Tag as $Tag } from 'antd';\n\nconst ContentContainer = styled.div<{ isSoftware: boolean }>`\n {\n ${props =>\n css`\n width: ${props.isSoftware ? '375px' : '300px'};\n `}\n }\n\n .profile-information__subtitle {\n margin-top: 22px;\n padding-top: 14px;\n padding-bottom: 12px;\n border-top: 1px solid #d9d9d9;\n }\n\n .rationale_select-async {\n display: block;\n width: 100%;\n }\n\n .ant-typography {\n padding-bottom: 2px;\n }\n\n .ant-radio-group {\n width: 100%;\n\n .ant-radio-button-wrapper {\n width: 100%;\n }\n }\n`;\n\nconst Tag = styled($Tag)`\n margin-top: 2px;\n margin-bottom: 2px;\n max-width: 100%;\n white-space: inherit;\n word-break: break-word;\n`;\n\n// revert to 2.7 since this used div element\nconst TableCellInner = styled.div`\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nexport const Styled = {\n Tag,\n ContentContainer,\n TableCellInner,\n};\n","import { Tooltip } from 'antd';\nimport styled from 'styled-components';\n\nconst CellPopover = styled.div`\n min-width: 200px;\n width: 100%;\n .singleselect-wrapper {\n width: 100%;\n min-width: 200px;\n }\n`;\n\nconst DefaultTooltip = styled(Tooltip)`\n display: block;\n`;\n\nexport default {\n CellPopover,\n DefaultTooltip,\n};\n","import React, { useEffect, useMemo, useContext, useRef, useState } from 'react';\nimport { Button } from 'antd';\nimport { ValueType } from 'react-select';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { EditFieldSingleSelectProps } from '@optx/models/feature/edit-field/EditFieldSingleSelectProps';\nimport { AppState } from '@optx/redux/interfaces';\nimport { FieldValue } from '@features/company/audit-trail/state/interfaces';\nimport { ServiceType } from '@features/company/edit-fields/state/interfaces';\nimport { typeOptionsEditFieldSingleSelect } from '../state/interfaces';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { ManageMyPipeline } from '@constants/pendoActions';\nimport { ADVANCED_SEARCH, EDIT_STAGE_VALUES } from '@optx/constants/pendoAction';\n// utils\nimport { checkSurName, sendPendoData } from '@optx/utils/utils';\nimport { showRationaleForStage } from '@optx/utils/helpers';\nimport { renderLabel } from '@optx/utils/editFields';\n// redux\nimport { selectors as filterSelectors } from '@redux/company/filters';\nimport { actions as opportunityPresentationActions } from '@redux/company/opportunity-presentation';\nimport { getFormRationales, getNextSteps } from '@optx/redux/company/filters/selectors';\nimport { selectors } from '@components/feature/company-individual-edit/state/index';\nimport { selectors as filtersSelector } from '@redux/company/filters';\n// hooks\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useUpdateFields from '@optx/features/company/edit-fields/hooks/useUpdateFields';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\n// components\nimport SingleSelect from '@optx/components/common/select/SingleSelect';\nimport EditCellPen from '@optx/components/common/table/Companies/styled-cells/EditCellPen';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport { DropdownAddContext } from '@optx/components/DropdownAdd/DropdownAddContext';\nimport RationaleSection from './RationaleSection';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n// styles\nimport { Styled as EditFieldStyled } from './EditFieldRadioRationale.styled';\nimport { Styled as TableCellStyled } from '@optx/features/company/edit-fields/components/TableCellFit.styled';\nimport Styled from './CellPopover.styled';\n\nconst fieldsWithoutBlankOption = [\n 'Deal Type',\n 'Customer Type',\n 'Sales and Marketing',\n 'Cloud Provider',\n 'Cashflow',\n];\n\nconst getBlankOptionLabel = (fieldName: typeOptionsEditFieldSingleSelect) => {\n switch (fieldName) {\n case 'Cloud Provider':\n return 'Unknown';\n case 'Deal Type':\n case 'Customer Type':\n case 'Sales and Marketing':\n return 'Unknown';\n\n default:\n return 'None';\n }\n};\n\nconst EditFieldSingleSelect: React.FC<EditFieldSingleSelectProps> = ({\n record,\n fieldName,\n fieldKey,\n value,\n rationaleAfterValue,\n isFromGrid,\n hidePenIcon,\n isFromGridDropDown,\n isFromHistory,\n service,\n successMessage,\n dropdownLabel,\n useTooltip,\n dropdownPlacement,\n callbackComponent,\n getPopupContainer,\n showLabel = true,\n actionPendo,\n}) => {\n const dispatch = useDispatch();\n const canBeRationale = fieldName === 'Stage';\n const blankOptionLabel = getBlankOptionLabel(fieldName);\n\n let currRationaleValue: string | null = null;\n\n if (record && canBeRationale) {\n if (!isFromHistory) {\n currRationaleValue = record.stage_rationale;\n } else {\n currRationaleValue = rationaleAfterValue as string | null;\n }\n }\n\n const [selectedValue, setSelectedValue] = useState<FieldValue>(checkSurName(value, fieldName));\n const [closePopUp, setClosePopUp] = useState<boolean>(false);\n const [rationaleValue, setRationaleValue] = useState<string | null>(currRationaleValue);\n const currentGridName = useCurrentGridName();\n const [saveBtnDisabled, setSaveBtnDisabled] = useState<boolean>(true);\n const rationaleOptions = useSelector((state: AppState) => {\n switch (fieldName) {\n case 'Stage':\n return getFormRationales(state, 'stage_pass_dead_rationales') ?? [];\n default:\n return [];\n }\n });\n\n const { updateField } = useUpdateFields({\n fieldName,\n companyId: record?.company_id ?? 0,\n companyUrl: record?.company_url ?? null,\n service: service as ServiceType,\n successMessage,\n isFromHistory,\n });\n\n const editFieldSingleSelectSelectors = {\n 'Company Owner': selectors.companyIndividualEdit.companyOwnerOptions,\n 'Deal Type': filtersSelector.getDealTypeOptions,\n 'Senior Advisor Thesis': selectors.companyIndividualEdit.seniorAdvisorOptions,\n 'Lead Source': selectors.companyIndividualEdit.leadSourceOptions,\n 'Pipeline Rank': selectors.companyIndividualEdit.rankOptions,\n Stage: selectors.companyIndividualEdit.stageOptions,\n Sector: selectors.companyIndividualEdit.sectorOptions,\n 'Sub-Sector': selectors.companyIndividualEdit.subSectorOptions,\n Fund: selectors.companyIndividualEdit.fundOptions,\n 'Opportunity Type': selectors.companyIndividualEdit.opportunityTypeOptions,\n 'Next Steps': getNextSteps,\n 'Company Type': filterSelectors.companyTypeOptions,\n 'Year Founded': selectors.companyIndividualEdit.yearFoundedOptions,\n 'Customer Type': filtersSelector.getCustomerTypeOptions,\n Cashflow: filterSelectors.getCashflowOptions,\n 'Cloud Provider': filterSelectors.getCloudProviderOptions,\n 'Sales and Marketing': filtersSelector.getSalesAndMarketingOptions,\n };\n const isDefaultValue = fieldName !== 'Company Owner' ? DEFAULT_EMPTY_VALUE : 'Unowned';\n\n let label = value === null ? isDefaultValue : value;\n label = fieldName === 'Year Founded' ? `(Founded in ${label})` : label;\n\n const afterValue = useRef<SelectOption | undefined>();\n const isLoadingOptions = useSelector(selectors.companyIndividualEdit.isLoadingInfo);\n const options = useSelector(editFieldSingleSelectSelectors[fieldName]);\n const popoverContentRef = useRef(null);\n\n const { dropdownVisible, setDropdownVisible } = useContext(DropdownAddContext);\n\n const blankOption = fieldsWithoutBlankOption.includes(fieldName)\n ? []\n : [{ value: 'blank', label: blankOptionLabel }];\n\n const filteredOptions = options.filter(\n item => item.value !== 'blank' || fieldName !== 'Cashflow'\n );\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const selectOptions = [...blankOption, ...filteredOptions];\n\n const handleOptionsList = useMemo(() => {\n if (['Fund', 'Company Type', 'Opportunity Type', 'Year Founded'].includes(fieldName)) {\n return selectOptions.filter(value => value.label !== blankOptionLabel);\n }\n\n return selectOptions;\n }, [fieldName, selectOptions, blankOptionLabel]);\n\n const handleInitialValue = useMemo(() => {\n if (fieldName === 'Fund' && (value === DEFAULT_EMPTY_VALUE || !value)) {\n return [];\n }\n\n return handleOptionsList[0];\n }, [fieldName, handleOptionsList, value]);\n\n const handleUnownedValue = (value: FieldValue) => {\n if (['Sector', 'Sub-Sector'].includes(fieldName) && value === blankOptionLabel) {\n return DEFAULT_EMPTY_VALUE;\n }\n\n if (fieldName === 'Fund' && !value) {\n return DEFAULT_EMPTY_VALUE;\n }\n\n if (value === null) {\n return DEFAULT_EMPTY_VALUE;\n }\n\n return value;\n };\n\n let initialSelectValue;\n let valueForComparison;\n\n if (!canBeRationale) {\n valueForComparison = value;\n } else {\n valueForComparison = selectedValue;\n }\n\n initialSelectValue =\n !valueForComparison || valueForComparison === DEFAULT_EMPTY_VALUE\n ? handleInitialValue\n : handleOptionsList.find(\n option =>\n selectedValue?.toString().toLocaleLowerCase() === option.label?.toLocaleLowerCase()\n );\n\n const onChange = (newValue: ValueType<SelectOption>) => {\n const label = (newValue as SelectOption).label;\n\n if (canBeRationale && showRationaleForStage(label)) {\n setSelectedValue(label);\n\n if (label !== value && rationaleValue) {\n setRationaleValue(null);\n } else {\n setRationaleValue(currRationaleValue);\n }\n\n setSaveBtnDisabled(true);\n afterValue.current = newValue as SelectOption;\n\n return;\n }\n\n if (selectedValue?.toString() !== label) {\n if (!canBeRationale || (canBeRationale && label !== value)) {\n setSelectedValue(label);\n afterValue.current = newValue as SelectOption;\n\n if (\n (fieldName === 'Cashflow' ||\n fieldName === 'Cloud Provider' ||\n fieldName === 'Sales and Marketing') &&\n record\n ) {\n let fieldKey = '';\n let valueKey = '';\n\n if (fieldName === 'Cashflow') {\n fieldKey = 'financial';\n valueKey = 'cashflow';\n }\n\n if (fieldName === 'Cloud Provider') {\n fieldKey = 'technology';\n valueKey = 'cloud_provider';\n }\n\n if (fieldName === 'Sales and Marketing') {\n fieldKey = 'customer_kpis';\n valueKey = 'sales_and_marketing';\n }\n\n const payload = {\n company_id: record.company_id,\n [fieldKey]: {\n [valueKey]: afterValue.current.value,\n },\n };\n\n dispatch(opportunityPresentationActions.updateOpportunityPresentation(payload));\n } else if (fieldKey === 'deal_type') {\n const payload = {\n company_id: record?.company_id || 0,\n deal_preparation: {\n [fieldKey]: label,\n },\n };\n dispatch(opportunityPresentationActions.updateOpportunityPresentation(payload));\n } else {\n updateField(newValue as SelectOption, fieldKey, undefined, () =>\n handlePendoActionCallBack(label)\n );\n }\n\n if (actionPendo) {\n if (actionPendo === ManageMyPipeline.myCompanies.editPipelineRank) {\n window.pendo.track(`${actionPendo}_${label.replace(/\\s+/g, '')}`);\n } else {\n window.pendo.track(actionPendo);\n }\n }\n }\n }\n\n setClosePopUp(true);\n setDropdownVisible(!dropdownVisible);\n };\n\n const handleDefaultEmptyValue = () => {\n if (selectedValue === DEFAULT_EMPTY_VALUE) {\n setSelectedValue(blankOptionLabel);\n }\n };\n\n useEffect(() => {\n handleDefaultEmptyValue();\n\n if (afterValue.current) {\n setSelectedValue(afterValue.current.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setSelectedValue(value);\n }, [value, record]);\n\n useEffect(() => {\n if (currRationaleValue !== rationaleValue) {\n setRationaleValue(currRationaleValue);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, record, currRationaleValue]);\n\n const handleRationaleChange = (newValue: string) => {\n setRationaleValue(newValue);\n\n if (\n (newValue === currRationaleValue && value !== selectedValue) ||\n newValue !== currRationaleValue\n ) {\n setSaveBtnDisabled(false);\n } else {\n setSaveBtnDisabled(true);\n }\n };\n\n const handleCancel = () => {\n setClosePopUp(true);\n setSaveBtnDisabled(true);\n\n if (selectedValue !== value) {\n setSelectedValue(value);\n }\n\n if (fieldName === 'Stage' && record && rationaleValue !== currRationaleValue) {\n setRationaleValue(currRationaleValue);\n }\n };\n\n const handlePendoActionCallBack = (value: string) => {\n if (callbackComponent) {\n callbackComponent();\n } else {\n handlePendoAction(value);\n }\n };\n\n const handleSave = () => {\n const currentOption = selectOptions.find(option => option.label === selectedValue);\n\n if (currentOption) {\n updateField(\n currentOption,\n fieldKey,\n undefined,\n () => handlePendoActionCallBack(currentOption.label),\n rationaleValue as string\n );\n }\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n setClosePopUp(true);\n setSaveBtnDisabled(true);\n setDropdownVisible(!dropdownVisible);\n };\n\n useOnClickOutside(popoverContentRef, handleCancel);\n\n const handleOtherChange = (option: React.SetStateAction<string | null>) => {\n if (option !== DEFAULT_EMPTY_VALUE) {\n setRationaleValue(option);\n\n if (option !== value) {\n setSaveBtnDisabled(false);\n }\n }\n };\n\n const otherRationaleOption =\n rationaleValue && rationaleOptions.find(rationale => rationale.value === rationaleValue)\n ? currRationaleValue\n : rationaleValue;\n\n const showIsOtherOrTag = (key?: string) => {\n const values = rationaleOptions.map(option => option.value).slice(0, -1);\n\n if (key === 'tag') {\n return !!(\n otherRationaleOption &&\n otherRationaleOption !== DEFAULT_EMPTY_VALUE &&\n !values.includes(otherRationaleOption) &&\n value === selectedValue\n );\n }\n\n if (!rationaleValue) {\n return false;\n }\n\n return !!(\n !values.includes(rationaleValue) &&\n rationaleValue !== DEFAULT_EMPTY_VALUE &&\n rationaleValue.length > 0\n );\n };\n\n const customRationaleValue = showIsOtherOrTag() ? 'other' : rationaleValue;\n\n const handlePendoAction = (value?: string) => {\n if (currentGridName === 'Advanced Search') {\n if (fieldName === 'Stage' && value) {\n sendPendoData(`${ADVANCED_SEARCH}_EditStage_${EDIT_STAGE_VALUES[value]}`);\n }\n\n if (fieldName === 'Pipeline Rank' && value) {\n sendPendoData(`${ADVANCED_SEARCH}_EditPipelineRank_${value}`);\n }\n\n if (fieldName === 'Company Owner' && value) {\n sendPendoData(`${ADVANCED_SEARCH}_EditCompanyOwner`);\n }\n }\n\n if (currentGridName === 'My Companies') {\n if (fieldName === 'Stage' && value) {\n window.pendo.track(`${actionPendo}_${value.replace(/\\s+/g, '').replace('Presented/', '')}`);\n }\n }\n };\n\n const rationaleFieldContent = (\n <EditFieldStyled.ContentContainer\n className=\"profile-rationale\"\n isSoftware={false}\n tabIndex={0}\n ref={popoverContentRef}\n >\n <SingleSelect\n openMenuOnFocus\n options={handleOptionsList as any}\n onChange={onChange}\n isLoading={isLoadingOptions}\n value={initialSelectValue as any}\n maxMenuHeight={190}\n closeMenuOnSelect\n />\n {showRationaleForStage(selectedValue as string) && (\n <RationaleSection\n rationaleOptions={rationaleOptions}\n rationaleValue={customRationaleValue}\n handleRationaleChange={handleRationaleChange}\n otherRationaleValue={otherRationaleOption}\n showIsOtherOrTag={showIsOtherOrTag}\n handleOtherChange={handleOtherChange}\n isRationaleRequired\n isHeightOverflow\n />\n )}\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSave}\n disabled={saveBtnDisabled}\n >\n Save\n </Button>\n </div>\n </EditFieldStyled.ContentContainer>\n );\n\n const commonContent = (\n <Styled.CellPopover>\n <SingleSelect\n openMenuOnFocus\n options={handleOptionsList as any}\n onChange={onChange}\n isLoading={isLoadingOptions}\n value={initialSelectValue as any}\n closeMenuOnSelect\n />\n </Styled.CellPopover>\n );\n\n const content = canBeRationale ? rationaleFieldContent : commonContent;\n\n if (!isFromGrid || isFromGridDropDown) {\n return (\n <EditPopover\n content={content}\n title={`Edit \"${fieldName}\" value`}\n closePopup={closePopUp}\n setClosePopup={setClosePopUp}\n hidePenIcon={hidePenIcon}\n actionPendo={actionPendo}\n destroyOnHide\n getPopupContainer={getPopupContainer}\n >\n {showLabel &&\n renderLabel({\n isFromGridDropDown,\n isFromHistory,\n dropdownLabel,\n value,\n label,\n useTooltip: useTooltip,\n })}\n </EditPopover>\n );\n }\n\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditCellPen\n content={content}\n title={`Edit \"${fieldName}\" value`}\n closePopup={closePopUp}\n setClosePopup={setClosePopUp}\n placement={dropdownPlacement}\n />\n }\n fill\n >\n {value && value !== 'Unowned' ? (\n <TruncateTooltip title={value === blankOptionLabel ? DEFAULT_EMPTY_VALUE : value}>\n <TableCellStyled.TableCellInner>\n {value === blankOptionLabel ? DEFAULT_EMPTY_VALUE : value}\n </TableCellStyled.TableCellInner>\n </TruncateTooltip>\n ) : (\n handleUnownedValue(value)\n )}\n </InlineEdit>\n );\n};\n\nexport default React.memo(EditFieldSingleSelect);\n","import { useCallback, RefObject } from 'react';\n\ninterface UseAsyncMenuPositionOptions {\n parentEl: RefObject<HTMLElement>;\n isHeightOverflow?: boolean;\n distanceFromBottom?: number;\n}\n\n/**\n * A custom hook that determines the optimal position for a menu based on the\n * provided options and the current state of the parent element and window.\n *\n * @param {UseAsyncMenuPositionOptions} options - Configuration options for determining the menu position.\n * @param {React.RefObject<HTMLElement>} options.parentEl - A reference to the parent element of the menu.\n * @param {number} [options.distanceFromBottom=200] - The minimum distance from the bottom of the window to the menu.\n * @param {boolean} options.isHeightOverflow - A flag indicating if the height of the menu overflows the window height.\n *\n * @returns {Object} An object containing the `getMenuPlacement` function.\n * @returns {Function} returns.getMenuPlacement - A function that calculates and returns the\n * optimal menu placement ('top', 'bottom', or 'auto').\n */\n\nconst useAsyncMenuPosition = (options: UseAsyncMenuPositionOptions) => {\n const { parentEl, distanceFromBottom = 200, isHeightOverflow } = options;\n\n const getMenuPlacement = useCallback(() => {\n if (isHeightOverflow) {\n return 'auto';\n }\n\n const editPositionH = parentEl.current?.getBoundingClientRect().top;\n const windowH = window.innerHeight;\n\n if (editPositionH && windowH) {\n if (windowH - editPositionH < distanceFromBottom) {\n return 'top';\n } else {\n return 'bottom';\n }\n }\n\n return 'auto';\n }, [parentEl, isHeightOverflow, distanceFromBottom]);\n\n return {\n getMenuPlacement: getMenuPlacement,\n };\n};\n\nexport default useAsyncMenuPosition;\n","import styled from 'styled-components';\nimport { Tag as $Tag } from 'antd';\n\nconst ContentContainer = styled.div`\n width: 300px;\n\n .profile-information__subtitle {\n margin-top: 22px;\n padding-top: 14px;\n padding-bottom: 12px;\n border-top: 1px solid #d9d9d9;\n }\n\n .rationale_select-async {\n display: block;\n width: 100%;\n }\n\n .ant-typography {\n padding-bottom: 2px;\n }\n`;\n\nconst InputWrap = styled.div`\n padding: 20px 0 0 0;\n`;\n\nconst Tag = styled($Tag)`\n margin-top: 7px;\n margin-bottom: 2px;\n max-width: 100%;\n white-space: inherit;\n word-break: break-word;\n\n .remove-tag {\n cursor: pointer;\n color: rgba(0, 0, 0, 0.45);\n\n &:hover {\n color: rgba(0, 0, 0, 0.85);\n }\n }\n`;\n\nexport const Styled = { ContentContainer, InputWrap, Tag };\n","import React, { useEffect, useContext, useRef, useState } from 'react';\nimport { Button, Typography } from 'antd';\nimport { ValueType } from 'react-select';\nimport { useSelector } from 'react-redux';\nimport { MenuPlacement } from 'react-select/src/types';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { EditFieldSingleSelectOtherProps } from '@optx/models/feature/edit-field/EditFieldSingleSelectProps';\nimport { FieldValue } from '../../audit-trail/state/interfaces';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { renderLabelOther, renderValueOther } from '@optx/utils/editFields';\n// redux\nimport { getNextSteps } from '@optx/redux/company/filters/selectors';\nimport { selectors } from '@components/feature/company-individual-edit/state/index';\n// hooks\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useUpdateFields from '../hooks/useUpdateFields';\nimport useAsyncMenuPosition from '@optx/common/hooks/select/useAsyncMenuPosition';\n// components\nimport { Styled as TableCellStyled } from '@optx/features/company/edit-fields/components/TableCellFit.styled';\nimport SingleSelect from '@optx/components/common/select/SingleSelect';\nimport EditCellPen from '@optx/components/common/table/Companies/styled-cells/EditCellPen';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport { DropdownAddContext } from '@optx/components/DropdownAdd/DropdownAddContext';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\nimport CreateOtherOptions from './CreateOtherOptions';\n// styles\nimport { Styled } from './EditFieldSingleSelectOther.styled';\n\nconst EditFieldSingleSelectOther: React.FC<EditFieldSingleSelectOtherProps> = ({\n record,\n fieldName,\n fieldKey,\n fieldOtherKey,\n fieldOtherValue,\n value,\n isFromGrid,\n hidePenIcon,\n isFromGridDropDown,\n isFromHistory,\n service,\n successMessage,\n dropdownLabel,\n useTooltip,\n dropdownPlacement,\n otherEndpoint,\n defaultMenuIsOpen = false,\n destroyOnHide = false,\n actionPendo,\n}) => {\n const [selectedValue, setSelectedValue] = useState<FieldValue>(value);\n const [closePopUp, setClosePopUp] = useState<boolean>(false);\n const [otherValue, setOtherValue] = useState<string | null>(null);\n const [saveBtnDisabled, setSaveBtnDisabled] = useState<boolean>(true);\n const parentCreatableRef = useRef<HTMLDivElement>(null);\n const [asyncMenuPlacement, setAsyncMenuPlacement] = useState<MenuPlacement | undefined>('auto');\n\n const { updateField } = useUpdateFields({\n fieldName,\n companyId: record?.company_id ?? 0,\n companyUrl: record?.company_url ?? null,\n service,\n successMessage,\n isFromHistory,\n extraKeys: fieldOtherKey ? [fieldOtherKey] : undefined,\n });\n\n const { getMenuPlacement } = useAsyncMenuPosition({\n parentEl: parentCreatableRef,\n distanceFromBottom: 140,\n });\n\n const editFieldSingleSelectSelectors = {\n 'Next Steps': getNextSteps,\n };\n\n let label = value === null ? DEFAULT_EMPTY_VALUE : value;\n\n const isLoadingOptions = useSelector(selectors.companyIndividualEdit.isLoadingInfo);\n const popoverContentRef = useRef(null);\n\n const { dropdownVisible, setDropdownVisible } = useContext(DropdownAddContext);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(editFieldSingleSelectSelectors[fieldName]),\n ];\n\n const initialSelectValue = selectOptions.find(\n option => selectedValue?.toString().toLocaleLowerCase() === option.label.toLocaleLowerCase()\n );\n\n const onChange = (newValue: ValueType<SelectOption>) => {\n const label = (newValue as SelectOption).label;\n\n if (label !== 'Other') {\n updateField(newValue, fieldKey);\n setClosePopUp(true);\n setDropdownVisible(!dropdownVisible);\n }\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n setSelectedValue(label);\n setSaveBtnDisabled(false);\n setOtherValue(null);\n };\n\n const handleOtherChange = (option: SelectOption) => {\n if (option.isDefault) {\n setOtherValue(null);\n setSelectedValue(option.value);\n } else {\n setOtherValue(option.value);\n }\n\n setSaveBtnDisabled(false);\n };\n\n useEffect(() => {\n if (selectedValue === DEFAULT_EMPTY_VALUE) {\n setSelectedValue('None');\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setSelectedValue(value);\n\n if (value === 'Other' && fieldOtherValue) {\n setOtherValue(fieldOtherValue as string | null);\n }\n }, [value, record, fieldOtherValue]);\n\n const handleCancel = () => {\n setClosePopUp(true);\n setSaveBtnDisabled(true);\n\n if (selectedValue !== value) {\n setSelectedValue(value);\n }\n\n if (otherValue !== fieldOtherValue) {\n setOtherValue(fieldOtherValue as string | null);\n }\n };\n\n const handleSave = () => {\n const currentOption = selectOptions.find(option => option.label === selectedValue);\n\n if (currentOption) {\n updateField(currentOption, fieldKey, undefined, undefined, undefined, undefined, [\n otherValue ?? '',\n ]);\n }\n\n setClosePopUp(true);\n setSaveBtnDisabled(true);\n setDropdownVisible(!dropdownVisible);\n };\n\n const handleTagRemoval = () => {\n setOtherValue(null);\n setSaveBtnDisabled(false);\n };\n\n useOnClickOutside(popoverContentRef, handleCancel);\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n const onVisibilityChange = () => {\n setAsyncMenuPlacement(getMenuPlacement());\n };\n\n const content = (\n <Styled.ContentContainer\n className=\"profile-other\"\n tabIndex={0}\n ref={popoverContentRef}\n onKeyDown={(event: React.KeyboardEvent<HTMLDivElement>) => handleDropdownKeyEvent(event)}\n >\n <SingleSelect\n defaultMenuIsOpen={defaultMenuIsOpen}\n options={selectOptions as SelectOption[]}\n onChange={onChange}\n isLoading={isLoadingOptions}\n value={initialSelectValue as SelectOption}\n closeMenuOnSelect\n />\n {selectedValue === 'Other' && (\n <>\n <Styled.InputWrap>\n <Typography.Text>Please Explain</Typography.Text>\n <CreateOtherOptions\n onInputChange={handleOtherChange}\n apiEndpoint={otherEndpoint}\n setMenuMaxHeight={200}\n menuPlacement={asyncMenuPlacement}\n />\n {otherValue && (\n <Styled.Tag color=\"blue\">\n {otherValue}{' '}\n <span className=\"remove-tag\" onClick={handleTagRemoval}>\n X\n </span>\n </Styled.Tag>\n )}\n </Styled.InputWrap>\n </>\n )}\n {(value !== selectedValue || selectedValue === 'Other') && (\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSave}\n disabled={saveBtnDisabled}\n >\n Save\n </Button>\n </div>\n )}\n </Styled.ContentContainer>\n );\n\n if (!isFromGrid || isFromGridDropDown) {\n return (\n <EditPopover\n content={content}\n title={`Edit \"${fieldName}\" value`}\n closePopup={closePopUp}\n setClosePopup={setClosePopUp}\n hidePenIcon={hidePenIcon}\n destroyOnHide={destroyOnHide}\n getPopupContainer={triger => triger.parentElement as HTMLElement}\n >\n {renderLabelOther({\n isFromGridDropDown,\n isFromHistory,\n dropdownLabel,\n value,\n label,\n useTooltip: useTooltip,\n extraValue: fieldOtherValue ?? '',\n })}\n </EditPopover>\n );\n }\n\n return (\n <span ref={parentCreatableRef}>\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditCellPen\n content={content}\n title={`Edit \"${fieldName}\" value`}\n closePopup={closePopUp}\n setClosePopup={setClosePopUp}\n placement={dropdownPlacement}\n onVisibilityShow={onVisibilityChange}\n />\n }\n fill\n >\n {value ? (\n <TruncateTooltip\n title={renderValueOther(value as string, fieldOtherValue as string | null)}\n >\n <TableCellStyled.TableCellInner>\n {renderValueOther(value as string, fieldOtherValue as string | null)}\n </TableCellStyled.TableCellInner>\n </TruncateTooltip>\n ) : (\n value\n )}\n </InlineEdit>\n </span>\n );\n};\n\nexport default React.memo(EditFieldSingleSelectOther);\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { CheckCircleTwoTone } from '@ant-design/icons';\n// components\nimport Icon from '@optx/components/common/Icon';\n\ninterface VerifyButtonProps {\n isVerified: boolean;\n onClick: () => void;\n}\n\ninterface ButtonProps {\n type: string;\n onClick: () => void;\n isVerified?: boolean;\n}\nconst ButtonStyle = styled.button<ButtonProps>`\n ${({ isVerified }) =>\n !isVerified &&\n css`\n padding: 4px 5px 5px 6px;\n border-radius: 50%;\n border: 1px solid #52c41a;\n width: 30px;\n height: 30px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: 6px;\n top: -5px;\n position: absolute;\n `};\n\n .anticon-check-circle {\n position: relative;\n top: 3px;\n }\n`;\n\nconst VerifyButton: React.FC<VerifyButtonProps> = ({ isVerified, onClick }) => {\n return (\n <ButtonStyle type=\"button\" onClick={onClick} isVerified={isVerified}>\n {isVerified ? (\n <CheckCircleTwoTone twoToneColor=\"#52c41a\" style={{ fontSize: 19 }} />\n ) : (\n <Icon iconName=\"thumbs-up\" style={{ color: '#E8E8E8', fontSize: 19 }} />\n )}\n </ButtonStyle>\n );\n};\n\nexport default VerifyButton;\n","import React, { useState, useEffect, useRef, useMemo } from 'react';\nimport { Radio, Row, Button } from 'antd';\nimport { CheckCircleTwoTone } from '@ant-design/icons';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { AppState } from '@optx/redux/interfaces';\nimport {\n CustomValue,\n UpdateFieldsPayload,\n} from '@optx/features/company/edit-fields/state/interfaces';\nimport { EditFieldRadioRationaleProps } from '@optx/models/feature/edit-field/EditFieldRadioProps';\n// constants\nimport { DEFAULT_FIT_VALUE } from '@optx/constants/table/company';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport {\n ADVANCED_SEARCH,\n SOFTWARE_RATIONALES,\n MY_COMPANIES_PENDO,\n} from '@optx/constants/pendoAction';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\n// components\nimport VerifyButton from '@optx/shared/view/molecules/Buttons/VerifyButton';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport EditCellPen from '@optx/components/common/table/Companies/styled-cells/EditCellPen';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport RationaleSection from './RationaleSection';\nimport { ThumbsIcon, ThumbsUpIcon } from '@optx/shared/view/molecules/CommonStyled/ThumbsIcon';\n// redux\nimport { getFormRationales } from '@optx/redux/company/filters/selectors';\nimport { actions } from '@optx/features/company/edit-fields/state';\nimport { getIsPartner } from '@optx/redux/user/information/selectors';\n// hooks\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useUpdateFields from '../hooks/useUpdateFields';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\n// styles\nimport { Styled } from './EditFieldRadioRationale.styled';\n\nconst EditFieldRadioRationale: React.FC<EditFieldRadioRationaleProps> = ({\n record,\n value,\n fieldName,\n labelValue,\n isFromGrid,\n showOnlyRadio,\n service,\n successMessage,\n errorMessage,\n onClick,\n hidePen,\n getPopupContainer,\n isDynamicPopoverHeight,\n destroyOnHide,\n isFromHistory,\n placement,\n updateRadioValue,\n children,\n onChangeRadioValue,\n displayOnlyOptions = false,\n actionPendo,\n}) => {\n const dispatch = useDispatch();\n const { updateField } = useUpdateFields({\n fieldName,\n companyId: record?.company_id ?? 0,\n companyUrl: record?.company_url ?? null,\n service,\n successMessage,\n errorMessage,\n isFromHistory,\n });\n\n let currRationaleValue: string | null = null;\n\n if (record)\n currRationaleValue =\n fieldName === 'Software Company'\n ? record.is_software_rationale\n : record.interesting_rationale;\n\n const [closePopup, setClosePopup] = useState(false);\n const [radioValue, setRadioValue] = useState<boolean>(value as boolean);\n const [selectedValue, setSelectedValue] = useState<string>();\n const [saveBtnDisabled, setSaveBtnDisabled] = useState<boolean>(true);\n const [rationaleValue, setRationaleValue] = useState<string | null>(currRationaleValue);\n const currentGridName = useCurrentGridName();\n\n const isPartnerUser = useSelector(getIsPartner);\n const popoverContentRef = useRef(null);\n const afterValue = useRef<string>();\n\n const rationaleOptions = useSelector((state: AppState) => {\n switch (fieldName) {\n case 'Software Company':\n return getFormRationales(state, 'is_software_rationales') ?? [];\n case 'PSG Fit':\n return getFormRationales(state, 'psg_fit_rationales') ?? [];\n default:\n return [];\n }\n });\n\n const handlePendoRadioActions = (value: boolean | string) => {\n if (fieldName === 'Software Company' && currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_EditSoftwareValue_${value ? 'Yes' : 'No'}`);\n } else if (fieldName === 'Software Company' && currentGridName === 'My Companies') {\n sendPendoData(`${MY_COMPANIES_PENDO}_EditSoftwareValue_${value ? 'Yes' : 'No'}`);\n }\n\n const defaultValues: Record<string, string> = {\n '-': 'Unknown',\n true: 'Yes',\n false: 'No',\n };\n\n if (fieldName === 'PSG Fit' && currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_EditPSGFit_${defaultValues[value.toString()]}`);\n } else if (fieldName === 'PSG Fit' && currentGridName === 'My Companies') {\n sendPendoData(`${MY_COMPANIES_PENDO}_EditPSGFit_${defaultValues[value.toString()]}`);\n }\n };\n\n const handlePendoConfirmationActions = (value: string) => {\n if (currentGridName === 'Advanced Search') {\n if (fieldName === 'Software Company') {\n sendPendoData(`${ADVANCED_SEARCH}_EditSoftwareValue_${value}`);\n }\n\n if (fieldName === 'PSG Fit') {\n sendPendoData(`${ADVANCED_SEARCH}_EditPSGFit_${value}`);\n }\n } else if (currentGridName === 'My Companies') {\n if (fieldName === 'Software Company') {\n sendPendoData(`${MY_COMPANIES_PENDO}_EditSoftwareValue_${value}`);\n }\n\n if (fieldName === 'PSG Fit') {\n sendPendoData(`${MY_COMPANIES_PENDO}_EditPSGFit_${value}`);\n }\n }\n };\n\n const handlePendoRationaleActions = (value: string) => {\n if (fieldName === 'Software Company' && currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_${SOFTWARE_RATIONALES[value]}`);\n } else if (fieldName === 'Software Company' && currentGridName === 'My Companies') {\n if (SOFTWARE_RATIONALES[value]) {\n sendPendoData(`${MY_COMPANIES_PENDO}_${SOFTWARE_RATIONALES[value]}`);\n } else {\n sendPendoData(`${MY_COMPANIES_PENDO}_${SOFTWARE_RATIONALES.other}`);\n }\n }\n };\n\n useEffect(() => {\n if (fieldName === 'Software Company' && record) {\n setRationaleValue(record.is_software_rationale);\n }\n }, [value, record, record?.is_software_rationale, fieldName]);\n\n useEffect(() => {\n if (fieldName === 'PSG Fit' && record) {\n setRationaleValue(record.interesting_rationale);\n }\n }, [value, record, record?.interesting_rationale, fieldName]);\n\n useEffect(() => {\n if (fieldName === 'PSG Fit' && updateRadioValue !== undefined) {\n setRadioValue(updateRadioValue);\n setSaveBtnDisabled(false);\n setRationaleValue('');\n setSelectedValue(updateRadioValue as unknown as string);\n }\n }, [fieldName, updateRadioValue]);\n\n useEffect(() => {\n /* if user change Sowtware value, we shouldn't show any rationale,\n if user switch back, we should show previous value\n */\n\n if (radioValue !== value) {\n setRationaleValue('');\n setSaveBtnDisabled(false);\n }\n\n if (\n radioValue === value ||\n (value === null && (radioValue as unknown as string) === DEFAULT_FIT_VALUE)\n ) {\n setRationaleValue(currRationaleValue);\n setSaveBtnDisabled(true);\n }\n }, [currRationaleValue, radioValue, value]);\n\n const verifyIcon = useMemo(() => {\n const onChangeVerified = () => {\n if (!record?.is_software_verified) {\n dispatch(\n actions.updateVerifyCompanySoftware({\n companyId: record?.company_id ?? 0,\n value: !record?.is_software_verified,\n })\n );\n\n if (\n afterValue.current !== undefined &&\n afterValue.current !== (record?.is_software as unknown as string)\n ) {\n const payload: UpdateFieldsPayload = {\n value: afterValue.current as unknown as CustomValue,\n companyId: record?.company_id ?? 0,\n };\n dispatch(\n actions.updateFields({\n companyUrl: record?.company_url ?? null,\n companyId: record?.company_id ?? 0,\n value: payload,\n service,\n fieldName,\n isFromHistory,\n })\n );\n }\n\n setClosePopup(true);\n }\n };\n\n return (\n <VerifyButton onClick={onChangeVerified} isVerified={record?.is_software_verified ?? false} />\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, record?.company_id, record?.is_software_verified]);\n\n const handleCancel = () => {\n setClosePopup(true);\n setSaveBtnDisabled(true);\n afterValue.current = undefined;\n\n if (!closePopup) {\n setTimeout(() => {\n if (fieldName === 'PSG Fit' && updateRadioValue !== undefined) {\n setRadioValue(updateRadioValue);\n setRationaleValue('');\n\n return;\n }\n\n setRadioValue(value as boolean);\n setRationaleValue(currRationaleValue);\n }, 200);\n }\n };\n\n useOnClickOutside(popoverContentRef, handleCancel);\n\n if (!record) return null;\n\n const customLabel = isFromGrid && fieldName === 'Software Company' ? 'Software' : fieldName;\n\n const otherRationaleOption =\n rationaleValue && rationaleOptions.find(rationale => rationale.value === rationaleValue)\n ? currRationaleValue\n : rationaleValue;\n\n const showIsOtherOrTag = (key?: string) => {\n const values = rationaleOptions.map(option => option.value).slice(0, -1);\n\n if (key === 'tag') {\n return !!(\n otherRationaleOption &&\n otherRationaleOption !== DEFAULT_EMPTY_VALUE &&\n !values.includes(otherRationaleOption)\n );\n }\n\n if (!rationaleValue) {\n return false;\n }\n\n return !!(\n !values.includes(rationaleValue) &&\n rationaleValue !== undefined &&\n rationaleValue !== DEFAULT_EMPTY_VALUE &&\n rationaleValue.length > 0\n );\n };\n\n const customRationaleValue = showIsOtherOrTag() ? 'other' : rationaleValue;\n\n const handlePopoverLabel = () => {\n if (typeof value === 'boolean') {\n if (fieldName === 'PSG Fit' && isFromGrid) {\n if (value) {\n return <ThumbsUpIcon marginLeft={15} iconName=\"thumbs-up\" />;\n }\n\n return <ThumbsIcon marginLeft={15} iconName=\"thumbs-down\" />;\n }\n\n return value ? 'Yes' : 'No';\n }\n\n return 'Unknown';\n };\n\n const handleChange = (e: RadioChangeEvent) => {\n setSelectedValue(e.target.value !== DEFAULT_FIT_VALUE ? e.target.value : null);\n\n onChangeRadioValue && onChangeRadioValue(e.target.value);\n setRadioValue(e.target.value);\n\n afterValue.current = e.target.value;\n };\n\n const handleRationaleChange = (value: string) => {\n setRationaleValue(value);\n\n setSaveBtnDisabled(false);\n\n setSelectedValue(radioValue as unknown as string);\n };\n\n const handleOtherChange = (option: React.SetStateAction<string | null>) => {\n setSelectedValue(radioValue as unknown as string);\n setRationaleValue(option);\n\n if (option !== value) {\n setSaveBtnDisabled(false);\n }\n };\n\n const handlePendoActionsCallBack = () => {\n handlePendoRadioActions(radioValue);\n\n if (rationaleValue) {\n handlePendoRationaleActions(rationaleValue);\n }\n\n handlePendoConfirmationActions('Save');\n };\n\n const handleSave = () => {\n onClick && onClick();\n updateField(\n selectedValue,\n undefined,\n undefined,\n handlePendoActionsCallBack,\n rationaleValue as string\n );\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n setClosePopup(true);\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n const content = (\n <Styled.ContentContainer\n className=\"profile-rationale\"\n ref={popoverContentRef}\n isSoftware={fieldName === 'Software Company'}\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n >\n <Row>\n <Radio.Group onChange={handleChange} value={radioValue}>\n <div style={{ display: 'flex', flexDirection: 'column' }} role=\"presentation\">\n <Radio value>Yes{radioValue && fieldName === 'Software Company' && verifyIcon}</Radio>\n <Radio value={false}>\n No{!radioValue && fieldName === 'Software Company' && verifyIcon}\n </Radio>\n {fieldName === 'PSG Fit' && (\n <Radio value={radioValue === null ? null : DEFAULT_FIT_VALUE}>Unknown</Radio>\n )}\n </div>\n </Radio.Group>\n </Row>\n {(rationaleValue !== DEFAULT_EMPTY_VALUE || rationaleValue !== null) &&\n radioValue === false &&\n displayOnlyOptions === false &&\n !isPartnerUser && (\n <RationaleSection\n rationaleOptions={rationaleOptions}\n rationaleValue={customRationaleValue}\n otherRationaleValue={otherRationaleOption}\n handleRationaleChange={handleRationaleChange}\n showIsOtherOrTag={showIsOtherOrTag}\n handleOtherChange={handleOtherChange}\n />\n )}\n <div className=\"profile-information__popover-buttons\">\n <Button\n className=\"profile-information__cancel\"\n onClick={() => {\n handlePendoConfirmationActions('Cancel');\n handleCancel();\n }}\n >\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSave}\n disabled={saveBtnDisabled}\n >\n Save\n </Button>\n </div>\n </Styled.ContentContainer>\n );\n\n const gridContent = (\n <Styled.TableCellInner>\n {handlePopoverLabel()}\n {!labelValue && record.is_software_verified && fieldName === 'Software Company' && (\n <CheckCircleTwoTone twoToneColor=\"#52c41a\" style={{ fontSize: 19, marginLeft: '5px' }} />\n )}\n </Styled.TableCellInner>\n );\n\n if (isFromGrid) {\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditCellPen\n setClosePopup={setClosePopup}\n closePopup={closePopup}\n content={content}\n title={`Edit \"${customLabel}\" value`}\n />\n }\n fill\n >\n <div>{gridContent}</div>\n </InlineEdit>\n );\n }\n\n return showOnlyRadio ? (\n <EditPopover\n content={content}\n title={`Edit \"${fieldName}\" value`}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n hidePenIcon={hidePen}\n getPopupContainer={getPopupContainer}\n isDynamicPopoverHeight={isDynamicPopoverHeight}\n destroyOnHide={destroyOnHide}\n placement={placement}\n actionPendo={actionPendo}\n >\n {children}\n </EditPopover>\n ) : (\n <EditPopover\n content={content}\n title={`Edit \"${fieldName}\" value`}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n hidePenIcon={hidePen}\n getPopupContainer={getPopupContainer}\n isDynamicPopoverHeight={isDynamicPopoverHeight}\n destroyOnHide={destroyOnHide}\n placement={placement}\n >\n {labelValue || handlePopoverLabel()}\n {!labelValue && record.is_software_verified && fieldName === 'Software Company' && (\n <CheckCircleTwoTone\n twoToneColor=\"#52c41a\"\n style={{ fontSize: 21, marginLeft: 6, position: 'relative', top: 2 }}\n />\n )}\n </EditPopover>\n );\n};\n\nexport default React.memo(EditFieldRadioRationale);\n","import React, { useRef } from 'react';\nimport { Select, Input, Typography } from 'antd';\nimport { OptionTypeBase } from 'react-select';\n// hooks\nimport useAutoFocusSelect from '@optx/common/hooks/useAutoFocusSelect';\n// components\nimport CheckboxIcon from '@features/field-factory/CheckboxIcon';\n// styles\nimport { SelectWrapper } from '@features/field-factory/MultiSelectField.styled';\n\nconst { Option } = Select;\nconst { TextArea } = Input;\nconst { Text } = Typography;\n\ninterface MultiSelectWithRationaleProps {\n $selectedValues: string[];\n $list: { value: string; label: string }[];\n $renderRationaleField: boolean;\n $rationaleValue: string;\n $handleGridMultiSelect: (value: string, type: 'select' | 'deselect') => void;\n $setRationaleValue: (value: string) => void;\n}\n\nconst MultiSelectWithRationale: React.FC<MultiSelectWithRationaleProps> = ({\n $selectedValues,\n $list,\n $renderRationaleField,\n $rationaleValue,\n $handleGridMultiSelect,\n $setRationaleValue,\n}) => {\n const selectRef = useRef<HTMLElement | null>(null);\n\n useAutoFocusSelect(selectRef, true, 'ant-select-selection-search-input');\n\n return (\n <SelectWrapper>\n <Select\n ref={selectRef}\n defaultOpen={true}\n showSearch\n showArrow\n style={{ width: '300px' }}\n value={$selectedValues as string[]}\n menuItemSelectedIcon={CheckboxIcon}\n onSelect={(value, option) => $handleGridMultiSelect(value as string, 'select')}\n onDeselect={(value, option) => $handleGridMultiSelect(value as string, 'deselect')}\n optionFilterProp=\"children\"\n mode=\"multiple\"\n getPopupContainer={trigger => trigger.parentElement!}\n tagRender={props => {\n return <span>{props.label || ''} </span>;\n }}\n filterOption={(input: string, option: OptionTypeBase | undefined) => {\n const fullName = `${option?.children.props.children}`;\n\n return fullName.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n }}\n >\n {$list?.map((option: OptionTypeBase) => (\n <Option\n key={option.value as string}\n value={option.value as string}\n className=\"left-checkbox-option\"\n >\n <span>{option.label}</span>\n </Option>\n ))}\n </Select>\n\n {$renderRationaleField && (\n <div style={{ width: '300px' }}>\n <Text>Edit \"Other Rationale\" field</Text>\n <TextArea\n rows={3}\n placeholder={'Please Explain'}\n value={$rationaleValue}\n maxLength={500}\n onChange={e => $setRationaleValue(e.target.value)}\n />\n </div>\n )}\n </SelectWrapper>\n );\n};\n\nexport default MultiSelectWithRationale;\n","import styled from 'styled-components';\n\nconst CellPopoverMultiselect = styled.div`\n min-width: 300px;\n .singleselect-wrapper {\n min-width: 300px;\n }\n`;\n\nexport default {\n CellPopoverMultiselect,\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button } from 'antd';\nimport { ValueType } from 'react-select';\n// models\nimport { CompanyProfile } from '@optx/models/Company';\nimport { SelectOption } from '@optx/models/Option';\nimport { ServiceType } from '@optx/features/company/edit-fields/state/interfaces';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { checkSaveButton } from '@utils/proprietaryInfo';\n// redux\nimport { selectors } from '@redux/user/user-list';\nimport { selectors as filterSelectors } from '@redux/company/filters';\nimport { actions as opportunityPresentationActions } from '@redux/company/opportunity-presentation';\n// hooks\nimport useUpdateFields from '@optx/features/company/edit-fields/hooks/useUpdateFields';\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\n// components\nimport MultiSelect from '@optx/shared/view/molecules/Select/MultiSelect';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport EditCellPen from '@optx/components/common/table/Companies/styled-cells/EditCellPen';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\nimport MultiSelectWithRationale from '@optx/features/company/edit-fields/components/MultiSelectWithRationale';\nimport Styled from './CellPopoverMultiselect.styled';\n\nconst presentationFields = [\n 'Revenue Model',\n 'Sales Cycle',\n 'Delivery Model',\n 'Architecture',\n 'Customer Type',\n];\nconst fieldsWithRationale = ['Customer Type'];\n\ninterface EditFieldMultiSelectProps {\n fieldName:\n | 'OPS Team'\n | 'Deal Team'\n | 'Senior Deal Team Lead'\n | 'Customer Type'\n | 'Revenue Model'\n | 'Sales Cycle'\n | 'Delivery Model'\n | 'Architecture';\n record: CompanyProfile;\n value: string[] | null;\n fieldRationaleValue?: string;\n labelValue?: string;\n hidePenIcon?: boolean;\n successMessage?: string;\n errorMessage?: string;\n isFromGrid: boolean;\n getPopupContainer?: ((triggerNode: HTMLElement) => HTMLElement) | undefined;\n isDynamicPopoverHeight?: boolean;\n destroyOnHide?: boolean;\n isFromHistory?: boolean;\n service?: ServiceType;\n actionPendo?: string;\n}\n\nconst EditFieldMultiSelect: React.FC<EditFieldMultiSelectProps> = ({\n value,\n fieldRationaleValue,\n fieldName,\n isFromGrid,\n isFromHistory,\n labelValue,\n errorMessage,\n successMessage,\n hidePenIcon,\n destroyOnHide,\n getPopupContainer,\n isDynamicPopoverHeight,\n service,\n record,\n actionPendo,\n}) => {\n const dispatch = useDispatch();\n const containerRef = useRef<HTMLDivElement | null>(null);\n const popoverContentRef = useRef(null);\n\n const { updateField } = useUpdateFields({\n companyUrl: record.company_url,\n companyId: record.company_id,\n service: service as ServiceType,\n fieldName,\n successMessage,\n errorMessage,\n isFromHistory,\n });\n\n const listSelectors = {\n 'OPS Team': selectors.getUserListOptions,\n 'Deal Team': selectors.getPsgUsers,\n 'Senior Deal Team Lead': selectors.getSeniorDealTeamLeadOptions,\n 'Revenue Model': filterSelectors.getRevenueModelOptions,\n 'Sales Cycle': filterSelectors.getSalesCycleOptions,\n 'Delivery Model': filterSelectors.getDeliveryModelOptions,\n 'Customer Type': filterSelectors.getCustomerTypeOptions,\n Architecture: filterSelectors.getArchitectureOptions,\n };\n\n const list = useSelector(listSelectors[fieldName]);\n const [selectedValues, setSelectedValues] = useState<SelectOption<string>[] | string[]>([]);\n const [rationaleValue, setRationaleValue] = useState<string>('');\n const [closePopup, setClosePopup] = useState<boolean>(false);\n\n const renderRationaleField =\n isFromGrid &&\n fieldsWithRationale.includes(fieldName) &&\n (selectedValues as string[]).includes('Other');\n\n const valueSelected = useCallback(() => {\n if (value && !isFromGrid) {\n const membersName: { value: string; label: string }[][] = [];\n value.forEach((_, index) => {\n const element = value[index];\n const options = list.filter(option => option.label === element);\n membersName.push(options);\n });\n\n return membersName.flat();\n }\n\n return value || [];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [list, value]);\n\n const handleMultiSelect = (option: ValueType<SelectOption>) => {\n const findBlankValue = (option as SelectOption[]).find(\n (item: SelectOption) => item.value === 'blank'\n );\n\n if (presentationFields.includes(fieldName) && findBlankValue) {\n setSelectedValues([findBlankValue]);\n } else {\n setSelectedValues(option as SelectOption[]);\n }\n };\n\n const handleGridMultiSelect = (value: string, type: 'select' | 'deselect') => {\n if (type === 'select') {\n setSelectedValues([...((selectedValues as string[]) || []), value]);\n } else if (type === 'deselect') {\n const updatedSelected = (selectedValues as string[]).filter(option => option !== value);\n setSelectedValues(updatedSelected);\n }\n };\n\n const handleSave = () => {\n const values = isFromGrid\n ? selectedValues\n : (selectedValues as SelectOption<string>[]).map(item => item.value);\n\n if (presentationFields.includes(fieldName)) {\n const financialValues = {\n financial: {\n revenue_model: values,\n },\n };\n\n const customerKpisValues = {\n customer_kpis: {\n ...(fieldName === 'Sales Cycle' && { sales_cycle: values }),\n ...(fieldName === 'Customer Type' && {\n customer_type: values,\n ...((values as string[]).includes('Other')\n ? { customer_other_rationale: rationaleValue }\n : {}),\n }),\n },\n };\n\n const technologyValues = {\n technology: {\n ...(fieldName === 'Delivery Model' && { delivery_model: values }),\n ...(fieldName === 'Architecture' && { architecture: values }),\n },\n };\n\n const payload = {\n company_id: record.company_id,\n ...(fieldName === 'Revenue Model' && financialValues),\n ...(fieldName === 'Sales Cycle' || fieldName === 'Customer Type' ? customerKpisValues : {}),\n ...(fieldName === 'Delivery Model' || fieldName === 'Architecture' ? technologyValues : {}),\n };\n dispatch(opportunityPresentationActions.updateOpportunityPresentation(payload));\n } else if (value?.toString() !== values.toString()) {\n updateField(selectedValues);\n setClosePopup(true);\n }\n\n setClosePopup(true);\n };\n\n const handleCancel = () => {\n setClosePopup(true);\n setSelectedValues(valueSelected);\n\n if (fieldsWithRationale.includes(fieldName) && fieldRationaleValue !== undefined) {\n setRationaleValue(fieldRationaleValue);\n }\n };\n\n const handleAllValuesSelected = () => {\n if (value?.length === list.length) {\n return 'ALL';\n }\n\n return value ? value.join(', ') : value;\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n useEffect(() => {\n if (!closePopup) {\n setSelectedValues(valueSelected);\n\n if (fieldRationaleValue !== undefined && fieldsWithRationale.includes(fieldName)) {\n setRationaleValue(fieldRationaleValue);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [closePopup, value, fieldRationaleValue]);\n\n const getIsDisabled = () => {\n if (!isFromGrid) {\n if (!selectedValues.length && !value?.length) {\n return true;\n }\n\n let allValuesExist = true;\n value?.forEach(item =>\n (selectedValues as SelectOption<string>[]).find(option => option.label === item)\n ? false\n : (allValuesExist = false)\n );\n\n return allValuesExist && selectedValues.length === value?.length;\n } else {\n const disabled = fieldsWithRationale.includes(fieldName)\n ? checkSaveButton(selectedValues as string[], value) &&\n checkSaveButton(rationaleValue, fieldRationaleValue as string)\n : checkSaveButton(selectedValues as string[], value);\n\n return disabled;\n }\n };\n\n useOnClickOutside(popoverContentRef, handleCancel);\n\n const content = (\n <div\n className=\"addon-popover\"\n role=\"presentation\"\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n ref={popoverContentRef}\n >\n <Styled.CellPopoverMultiselect>\n {!isFromGrid && (\n <MultiSelect\n value={selectedValues as ValueType<SelectOption<string>>}\n getPopupContainer={(trigger: any) => trigger.parentElement}\n onChange={handleMultiSelect}\n onMenuClose={() => containerRef.current && containerRef.current.focus()}\n options={list}\n hasButtons\n defaultMenuIsOpen={true}\n autoFocus={true}\n />\n )}\n {isFromGrid && (\n <MultiSelectWithRationale\n $selectedValues={selectedValues as string[]}\n $list={list}\n $renderRationaleField={renderRationaleField}\n $rationaleValue={rationaleValue}\n $handleGridMultiSelect={handleGridMultiSelect}\n $setRationaleValue={setRationaleValue}\n />\n )}\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n disabled={getIsDisabled()}\n onClick={handleSave}\n >\n Save\n </Button>\n </div>\n </Styled.CellPopoverMultiselect>\n </div>\n );\n\n if (isFromGrid) {\n let normalizedValue = DEFAULT_EMPTY_VALUE;\n\n if (value?.length) {\n normalizedValue = value.join(', ');\n }\n\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditCellPen\n setClosePopup={setClosePopup}\n closePopup={closePopup}\n content={content}\n title={`Edit \"${fieldName}\" value`}\n />\n }\n fill\n >\n <TruncateTooltip placement=\"topLeft\" className=\"edit-field--text\" title={normalizedValue}>\n {normalizedValue}\n </TruncateTooltip>{' '}\n </InlineEdit>\n );\n }\n\n return (\n <EditPopover\n content={content}\n title={`Edit \"${fieldName}\" value `}\n setClosePopup={setClosePopup}\n closePopup={closePopup}\n onVisibilityChange={handleCancel}\n getPopupContainer={getPopupContainer}\n destroyOnHide={destroyOnHide}\n isDynamicPopoverHeight={isDynamicPopoverHeight}\n hidePenIcon={hidePenIcon}\n actionPendo={actionPendo}\n >\n {labelValue !== undefined ? (\n labelValue\n ) : (\n <TruncateTooltip\n placement=\"topLeft\"\n title={handleAllValuesSelected() || DEFAULT_EMPTY_VALUE}\n >\n {handleAllValuesSelected() || DEFAULT_EMPTY_VALUE}\n </TruncateTooltip>\n )}\n </EditPopover>\n );\n};\n\nexport default React.memo(EditFieldMultiSelect);\n","import React, { useEffect, useState, ChangeEvent, useMemo, useRef } from 'react';\nimport { Button, Checkbox, Typography, Input, Space } from 'antd';\nimport { CheckboxChangeEvent } from 'antd/lib/checkbox';\nimport { useDispatch } from 'react-redux';\nimport styled, { createGlobalStyle } from 'styled-components';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// redux\nimport { actions } from '@redux/company/opportunity-presentation';\n// hooks\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useAutoFocusCheckbox from '@optx/common/hooks/useAutoFocusCheckbox';\n// components\nimport EditCellPen from '@optx/components/common/table/Companies/styled-cells/EditCellPen';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\n\nconst { Text } = Typography;\n\nconst Error = styled(Text)`\n position: absolute;\n bottom: 70px;\n left: 16px;\n`;\n\nconst GlobalBankerFieldStyle = createGlobalStyle`\n.ant-popover.banker_field {\n.ant-popover-inner-content {\n padding: 0;\n }\n}\n`;\n\ninterface EditFieldCheckboxTextProps {\n companyId: number;\n checkValue: boolean | null;\n textValue: string | undefined;\n checkboxKey: string;\n textInputKey: string;\n isCheckbox?: boolean;\n isFromHistory?: boolean;\n actionPendo?: string;\n isFromGrid?: boolean;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n}\n\nconst EditFieldCheckboxText: React.FC<EditFieldCheckboxTextProps> = ({\n companyId,\n checkValue,\n textValue,\n checkboxKey,\n textInputKey,\n isCheckbox,\n isFromHistory,\n isFromGrid,\n actionPendo,\n getPopupContainer,\n}) => {\n const dispatch = useDispatch();\n const popoverContentRef = useRef(null);\n const checkboxRef = useRef<HTMLInputElement | null>(null);\n\n const [isFocus, setIsFocus] = useState(false);\n const [closePopup, setClosePopup] = useState(false);\n const [checked, setChecked] = useState<boolean>(!!checkValue);\n const [fieldValue, setFieldValue] = useState<string | undefined>(textValue ?? undefined);\n\n const label = useMemo(() => {\n if (!isFromGrid && isCheckbox) {\n return !!textValue ? 'Yes' : 'No';\n }\n\n if (\n !textValue &&\n ((isCheckbox && (checkValue === false || checkValue === null)) ||\n (!isCheckbox && textValue === undefined))\n ) {\n return DEFAULT_EMPTY_VALUE;\n }\n\n return textValue;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [textValue, checkValue]);\n\n const disabledSave = useMemo(() => {\n const conditionChecked =\n checked &&\n (!fieldValue ||\n (checked === checkValue && textValue === fieldValue) ||\n textValue === fieldValue);\n\n const conditionNotChecked = !checked && !textValue;\n\n return conditionChecked || conditionNotChecked;\n }, [checked, fieldValue, checkValue, textValue]);\n\n useAutoFocusCheckbox(checkboxRef, isFocus);\n\n useEffect(() => {\n setChecked(!!textValue);\n }, [checkValue, textValue]);\n\n useEffect(() => {\n setFieldValue(textValue);\n }, [textValue]);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n setFieldValue(event.target.value);\n };\n\n const handleCheckbox = (e: CheckboxChangeEvent) => {\n const value = e.target.checked;\n\n if (!value) {\n setFieldValue('');\n }\n\n setChecked(value);\n };\n\n const handleCancel = () => {\n setFieldValue(textValue);\n setChecked(!!textValue);\n setClosePopup(true);\n setIsFocus(false);\n };\n\n const handleSave = () => {\n if (fieldValue !== textValue || checked !== checkValue) {\n const payload = {\n company_id: companyId,\n deal_preparation: {\n [checkboxKey]: checked,\n [textInputKey]: fieldValue || null,\n },\n };\n dispatch(actions.updateOpportunityPresentation(payload, isFromHistory));\n }\n\n setClosePopup(true);\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n useOnClickOutside(popoverContentRef, handleCancel);\n\n const content = (\n <div ref={popoverContentRef}>\n <div className=\"ant-popover-title\">Edit \"Banker\" value</div>\n <Space direction=\"vertical\" style={{ padding: '12px 16px' }}>\n <Checkbox\n ref={el => {\n checkboxRef.current = el;\n }}\n checked={checked}\n onChange={handleCheckbox}\n autoFocus={!isFromGrid}\n >\n Banker\n </Checkbox>\n <div style={{ width: '300px' }} onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n <Text>Name of Banker</Text>\n\n <Input\n type=\"text\"\n placeholder=\"Enter text\"\n onChange={handleChange}\n value={fieldValue as string | undefined}\n disabled={!checked}\n style={{ marginBottom: '10px' }}\n />\n {checked && !fieldValue && <Error type=\"danger\">Input a banker name</Error>}\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSave}\n disabled={disabledSave}\n >\n Save\n </Button>\n </div>\n </div>\n </Space>\n </div>\n );\n\n if (isFromHistory) {\n return (\n <>\n <EditPopover\n content={content}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n actionPendo={actionPendo}\n hidePenIcon\n destroyOnHide\n getPopupContainer={getPopupContainer}\n overlayClassName=\"banker_field\"\n >\n Edit Field\n </EditPopover>\n <GlobalBankerFieldStyle />\n </>\n );\n }\n\n if (!isFromGrid) {\n return (\n <>\n <EditPopover\n content={content}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n actionPendo={actionPendo}\n destroyOnHide\n getPopupContainer={getPopupContainer}\n overlayClassName=\"banker_field\"\n >\n {isFromHistory ? 'Edit Field' : <TruncateTooltip title={label}>{label}</TruncateTooltip>}\n </EditPopover>\n <GlobalBankerFieldStyle />\n </>\n );\n }\n\n return (\n <InlineEdit\n action={\n <>\n <EditCellPen\n content={content}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n actionPendo={actionPendo}\n getPopupContainer={getPopupContainer}\n overlayClassName=\"banker_field\"\n onVisibilityShow={() => {\n setIsFocus(true);\n }}\n destroyOnHide={false}\n />\n <GlobalBankerFieldStyle />\n </>\n }\n fill\n >\n {isFromHistory ? (\n 'Edit Field'\n ) : (\n <TruncateTooltip title={label}>\n <span>{label}</span>\n </TruncateTooltip>\n )}\n </InlineEdit>\n );\n};\n\nexport default React.memo(EditFieldCheckboxText);\n","import styled from 'styled-components';\nimport PopoverComponent from '@optx/shared/view/molecules/Popover';\n\nconst Popover = styled(PopoverComponent)`\n max-width: 500px;\n`;\n\nconst SubTitle = styled.span`\n font-size: 14px;\n font-weight: normal;\n\n white-space: normal;\n word-wrap: break-word;\n overflow-wrap: break-word;\n\n /* Gray / gray-8 */\n color: #595959;\n`;\n\nexport const Styled = {\n Popover,\n SubTitle,\n};\n","import React, { useRef, useState, useEffect } from 'react';\nimport { Button, Input } from 'antd';\n// models\nimport Company from '@optx/models/Company';\nimport { ServiceType } from '../state/interfaces';\nimport { TooltipPlacement } from 'antd/lib/tooltip';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n// hooks\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useUpdateFields from '../hooks/useUpdateFields';\nimport useFocusInput from '@optx/common/hooks/useFocusInput';\n// components\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n// styles\nimport Styled from './CellPopover.styled';\nimport { Styled as TableCellStyled } from '@optx/features/company/edit-fields/components/TableCellFit.styled';\nimport { Styled as CustomPopoverStyled } from '@optx/features/company/edit-fields/components/EditFieldTextarea.styled';\ninterface EditFieldTextareaProps {\n value: string | null;\n record: Company;\n fieldName: EditFieldOptions;\n isFromHistory?: boolean;\n refreshOnChange?: boolean;\n service?: ServiceType;\n errorMessage?: string;\n isFromGrid: boolean;\n triggerLabel?: string;\n hidePenIcon?: boolean;\n successMessage?: string;\n actionPendo?: string;\n placeholder?: string;\n maxLength?: number;\n tooltipPosition?: TooltipPlacement;\n}\n\nexport type EditFieldOptions = 'Rationale' | 'Commentary';\n\nconst EditFieldTextarea: React.FC<EditFieldTextareaProps> = ({\n record,\n value,\n fieldName,\n isFromGrid,\n isFromHistory,\n refreshOnChange,\n service,\n errorMessage,\n triggerLabel,\n hidePenIcon,\n successMessage,\n actionPendo,\n maxLength = 500,\n placeholder,\n tooltipPosition,\n}) => {\n const { updateField } = useUpdateFields({\n fieldName,\n companyId: record?.company_id ?? 0,\n companyUrl: record?.company_url ?? null,\n successMessage,\n service: service as ServiceType,\n isFromHistory: isFromHistory || refreshOnChange,\n errorMessage: errorMessage,\n });\n\n const [closePopup, setClosePopup] = useState<boolean>(false);\n const [isSaveBtnDisabled, setIsSaveBtnDisabled] = useState<boolean>(true);\n const [focus, setFocus] = useState(false);\n const [textValue, setTextValue] = useState<string | null>(value);\n\n const popoverContentRef = useRef(null);\n\n const focusInputRef = useFocusInput(focus, closePopup);\n\n const handleCancel = () => {\n setClosePopup(true);\n\n setIsSaveBtnDisabled(true);\n };\n\n useOnClickOutside(popoverContentRef, handleCancel);\n\n useEffect(() => {\n setTextValue(value);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n if (!record) return null;\n\n const title = `Edit \"${fieldName}\" value`;\n\n let label =\n value === undefined || value === null || value === DEFAULT_CELL_VALUE || value === ''\n ? DEFAULT_CELL_VALUE\n : value;\n\n const isCommentaryValidValue = value !== '' && fieldName === 'Commentary';\n\n const isDesiredTransactionField = fieldName === 'Commentary';\n\n const onChange = (textValue: string) => {\n setTextValue(textValue);\n setIsSaveBtnDisabled(false);\n };\n\n const handleSave = () => {\n updateField(textValue as string, 'rationale');\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n setClosePopup(true);\n setIsSaveBtnDisabled(true);\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n handleSave();\n }\n };\n\n const content = (\n <TableCellStyled.TextareaWrapper ref={popoverContentRef}>\n <Input.TextArea\n value={textValue ?? ''}\n onChange={e => {\n onChange(e.target.value);\n }}\n ref={focusInputRef}\n onKeyDown={handleDropdownKeyEvent}\n rows={4}\n tabIndex={0}\n placeholder={placeholder}\n maxLength={maxLength}\n />\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n disabled={isSaveBtnDisabled}\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSave}\n >\n Save\n </Button>\n </div>\n </TableCellStyled.TextareaWrapper>\n );\n\n if (!isFromGrid || isFromHistory) {\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n hidePenIcon={hidePenIcon}\n >\n {triggerLabel ? (\n triggerLabel\n ) : (\n <TruncateTooltip className=\"edit-field--text\" title={label} placement={tooltipPosition}>\n {label}\n </TruncateTooltip>\n )}\n </EditPopover>\n );\n }\n\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n onClick={() => {\n setFocus(true);\n }}\n setClosePopup={setClosePopup}\n customOverlayStyle={{ height: '14rem' }}\n />\n }\n fill\n >\n {isCommentaryValidValue ? (\n <CustomPopoverStyled.Popover\n placement=\"left\"\n content={\n <>\n <CustomPopoverStyled.SubTitle>{value}</CustomPopoverStyled.SubTitle>\n </>\n }\n >\n <span>{value}</span>\n </CustomPopoverStyled.Popover>\n ) : (\n DEFAULT_CELL_VALUE\n )}\n {value && !isDesiredTransactionField ? (\n <Styled.DefaultTooltip title={value ? value : DEFAULT_CELL_VALUE}>\n <TableCellStyled.TableCellInner>\n {value ? value : DEFAULT_CELL_VALUE}\n </TableCellStyled.TableCellInner>\n </Styled.DefaultTooltip>\n ) : (\n !isDesiredTransactionField && DEFAULT_CELL_VALUE\n )}\n </InlineEdit>\n );\n};\n\nexport default React.memo(EditFieldTextarea);\n","import styled, { css } from 'styled-components';\nimport SingleSelect from '@optx/components/common/select/SingleSelect';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\n\nconst StyledSingleSelect = styled(SingleSelect)`\n .singleselect-select__menu {\n position: static;\n top: 0;\n }\n .singleselect-select__menu-list {\n height: 230px;\n max-height: 230px;\n }\n .singleselect-select__single-value {\n left: 24px;\n }\n .singleselect-select__option {\n cursor: pointer;\n }\n .singleselect-select__option--is-selected:hover {\n color: #fff !important;\n }\n`;\nconst StyledEditPopover = styled(EditPopover)<{ showLabel: boolean }>`\n ${props =>\n !props.showLabel &&\n css`\n .edit-field--container {\n padding-right: 20px;\n display: inline-block;\n position: static;\n }\n .edit-pen {\n position: absolute;\n right: 0;\n top: 0px;\n }\n `}\n padding-left: 5px;\n position: relative;\n`;\n\nconst ContentContainer = styled.div`\n width: 300px;\n`;\n\nexport default { StyledSingleSelect, StyledEditPopover, ContentContainer };\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const CHANGE_SORT = createFeatureActionType(featureName, 'CHANGE_SORT');\nexport const CHANGE_SORT_SUCCESS = createFeatureActionType(featureName, 'CHANGE_SORT_SUCCESS');\n\nexport const CHANGE_MULTI_SORT = createFeatureActionType(featureName, 'CHANGE_MULTI_SORT');\n\nexport const RESET_SORT = createFeatureActionType(featureName, 'RESET_SORT');\n\nexport const RESET_SORT_SUCCESS = createFeatureActionType(featureName, 'RESET_SORT_SUCCESS');\n\nexport const SIMILAR_COMPANIES = 'company/search/SIMILAR_COMPANIES';\n","import { SortByRule } from '@models/table/sorting';\nimport { Dictionary } from 'lodash';\nimport { createAction } from '@reduxjs/toolkit';\n// models\nimport { GridPayload, GridKeys } from '@optx/models/grid';\n// redux\nimport {\n CHANGE_SORT,\n CHANGE_MULTI_SORT,\n RESET_SORT,\n RESET_SORT_SUCCESS,\n CHANGE_SORT_SUCCESS,\n SIMILAR_COMPANIES,\n} from './types';\n\nexport const changeSort = createAction<GridPayload<SortByRule<any>[], GridKeys>>(CHANGE_SORT);\nexport const changeSortSuccess =\n createAction<GridPayload<SortByRule<any>[], GridKeys>>(CHANGE_SORT_SUCCESS);\n\nexport const changeMultiSort = createAction(\n CHANGE_MULTI_SORT,\n (\n multiSort: boolean,\n gridKey: GridKeys,\n sortBy?: SortByRule<any>[],\n otherData?: Dictionary<string>\n ) => ({\n payload: multiSort,\n meta: { sortBy, gridKey, otherData },\n })\n);\n\nexport const resetSort = createAction<GridKeys>(RESET_SORT);\nexport const resetSortSuccess =\n createAction<GridPayload<SortByRule<any>[] | undefined, GridKeys>>(RESET_SORT_SUCCESS);\n\nexport const similarCompaniesSortingAction = createAction<boolean>(SIMILAR_COMPANIES);\n","import { createReducer, PayloadAction, CaseReducer } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport { SortByRule } from '@models/table/sorting';\nimport { FilterSource } from '@models/filters';\nimport { CompanyFiltersMeta } from '@models/search';\nimport { GridKeys, GridPayload } from '@models/grid';\nimport { UserInformation, UserSessionSettings } from '@models/user';\nimport { GridSortMapping, SortState } from './interfaces';\n// constants\nimport {\n COMPANY_DEFAULT_SORT,\n MYCOMPANIES_DEFAULT_SORT_IL,\n MYCOMPANIES_DEFAULT_SORT_US,\n} from '@constants/table/sort/defaultSort';\nimport {\n DEFAULT_SORT_COMPANIES,\n DEFAULT_SORT_ANALYST,\n} from '@optx/features/checklist-research-insights/constants/table';\nimport { SORT_MAPPING } from '../constants';\n// utils\nimport { parseSorting } from '@utils/filters/parseSorting';\nimport { generateSortInitialState } from '@optx/utils/grid';\nimport { getSortGrid } from '@optx/utils/table/sorting';\n// redux\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { actions as companyFiltersActions } from '@redux/company/filters';\nimport * as actions from './actions';\n\nconst resetSort = (draftState: SortState, gridKey: GridKeys) => {\n // some sort grids do not have multisort or loading so\n // we need to check first for their existence before updating\n if (typeof draftState[gridKey].multiSort === 'boolean') {\n draftState[gridKey].multiSort = false;\n }\n\n if (typeof draftState[gridKey].loading === 'boolean') {\n draftState[gridKey].loading = false;\n }\n};\n\nconst updateSortFromSession = (\n draftState: SortState,\n sortSessionMap: GridSortMapping[],\n session: UserSessionSettings\n) => {\n sortSessionMap.forEach(({ gridKey, sessionKey, hasMultiSort }) => {\n if (sessionKey) {\n const gridSession = session[sessionKey];\n\n if (gridSession !== undefined) {\n if (gridSession === '') {\n draftState[gridKey].sortBy = [];\n\n if (hasMultiSort) {\n draftState[gridKey].multiSort = false;\n }\n } else {\n const { sortBy, isMultiSort } = parseSorting(gridSession);\n draftState[gridKey].sortBy = sortBy;\n\n if (hasMultiSort) {\n draftState[gridKey].multiSort = isMultiSort;\n }\n }\n }\n }\n });\n};\n\nconst initialState: SortState = generateSortInitialState();\n\nconst changeSortReducer: CaseReducer<\n SortState,\n PayloadAction<GridPayload<SortByRule<any>[], GridKeys>>\n> = (draftState, action) => {\n const { gridKey } = action.payload;\n draftState[gridKey].loading = true;\n\n if (draftState[gridKey].isSimilarCompaniesSort) {\n draftState[gridKey].isSimilarCompaniesSort = false;\n }\n};\n\nconst changeSortSuccessReducer: CaseReducer<\n SortState,\n PayloadAction<GridPayload<SortByRule<any>[], GridKeys>>\n> = (draftState, action) => {\n const { gridKey, data: sortBy } = action.payload;\n\n if (draftState[gridKey].isSimilarCompaniesSort) {\n draftState[gridKey].sortBy = [];\n } else {\n draftState[gridKey].sortBy = sortBy || [];\n }\n\n draftState[gridKey].loading = false;\n};\n\nconst changeMultiSortReducer: CaseReducer<\n SortState,\n PayloadAction<\n boolean,\n any,\n { sortBy?: SortByRule<any>[]; gridKey: GridKeys; otherData?: Dictionary<string> }\n >\n> = (draftState, action) => {\n const multiSort = action.payload;\n const { gridKey, otherData } = action.meta;\n\n const sortGrid = getSortGrid(gridKey);\n\n draftState[gridKey].multiSort = multiSort;\n\n if (!multiSort && sortGrid) {\n if (otherData) {\n if (sortGrid.gridKey === 'myCompanies') {\n if (otherData.optxScoreSettings === 'il') {\n draftState[gridKey].sortBy = MYCOMPANIES_DEFAULT_SORT_IL;\n } else {\n draftState[gridKey].sortBy = MYCOMPANIES_DEFAULT_SORT_US;\n }\n } else if (sortGrid.gridKey === 'checklistResearchInsights') {\n if (otherData.defaultTableView === 'company') {\n draftState[gridKey].sortBy = DEFAULT_SORT_COMPANIES;\n } else {\n draftState[gridKey].sortBy = DEFAULT_SORT_ANALYST;\n }\n }\n } else {\n draftState[gridKey].sortBy = sortGrid.defaultSort;\n }\n }\n\n if (draftState[gridKey].isSimilarCompaniesSort) {\n draftState[gridKey].isSimilarCompaniesSort = false;\n }\n};\n\nconst resetSortSuccessReducer: CaseReducer<\n SortState,\n PayloadAction<GridPayload<SortByRule<any>[] | undefined, GridKeys>>\n> = (draftState, action) => {\n const { data: sortBy, gridKey } = action.payload;\n\n const defaultSortGrid = getSortGrid(gridKey);\n\n draftState[gridKey].sortBy = sortBy ? sortBy : defaultSortGrid?.defaultSort || [];\n\n if (draftState[gridKey].isSimilarCompaniesSort) {\n draftState[gridKey].isSimilarCompaniesSort = false;\n }\n\n resetSort(draftState, gridKey);\n};\n\nexport const fetchUserInformationSuccessReducer: CaseReducer<\n SortState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n updateSortFromSession(draftState, SORT_MAPPING, action.payload.settings.session_settings);\n};\n\nconst fetchCompanyFiltersSuccessReducer: CaseReducer<\n SortState,\n PayloadAction<Array<FilterSource>, any, CompanyFiltersMeta>\n> = (draftState, action) => {\n const { defaultViews, settings } = action.meta;\n\n if (defaultViews.length) {\n const { sortBy, isMultiSort } = parseSorting(action.meta.defaultViews[0].search_criteria);\n\n if (!settings?.session_settings.company_sorting) {\n draftState.advancedSearch.sortBy = sortBy;\n draftState.advancedSearch.multiSort = isMultiSort;\n }\n\n if (!settings?.session_settings.user_list_sorting) {\n draftState.lists.sortBy = sortBy;\n draftState.lists.multiSort = isMultiSort;\n }\n }\n\n if (settings?.profile_settings.optx_score_settings === 'il') {\n draftState.myCompanies.sortBy = MYCOMPANIES_DEFAULT_SORT_IL;\n }\n};\n\nconst similarCompaniesSortingReducer: CaseReducer<SortState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.advancedSearch.isSimilarCompaniesSort = action.payload;\n\n if (action.payload === false) {\n draftState.advancedSearch.sortBy = COMPANY_DEFAULT_SORT;\n }\n};\n\nconst reducer = createReducer<SortState>(initialState, builder =>\n builder\n .addCase(actions.changeSort, changeSortReducer)\n .addCase(actions.changeSortSuccess, changeSortSuccessReducer)\n .addCase(actions.changeMultiSort, changeMultiSortReducer)\n .addCase(actions.resetSortSuccess, resetSortSuccessReducer)\n // external actions\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n .addCase(companyFiltersActions.fetchCompanyFiltersSuccess, fetchCompanyFiltersSuccessReducer)\n .addCase(\n companyFiltersActions.fetchCompanyFiltersForNotificationsSuccess,\n fetchCompanyFiltersSuccessReducer\n )\n .addCase(actions.similarCompaniesSortingAction, similarCompaniesSortingReducer)\n);\n\nexport default reducer;\n","import { call, put, select } from 'redux-saga/effects';\nimport { Dictionary } from 'lodash';\n// models\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { SortByRule } from '@models/table/sorting';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { SearchViewType } from '@optx/models/user';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { COMPANY_DEFAULT_SORT } from '@optx/constants/table/sort/defaultSort';\nimport { LONG_CARD_VIEW_DEFAULT_PAGE_SIZE } from '@optx/constants/pagination';\n// redux\nimport { getFiltersQuery } from '@redux/company/search/search/sagasReusable';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { actions as longCardPaginationActions } from '@features/grid/pagination-long-card';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport { selectors as filterSelectors } from '@redux/company-outreach/filters';\nimport { userInfoUpdateSaga } from '@features/grid/state/sagasReusable';\nimport { searchCompanies, searchCompaniesFail } from '@features/grid/search/state/sagasReusable';\n\nconst gridKey = 'outreachDetails';\n\nexport function* outreachDetailsChangeSortSaga(sortBy: SortByRule<any>[]) {\n const analystIdFilter: [string | null, string | null] | SelectOption<string> | undefined =\n yield select(filterSelectors.getSourcingOptitonsFilterValues('analyst_id'));\n const columnNameSourcingOutReachFilter:\n | [string | null, string | null]\n | SelectOption<string>\n | undefined = yield select(filterSelectors.getSourcingOptitonsFilterValues('column_name'));\n const tableGridQuery: string = yield select(searchSelectors.getTableGridQuery(gridKey));\n const sourcingOutReachDateFilter: string = yield select(\n filterSelectors.getSourcingFilterOptionsDateValue\n );\n const filter: Dictionary<PreselectedFilter> = yield select(filterSelectors.getFilter);\n const searchKey: string = yield select(searchSelectors.getSearchKey(gridKey));\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridKey));\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const view: SearchViewType = yield select(viewTypeSelectors.searchView(gridKey));\n\n const sourcingOutReachColumnName = (columnNameSourcingOutReachFilter as SelectOption)?.value;\n\n // @ts-ignore\n const listOfAnalystIds: number[] = analystIdFilter?.map(\n (list: { label: string; value: number }) => list.value\n );\n\n const pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const customFilter = {\n ...filter,\n ddate: sourcingOutReachDateFilter,\n };\n\n const filterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n customFilter\n );\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n analystId: listOfAnalystIds?.toString(),\n sourcingOutReachColumnName,\n tableGridQuery,\n filter: filterQuery,\n pagination: {\n ...pagination,\n pageNumber: 1,\n },\n sortBy,\n };\n\n try {\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true,\n true\n );\n\n yield call(searchCompanies, searchData, gridKey, filter, false, undefined, userSettings);\n\n if (view === 'long-card') {\n yield put(\n longCardPaginationActions.changeLongCardPagination({\n gridKey: 'outreachDetails',\n data: pagination,\n })\n );\n } else {\n yield put(\n paginationActions.changePaginationSuccess({ gridKey: 'outreachDetails', data: pagination })\n );\n }\n\n yield put(\n sortActions.changeSortSuccess({\n gridKey,\n data: sortBy,\n })\n );\n } catch (error) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n}\n\nexport function* outreachDetailsMultiSortSaga(isMultiSort: boolean) {\n const currentSorting: SortByRule<any>[] = yield select(sortSelectors.getSorting(gridKey));\n\n try {\n // Only make the call to API if previous sort was changed to single sort\n if (!isMultiSort) {\n yield put(sortActions.changeSort({ gridKey, data: currentSorting }));\n }\n } catch (error) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n}\n\nexport function* outreachDetailsResetSortSaga() {\n const sortBy = COMPANY_DEFAULT_SORT;\n const tableGridQuery: string = yield select(searchSelectors.getTableGridQuery(gridKey));\n const sourcingOutReachDateFilter: string = yield select(\n filterSelectors.getSourcingFilterOptionsDateValue\n );\n const analystIdFilter: [string | null, string | null] | SelectOption<string> | undefined =\n yield select(filterSelectors.getSourcingOptitonsFilterValues('analyst_id'));\n const filter: Dictionary<PreselectedFilter> = yield select(filterSelectors.getFilter);\n const columnNameSourcingOutReachFilter:\n | [string | null, string | null]\n | SelectOption<string>\n | undefined = yield select(filterSelectors.getSourcingOptitonsFilterValues('column_name'));\n const searchKey: string = yield select(searchSelectors.getSearchKey(gridKey));\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridKey));\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const view: SearchViewType = yield select(viewTypeSelectors.searchView(gridKey));\n\n const pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const customFilter = {\n ...filter,\n ddate: sourcingOutReachDateFilter,\n };\n\n const filterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n customFilter\n );\n\n const sourcingOutReachColumnName = (columnNameSourcingOutReachFilter as SelectOption<string>)\n ?.value;\n\n //@ts-ignore\n const listOfAnalystIds: number[] = analystIdFilter?.map(\n (list: { label: string; value: number }) => list.value\n );\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n tableGridQuery,\n analystId: listOfAnalystIds?.toString(),\n sourcingOutReachColumnName,\n filter: filterQuery,\n pagination: {\n ...pagination,\n pageNumber: 1,\n },\n sortBy,\n };\n\n try {\n yield call(searchCompanies, searchData, gridKey, filter, true);\n yield put(sortActions.resetSortSuccess({ gridKey, data: undefined }));\n\n yield call(userInfoUpdateSaga, gridKey, pagination, false, true);\n\n if (view === 'long-card') {\n yield put(\n longCardPaginationActions.changeLongCardPagination({\n gridKey: 'outreachDetails',\n data: pagination,\n })\n );\n } else {\n yield put(paginationActions.changePaginationSuccess({ gridKey, data: pagination }));\n }\n } catch (error) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n}\n","import { call, put, select } from 'redux-saga/effects';\nimport queryString from 'query-string';\nimport { AxiosResponse } from 'axios';\nimport { Dictionary } from 'lodash';\n// models\nimport { CompanyUserContact, SearchPayload, SearchPayloadRequest } from '@models/api/contacts';\nimport { BaseFilter } from '@optx/models/filters';\nimport { SortByRule } from '@optx/models/table/sorting';\n// utils\nimport mapFiltersToURLParams from '@optx/utils/filters/mapFiltersToURLParams';\nimport { mapSortQuery } from '@optx/utils/search';\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// services\nimport NotificationService from '@services/NotificationService';\nimport SearchService from '@services/api/SearchService';\n// redux\nimport { actions as sortActions } from '@features/grid/sort';\nimport * as actions from '@redux/contacts/search/search/actions';\nimport { getSearchData } from '@redux/contacts/search/search/selectors';\nimport { selectors as filtersSelectors } from '@redux/contacts/filters';\nimport { actions as userInformationActions } from '@redux/user/information';\n\nexport function* contactsChangeSortSaga(sortBy: SortByRule<any>[]) {\n const searchPayload: SearchPayload = yield select(getSearchData);\n const filterMap: Dictionary<BaseFilter> = yield select(filtersSelectors.getFiltersMap);\n const filterURLParam = mapFiltersToURLParams(filterMap, searchPayload.filter);\n const payloadRequest: SearchPayloadRequest = {\n ...searchPayload,\n filter: filterURLParam,\n pagination: {\n pageNumber: 1,\n pageSize: searchPayload.pagination.pageSize,\n },\n sortBy,\n };\n\n const sortQuery = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n\n try {\n const res: AxiosResponse<CompanyUserContact[]> = yield call(\n SearchService.searchContacts,\n payloadRequest\n );\n\n if (res.data) {\n yield put(actions.searchContactsSuccess(res.data, searchPayload.searchTitle));\n yield put(userInformationActions.updateUserSettings({ contact_sorting: sortQuery }));\n yield put(\n sortActions.changeSortSuccess({\n gridKey: 'contacts',\n data: sortBy,\n })\n );\n } else {\n const errorMessage = 'Search contacts fail!';\n yield put(actions.searchContactsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Search contacts fail, Server error!');\n yield put(actions.searchContactsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n","import { call, put, takeLatest, select, fork, cancel, cancelled } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { SortByRule } from '@models/table/sorting';\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { SearchViewType } from '@optx/models/user';\nimport { GetGridSearchData, GridKeys, GridPayload } from '@models/grid';\nimport { SearchSave, SearchStateData } from '@models/search';\n// constants\nimport {\n COMPANY_DEFAULT_SORT,\n MYCOMPANIES_DEFAULT_SORT_IL,\n} from '@constants/table/sort/defaultSort';\nimport { LONG_CARD_VIEW_DEFAULT_PAGE_SIZE } from '@optx/constants/pagination';\n// utils\nimport { getCompanyIdFromProfileUrl } from '@optx/utils/routes';\nimport { myCompaniesCardsFilters } from '@optx/utils/myCompanies';\nimport { getSortGrid } from '@optx/utils/table/sorting';\n// redux\nimport * as selectors from './selectors';\nimport * as actions from './actions';\nimport { selectors as myCompaniesFilterCardsSelectors } from '@optx/redux/my-companies/filters-cards';\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { actions as longCardPaginationActions } from '@features/grid/pagination-long-card';\nimport { searchCompanies, searchCompaniesFail } from '@features/grid/search/state/sagasReusable';\nimport { userInfoUpdateSaga, getGridSearchDataSaga } from '@features/grid/state/sagasReusable';\nimport { sagas as searchFiltersSagas } from '@optx/features/grid/filter';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport {\n fetchAnalyst,\n fetchCompany,\n} from '@features/checklist-research-insights/state/actions/search';\nimport { selectors as checklistSelectors } from '@features/checklist-research-insights/state/selectors/index';\nimport { fetchSourcingOutreach } from '@optx/features/sourcing-outreach-summary/state/actions/search';\nimport {\n outreachDetailsChangeSortSaga,\n outreachDetailsMultiSortSaga,\n outreachDetailsResetSortSaga,\n} from './outreachDetailsSortSagas';\nimport { contactsChangeSortSaga } from './contactsSortSagas';\nimport { selectors as savedSearchesSelectors } from '@redux/company/saved-searches';\n\n// sort\nfunction* changeSortSaga(action: PayloadAction<GridPayload<SortByRule<any>[]>>) {\n const { gridKey, data: sortBy } = action.payload;\n\n if (gridKey === 'contacts') {\n yield call(contactsChangeSortSaga, sortBy);\n } else if (gridKey === 'outreachDetails') {\n yield call(outreachDetailsChangeSortSaga, sortBy);\n } else if (gridKey === 'outreach') {\n yield put(fetchSourcingOutreach(sortBy));\n } else if (gridKey === 'checklistResearchInsights') {\n const defaultTableView: 'company' | 'analyst' = yield select(\n checklistSelectors.ui.defaultTableView\n );\n\n if (defaultTableView === 'analyst') {\n yield put(fetchAnalyst(sortBy));\n } else {\n yield put(fetchCompany(sortBy));\n }\n } else {\n const view: SearchViewType = yield select(viewTypeSelectors.searchView(gridKey));\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n const {\n filter: filterQuery,\n searchKey,\n searchType,\n originalFilter: filter,\n subFilter,\n }: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey, pagination);\n\n const savedSearches: SearchSave[] = yield select(savedSearchesSelectors.getAllViews);\n const savedSearchView = savedSearches.find(search => search.unique_id === filter.list_id);\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filter.list_id ? {} : filterQuery,\n pagination,\n sortBy,\n companyId: gridKey === 'addons' ? getCompanyIdFromProfileUrl() : undefined,\n ...(filter.list_id\n ? {\n fromSavedList: filter.list_id as unknown as number,\n ...(savedSearchView?.search_info.type === 'combined' ? { listType: 'combined' } : {}),\n list_id: filter.list_id as unknown as number,\n }\n : {}),\n };\n\n if (gridKey === 'myCompanies') {\n const selectedCard: SearchStateData = yield select(\n myCompaniesFilterCardsSelectors.getSelectedCard\n );\n\n const savedListId = selectedCard.filter?.saved_list_id\n ? { saved_list_id: selectedCard.filter?.saved_list_id }\n : { saved_list_id: undefined };\n\n searchData.filter = subFilter\n ? {\n ...selectedCard.filter,\n // @ts-ignore\n ...selectedCard.data[subFilter],\n ...filterQuery,\n ...savedListId,\n source_tag_filter: selectedCard.filter.source_tag_filter,\n ...myCompaniesCardsFilters(selectedCard, {\n nextTouchDate: filterQuery.next_touch_date as any,\n lastTouchDateDays: filterQuery.last_touch_date_days as any,\n stage: filterQuery.stage as any,\n }),\n query: searchKey,\n }\n : {\n ...selectedCard.filter,\n ...filterQuery,\n ...savedListId,\n source_tag_filter: selectedCard.filter.source_tag_filter,\n query: searchKey,\n ...myCompaniesCardsFilters(selectedCard, {\n nextTouchDate: filterQuery.next_touch_date as any,\n lastTouchDateDays: filterQuery.last_touch_date_days as any,\n stage: filterQuery.stage as any,\n }),\n };\n }\n\n try {\n const userSettings: { [key: string]: number | string } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true,\n true,\n sortBy\n );\n\n yield call(searchCompanies, searchData, gridKey, filter, undefined, undefined, userSettings);\n\n if (view === 'long-card') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey,\n data: pagination,\n })\n );\n } else {\n yield put(paginationActions.changePaginationSuccess({ gridKey, data: pagination }));\n }\n\n yield put(actions.changeSortSuccess({ gridKey, data: sortBy }));\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n }\n}\n\nfunction* changeMultiSortSaga(\n action: PayloadAction<boolean, any, { sortBy?: SortByRule<any>[]; gridKey: GridKeys }>\n) {\n const isMultiSort = action.payload;\n const { sortBy: previousSorting, gridKey } = action.meta;\n const currentSorting: SortByRule<any>[] = yield select(selectors.getSorting(gridKey));\n\n if (gridKey === 'outreachDetails') {\n yield call(outreachDetailsMultiSortSaga, isMultiSort);\n } else if (gridKey === 'checklistResearchInsights') {\n const defaultTableView: 'company' | 'analyst' = yield select(\n checklistSelectors.ui.defaultTableView\n );\n\n if (!isMultiSort && previousSorting !== currentSorting) {\n if (defaultTableView === 'analyst') {\n yield put(fetchAnalyst(currentSorting));\n } else {\n yield put(fetchCompany(currentSorting));\n }\n }\n } else {\n try {\n const cancelSearch: boolean = yield select(searchSelectors.isCancelled(gridKey));\n\n // Only make the call to API if previous sort was changed to single sort and\n // previous sorting is the same as next sorting.\n\n if (!isMultiSort && previousSorting !== currentSorting) {\n if (cancelSearch !== undefined) {\n yield put(searchActions.hideCancelSearch({ gridKey, data: true }));\n }\n\n yield put(actions.changeSort({ gridKey, data: currentSorting }));\n }\n\n if (cancelSearch) {\n yield cancel();\n }\n } finally {\n // @ts-ignore\n if (yield cancelled()) {\n yield put(searchActions.cancelCompanySearch({ gridKey, data: false }));\n }\n }\n }\n}\n\nfunction* resetSortSaga(action: PayloadAction<GridKeys>) {\n const gridKey = action.payload;\n\n if (gridKey === 'outreachDetails') {\n yield call(outreachDetailsResetSortSaga);\n } else {\n const view: SearchViewType = yield select(viewTypeSelectors.searchView(gridKey));\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n const defaultOptxScore: string = yield select(userInformationSelectors.getDefaultScore);\n\n const {\n filter: filterQuery,\n searchKey,\n searchType,\n originalFilter: filter,\n }: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey, pagination);\n\n const defaultSortGrid = getSortGrid(gridKey);\n let sortBy = defaultSortGrid?.defaultSort || COMPANY_DEFAULT_SORT;\n\n if (gridKey === 'myCompanies' && defaultOptxScore === 'il') {\n sortBy = MYCOMPANIES_DEFAULT_SORT_IL;\n }\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterQuery,\n pagination,\n sortBy,\n };\n\n try {\n yield call(searchCompanies, searchData, gridKey, filter);\n\n yield put(\n actions.resetSortSuccess({\n gridKey,\n data: gridKey === 'myCompanies' && defaultOptxScore === 'il' ? sortBy : undefined,\n })\n );\n\n yield call(userInfoUpdateSaga, gridKey, pagination, undefined, true, sortBy);\n\n if (view === 'long-card') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey,\n data: pagination,\n })\n );\n } else {\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey,\n data: pagination,\n })\n );\n }\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n }\n}\n\nexport default function* companiesSaga() {\n yield takeLatest(actions.changeSort, changeSortSaga);\n yield takeLatest(actions.changeMultiSort, changeMultiSortSaga);\n yield takeLatest(actions.resetSort, resetSortSaga);\n yield fork(searchFiltersSagas);\n}\n","import * as reducers from './reducers';\nimport * as selectors from './selectors';\n\nexport { reducers };\nexport { selectors };\n","import { createSelector } from 'reselect';\nimport queryString from 'query-string';\n// models\nimport { AppState } from '@optx/redux/interfaces';\nimport { GridKeys } from '@models/grid';\nimport { SelectOption } from '@optx/models/Option';\nimport { SpecialFilterTag } from '@optx/models/tags';\n// utils\nimport { generateUniqueKey } from '@optx/utils/uuid';\nimport { selectFeatureState } from '../../selectFeature';\nimport mapTags from '@optx/utils/filters/mapTags';\nimport mapFiltersToURLParams from '@optx/utils/filters/mapFiltersToURLParams';\n// redux\nimport { getSearchKey as searchKey } from '@optx/features/grid/searchkey/state/selectors';\nimport { getLists } from '@redux/favorite-lists/lists/selectors';\nimport { getMyCompaniesCards } from '@redux/my-companies/filters-cards/selectors';\nimport { selectors as routerSelectors } from '@optx/redux/router';\nimport { getSearchType as searchType } from '@features/grid/search-type/state/selectors';\n\nexport const getModalsIsOpen = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.pagination[gridKey]);\n\nexport const getFilter = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.filter[gridKey]?.filter);\n\nexport const getSimilarCompanyName = () =>\n createSelector(selectFeatureState, state => {\n const similarCompanyFilterName = state.filter.advancedSearch?.filter.similarCompanies;\n\n return similarCompanyFilterName as SelectOption;\n });\n\nexport const getDefaultFilter = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.filter[gridKey].preselected);\n\nexport const getClearedFilter = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.filter[gridKey].clear);\n\nexport const getCustomClearedFilter = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.filter[gridKey]?.customClearedFilter);\n\nexport const getFiltersLoaded = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => !!state.filter[gridKey]?.fetchedAt);\n\nconst selectCompanyFilters = (state: AppState) => state.filters;\n\nconst filterGetCompanyFilters = createSelector(selectCompanyFilters, state => state.data || []);\nexport const filterGetFiltersMap = createSelector(selectCompanyFilters, state => state.filters);\n\nexport const getTags = (gridKey: GridKeys) =>\n createSelector(\n getFilter(gridKey),\n filterGetCompanyFilters,\n getClearedFilter(gridKey),\n searchKey(gridKey),\n getMyCompaniesCards,\n getLists,\n routerSelectors.getLocation,\n searchType(gridKey),\n (\n filter,\n filterSources,\n clearedFilter,\n searchKey,\n getMyCompaniesCards,\n getLists,\n location,\n searchType\n ) => {\n const tags = mapTags(\n filter,\n filterSources,\n clearedFilter,\n [],\n undefined,\n undefined,\n getMyCompaniesCards,\n getLists,\n location as unknown as Location\n );\n\n if (searchKey) {\n tags.unshift({\n filter: 'keyword' as SpecialFilterTag,\n uniqueKey: generateUniqueKey(),\n label: 'Keyword',\n values: [\n {\n value: searchKey,\n },\n ],\n });\n }\n\n tags.unshift({\n filter: 'search_type',\n uniqueKey: generateUniqueKey(),\n label: 'Search Type',\n values: [\n {\n value: searchType,\n },\n ],\n closable: false,\n });\n\n return tags;\n }\n );\n\n/**\n * Check the current filter against custom cleared filter to be able to display custom clear filter button.\n */\nexport const showCustomClearFilter = (gridKey: GridKeys) =>\n createSelector(\n searchKey(gridKey),\n filterGetFiltersMap,\n getFilter(gridKey),\n getCustomClearedFilter(gridKey),\n (searchKey, normalizedFilters, filter, customClearedFilter) => {\n // If there is a search key there is no need for further check.\n if (searchKey || filter.similarCompanies) {\n return true;\n }\n\n const normalizedFilter = { ...filter };\n\n if (normalizedFilter.ss_list_id !== undefined) {\n delete normalizedFilter.ss_list_id;\n }\n\n if (normalizedFilter.saved_list_id !== undefined) {\n delete normalizedFilter.saved_list_id;\n }\n\n // Check current filter against custom filter.\n const filterURLParams = mapFiltersToURLParams(normalizedFilters, normalizedFilter);\n const filterQuery = queryString.stringify(filterURLParams, { arrayFormat: 'comma' });\n\n const customFilterURLParams = mapFiltersToURLParams(normalizedFilters, customClearedFilter);\n const customFilterQuery = queryString.stringify(customFilterURLParams, {\n arrayFormat: 'comma',\n });\n\n return filterQuery !== customFilterQuery;\n }\n );\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, isEqual } from 'lodash';\nimport { matchPath } from 'react-router';\nimport queryString from 'query-string';\n// models\nimport { GridKeys, GridPayload } from '@optx/models/grid';\nimport { Filter, FilterSource, PreselectedFilter } from '@optx/models/filters';\nimport { CompanyFiltersMeta, SearchSaveResponse } from '@optx/models/search';\nimport { SearchPayload } from '@optx/models/api/contacts';\nimport Company from '@optx/models/Company';\nimport { UserInformation } from '@optx/models/user';\nimport { FilterState } from './interfaces';\n// constants\nimport appRoutes from '../../../../constants/routes';\nimport { FILTERS_INITIAL_STATE, GRID_FILTER_KEYS } from '@optx/constants/grid';\nimport { myCompaniesPreselectedFilter } from './constants';\n// utils\nimport { mapPreselectedFilters } from '../../../../utils/filters/preselectedValues';\nimport { parseFilter } from '../../../../utils/filters/parseFilters';\nimport { generateGridReducerInitialState, getLocationGridKey } from '@utils/grid';\n// redux\nimport { actions as companyFiltersActions } from '@redux/company/filters/index';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches/index';\nimport { actions as searchActions } from '@features/grid/search';\nimport { actions as listsActions } from '@redux/lists/details/index';\nimport { actions as userInformationActions } from '@redux/user/information/index';\nimport { actions as myCompaniesActions } from '@optx/redux/my-companies/filters-cards/index';\nimport { actions as addonManagementActions } from '@optx/redux/company/addon-management';\n\nconst initialState: FilterState = generateGridReducerInitialState(\n GRID_FILTER_KEYS,\n FILTERS_INITIAL_STATE\n);\n\n// external actions reducers\nexport const fetchFiltersSuccessReducer: CaseReducer<\n FilterState,\n PayloadAction<Array<FilterSource>, any, CompanyFiltersMeta>\n> = (draftState, action) => {\n const preselected = mapPreselectedFilters(action.payload);\n const clearedFilter = mapPreselectedFilters(action.payload, false);\n\n const sourceScrubListMatch = matchPath(window.location.pathname, {\n path: appRoutes.userLists.sourceScrubLists,\n exact: true,\n });\n\n const userListMatch = matchPath(window.location.pathname, {\n path: appRoutes.userLists.list,\n exact: true,\n });\n\n const isSsList = sourceScrubListMatch && sourceScrubListMatch;\n const isUserList = userListMatch && userListMatch;\n const searchPathname = action.meta.isAnalystOrIsAdmin ? appRoutes.advancedSearch : appRoutes.home;\n\n GRID_FILTER_KEYS.forEach(key => {\n if (key === 'lists') {\n draftState[key].preselected = clearedFilter;\n } else if (key === 'myCompanies') {\n draftState[key].preselected = myCompaniesPreselectedFilter;\n } else {\n draftState[key].preselected = preselected;\n }\n\n // Set custom cleared filter for each grid.\n let customClearedFilter = clearedFilter;\n\n if (key === 'advancedSearch') {\n customClearedFilter = {\n ...clearedFilter,\n is_software: preselected.is_software,\n companies_assigned: preselected.companies_assigned,\n };\n }\n\n if (key === 'myCompanies') {\n customClearedFilter = {\n ...clearedFilter,\n ...draftState.myCompanies.preselected,\n };\n }\n\n draftState[key].customClearedFilter = customClearedFilter;\n draftState[key].clear = clearedFilter;\n\n let currentFilter = preselected;\n\n /**\n * '?usefor=testing' is used for testing purposes only.\n * We don't want to load the filter from the query\n * and use persisted filters to load.\n *\n */\n if (\n window.location.search &&\n window.location.pathname === searchPathname &&\n window.location.search !== '?usefor=testing'\n ) {\n // handle redirect with filter.It has priority over persisted filter.\n const queryFilter = window.location.search.replace('?', '');\n const [parsedFilters] = parseFilter(queryFilter, action.payload);\n\n currentFilter = parsedFilters;\n } else if (\n window.location.search &&\n key === 'advancedSearch' &&\n window.location.pathname === searchPathname\n ) {\n const queryFilter = window.location.search.replace('?', '');\n const [parsedFilters] = parseFilter(queryFilter, action.payload);\n\n currentFilter = parsedFilters;\n } else if (\n key === 'advancedSearch' &&\n draftState.advancedSearch.persistedFilter !== undefined\n ) {\n // Load persisted filter if available.\n const [parsedFilters] = parseFilter(\n draftState.advancedSearch.persistedFilter,\n action.payload\n );\n currentFilter = parsedFilters;\n }\n\n if (window.location.search && (isSsList || isUserList)) {\n // handle redirect with filter.It has priority over persisted filter.\n const queryFilter = window.location.search.replace('?', '');\n const [parsedFilters] = parseFilter(queryFilter, action.payload);\n\n currentFilter = parsedFilters;\n } else if (\n key === 'lists' &&\n draftState.lists.persistedFilter !== undefined &&\n (isSsList || isUserList)\n ) {\n // Load persisted filter if available.\n const [parsedFilters] = parseFilter(draftState.lists.persistedFilter, action.payload);\n currentFilter = parsedFilters;\n }\n\n if (key === 'myCompanies' && draftState.myCompanies.persistedFilter !== undefined) {\n // Load persisted filter if available.\n const [parsedFilters] = parseFilter(draftState.myCompanies.persistedFilter, action.payload);\n currentFilter = parsedFilters;\n } else if (key === 'myCompanies') {\n currentFilter = draftState[key].customClearedFilter;\n }\n\n draftState[key].filter = currentFilter;\n // remove persisted filter, is not needed anymore.\n delete draftState[key].persistedFilter;\n\n draftState[key].fetchedAt = new Date().toISOString();\n });\n};\n\nexport const searchCompaniesSuccessReducer: CaseReducer<\n FilterState,\n PayloadAction<Array<Company>, any, GridPayload<Partial<SearchPayload>>>\n> = (draftState, action) => {\n const { data, gridKey } = action.meta;\n const checkDataFilter = Object.keys(data.filter || {}).length !== 0;\n\n if (!gridKey) return;\n\n if (gridKey === 'lists') {\n const listKey = getLocationGridKey();\n\n if (\n listKey &&\n checkDataFilter &&\n !isEqual(draftState[listKey as GridKeys]?.filter, data?.filter)\n ) {\n draftState[listKey as GridKeys].filter = data.filter as Dictionary<PreselectedFilter>;\n }\n }\n\n if (GRID_FILTER_KEYS.includes(gridKey)) {\n if (data.listType === 'combined') {\n const { new_date_matched, ...oldFilters } = draftState[gridKey].filter;\n const customFilter = {\n ...oldFilters,\n list_id: data.fromSavedList,\n ...(data.filter?.new_date_matched\n ? { new_date_matched: data.filter.new_date_matched }\n : {}),\n };\n draftState[gridKey].filter = customFilter as Dictionary<PreselectedFilter>;\n } else if (checkDataFilter && !isEqual(draftState[gridKey].filter, data.filter)) {\n draftState[gridKey].filter = data.filter as Dictionary<PreselectedFilter>;\n }\n }\n};\n\nexport const filterCompanyListSuccessReducer: CaseReducer<FilterState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n const gridKey = getLocationGridKey();\n if (!gridKey) return;\n\n draftState[gridKey].filter.saved_list_id = action.payload;\n};\n\nexport const clearCompanyListReducer: CaseReducer<FilterState> = draftState => {\n const gridKey = getLocationGridKey();\n if (!gridKey) return;\n\n delete draftState[gridKey].filter.saved_list_id;\n delete draftState[gridKey].filter.ss_list_id;\n};\n\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccess: CaseReducer<FilterState, PayloadAction<UserInformation>> = (\n draftState,\n action\n) => {\n const { settings } = action.payload;\n\n // advanced search\n if (settings.session_settings.company_filters) {\n draftState.advancedSearch.persistedFilter = settings.session_settings.company_filters;\n }\n\n // my companies\n if (settings.session_settings.my_companies_filters) {\n const persistedSearch = settings.session_settings.my_companies_filters;\n\n if (\n persistedSearch &&\n (/^.*query.*$/.test(persistedSearch) || /^.*company_name_or_url.*$/.test(persistedSearch))\n ) {\n // remove query/company_name_or_url filters from persistent\n // since we are adding them as persistent to searchKey and searchType\n const filters = queryString.parse(persistedSearch, {\n arrayFormat: 'comma',\n });\n\n const filterKeys = Object.keys(filters);\n let updatedFilters: Dictionary<string> = {};\n\n filterKeys.forEach(key => {\n if (key !== 'query' && key !== 'company_name_or_url') {\n updatedFilters = {\n ...updatedFilters,\n [key]: filters[key] as string,\n };\n }\n });\n const updatedPersistedFilter = queryString.stringify(updatedFilters, {\n arrayFormat: 'comma',\n });\n draftState.myCompanies.persistedFilter = updatedPersistedFilter;\n } else {\n draftState.myCompanies.persistedFilter = settings.session_settings.my_companies_filters;\n }\n }\n\n // lists\n if (settings.session_settings.user_list_filters) {\n draftState.lists.persistedFilter = settings.session_settings.user_list_filters;\n }\n\n // addons\n if (settings.session_settings.addon_filters) {\n draftState.addons.persistedFilter = settings.session_settings.addon_filters;\n }\n};\n\nconst initializeSavedSearchesAndViewsSuccessReducer: CaseReducer<\n FilterState,\n PayloadAction<\n Array<SearchSaveResponse> | Dictionary<SearchSaveResponse>,\n any,\n {\n filterSources: Array<FilterSource<Filter<any>>>;\n }\n >\n> = (draftState, action) => {\n const allSavedSearches = action.payload as Array<SearchSaveResponse>;\n const { filterSources } = action.meta;\n\n const query = window.location.search ? window.location.search.replace('?', '') : undefined;\n\n const listId = query?.split('=')[1];\n const list = query?.split('=')[0] === 'saved_search_id';\n\n if (list) {\n const savedSearch = allSavedSearches.find(search => search.unique_id.toString() === listId);\n\n if (savedSearch) {\n const queryFilter = savedSearch.search_criteria;\n const [parsedFilters] = parseFilter(queryFilter, filterSources);\n draftState.advancedSearch.filter = parsedFilters;\n }\n }\n};\n\n// MyCompanies change card reducer\nconst changeCardReducer: CaseReducer<FilterState, PayloadAction<string>> = (draftState, action) => {\n draftState.myCompanies.filter = {\n ...draftState.myCompanies.preselected,\n ...draftState.myCompanies.filter,\n };\n draftState.myCompanies.customClearedFilter = {\n ...draftState.myCompanies.customClearedFilter,\n ...draftState.myCompanies.preselected,\n };\n};\n\n// Addons clear filter reducer\nconst clearAddonManagementFilterReducer: CaseReducer<FilterState> = draftState => {\n draftState.addons.filter = {\n ...draftState.addons.customClearedFilter,\n };\n};\n\nconst reducer = createReducer<FilterState>(initialState, builder =>\n builder\n // external reducers\n .addCase(addonManagementActions.clearSearch, clearAddonManagementFilterReducer)\n .addCase(companyFiltersActions.fetchCompanyFiltersSuccess, fetchFiltersSuccessReducer)\n .addCase(\n companyFiltersActions.fetchCompanyFiltersForNotificationsSuccess,\n fetchFiltersSuccessReducer\n )\n .addCase(searchActions.searchCompaniesSuccess, searchCompaniesSuccessReducer)\n .addCase(myCompaniesActions.changeCard, changeCardReducer)\n // lists\n .addCase(listsActions.filterCompanyListSuccess, filterCompanyListSuccessReducer)\n .addCase(listsActions.clearCompanyList, clearCompanyListReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccess)\n .addCase(\n savedSearchesActions.initializeSavedSearchesAndViewsSuccess,\n initializeSavedSearchesAndViewsSuccessReducer\n )\n);\n\nexport default reducer;\n","import { put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { actions as listsActions } from '@redux/lists/details';\n\n// filter saved lists\nexport function* filterCompanyListSaga(action: PayloadAction<string>) {\n yield put(listsActions.filterCompanyListSuccess(action.payload));\n}\n\nexport default function* companySearchFiltersSaga() {\n yield takeLatest(listsActions.filterCompanyList, filterCompanyListSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\nimport {\n CompanyWatchList,\n DeleteCompanyFromWatchList,\n UpdateListPermission,\n FetchFavoriteLists,\n AddCompanyToWatchListBulk,\n UpdateListAssociation,\n PublicWatchListActionPayload,\n} from '@models/WatchList';\nimport { SortByRule, SortRule } from '@models/table/sorting';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport * as types from './types';\n\n// initial fetch favorite lists\nexport const initialFetchFavoritesLists = createAction<FetchFavoriteLists | undefined>(\n types.INITIAL_FETCH_FAVORITE_LISTS\n);\n\nexport const initialFetchFavoritesListsSuccess = createAction(\n types.INITIAL_FETCH_FAVORITE_LISTS_SUCCESS,\n (payload: {\n data: Array<CompanyWatchList>;\n total: number;\n sortBy: Array<SortByRule<any>>;\n showEmptyLists: boolean;\n }) => ({\n payload: {\n data: payload.data,\n total: payload.total,\n sortBy: payload.sortBy,\n showEmptyLists: payload.showEmptyLists,\n },\n })\n);\n\n// fetch favorite lists\nexport const fetchFavoriteLists = createAction<FetchFavoriteLists | undefined>(\n types.FETCH_FAVORITE_LISTS\n);\nexport const fetchFavoriteListsSuccess = createAction(\n types.FETCH_FAVORITE_LISTS_SUCCESS,\n (payload: {\n data: Array<CompanyWatchList>;\n query: string;\n total: number;\n pagination: PageInfo;\n fetchAll?: boolean;\n sortBy: Array<SortByRule<any>>;\n showEmptyLists: boolean;\n }) => ({\n payload: {\n data: payload.data,\n query: payload.query,\n total: payload.total,\n pagination: payload.pagination,\n fetchAll: payload.fetchAll,\n showEmptyLists: payload.showEmptyLists,\n sortBy: payload.sortBy,\n },\n })\n);\n\nexport const fetchFavoriteListsFail = createAction<string>(types.FETCH_FAVORITE_LISTS_FAIL);\n\n// sort favorite lists\nexport const sortFavoriteLists = createAction<{ data: SortRule<any>; hideHistory?: boolean }>(\n types.SORT_FAVORITE_LISTS\n);\n\n// create favorite list\nexport const createFavoriteList = createAction<{\n title: string;\n company_id: number;\n}>(types.CREATE_FAVORITE_LIST);\nexport const createFavoriteListSuccess = createAction<{\n companyId: number;\n list: CompanyWatchList;\n}>(types.CREATE_FAVORITE_LIST_SUCCESS);\nexport const createFavoriteListFail = createAction<string>(types.CREATE_FAVORITE_LIST_FAIL);\n\n// delete favorite list\nexport const deleteFavoriteList = createAction<number | string>(types.DELETE_FAVORITE_LIST);\nexport const deleteFavoriteListSuccess = createAction<number | string>(\n types.DELETE_FAVORITE_LIST_SUCCESS\n);\nexport const deleteFavoriteListFail = createAction<string>(types.DELETE_FAVORITE_LIST_FAIL);\n\n// update favorite list count after bulk remove\nexport const updateFavoriteListCount = createAction<{ list_id: number | string; count: number }>(\n types.UPDATE_FAVORITE_LIST_COUNT\n);\n\n// rename favorite list\nexport const renameFavoriteList = createAction<{ list_id: number | string; title: string }>(\n types.RENAME_FAVORITE_LIST\n);\nexport const renameFavoriteListSuccess = createAction<{ list_id: number | string; title: string }>(\n types.RENAME_FAVORITE_LIST_SUCCESS\n);\nexport const renameFavoriteListFail = createAction<string>(types.RENAME_FAVORITE_LIST_FAIL);\n\n// delete company from list\nexport const deleteCompanyFromList = createAction<{ list_id: string; company_id: number }>(\n types.DELETE_COMPANY_FROM_LIST\n);\nexport const deleteCompanyFromListSuccess = createAction<DeleteCompanyFromWatchList>(\n types.DELETE_COMPANY_FROM_LIST_SUCCESS\n);\nexport const deleteCompanyFromListFail = createAction<string>(types.DELETE_COMPANY_FROM_LIST_FAIL);\n\n// remove shared list from watchlist\nexport const removeSharedList = createAction<string | number>(types.REMOVE_SHARED_LIST);\nexport const removeSharedListSuccess = createAction<number | string>(\n types.REMOVE_SHARED_LIST_SUCCESS\n);\nexport const removeSharedListFail = createAction<string>(types.REMOVE_SHARED_LIST_FAIL);\n\n// add company in list\nexport const addCompanyToList = createAction<{\n selectedLists: { list_title: string; list_id: number | null }[];\n company_id: number;\n error_on_conflict?: boolean;\n}>(types.ADD_COMPANY_TO_LIST);\nexport const addCompanyToListSuccess = createAction(\n types.ADD_COMPANY_TO_LIST_SUCCESS,\n (companyId: number, watchLists: CompanyWatchList[], ownerName?: string) => ({\n payload: { companyId, watchLists, ownerName },\n })\n);\nexport const addCompanyToListFail = createAction<string>(types.ADD_COMPANY_TO_LIST_FAIL);\n\n// save search as list\nexport const saveSearchAsList = createAction<{\n title: string;\n page?: number;\n callback?: () => void;\n}>(types.SAVE_SEARCH_AS_LIST);\nexport const saveSearchAsListSuccess = createAction<Dictionary<CompanyWatchList>>(\n types.SAVE_SEARCH_AS_LIST_SUCCESS\n);\nexport const saveSearchAsListFail = createAction<string>(types.SAVE_SEARCH_AS_LIST_FAIL);\n\n// pagination\nexport const favoriteListsPagination = createAction<PageInfo>(types.FAVORITE_LIST_PAGINATION);\n\n// update\nexport const updateFavoriteListPermission = createAction<UpdateListPermission>(\n types.UPDATE_FAVORITE_LIST_PERMISSION\n);\n\nexport const resetFetchedAt = createAction(types.resetFetchedAt);\n\nexport const addCompanyToListBulkActionSuccess = createAction<AddCompanyToWatchListBulk>(\n types.ADD_COMPANY_TO_LIST_BULK_SUCCESS\n);\nexport const updateListCount = createAction<number>(types.UPDATE_LIST_COUNT);\n\n// associate company to list (add-on)\nexport const updateFavoriteListAssociation = createAction<UpdateListAssociation>(\n types.UPDATE_FAVORITE_LIST_ASSOCIATION\n);\nexport const updateFavoriteListAssociationSuccess = createAction<UpdateListAssociation>(\n types.UPDATE_FAVORITE_LIST_ASSOCIATION_SUCCESS\n);\nexport const updateFavoriteListAssociationFail = createAction<string>(\n types.UPDATE_FAVORITE_LIST_ASSOCIATION_FAIL\n);\n\n// actions for chunk approach to save search as list\n\nexport const updateCompleted = createAction<boolean>(types.updateCompleted);\n\nexport const updatePercentage = createAction<number>(types.updatePercentage);\n\nexport const saveTitle = createAction<string>(types.saveTitle);\n\nexport const tryAgainSaveSearchAsList = createAction(types.tryAgainSaveSearchAsList);\n\nexport const cancelSaveSearchAsList = createAction(types.cancelSaveSearchAsList);\n\nexport const resetSaveSearchAsList = createAction(types.resetSaveSearchAsList);\n\n// public watch list\nexport const publicWatchList = createAction<PublicWatchListActionPayload>(types.PUBLIC_WATCH_LIST);\nexport const publicWatchListSuccess = createAction<PublicWatchListActionPayload>(\n types.PUBLIC_WATCH_LIST_SUCCESS\n);\nexport const publicWatchListFail = createAction<string>(types.PUBLIC_WATCH_LIST_FAIL);\n","// Initial Fetch favorite lists\nexport const INITIAL_FETCH_FAVORITE_LISTS = 'favorite-lists/INITIAL_FETCH_FAVORITE_LISTS';\nexport const INITIAL_FETCH_FAVORITE_LISTS_SUCCESS =\n 'favorite-lists/lists/INITIAL_FETCH_FAVORITE_LISTS_SUCCESS';\n\n// Fetch favorite lists\nexport const FETCH_FAVORITE_LISTS = 'favorite-lists/lists/FETCH_FAVORITE_LISTS';\nexport const FETCH_FAVORITE_LISTS_SUCCESS = 'favorite-lists/lists/FETCH_FAVORITE_LISTS_SUCCESS';\nexport const FETCH_FAVORITE_LISTS_FAIL = 'favorite-lists/lists/FETCH_FAVORITE_LISTS_FAIL';\n\n// Create favorite list\nexport const CREATE_FAVORITE_LIST = 'favorite-lists/lists/CREATE_FAVORITE_LIST';\nexport const CREATE_FAVORITE_LIST_SUCCESS = 'favorite-lists/lists/CREATE_FAVORITE_LIST_SUCCESS';\nexport const CREATE_FAVORITE_LIST_FAIL = 'favorite-lists/lists/CREATE_FAVORITE_LIST_FAIL';\n\n// Delete favorite list\nexport const DELETE_FAVORITE_LIST = 'favorite-lists/lists/DELETE_FAVORITES_LIST';\nexport const DELETE_FAVORITE_LIST_SUCCESS = 'favorite-lists/lists/DELETE_FAVORITES_LIST_SUCCESS';\nexport const DELETE_FAVORITE_LIST_FAIL = 'favorite-lists/lists/DELETE_FAVORITES_LIST_FAIL';\n\n// Rename favorite list\nexport const RENAME_FAVORITE_LIST = 'favorite-lists/lists/RENAME_FAVORITE_LIST';\nexport const RENAME_FAVORITE_LIST_SUCCESS = 'favorite-lists/lists/RENAME_FAVORITE_LIST_SUCCESS';\nexport const RENAME_FAVORITE_LIST_FAIL = 'favorite-lists/lists/RENAME_FAVORITE_LIST_FAIL';\n\n// update favorite list count after bulk remove\nexport const UPDATE_FAVORITE_LIST_COUNT = 'favorite-list/list/UPDATE_FAVORITE_LIST_COUNT';\n\n// sort favorite list\nexport const SORT_FAVORITE_LISTS = 'favorite-list/list/SORT_FAVORITE_LISTS';\n\n// Delete company from list\nexport const DELETE_COMPANY_FROM_LIST = 'favorite-lists/lists/DELETE_COMPANY_FROM_LIST';\nexport const DELETE_COMPANY_FROM_LIST_SUCCESS =\n 'favorite-lists/lists/DELETE_COMPANY_FROM_LIST_SUCCESS';\nexport const DELETE_COMPANY_FROM_LIST_FAIL = 'favorite-lists/lists/DELETE_COMPANY_FROM_LIST_FAIL';\n\n// Remove company from list\nexport const REMOVE_SHARED_LIST = 'favorite-lists/lists/REMOVE_SHARED_LIST';\nexport const REMOVE_SHARED_LIST_SUCCESS = 'favorite-lists/lists/REMOVE_SHARED_LIST_SUCCESS';\nexport const REMOVE_SHARED_LIST_FAIL = 'favorite-lists/lists/REMOVE_SHARED_LIST_FAIL';\n\n// Add company in list\nexport const ADD_COMPANY_TO_LIST = 'favorite-lists/lists/ADD_COMPANY_TO_LIST';\nexport const ADD_COMPANY_TO_LIST_SUCCESS = 'favorite-lists/lists/ADD_COMPANY_TO_LIST_SUCCESS';\nexport const ADD_COMPANY_TO_LIST_FAIL = 'favorite-lists/lists/ADD_COMPANY_TO_LIST_FAIL';\nexport const ADD_COMPANY_TO_LIST_BULK_SUCCESS =\n 'favorite-lists/lists/ADD_COMPANY_TO_LIST_BULK_SUCCESS';\n\n// save search as list\nexport const SAVE_SEARCH_AS_LIST = 'favorite-lists/lists/SAVE_SEARCH_AS_LIST';\nexport const SAVE_SEARCH_AS_LIST_SUCCESS = 'favorite-lists/lists/SAVE_SEARCH_AS_LIST_SUCCESS';\nexport const SAVE_SEARCH_AS_LIST_FAIL = 'favorite-lists/lists/SAVE_SEARCH_AS_LIST_FAIL';\nexport const updateCompleted = 'favorite-lists/lists/save_search/UPDATE_COMPLETED';\nexport const updatePercentage = 'favorite-lists/lists/save_search/UPDATE_PERCENTAGE';\nexport const saveTitle = 'favorite-lists/lists/save_search/SAVE_TITLE';\nexport const tryAgainSaveSearchAsList =\n 'favorite-lists/lists/save_search/TRY_AGAIN_SAVE_SEARCH_AS_LIST';\nexport const cancelSaveSearchAsList = 'favorite-lists/lists/save_search/CANCEL_SAVE_SEARCH_AS_LIST';\nexport const resetSaveSearchAsList = 'favorite-lists/lists/save_search/RESET_SAVE_SEARCH_AS_LIST';\n\n// pagination\nexport const FAVORITE_LIST_PAGINATION = 'favorite-lists/lists/FAVORITE_LIST_PAGINATION';\n\n// update\nexport const UPDATE_FAVORITE_LIST_PERMISSION =\n 'favorite-lists/lists/UPDATE_FAVORITE_LIST_PERMISSION';\n\n// associate company to list (add-on)\nexport const UPDATE_FAVORITE_LIST_ASSOCIATION =\n 'favorite-lists/lists/UPDATE_FAVORITE_LIST_ASSOCIATION';\nexport const UPDATE_FAVORITE_LIST_ASSOCIATION_SUCCESS =\n 'favorite-lists/lists/UPDATE_FAVORITE_LIST_ASSOCIATION_SUCCESS';\nexport const UPDATE_FAVORITE_LIST_ASSOCIATION_FAIL =\n 'favorite-lists/lists/UPDATE_FAVORITE_LIST_ASSOCIATION_FAIL';\n\nexport const resetFetchedAt = 'favorite-lists/lists/RESET_FETCHED_AT';\nexport const UPDATE_LIST_COUNT = 'lists/UPDATE_LIST_COUNT';\n// public list\nexport const PUBLIC_WATCH_LIST = 'PUBLIC_WATCH_LIST';\nexport const PUBLIC_WATCH_LIST_SUCCESS = 'PUBLIC_WATCH_LIST_SUCCESS';\nexport const PUBLIC_WATCH_LIST_FAIL = 'PUBLIC_WATCH_LIST_FAIL';\n","import { createFeatureActionType } from '@utils/feature';\nimport { featureName } from '@features/grid/featureName';\n\nexport const CHANGE_PAGINATION = createFeatureActionType(featureName, 'CHANGE_PAGINATION');\n\nexport const CHANGE_PAGINATION_SUCCESS = createFeatureActionType(\n featureName,\n 'CHANGE_PAGINATION_SUCCESS'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { PageInfo } from '@models/table/Pagination';\nimport { CHANGE_PAGINATION, CHANGE_PAGINATION_SUCCESS } from './types';\nimport { GridPayload } from '@models/grid';\n\nexport const changePagination = createAction<GridPayload<PageInfo>>(CHANGE_PAGINATION);\n\nexport const changePaginationSuccess =\n createAction<GridPayload<PageInfo>>(CHANGE_PAGINATION_SUCCESS);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { GridPayload } from '@models/grid';\nimport { PageInfo } from '@models/table/Pagination';\nimport { UserInformation } from '@models/user';\nimport { PaginationState } from './interfaces';\n// constants\nimport { GRID_KEYS, PAGINATION_INITIAL_STATE } from '@constants/grid';\n// utils\nimport { generateGridReducerInitialState } from '@utils/grid';\n// redux\nimport * as actions from './actions';\nimport { actions as userInformationActions } from '@redux/user/information';\n\nconst initialState: PaginationState = generateGridReducerInitialState(\n GRID_KEYS,\n PAGINATION_INITIAL_STATE\n);\n\n// external actions reducers\nconst fetchUserInformationSuccessReducer: CaseReducer<\n PaginationState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const userInfo = action.payload;\n\n // advanced search\n if (userInfo.settings.search_results_per_page) {\n draftState.advancedSearch.pageSize = userInfo.settings.search_results_per_page;\n }\n\n if (userInfo.settings.session_settings.search_results_page_number) {\n draftState.advancedSearch.pageNumber =\n userInfo.settings.session_settings.search_results_page_number;\n }\n\n // my companies\n if (userInfo.settings.my_companies_results_per_page) {\n draftState.myCompanies.pageSize = userInfo.settings.my_companies_results_per_page;\n }\n\n if (userInfo.settings.session_settings.my_companies_results_page_number) {\n draftState.myCompanies.pageNumber =\n userInfo.settings.session_settings.my_companies_results_page_number;\n }\n\n // contacts\n if (userInfo.settings.contact_results_per_page) {\n draftState.contacts.pageSize = userInfo.settings.contact_results_per_page;\n }\n\n if (userInfo.settings.session_settings.contact_results_page_number) {\n draftState.contacts.pageNumber = userInfo.settings.session_settings.contact_results_page_number;\n }\n\n // watchlist & sslist\n if (userInfo.settings.user_list_search_results_per_page) {\n draftState.lists.pageSize = userInfo.settings.user_list_search_results_per_page;\n }\n\n if (userInfo.settings.session_settings.user_list_search_results_page_number) {\n draftState.lists.pageNumber =\n userInfo.settings.session_settings.user_list_search_results_page_number;\n }\n\n // outreach\n if (userInfo.settings.session_settings.sourcing_outreach_results_per_page) {\n draftState.outreachDetails.pageSize =\n userInfo.settings.session_settings.sourcing_outreach_results_per_page;\n }\n\n if (userInfo.settings.session_settings.sourcing_outreach_results_page_number) {\n draftState.outreachDetails.pageNumber =\n userInfo.settings.session_settings.sourcing_outreach_results_page_number;\n }\n\n // addons\n if (userInfo.settings.session_settings.addon_results_per_page) {\n draftState.addons.pageSize = userInfo.settings.session_settings.addon_results_per_page;\n }\n\n // pipeline report\n if (userInfo.settings.session_settings.bi_weekly_pipeline_report_per_page) {\n draftState.pipelineReport.pageSize =\n userInfo.settings.session_settings.bi_weekly_pipeline_report_per_page;\n }\n\n if (userInfo.settings.session_settings.bi_weekly_pipeline_report_page_number) {\n draftState.pipelineReport.pageNumber =\n userInfo.settings.session_settings.bi_weekly_pipeline_report_page_number;\n }\n};\n\nconst changePaginationSuccessReducer: CaseReducer<\n PaginationState,\n PayloadAction<GridPayload<PageInfo>>\n> = (draftState, action) => {\n const { gridKey, data } = action.payload;\n\n draftState[gridKey] = data;\n};\n\nconst reducer = createReducer<PaginationState>(initialState, builder =>\n builder\n .addCase(actions.changePaginationSuccess, changePaginationSuccessReducer)\n // external reducers\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n);\n\nexport default reducer;\n","import { createSelector } from 'reselect';\nimport { GridKeys } from '@models/grid';\nimport { selectFeatureState } from '../../selectFeature';\n\nexport const getPagination = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.pagination[gridKey]);\n\nexport const getPageNumber = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.pagination[gridKey].pageNumber);\n\nexport const getPageSize = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.pagination[gridKey].pageSize);\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, isEqual } from 'lodash';\nimport queryString from 'query-string';\n// models\nimport { CompanyUserContact, SearchPayloadRequest } from '@models/api/contacts';\nimport { BaseFilter } from '@models/filters';\nimport { PageInfo } from '@models/table/Pagination';\nimport { GridPayload, GetGridSearchData } from '@models/grid';\nimport { SearchStateData } from '@models/search';\nimport { SearchSave } from '@models/search';\nimport { AxiosResponse } from 'axios';\nimport { SelectOption } from '@models/Option';\n// services\nimport { SearchService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\nimport { matchSavedSearches } from '@utils/search';\n// redux\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { searchCompanies, searchCompaniesFail } from '@features/grid/search/state/sagasReusable';\nimport { getSavedSearches } from '@redux/contacts/saved-searches/selectors';\nimport {\n selectors as checklistResearchSelectors,\n actions as checklistResearchActions,\n} from '@features/checklist-research-insights/state';\nimport { selectors as addonSelectors } from '@redux/company/addon-management';\nimport { changePagination, changePaginationSuccess } from './actions';\nimport { selectors as myCompaniesFilterCardsSelectors } from '@optx/redux/my-companies/filters-cards';\nimport { actions as contactsSearchActions } from '@redux/contacts/search/search';\nimport { getSearchData } from '@redux/contacts/search/search/selectors';\nimport { selectors as contactsFiltersSelectors } from '@redux/contacts/filters';\nimport { selectors as companyOutreachFilterSelectors } from '@redux/company-outreach/filters';\nimport { getGridSearchDataSaga, userInfoUpdateSaga } from '@features/grid/state/sagasReusable';\nimport { actions as pipelineReportActions } from '@features/pipeline-report/state';\nimport { getViewId } from '@optx/features/grid/view/state/selectors';\nimport { getListType } from '@optx/features/grid/search/state/selectors';\n\nexport function* changePaginationSaga(action: PayloadAction<GridPayload<PageInfo>>) {\n const { gridKey, data: pagination } = action.payload;\n\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey, pagination);\n const { searchKey, filter, originalFilter, sortBy, searchType } = gridSearchData;\n const id: number = yield select(getViewId(gridKey));\n const listType: string | undefined = yield select(getListType(gridKey));\n\n // set list_id on page change\n const listId: string | number | undefined = yield select(\n searchSelectors.getAdvancedSearchListId('advancedSearch')\n );\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter,\n pagination,\n sortBy,\n fromSavedList: id,\n listType,\n ...(listId ? { list_id: listId } : {}),\n };\n\n switch (gridKey) {\n case 'advancedSearch': {\n const searchName: string = yield select(searchSelectors.getSearchName('advancedSearch'));\n\n try {\n yield call(\n searchCompanies,\n searchData,\n 'advancedSearch',\n originalFilter,\n undefined,\n searchName,\n false\n );\n yield put(changePaginationSuccess(action.payload));\n\n yield call(userInfoUpdateSaga, gridKey, pagination);\n } catch (error: any) {\n yield call(searchCompaniesFail, 'advancedSearch', error);\n }\n\n break;\n }\n\n case 'myCompanies': {\n const selectedCard: SearchStateData = yield select(\n myCompaniesFilterCardsSelectors.getSelectedCard\n );\n const subFilter: string = yield select(myCompaniesFilterCardsSelectors.getSubFilter);\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: subFilter\n ? // @ts-ignore\n // @ts-ignore\n { ...selectedCard.filter, ...selectedCard.data[subFilter], ...filter }\n : { ...selectedCard.filter, ...filter },\n pagination,\n sortBy,\n fromSavedList: id,\n listType,\n };\n\n try {\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true\n );\n\n // fetch companies and update user pagination settings on server if page size or page number has changed\n yield call(\n searchCompanies,\n searchData,\n 'myCompanies',\n originalFilter,\n undefined,\n undefined,\n isEqual(userSettings, {}) ? false : userSettings\n );\n\n yield put(changePaginationSuccess(action.payload));\n } catch (error: any) {\n yield call(searchCompaniesFail, 'myCompanies', error);\n }\n\n break;\n }\n\n case 'contacts': {\n const { ...searchPayload } = yield select(getSearchData);\n const filterMap: Dictionary<BaseFilter> = yield select(\n contactsFiltersSelectors.getFiltersMap\n );\n const filterURLParam = mapFiltersToURLParams(filterMap, searchPayload.filter);\n const payloadRequest: SearchPayloadRequest = {\n ...searchPayload,\n filter: filterURLParam,\n pagination,\n };\n\n try {\n const res: AxiosResponse<CompanyUserContact[]> = yield call(\n SearchService.searchContacts,\n payloadRequest\n );\n\n if (res.data) {\n const savedSearches: Array<SearchSave> = yield select(getSavedSearches);\n\n let title = '';\n\n if (typeof payloadRequest.searchTitle === 'string') {\n title = payloadRequest.searchTitle;\n }\n\n if (!title) {\n title = matchSavedSearches(payloadRequest, savedSearches);\n }\n\n yield put(contactsSearchActions.searchContactsSuccess(res.data, title));\n\n yield call(userInfoUpdateSaga, gridKey, pagination);\n\n yield put(changePaginationSuccess(action.payload));\n } else {\n yield put(contactsSearchActions.searchContactsFail('Search contacts fail!'));\n }\n } catch (e: any) {\n const errorMessage = 'Search contacts fail, Server error!';\n yield put(contactsSearchActions.searchContactsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n\n break;\n }\n\n case 'addons': {\n const currentCompanyId: number = yield select(searchSelectors.getCompanyId('addons'));\n const additionalFiltersQuery: Dictionary<string | (string | number)[]> = yield select(\n addonSelectors.getAdditionalFiltersQuery\n );\n\n searchData.companyId = currentCompanyId;\n\n const normalizedSearchData = {\n ...searchData,\n filter: { ...searchData.filter, ...additionalFiltersQuery },\n };\n\n yield call(searchCompanies, normalizedSearchData, 'addons', originalFilter);\n\n yield put(changePaginationSuccess(action.payload));\n\n yield call(userInfoUpdateSaga, 'addons', pagination);\n\n break;\n }\n\n case 'lists':\n try {\n yield call(searchCompanies, searchData, 'lists', originalFilter);\n\n yield put(\n changePaginationSuccess({\n gridKey,\n data: searchData.pagination,\n })\n );\n\n yield call(userInfoUpdateSaga, 'lists', pagination);\n } catch (error: any) {\n yield call(searchCompaniesFail, 'lists', error);\n }\n\n break;\n\n case 'checklistResearchInsights':\n const getDefaultTableView: 'company' | 'analyst' = yield select(\n checklistResearchSelectors.ui.defaultTableView\n );\n\n try {\n yield put(\n changePaginationSuccess({\n gridKey: 'checklistResearchInsights',\n data: searchData.pagination,\n })\n );\n\n if (getDefaultTableView === 'analyst') {\n yield put(checklistResearchActions.search.fetchAnalyst());\n } else {\n yield put(checklistResearchActions.search.fetchCompany());\n }\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n\n if (getDefaultTableView === 'analyst') {\n yield put(\n checklistResearchActions.search.fetchAnalystFail('Get analysts fail, Server error')\n );\n } else {\n yield put(\n checklistResearchActions.search.fetchCompanyFail('Get companies fail, Server error')\n );\n }\n }\n\n break;\n\n case 'pipelineReport':\n try {\n yield put(\n changePaginationSuccess({\n gridKey: 'pipelineReport',\n data: searchData.pagination,\n })\n );\n\n yield put(pipelineReportActions.fetchPipelineReportCompany());\n } catch (error: any) {\n yield put(\n pipelineReportActions.fetchPipelineReportCompanyFail('Get companies fail, Server error')\n );\n }\n\n break;\n\n case 'outreachDetails': {\n const tableGridQuery: string = yield select(\n searchSelectors.getTableGridQuery('outreachDetails')\n );\n\n const analystIdFilter: [string | null, string | null] | SelectOption<string> | undefined =\n yield select(companyOutreachFilterSelectors.getSourcingOptitonsFilterValues('analyst_id'));\n const columnNameSourcingOutReachFilter:\n | [string | null, string | null]\n | SelectOption<string>\n | undefined = yield select(\n companyOutreachFilterSelectors.getSourcingOptitonsFilterValues('column_name')\n );\n\n const dateRangeValues: [string, string] = yield select(\n companyOutreachFilterSelectors.getSourcingFilterOptionsDateValue\n );\n\n // @ts-ignore\n const listOfAnalystIds: number[] = analystIdFilter?.map(\n (list: { label: string; value: number }) => list.value\n );\n\n const sourcingOutReachColumnName = (columnNameSourcingOutReachFilter as SelectOption)?.value;\n\n const parsedTableGridQuery = queryString.parse(tableGridQuery);\n\n const customTableGridQuery = {\n ...parsedTableGridQuery,\n ddate_lower: dateRangeValues[0],\n ddate_upper: dateRangeValues[1],\n };\n\n const searchDataOutreach = {\n ...searchData,\n analystId: listOfAnalystIds?.toString(),\n tableGridQuery: queryString.stringify(customTableGridQuery),\n sourcingOutReachColumnName,\n };\n\n try {\n const userSettings: { [key: string]: number } = yield call(\n userInfoUpdateSaga,\n gridKey,\n pagination,\n true\n );\n\n // fetch companies and update user pagination settings on server if page size or page number has changed\n yield call(\n searchCompanies,\n searchDataOutreach,\n gridKey,\n originalFilter,\n undefined,\n undefined,\n isEqual(userSettings, {}) ? false : userSettings\n );\n\n yield put(changePaginationSuccess(action.payload));\n } catch (error) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n\n break;\n }\n\n default:\n break;\n }\n}\n\nexport default function* companiesSaga() {\n yield takeLatest(changePagination, changePaginationSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport {\n CompanyImport,\n CompanyImportFailedData,\n ImportSimilarCompanies,\n} from '@optx/models/Company';\nimport * as types from './types';\nimport { ImportedCompany, ImportResults, PercentageCompleted } from './interfaces';\n\n// import favorite list\nexport const importFavoriteList = createAction<void>(types.IMPORT_FAVORITE_LIST);\nexport const importFavoriteListSuccess = createAction<CompanyImport>(\n types.IMPORT_FAVORITE_LIST_SUCCESS\n);\nexport const updateImportCompanies = createAction(\n types.updateImportCompanies,\n (payload: { title: string; data: ImportedCompany[] }) => ({ payload })\n);\nexport const updateImportCompaniesIds = createAction(\n types.updateImportCompaniesIds,\n (payload: Array<{ companyName: string; id: number; URL: string; raw_url: string | null }>) => ({\n payload,\n })\n);\n// edit imported company\nexport const editCompany = createAction<ImportedCompany>(types.editCompany);\nexport const setIsEditing = createAction<boolean>(types.setIsEditing);\nexport const editCompanies = createAction<CompanyImportFailedData[]>(types.editCompanies);\nexport const editCompanySuccess = createAction<CompanyImport>(types.editCompanySuccess);\nexport const editingCompanyIndex = createAction<number | null>(types.editingCompanyIndex);\nexport const removeFailedCompamy = createAction<{ Company: string; URL: string }>(\n types.removeFailedCompamy\n);\nexport const removeFailedCompamies = createAction<string[]>(types.removeFailedCompamies);\nexport const updateCanceledImportsNumber = createAction<number>(types.updateCanceledImportsNumber);\n\nexport const updatePercentage = createAction<PercentageCompleted>(types.updatePercentage);\nexport const updateProgress = createAction<boolean>(types.updateProgress);\nexport const resetProgress = createAction<void>(types.resetProgress);\nexport const updateCompleted = createAction<boolean>(types.updateCompleted);\nexport const updateCanceledImports = createAction<CompanyImportFailedData[]>(\n types.updateCanceledImports\n);\nexport const cancel = createAction<boolean>(types.cancel);\nexport const saveResults = createAction<ImportResults>(types.saveResults);\nexport const saveListId = createAction<number>(types.saveListId);\n\nexport const setLoading = createAction<boolean>(types.isLoading);\nexport const showSimilarCompanies = createAction<boolean>(types.showSimilarCompanies);\nexport const setSimilarCompanies = createAction<ImportSimilarCompanies[]>(\n types.setSimilarCompanies\n);\n\nexport const setFailedImportsOnRequest = createAction<ImportedCompany[]>(\n types.setFailedImportsOnRequest\n);\n\nexport const removeFailedImportsOnRequest = createAction<string>(\n types.removeFailedImportsOnRequest\n);\n\nexport const retryImport = createAction<void>(types.retryImport);\nexport const setFailedBatches = createAction<number>(types.setFailedBatches);\n","// Import favorite list\nexport const IMPORT_FAVORITE_LIST = 'favorite-lists/list-import/IMPORT_FAVORITE_LIST';\nexport const IMPORT_FAVORITE_LIST_SUCCESS =\n 'favorite-lists/list-import/IMPORT_FAVORITE_LIST_SUCCESS';\n\nexport const updatePercentage = 'favorite-lists/list-import/UPDATE_PERCENTAGE';\nexport const updateProgress = 'favorite-lists/list-import/UPDATE_PROGRESS';\nexport const resetProgress = 'favorite-lists/list-import/RESET_PROGRESS';\nexport const updateCompleted = 'favorite-lists/list-import/UPDATE_COMPLETED';\nexport const updateImportCompanies = 'favorite-lists/list-import/UPDATE_IMPORT_COMPANIES';\nexport const updateCanceledImports = 'favorite-lists/list-import/UPDATE_CANCELED_COMPANIES';\nexport const updateImportCompaniesIds = 'favorite-lists/list-import/UPDATE_IMPORT_COMPANIES_IDS';\nexport const removeFailedCompamy = 'favorite-lists/list-import/REMOVE_FAILED_COMPANY';\nexport const removeFailedCompamies = 'favorite-lists/list-import/REMOVE_FAILED_COMPANIES';\nexport const updateCanceledImportsNumber =\n 'favorite-lists/list-import/UPDATE_CANCELED_COMPANIES_NUMBER';\n\nexport const cancel = 'favorite-lists/list-import/CANCEL';\nexport const saveResults = 'favorite-lists/list-import/SAVE_RESULTS';\nexport const saveListId = 'favorite-lists/list-import/SAVE_LIST_ID';\n\nexport const isLoading = 'favorite-lists/list-import/IS_LOADING';\n\nexport const editCompany = 'favorite-lists/list-import/EDIT_COMPANY';\nexport const setIsEditing = 'favorite-lists/list-import/SET_IS_EDITING';\nexport const editCompanies = 'favorite-lists/list-import/EDIT_COMPANIES';\nexport const editCompanySuccess = 'favorite-lists/list-import/EDIT_COMPANY_SUCCESS';\nexport const editingCompanyIndex = 'favorite-lists/list-import/EDITING_COMPANY_INDEX';\nexport const showSimilarCompanies = 'favorite-lists/list-import/SHOW_SIMILAR_COMPANIES';\nexport const setSimilarCompanies = 'favorite-lists/list-import/SET_SIMILAR_COMPANIES';\nexport const setFailedImportsOnRequest = 'favorite-lists/list-import/SET_FAILED_IMPORTS_ON_REQUEST';\nexport const removeFailedImportsOnRequest =\n 'favorite-lists/list-import/REMOVE_FAILED_IMPORTS_ON_REQUEST';\n\nexport const retryImport = 'favorite-lists/list-import/RETRY_IMPORT';\nexport const setFailedBatches = 'favorite-lists/list-import/SET_FAILED_BATCHES';\n","import { ChartBarIntervalKeys } from '@optx/models/charts/data';\nimport { SearchViewType } from '@optx/models/user';\n\nexport const ADVANCED_SEARCH = 'AdvancedSearch';\nexport const MY_COMPANIES_PENDO = 'ManageMyPipeline_MyCompanies';\n\nexport enum SEARCH_QUICK_FILTERS_KEYS {\n 'OPTX Score' = 'OptxScore',\n 'U.S. Website Rank' = 'USWebsiteRank',\n 'Number of Employees' = 'NumberOfEmployees',\n 'Total Raised (dollars)' = 'TotalRaised',\n 'Data Source Presence' = 'DataSource',\n 'Company Owner (Analyst)' = 'CompanyOwner',\n 'Location' = 'Location',\n}\n\ntype ViewTimeFrameOptionsType = {\n [key: string]: {\n [key: string]: string;\n };\n};\n\nexport const SOFTWARE_RATIONALES: Record<string, string> = {\n 'services company (consulting, pro. serv., prod. dev.)': 'EditSoftwareValue_ServicesCompany',\n 'hardware (equipment / gadgets)': 'EditSoftwareValue_Hardware',\n 'duplicate company': 'EditSoftwareValue_Duplicate',\n 'asset-heavy (owns trucks, warehouses, etc.)': 'EditSoftwareValue_AssetHeavy',\n 'law firm / banker / investor / non-profit': 'EditSoftwareValue_LawFirm',\n 'invalid company / url error': 'EditSoftwareValue_InvalidCompany',\n other: 'EditSoftwareValue_Other',\n};\n\nexport const EDIT_FIELD_TEXT_FIELDS: Record<string, string> = {\n 'Capital Raised': 'TotalRaised',\n 'Last Raised Amount': 'LastRaisedAmount',\n 'Number of Employees': 'EditNumberofEmployees',\n};\n\nexport const EDIT_STAGE_VALUES: Record<string, string> = {\n None: 'None',\n Dead: 'Dead',\n Pass: 'Pass',\n Lead: 'Lead',\n 'Qualified Lead': 'QualifiedLead',\n Track: 'Track',\n VWIA: 'VWIA',\n Target: 'Target',\n Priority: 'Priority',\n 'IOI Presented': 'IOIPresented',\n 'LOI Presented/LIVE': 'LOILive',\n 'LOI Signed': 'LOISigned',\n 'Portfolio Company': 'PortfolioCompany',\n};\n\nexport const SORT_FIELD_NAMES: Record<string, string> = {\n company_name: '_Sort_CompanyName',\n score: '_Sort_OPTXScore',\n year_founded: '_Sort_YearFounded',\n is_software: '_Sort_Software',\n is_interesting: '_Sort_PSGFit',\n addon: '_Sort_AddOn',\n company_owner: '_Sort_CompanyOwner',\n pipeline_rank: '_Sort_PipelineRank',\n stage: '_Sort_Stage',\n num_employees: '_Sort_NumberOfEmployees',\n emp_growth_percent: '_Sort_EmployeeGrowthPercentage',\n job_openings: '_Sort_JobOpenings',\n job_openings_percent: '_Sort_JobOpeningsYoY',\n sw_website_rank: '_Sort_WWWebsiteRank',\n sw_website_rank_per_country: '_Sort_USWebsiteRank',\n raise_date: '_Sort_LastFunding',\n last_raised_amount: '_Sort_LastAmountRaised',\n capital_raised: '_Sort_TotalRaised',\n last_rev_update_amount: '_Sort_Revenue',\n last_valuation: '_Sort_Valuation',\n last_touch_date: '_Sort_LastTouch',\n next_touch_date: '_Sort_ScheduledTouch',\n cb_rank: '_Sort_CrunchbaseRank',\n city: '_Sort_TownCity',\n state: '_Sort_StateProvince',\n country: '_Sort_Country',\n source_tag: '_Sort_Source',\n};\nexport const MY_COMPANIES_SORT_FIELD_NAMES: Record<string, string> = {\n company_name: '_CompanyName',\n score: '_OPTXScore',\n year_founded: '_YearFounded',\n is_software: '_Software',\n is_interesting: '_PSGFit',\n addon: '_AddOn',\n company_owner: '_CompanyOwner',\n pipeline_rank: '_PipelineRank',\n stage: '_Stage',\n num_employees: '_NumberOfEmployees',\n emp_growth_percent: '_EmployeeGrowthPercentage',\n job_openings: '_JobOpenings',\n job_openings_percent: '_JobOpeningsYoY',\n sw_website_rank: '_WWWebsiteRank',\n sw_website_rank_per_country: '_USWebsiteRank',\n raise_date: '_LastFunding',\n last_raised_amount: '_LastAmountRaised',\n capital_raised: '_TotalRaised',\n last_rev_update_amount: '_Revenue',\n last_valuation: '_Valuation',\n last_touch_date: '_LastTouch',\n next_touch_date: '_ScheduledTouch',\n cb_rank: '_CrunchbaseRank',\n city: '_TownCity',\n state: '_StateProvince',\n country: '_Country',\n source_tag: '_Source',\n};\n\nexport const FILTER_MODAL_KEYS: Record<string, string> = {\n score_lower: 'Filter_Rank_OPTXScore_',\n score_upper: 'Filter_Rank_OPTXScore_',\n pipeline_rank: 'Filter_Rank_PipelineRank_',\n sw_website_rank_per_country: 'Filter_Rank_USWebsiteRank_',\n sw_website_rank_lower: 'Filter_Rank_WorldWideWebsiteRank_',\n sw_website_rank_upper: 'Filter_Rank_WorldWideWebsiteRank_',\n is_interesting: 'Filter_Rank_PSGFit_',\n url_status: 'Filter_Rank_Website_',\n is_on_linkedin: 'Filter_Rank_HasLinkedinProfile_',\n g2_rating_lower: 'Filter_Rank_G2Rating_',\n g2_rating_upper: 'Filter_Rank_G2Rating_',\n g2_review_count_lower: 'Filter_Rank_G2Reviews_',\n g2_review_count_upper: 'Filter_Rank_G2Reviews_',\n ct_rating_lower: 'Filter_Rank_CapterraReviews_',\n ct_rating_upper: 'Filter_Rank_CapterraReviews_',\n cb_rank_lower: 'Filter_Rank_CrunchbaseRank_',\n cb_rank_upper: 'Filter_Rank_CrunchbaseRank_',\n is_software: 'Filter_CompanyBackground_ShowSoftwareCompanies',\n is_software_verified: 'Filter_CompanyBackground_VerifiedSoftwareCompanies',\n num_employees_lower: 'Filter_CompanyBackground_NumberOfEmployees',\n num_employees_upper: 'Filter_CompanyBackground_NumberOfEmployees',\n emp_growth_percent_lower: 'Filter_CompanyBackground_EmployeeGrowthPercentage',\n emp_growth_percent_upper: 'Filter_CompanyBackground_EmployeeGrowthPercentage',\n job_openings_upper: 'Filter_CompanyBackground_JobOpenings',\n job_openings_lower: 'Filter_CompanyBackground_JobOpenings',\n job_openings_percent_lower: 'Filter_CompanyBackground_JobOpeningsPercentage',\n job_openings_percent_upper: 'Filter_CompanyBackground_JobOpeningsPercentage',\n sub_sector: 'Filter_CompanyBackground_Subsector',\n sector: 'Filter_CompanyBackground_Sector',\n country: 'Filter_CompanyBackground_Country',\n state: 'Filter_CompanyBackground_StateProvince',\n city: 'Filter_CompanyBackground_TownCity',\n europeByTier: 'Filter_CompanyBackground_EuropeByTier',\n geo_range: 'Filter_CompanyBackground_GeographicRange_Country',\n year_founded_upper: 'Filter_CompanyBackground_YearFounded',\n year_founded_lower: 'Filter_CompanyBackground_YearFounded',\n opportunity_type: 'Filter_CompanyBackground_OpportunityType',\n product_category: 'Filter_CompanyBackground_ProductCategory',\n company_type: 'Filter_CompanyBackground_CompanyType',\n sub_vertical: 'Filter_CompanyBackground_SubVertical',\n has_parent: 'Filter_CompanyBackground_HasParentCompany',\n diversity: 'Filter_CompanyBackground_DiversitySpotlight',\n is_in_business: 'Filter_CompanyBackground_ShowCompaniesInBusiness',\n is_company_reviewed: 'Filter_CompanyBackground_CompanyReviewed',\n last_round: 'Filter_FinancialStages_LastRound',\n stage: 'Filter_FinancialStages_Stage',\n stage_type: 'Filter_FinancialStages_Stage',\n stage_type_date: 'Filter_FinancialStages_Stage',\n ebitda_string: 'Filter_FinancialStages_EBITDA',\n source_tag_filter: 'Filter_DataManagement_SourcePresence',\n lead_source: 'Filter_DataManagement_LeadSource',\n completed_touch: 'Filter_DataManagement_CompletedTouches',\n completed_touch_type_date: 'Filter_DataManagement_CompletedTouches',\n schedule_touch: 'Filter_DataManagement_ScheduledTouches',\n schedule_touch_type_date: 'Filter_DataManagement_ScheduledTouches',\n active: 'Filter_DataManagement_ShowActiveCompanies',\n fund: 'Filter_DataManagement_Fund',\n next_steps: 'Filter_DataManagement_NextSteps',\n has_date_presented: 'Filter_DataManagement_HasDatePresented',\n capital_raised_lower: 'Filter_FinancialStages_TotalRaised',\n capital_raised_upper: 'Filter_FinancialStages_TotalRaised',\n last_rev_update_amount_lower: 'Filter_FinancialStages_Revenue_',\n last_rev_update_amount_upper: 'Filter_FinancialStages_Revenue_',\n ebitda_numeric_lower: 'Filter_FinancialStages_EBITDA_',\n ebitda_numeric_upper: 'Filter_FinancialStages_EBITDA_',\n last_valuation_lower: 'Filter_FinancialStages_Valuation_',\n last_valuation_upper: 'Filter_FinancialStages_Valuation_',\n last_raised_amount_lower: 'Filter_FinancialStages_LastRaisedAmount_',\n last_raised_amount_upper: 'Filter_FinancialStages_LastRaisedAmount_',\n addon: 'Filter_DataManagement_AddOn',\n};\n\nexport const FILTER_MODAL_OPTX_SCORE_VALUES: Record<string, string> = {\n is_psg_only: 'PSGCompaniesOnly',\n not_blank: 'ExcludeUnranked',\n blank: 'UnrankedOnly',\n exclude_psg: 'ExcludePSGCompanies',\n};\n\nexport const FILTER_MODAL_DATA_SOURCE_VALUES: Record<string, string> = {\n '1-0': 'In',\n '0-1': 'NotIn',\n};\n\nexport const TRENDING_VALUES: Record<ChartBarIntervalKeys, string> = {\n '1Y': 'TopRibbon_TrendRange_LastYear',\n '3M': 'TopRibbon_TrendRange_Last3Months',\n '6M': 'TopRibbon_TrendRange_Last6Months',\n ALL: 'TopRibbon_TrendRange_All',\n '2Y': 'TopRibbon_TrendRange_Last2Years',\n};\n\nexport const MY_COMPANIES_TRENDING_VALUES: Record<ChartBarIntervalKeys, string> = {\n '1Y': 'TrendRange_LastYear',\n '3M': 'TrendRange_Last3Months',\n '6M': 'TrendRange_Last6Months',\n ALL: 'TrendRange_All',\n '2Y': 'TrendRange_Last2Years',\n};\n\nexport type PaginationPendoActions =\n | 'BottomRibbon_ArrowForward'\n | 'BottomRibbon_DoubleArrowForward'\n | 'BottomRibbon_DoubleArrowBack'\n | 'BottomRibbon_ArrowBack';\n\nexport const SEARCH_VIEW_VALUES: Record<SearchViewType, string> = {\n 'long-card': 'TopRibbon_LongCardView',\n table: 'TopRibbon_TableView',\n};\nexport const MY_COMPANIES_SEARCH_VIEW_VALUES: Record<SearchViewType, string> = {\n 'long-card': 'LongCardView',\n table: 'TableView',\n};\n\nexport const GRID_VIEW_VALUES: Record<string, string> = {\n 'Sourcing Order': 'TopRibbon_GridView_SourcingOrder',\n 'OPTX Default': 'TopRibbon_GridView_OPTXDefault',\n};\nexport const MY_COMPANIES_GRID_VIEW_VALUES: Record<string, string> = {\n 'Sourcing Order': 'GridView_SourcingOrder',\n 'OPTX Default': 'GridView_OPTXDefault',\n};\n\nexport const SECONDARY_QUICK_FILTERS: Record<string, string> = {\n score_lower: 'OPTXScore_',\n score_upper: 'OPTXScore_',\n sw_website_rank_per_country: 'USWebsiteRank_',\n num_employees_lower: 'NumberOfEmployees',\n num_employees_upper: 'NumberOfEmployees',\n ss: 'DataSource_SourceScrub',\n et: 'DataSource_EquityTouch',\n g2: 'DataSource_G2Crowd',\n gd: 'DataSource_GlassDoor',\n ct: 'DataSource_Capterra',\n bvd: 'DataSource_Orbis',\n optx: 'DataSource_OPTX',\n ivc: 'DataSource_IVC',\n Grata: 'DataSource_Grata',\n cb: 'DataSource_CrunchBase',\n geo_range: 'Location_GeographicRange',\n country: 'Location_Country',\n state: 'Location_StateProvince',\n city: 'Location_TownCity',\n europeByTier: 'Location_EuropeByTier',\n capital_raised_lower: 'TotalRaised',\n capital_raised_upper: 'TotalRaised',\n};\n\nexport enum DATA_SOURCE_KEYS {\n 'Source Scrub' = 'DataSource_SourceScrub',\n 'EquityTouch' = 'DataSource_EquityTouch',\n 'G2Crowd' = 'DataSource_G2Crowd',\n 'Glassdoor' = 'DataSource_GlassDoor',\n 'Capterra' = 'DataSource_Capterra',\n 'Orbis' = 'DataSource_Orbis',\n 'Optx' = 'DataSource_OPTX',\n 'IVC' = 'DataSource_IVC',\n 'Grata' = 'DataSource_Grata',\n 'Crunch Base' = 'DataSource_CrunchBase',\n}\n\nexport const SOURCING_TEAM_MEMBER_HOME_PAGE = {\n findNewCompanies: 'SourcingHome_FindNewCompanies',\n manageMyCompaniesRecentlyAccessedLists: 'SourcingHome_ManageMyCompanies_RecentlyAccessedLists',\n manageMyCompaniesSavedSearchesWithNewMatches:\n 'SourcingHome_ManageMyCompanies_SavedSearchesWithNewMatches',\n viewMyCompanyActiviyNumberOfEmployeesExced30:\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_TargetNumberOfEmployees',\n viewMyCompanyActiviyEmployeeGrowth:\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_TargetEmployeeGrowth',\n viewMyCompanyActiviyWebsiteTrafficRankTop200k:\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_TargetWebsiteRank',\n viewMyCompanyActiviyNewFundingEventAnalystTracking:\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_NewFundingEventTrackedCompany',\n touchManagement: 'SourcingHome_TouchManagement',\n myPipeline: 'SourcingHome_MyPipeline_#ofCompanies',\n outreachRecency: 'SourcingHome_OutreachRecency_#ofCompaniesTouched',\n activityInsights: 'SourcingHome_ActivityInsights',\n touchActivityByType: 'SourcingHome_TouchActivity_#ofWeeklyTouches',\n};\n\nexport const TOUCH_MANAGEMENT_OPTIONS = {\n 'This Week': '_CountTouchesWeek',\n 'This Month': '_CountTouchesMonth',\n all_open_touches: '_CountTouchesOpen',\n past_due: '_CountTouchesDue',\n};\n\nexport const MY_PIPELINE_OPTIONS = {\n Lead: '_StageLead',\n 'Qualified Lead': '_StageQualifiedLead',\n Track: '_StageTrack',\n VWIA: '_StageVQIA',\n Target: '_StageTarget',\n Priority: '_StagePriority',\n 'IOI Presented': '_StageIOIPresented',\n 'LOI Presented/LIVE': '_StageLOIPresented/Live',\n 'LOI Signed': '_StageLOISigned',\n 'Rank 5s': '_5s',\n 'Add-ons': '_AddOns',\n Pass: '_StagePass',\n Dead: '_StageDead',\n 'Last 6 Weeks': '_LessThan6weeks',\n 'Over 6 weeks': '_MoreThan6weeksLessThan3Months',\n 'Over 3 months': '_MoreThan3Months',\n};\n\nexport const ACTIVITY_INSIGHTS_OPTIONS = {\n 'This Month': '_ViewThisMonth',\n 'This Quarter': '_ViewThisQuarter',\n 'All Time': '_ViewAllTime',\n};\n\nexport const VIEW_TIME_FRAME_OPTIONS: ViewTimeFrameOptionsType = {\n companies_reached: {\n New: '_ViewTimeframe_#ofCompaniesReached_Analyst_New',\n 'Rank of 5': '_ViewTimeframe_#ofCompaniesReached_Analyst_Rank5',\n 'Add-ons': '_ViewTimeframe_#ofCompaniesReached_Analyst_AddOns',\n analyst: '_ViewTimeframe_#ofCompaniesReached_Analyst',\n },\n stage_change: {\n Positive: '_ViewTimeframe_#ofStageChange_Analyst_Positive',\n Negative: '_ViewTimeframe_#ofStageChange_Analyst_Negative',\n 'Add to Track': '_ViewTimeframe_#ofStageChange_Analyst_AddtoTrack',\n analyst: '_ViewTimeframe_#ofStageChange_Analyst',\n },\n companies_added: {\n 'Rank of 5': '_ViewTimeframe_#ofCompaniesAdded_Analyst_Rank5',\n 'Rank of 4': '_ViewTimeframe_#ofCompaniesAdded_Analyst_Rank4',\n 'Add-ons': '_ViewTimeframe_#ofCompaniesAdded_Analyst_AddOns',\n analyst: '_ViewTimeframe_#ofCompaniesAdded_Analyst',\n },\n qualified_leads: {\n 'Rank of 5': '_ViewTimeframe_#ofQualifiedLeads_Analyst_Rank5',\n 'Add-ons': '_ViewTimeframe_#ofQualifiedLeads_Analyst_AddOns',\n analyst: '_ViewTimeframe_#ofQualifiedLeads_Analyst',\n },\n};\n\nexport const WEEKLY_TOUCHES_OPTIONS = {\n Call: 'Calls',\n 'Voice Mail': 'Voicemails',\n 'Totals Email': 'Emails',\n 'Internal Note': 'Internal Notes',\n};\n\nexport const COMPANIES_BLOCK_OPTIONS = [\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_TargetNumberOfEmployees',\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_TargetEmployeeGrowth',\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_TargetWebsiteRank',\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_NewFundingEventTrackedCompany',\n];\n\nexport const COMPANIES_BLOCK_OPTIONS_VIEW_ALL = [\n 'SourcingHome_ManageMyCompanies_RecentlyAccessedLists_ViewAll',\n 'SourcingHome_ManageMyCompanies_SavedSearchesWithNewMatches_ViewAllCount',\n];\n\nexport const MY_COMPANIES_ACTIVITY_BLOCK_OPTIONS = [\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_TargetNumberOfEmployees_ViewAllCount',\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_TargetEmployeeGrowth_ViewAllCount',\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_TargetWebsiteRank_ViewAllCount',\n 'SourcingHome_ManageMyCompanies_ViewCompanyActivity_NewFundingEventTrackedCompany_ViewAllCount',\n];\n\nexport const FIND_NEW_COMPANIES_SOURCING_TEAM_MEMBER_OPTIONS = [\n '_SearchCompanies',\n '_SuggestedSearchEmployeeGrowth',\n '_SuggestedSearchOPTXScore',\n];\n\nexport const MANAGE_MY_COMPANIES_SOURCING_TEAM_MEMBER_OPTIONS = [\n '_ListName',\n '_CountCompanies',\n '_LastViewDate',\n];\n\nexport const MANAGE_MY_COMPANIES_NEW_SAVED_SEARCH_MATCHES_OPTIONS = [\n '_SearchName',\n '_CountNewMatches',\n '_CountCompanies',\n '_LastViewDate',\n];\n\nexport const VIEW_MY_COMPANIES_ACTIVITY_NUMBER_OF_EMPLOYEES_OPTIONS = [\n '_CompanyName',\n '_CompanyCityState',\n '_LastTouch',\n '_OPTXScoreGrowth',\n '_OPTXScore',\n];\n\nexport const VIEW_MY_COMPANIES_ACTIVITY_EMPLOYEE_GROWTH = [\n '_CompanyName',\n '_CompanyCityState',\n '_LastTouch',\n '_OPTXScoreGrowth',\n '_OPTXScore',\n];\n\nexport const VIEW_MY_COMPANIES_ACTIVITY_WEBSITE_RANK = [\n '_CompanyName',\n '_CompanyCityState',\n '_LastTouch',\n '_OPTXScoreGrowth',\n '_OPTXScore',\n];\n\nexport const VIEW_MY_COMPANIES_ACTIVITY_NEW_FUNDING = [\n '_CompanyName',\n '_CompanyCityState',\n '_LastTouch',\n '_OPTXScoreGrowth',\n '_OPTXScore',\n];\n\nexport const COMPANIES_BLOCK_SUB_OPTIONS = [\n VIEW_MY_COMPANIES_ACTIVITY_EMPLOYEE_GROWTH,\n VIEW_MY_COMPANIES_ACTIVITY_NUMBER_OF_EMPLOYEES_OPTIONS,\n VIEW_MY_COMPANIES_ACTIVITY_WEBSITE_RANK,\n VIEW_MY_COMPANIES_ACTIVITY_NEW_FUNDING,\n];\nexport const SUB_SECTOR_NORMALIZED_VALUES: Record<string, string> = {\n CloudManagement: 'CloudMGMT',\n EntertainmentSoftwareandServices: 'EntertainmentSoftware',\n 'HCIT(HealthcareIT)': 'HCIT',\n HRTechHCM: 'HRTech',\n 'Sales&Marketing': 'SalesMarketing',\n};\n\nexport const FILTER_KEYS_DEFAULT_SHOW_ALL_COMPANIES = [\n 'is_software',\n 'is_software_verified',\n 'is_company_reviewed',\n 'has_date_presented',\n 'active',\n];\n\nexport const FILTER_KEYS_DEFAULT_SHOW_ALL = ['has_parent'];\n\nexport const DATA_SOURCES_NAMES: Record<string, string> = {\n ss: 'SourceScrub',\n et: 'EquityTouch',\n g2: 'G2Crowd',\n gd: 'GlassDoor',\n ct: 'Capterra',\n bvd: 'Orbis',\n optx: 'OPTX',\n ivc: 'IVC',\n gr: 'Grata',\n cb: 'CrunchBase',\n pb: 'Pitchbook',\n};\n\nexport const FUND_PSG_NAMES: Record<string, string> = {\n blank: 'None',\n PSGI: 'PSG1',\n PSGII: 'PSG2',\n PSGIII: 'PSG3',\n PSGIV: 'PSG4',\n PSGV: 'PSG5',\n PSGVI: 'PSG6',\n};\n\nexport const STAGE_TYPE_OPTIONS: Record<string, string> = {\n exclude: 'ExcludeCompaniesSelectedType',\n entered: 'ShowCompaniesEnteredStage',\n exited: 'ShowCompaniesExitedStage',\n};\n\nexport const DIVERSITY_SPOTLIGHT_OPTIONS: Record<string, string> = {\n BlackAfricanAmericanFounded: 'BlackFounded',\n HispanicLatinxLed: 'HispanicLed',\n NativeHawaiianPacificIslanderFounded: 'NativeHawaiianFounded',\n BlackAfricanAmericanLed: 'BlackLed',\n MiddleEasternNorthAfricanLed: 'MiddleEasternLed',\n HispanicLatinxFounded: 'HispanicFounded',\n AmericanIndianAlaskaNativeFounded: 'AmericanIndianFounded',\n AmericanIndianAlaskaNativeLed: 'AmericanIndianLed',\n MiddleEasternNorthAfricanFounded: 'MiddleEasternFounded',\n NativeHawaiianPacificIslanderLed: 'NativeHawaiianLed',\n};\n\nexport const SUB_VERTICAL_OPTIONS: Record<string, string> = {\n ChimneyFireplaceService: 'ChimneyFireplace',\n GutterInstallatinCleaning: 'GutterCleaning',\n design: 'HomeDesign',\n};\n\nexport const LAST_ROUND_OPTIONS: Record<string, string> = {\n VentureRound: 'Venture',\n UnknownFundingRound: 'Unknown',\n SeriesJW: 'SeriesJThroughQ',\n SeriesDI: 'SeriesDThroughI',\n};\n\nexport const MY_COMPANIES_CARDS: Record<string, string> = {\n card1: 'WithoutRecentTouch',\n card1_no_touches: 'WithoutRecentTouch_NeverTouched',\n card1_more_than_6_months_ago: 'WithoutRecentTouch_Over6Months',\n card1_6_weeks_to_6_months_ago: 'WithoutRecentTouch_Over6Weeks',\n card2: 'WithScheduledTouch',\n card2_in_more_than_6_months: 'WithScheduledTouch_Over6Months',\n card2_in_6_weeks_to_6_months: 'WithScheduledTouch_Over6Weeks',\n card2_within_6_weeks: 'WithScheduledTouch_Within6Weeks',\n card3: 'MyFavoritesScheduledTouches',\n card3_past_due: 'MyFavoritesScheduledTouches_PastDue',\n card3_next_7_days: 'MyFavoritesScheduledTouches_Next7Days',\n card3_8_14_days_away: 'MyFavoritesScheduledTouches_8to14DaysAway',\n card3_next_30_days: 'MyFavoritesScheduledTouches_Next30Days',\n card4: 'ScheduledTouchesNext30Days',\n card4_past_due: 'ScheduledTouchesNext30Days_PastDue',\n card4_next_7_days: 'ScheduledTouchesNext30Days_Next7Days',\n card4_8_14_days_away: 'ScheduledTouchesNext30Days_8to14DaysAway',\n card4_next_30_days: 'ScheduledTouchesNext30Days_Next30Days',\n};\n","export { default } from './Icon';\n","export default 'custom-global-loader';\n","import { createSelector } from 'reselect';\nimport featureName from '../featureName';\nimport { CustomGlobalLoader } from './interfaces';\n\ntype StateSlice = Record<typeof featureName, CustomGlobalLoader>;\n\nconst selectFeatureState = (state: StateSlice) => state[featureName];\n\nexport const loading = createSelector(selectFeatureState, state => state.loading);\nexport const customText = createSelector(selectFeatureState, state => state.customText);\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const toggle = createFeatureActionType(featureName, 'TOGGLE');\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport { CustomGlobalLoader } from './interfaces';\n\nexport const toggle = createAction<CustomGlobalLoader>(types.toggle);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { CustomGlobalLoader } from './interfaces';\nimport * as actions from './actions';\n\nconst initialState: CustomGlobalLoader = {\n loading: false,\n};\n\nconst loadingReducer: CaseReducer<CustomGlobalLoader, PayloadAction<CustomGlobalLoader>> = (\n draftState,\n action\n) => {\n draftState.loading = action.payload.loading;\n draftState.customText = action.payload.customText;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder.addCase(actions.toggle, loadingReducer)\n);\n\nexport default reducer;\n","import { useInjectReducer } from 'redux-injectors';\nimport reducer from './state/reducers';\nimport featureName from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n};\n\nexport default useInject;\n","import { utils as requestUtils } from '@features/request';\nimport { featureName } from '../featureName';\n\nexport const fetchChangedCompanyFields = requestUtils.createActionTypes(\n featureName,\n 'FETCH_CHANGED_COMPANY_FIELDS'\n);\n\nexport const editCompanyFields = 'audit-trial/EDIT_COMPANY_FIELDS';\n\nexport const clearCompanyFields = 'audit-trial/CLEAR_COMPANY_FIELDS';\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport {\n ChangedCompanyField,\n ChangedCompanyFieldsPayload,\n ChangedCompanyFieldsResponse,\n} from './interfaces';\n\nexport const fetchChangedCompanyFields = createAction<ChangedCompanyFieldsPayload>(\n types.fetchChangedCompanyFields.REQUEST\n);\nexport const fetchChangedCompanyFieldsSuccess = createAction(\n types.fetchChangedCompanyFields.SUCCESS,\n (response: ChangedCompanyFieldsResponse, searchPayload: ChangedCompanyFieldsPayload) => ({\n payload: response,\n meta: searchPayload,\n })\n);\n\nexport const fetchChangedCompanyFieldsFail = createAction<string>(\n types.fetchChangedCompanyFields.FAILURE\n);\n\nexport const editCompanyAuditTrailFields = createAction<ChangedCompanyField>(\n types.editCompanyFields\n);\n\nexport const clearCompanyFields = createAction(types.clearCompanyFields);\n","import { createSelector } from 'reselect';\nimport { featureName } from '../featureName';\nimport { ChangedCompayFieldsState } from './interfaces';\n\nconst selectFeatureState = (state: any) => state[featureName] as ChangedCompayFieldsState;\n\nexport const getFields = createSelector(selectFeatureState, state => state.data);\n\nexport const loading = createSelector(selectFeatureState, state => state.loading);\n\nexport const getSearchQuery = createSelector(selectFeatureState, state => state.searchQuery);\nexport const getStartDate = createSelector(selectFeatureState, state => state.startDate);\nexport const getEndDate = createSelector(selectFeatureState, state => state.endDate);\n\nexport const getPagination = createSelector(selectFeatureState, state => state.pagination);\nexport const getCount = createSelector(selectFeatureState, state => state.count);\nexport const getFieldsToFilter = createSelector(selectFeatureState, state => state.fieldsToFilter);\n\nexport const getInternal = createSelector(selectFeatureState, state => state.internal);\nexport const getOPTX = createSelector(selectFeatureState, state => state.optx);\n\nexport const getHasReachedResultsEnd = createSelector(\n selectFeatureState,\n state => state.hasReachedResultsEnd\n);\n","import { takeLatest, call, put } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\nimport { getErrorMessage } from '@optx/utils/api/errors';\nimport { AxiosResponse } from 'axios';\nimport * as actions from './actions';\nimport { ChangedCompanyFieldsPayload, ChangedCompanyFieldsResponse } from './interfaces';\n\nexport function* fetchCompanyChangedFieldsSaga(\n action: PayloadAction<ChangedCompanyFieldsPayload, any, boolean>\n) {\n const searchPayload = action.payload;\n let response: ChangedCompanyFieldsResponse = { results: [], count: 0 };\n\n try {\n const res: AxiosResponse<ChangedCompanyFieldsResponse | []> = yield call(\n CompanyService.fetchCompanyChangedFields,\n searchPayload\n );\n\n // The API sends [] if there are no fields and I had to account for that;\n if (res.data) {\n if ((res.data as []).length === 0) {\n response = { results: [], count: 0 };\n } else {\n response = res.data as ChangedCompanyFieldsResponse;\n }\n }\n\n yield put(actions.fetchChangedCompanyFieldsSuccess(response, searchPayload));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Error fetching company changed fields');\n yield put(actions.fetchChangedCompanyFieldsFail(errorMessage));\n yield put(actions.fetchChangedCompanyFieldsSuccess(response, searchPayload));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companyChangedFieldsSaga() {\n yield takeLatest(actions.fetchChangedCompanyFields, fetchCompanyChangedFieldsSaga);\n}\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\nimport { fetchReducer, fetchFailReducer } from '@optx/redux/feature/fetch/reducers';\nimport {\n ChangedCompayFieldsState,\n ChangedCompanyFieldsResponse,\n ChangedCompanyFieldsPayload,\n ChangedCompanyField,\n} from './interfaces';\nimport * as actions from './actions';\n\nconst initialState: ChangedCompayFieldsState = {\n data: [],\n count: 0,\n error: '',\n loading: false,\n pagination: {\n pageNumber: 1,\n pageSize: 25,\n },\n hasReachedResultsEnd: false,\n searchQuery: undefined,\n startDate: undefined,\n endDate: undefined,\n fieldsToFilter: 0,\n internal: undefined,\n optx: undefined,\n};\n\nconst fetchChangedCompanyFieldsReducer: CaseReducer<\n ChangedCompayFieldsState,\n PayloadAction<ChangedCompanyFieldsResponse, any, ChangedCompanyFieldsPayload>\n> = (draftState, action) => {\n const fieldsToOmit = ['Ebitda Numeric High', 'Last Rev Update Amount High'];\n\n const results = action.payload.results.filter(\n field => !fieldsToOmit.includes(field.field_changed)\n );\n\n if (!draftState.data) {\n draftState.data = results;\n } else if (draftState.pagination.pageNumber < action.meta.pagination.pageNumber) {\n draftState.data = [...draftState.data, ...results];\n } else {\n draftState.data = results;\n }\n\n if (draftState.data.length > 0 && results.length === 0) {\n draftState.hasReachedResultsEnd = true;\n }\n\n draftState.loading = false;\n draftState.searchQuery = action.meta.field;\n draftState.startDate = action.meta.startDate;\n draftState.endDate = action.meta.endDate;\n draftState.count = action.payload.count;\n draftState.pagination = action.meta.pagination;\n draftState.internal = action.meta.internal;\n draftState.optx = action.meta.optx;\n};\n\nconst editAuditTrialFieldsReducer: CaseReducer<\n ChangedCompayFieldsState,\n PayloadAction<ChangedCompanyField>\n> = (draftState, { payload }) => {\n if (payload.before_value !== payload.after_value) {\n draftState.data = [payload, ...draftState.data];\n\n draftState.count++;\n }\n};\n\nconst clearCompanyFieldsReducer: CaseReducer<ChangedCompayFieldsState> = draftState => {\n draftState.data = [];\n draftState.count = 0;\n draftState.hasReachedResultsEnd = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchChangedCompanyFields, fetchReducer)\n .addCase(actions.fetchChangedCompanyFieldsSuccess, fetchChangedCompanyFieldsReducer)\n .addCase(actions.fetchChangedCompanyFieldsFail, fetchFailReducer)\n .addCase(actions.editCompanyAuditTrailFields, editAuditTrialFieldsReducer)\n .addCase(actions.clearCompanyFields, clearCompanyFieldsReducer)\n);\n\nexport default reducer;\n","export const featureName = 'grid';\n","// international standard format for date ISO 8601. Standard used on API/database.\nexport const ISO_DATE_FORMAT = 'YYYY-MM-DD';\nexport const SHORT_MONTH_YEAR_DATE_FORMAT = 'MMM YYYY';\nexport const LONG_MONTH_YEAR_DATE_FORMAT = 'MMMM YYYY';\nexport const NOTIFICATION_DATE_FRAME_FORMAT = 'dddd, MMM Do';\nexport const PRESENT_DATE_FORMAT = 'present';\n","import { generateDynamicColumnKeys } from '@optx/utils/columns';\n\nexport const SEARCH_MINIMUM_CHAR_COUNT = 3;\nexport const STATE_SEARCH_ENDPOINT = '/search/state';\nexport const CITY_SEARCH_ENDPOINT = '/search/city';\nexport const PRODUCT_CATEGORY_SEARCH_ENDPOINT = '/search/product_category';\nexport const COMPANY_NAME_SEARCH_ENDPOINT = '/search/company_name';\nexport const LAST_INVESTORS_SEARCH_ENDPOINT = '/search/last_investors';\n\nexport const FINANCIAL_YEARS = [new Date().getFullYear(), new Date().getFullYear() - 1];\nexport const YEARS_LABELS = {\n current: new Date().getFullYear().toString(),\n future: (new Date().getFullYear() + 1).toString(),\n 'past 1 year': (new Date().getFullYear() - 1).toString(),\n 'past 2 years': (new Date().getFullYear() - 2).toString(),\n};\nexport const generateArrCurrentColumnKey = `${generateDynamicColumnKeys('arr', 'current')}`;\nexport const generateArrPast1YearColumnKey = `${generateDynamicColumnKeys('arr', 'past 1 year')}`;\n\nexport const generateEbitdaCurrentColumnKey = `${generateDynamicColumnKeys('ebitda', 'current')}`;\nexport const generateEbitdaPast1YearColumnKey = `${generateDynamicColumnKeys(\n 'ebitda',\n 'past 1 year'\n)}`;\nexport const generateGrowthCurrentColumnKey = `${generateDynamicColumnKeys('growth', 'current')}`;\nexport const generateGrowthPast1YearColumnKey = `${generateDynamicColumnKeys(\n 'growth',\n 'past 1 year'\n)}`;\n","import { call, put, select } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\n// models\nimport { InitialFavoriteListsSearchData, ListsSearchData } from '@models/lists/search';\nimport { SearchStateData } from '@optx/models/search';\nimport { SortByRule } from '@optx/models/table/sorting';\n// services\nimport { SavedSearchesService, UserService } from '@services/api';\nimport { FilterSource, PreselectedFilter } from '@optx/models/filters';\nimport { Dictionary } from 'lodash';\nimport { selectors as filterSourcesSelectors } from '../filters';\nimport { fetchSavedSearchesSuccess } from './actions';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { getFiltersQuery } from '@redux/company/search/search/sagasReusable';\nimport { selectors as getAllWatchlistsSelector } from '@redux/favorite-lists/lists';\nimport { defaultSearchType } from '@optx/features/grid/search-type/state/constants';\n\n// search\nexport function* searchSavedSearches(data: ListsSearchData) {\n const filterSources: FilterSource[] = yield select(filterSourcesSelectors.getCompanyFilters);\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getClearedFilter('advancedSearch')\n );\n\n let filter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter('myCompanies')\n );\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(getFiltersQuery, filter);\n\n const fetchMyCompaniesCardsResponse: AxiosResponse<Dictionary<SearchStateData>> = yield call(\n UserService.fetchMyCompaniesCards,\n '',\n defaultSearchType,\n filterQuery,\n 'card1'\n );\n\n const fetchAll = true;\n const sorting: SortByRule<any>[] = yield select(getAllWatchlistsSelector.getSortBy);\n const searchData: InitialFavoriteListsSearchData = {\n sortBy: sorting,\n fetchAll,\n showEmptyLists: true,\n };\n // @ts-ignore\n const fetchFavoriteListsResponse = yield call(\n SavedSearchesService.initialFetchFavoriteLists,\n searchData\n );\n\n // @ts-ignore\n const res = yield call(SavedSearchesService.getCompanySearches, data);\n yield put(\n fetchSavedSearchesSuccess(\n res.data.lists,\n filterSources,\n clearedFilters,\n res.data.total_list_count,\n data.query,\n data.pagination,\n data.sortBy,\n data.addCustomViews,\n data.defaultCustomUIView,\n undefined,\n fetchMyCompaniesCardsResponse.data,\n fetchFavoriteListsResponse.data.lists\n )\n );\n}\n","/* eslint-disable no-nested-ternary */\nimport { takeLatest, call, put, select, cancel, cancelled, takeLeading } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, values } from 'lodash';\nimport { AxiosResponse } from 'axios';\nimport queryString from 'query-string';\n// models\nimport { BaseFilter, FilterSource, PreselectedFilter } from '@models/filters';\nimport { InitialFavoriteListsSearchData, ListsSearchData } from '@models/lists/search';\nimport { PageInfo } from '@models/table/Pagination';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport {\n SaveView,\n SearchSave,\n ModifyView,\n ViewOption,\n DeleteCompanySearch,\n RenameCompanySearch,\n SearchSaveResponse,\n SearchStateData,\n} from '@models/search';\nimport { CustomUIViewIds, UserInformation, UserSettings } from '@optx/models/user';\nimport { RouteAliases } from '@optx/models/routes';\nimport { ColumnKeys } from '@optx/models/table/Columns';\nimport { Stage } from '@optx/redux/my-companies/filters-cards/interfaces';\nimport { GridKeys, GridKeysColumns } from '@optx/models/grid';\n// constants\nimport { customUIViews, customUIViewIds } from '@optx/constants/table/columnDisplay/company-search';\nimport { defaultSearchType } from '@optx/features/grid/search-type/state/constants';\n// services\nimport { SavedSearchesService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\nimport { mapSortQuery, hasFilters, preProcessSearch } from '@utils/search';\nimport { getRouteAlias } from '@utils/routes';\nimport { fetchAfterDelete } from '@optx/utils/combineSearch';\n// redux\nimport { selectors as columnSelectors } from '@features/grid/columns';\nimport { getViews } from './selectors';\nimport { actions as autoCompleteActions } from '@features/grid/autocomplete';\nimport { selectors as userSelectors, actions as userActions } from '@redux/user/information';\nimport { selectors as listsAndSearchesSelectors } from '@features/lists-and-searches';\nimport { actions as listsAndSearchesActions } from '@features/lists-and-searches/pagination';\nimport { mapSearchSave } from '@optx/redux/feature/saved-search/reducers';\nimport { selectors as filterSourcesSelectors, actions as filterActions } from '../filters';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as searchKeySelectors } from '@features/grid/searchkey';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as searchCountSelectors } from '@features/grid/search-count';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\nimport { searchSavedSearches } from './sagasReusable';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { selectors as myCompaniesFilterCardsSelectors } from '@redux/my-companies/filters-cards';\nimport { selectors as getAllWatchlistsSelector } from '@redux/favorite-lists/lists';\nimport { selectors as routerSelectors } from '@optx/redux/router';\nimport {\n actions as savedSearchesActions,\n selectors as searchesSelectors,\n} from '@redux/company/saved-searches';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { getViewLabel } from '@optx/features/grid/view/state/selectors';\n\nconst viewSettingsKeys = ['advancedSearch', 'myCompanies', 'userLists', 'sourceScrubLists'];\n\nexport function* searchSavedSearchesFail() {\n const errorMessage = 'Error fetching watch lists!';\n yield put(actions.fetchSavedSearchesFail(errorMessage));\n NotificationService.error(errorMessage);\n}\n\nexport function* fetchSavedSearchesSaga(action: PayloadAction<string>) {\n const sorting: SortByRule<any>[] = yield select(selectors.getSortBy);\n const pageNumber: number = yield select(selectors.getPageNumber);\n const userPageNumber: number = yield select(\n userSelectors.getSavedCompanySearchesResultsPageNumber\n );\n const defaultCustomUIView: CustomUIViewIds = yield select(userSelectors.getDefaultCustomUIView);\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n const pagination = {\n pageNumber,\n pageSize,\n };\n const query: string = yield select(selectors.getQuery);\n const searchData: ListsSearchData = {\n query: action.payload || '',\n sortBy: sorting,\n pagination:\n action.payload && action.payload !== query ? { ...pagination, pageNumber: 1 } : pagination,\n addCustomViews: true,\n defaultCustomUIView,\n };\n\n try {\n yield call(searchSavedSearches, searchData);\n\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettings({\n saved_company_serches_page_number: searchData.pagination.pageNumber,\n saved_company_searches_filters: action.payload || '',\n })\n );\n } else {\n yield put(\n userActions.updateUserSettings({\n saved_company_searches_filters: action.payload || '',\n })\n );\n }\n } catch (e: any) {\n yield call(searchSavedSearchesFail);\n }\n}\n\nexport function* savedSearchesPaginationSaga(action: PayloadAction<PageInfo>) {\n const pagination = action.payload;\n const sorting: SortByRule<any>[] = yield select(selectors.getSortBy);\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n const query: string = yield select(selectors.getQuery);\n const userPageNumber: number = yield select(\n userSelectors.getSavedCompanySearchesResultsPageNumber\n );\n const defaultCustomUIView: CustomUIViewIds = yield select(userSelectors.getDefaultCustomUIView);\n const searchData: ListsSearchData = {\n query,\n sortBy: sorting,\n pagination: action.payload,\n addCustomViews: true,\n defaultCustomUIView,\n };\n\n try {\n yield call(searchSavedSearches, searchData);\n\n if (pagination.pageSize !== pageSize && searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettings({\n lists_and_searches_results_per_page: pagination.pageSize,\n saved_company_serches_page_number: searchData.pagination.pageNumber,\n })\n );\n yield put(\n listsAndSearchesActions.updateMyWatchlistTabsPagination({\n actions: ['watchlists', 'sourceScrub', 'contactSearches'],\n pagination,\n })\n );\n } else if (pagination.pageSize !== pageSize) {\n yield put(\n userActions.updateUserSettings({\n lists_and_searches_results_per_page: pagination.pageSize,\n })\n );\n yield put(\n listsAndSearchesActions.updateMyWatchlistTabsPagination({\n actions: ['watchlists', 'sourceScrub', 'contactSearches'],\n pagination,\n })\n );\n } else if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettings({\n saved_company_serches_page_number: searchData.pagination.pageNumber,\n })\n );\n }\n } catch (e: any) {\n yield call(searchSavedSearchesFail);\n }\n}\n\nexport function* sortCompanySearchesListsSaga(action: PayloadAction<SortByRule<any>[]>) {\n const sorting = action.payload;\n const pageNumber: number = yield select(selectors.getPageNumber);\n const userPageNumber: number = yield select(\n userSelectors.getSavedCompanySearchesResultsPageNumber\n );\n const defaultCustomUIView: CustomUIViewIds = yield select(userSelectors.getDefaultCustomUIView);\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n const pagination = {\n pageNumber,\n pageSize,\n };\n const query: string = yield select(selectors.getQuery);\n const searchData: ListsSearchData = {\n query,\n pagination: action.payload ? { ...pagination, pageNumber: 1 } : pagination,\n sortBy: sorting,\n addCustomViews: true,\n defaultCustomUIView,\n };\n const sortQuery = queryString.stringify(mapSortQuery(sorting), {\n arrayFormat: 'comma',\n });\n\n try {\n yield call(searchSavedSearches, searchData);\n\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettings({\n saved_company_serches_sorting: sortQuery,\n saved_company_serches_page_number: searchData.pagination.pageNumber,\n })\n );\n } else {\n yield put(userActions.updateUserSettings({ saved_company_serches_sorting: sortQuery }));\n }\n } catch (e: any) {\n yield call(searchSavedSearchesFail);\n }\n}\n\nexport function* saveSearchSaga(\n action: PayloadAction<{ title: string; filters: Dictionary<PreselectedFilter> }>\n) {\n const { title, filters } = action.payload;\n const searchKey: string = yield select(searchKeySelectors.getSearchKey('advancedSearch'));\n const searchType: string = yield select(searchTypeSelectors.getSearchType('advancedSearch'));\n const filterSourcesMap: Dictionary<BaseFilter> = yield select(\n filterSourcesSelectors.getFiltersMap\n );\n const searchCount: number = yield select(searchCountSelectors.getSearchCount('advancedSearch'));\n const filterQuery = mapFiltersToURLParams(filterSourcesMap, filters);\n const filterSources: FilterSource[] = yield select(filterSourcesSelectors.getCompanyFilters);\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getClearedFilter('advancedSearch')\n );\n\n try {\n const res: AxiosResponse<SearchSaveResponse> = yield call(\n SavedSearchesService.createCompanySearch,\n title,\n preProcessSearch(searchKey),\n searchType,\n searchCount,\n filterQuery\n );\n const cancelSearch: boolean = yield select(searchSelectors.isCancelled('advancedSearch'));\n\n if (cancelSearch) {\n yield cancel();\n }\n\n if (res.data) {\n yield put(actions.saveSearchSuccess(res.data, filterSources, clearedFilters));\n NotificationService.success(`${title} company search was saved.`);\n } else {\n const errorMessage = 'Error saving company search!';\n yield put(actions.saveSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage =\n e.response.data && e.response.data.errors\n ? values(e.response.data.errors).toString()\n : 'Error saving company search!';\n yield put(actions.saveSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n } finally {\n // @ts-ignore\n if (yield cancelled()) {\n yield put(searchActions.cancelCompanySearch({ gridKey: 'advancedSearch', data: false }));\n // canceles the loading state for saved searches\n yield put(actions.saveSearchFail(''));\n }\n }\n}\n\nfunction* saveViewSaga(action: PayloadAction<SaveView>) {\n // check whether we are saving a search from my watchlist\n // use it to load corresponding filters, sorting and columns\n let pageAlias: RouteAliases | null = getRouteAlias();\n\n if (pageAlias === 'sourceScrubLists') {\n pageAlias = 'userLists';\n }\n\n let filters: Dictionary<PreselectedFilter>;\n let filterQuery;\n let sorting: SortByRule<any>[];\n let columns: string;\n let columnOrder: ColumnKeys[];\n let pinnedColumns: string;\n const {\n filters: saveFilters,\n sorting: saveSorting,\n columns: saveColumns,\n pinnedColumns: savePinnedColumns,\n title,\n isDefault,\n callback,\n } = action.payload;\n\n const defaultOptx: string = yield select(userSelectors.getDefaultScore);\n\n if (saveFilters) {\n let myCompaniesFilters = {};\n\n if (pageAlias === 'myCompanies') {\n const regularFilters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter('myCompanies')\n );\n const selectedCard: SearchStateData = yield select(\n myCompaniesFilterCardsSelectors.getSelectedCard\n );\n const stage: Stage[] = yield select(\n myCompaniesFilterCardsSelectors.getStageFilter('myCompanies')\n );\n const cardId: string = yield select(myCompaniesFilterCardsSelectors.getSelectedCardId);\n const subFilter: string = yield select(myCompaniesFilterCardsSelectors.getSubFilter);\n const subFilterValue = subFilter ? Object.keys(selectedCard.data[subFilter]) : '';\n\n myCompaniesFilters = {\n ...regularFilters,\n [subFilterValue[0]]: '1',\n next_touch_date_days: selectedCard.filter?.next_touch_date_days,\n last_touch_date_days: selectedCard.filter?.last_touch_date_days,\n stage:\n cardId === 'card1'\n ? stage?.map(item => item?.value) || selectedCard.filter?.stage\n : undefined,\n saved_list_id: cardId === 'card3' ? 'favorites' : undefined,\n };\n }\n\n filters =\n pageAlias === 'userLists'\n ? yield select(filterSelectors.getFilter('lists'))\n : pageAlias === 'myCompanies'\n ? myCompaniesFilters\n : yield select(filterSelectors.getFilter('advancedSearch'));\n\n const filterSourcesMap: Dictionary<BaseFilter> = yield select(\n filterSourcesSelectors.getFiltersMap\n );\n filterQuery = mapFiltersToURLParams(filterSourcesMap, filters);\n }\n\n if (saveSorting) {\n sorting =\n pageAlias === 'userLists'\n ? yield select(sortSelectors.getSorting('lists'))\n : pageAlias === 'myCompanies'\n ? yield select(sortSelectors.getSorting('myCompanies'))\n : yield select(sortSelectors.getSorting('advancedSearch'));\n }\n\n if (saveColumns) {\n columns =\n pageAlias === 'userLists'\n ? yield select(columnSelectors.getVisibleColumnString('lists'))\n : pageAlias === 'myCompanies'\n ? yield select(columnSelectors.getVisibleColumnString('myCompanies'))\n : yield select(columnSelectors.getVisibleColumnString('advancedSearch'));\n columnOrder =\n pageAlias === 'userLists'\n ? yield select(columnSelectors.getColumnOrder('lists'))\n : pageAlias === 'myCompanies'\n ? yield select(columnSelectors.getColumnOrder('myCompanies'))\n : yield select(columnSelectors.getColumnOrder('advancedSearch'));\n }\n\n if (savePinnedColumns) {\n pinnedColumns =\n pageAlias === 'userLists'\n ? yield select(columnSelectors.getPinnedColumnsString('lists'))\n : pageAlias === 'myCompanies'\n ? yield select(columnSelectors.getPinnedColumnsString('myCompanies'))\n : yield select(columnSelectors.getPinnedColumnsString('advancedSearch'));\n }\n\n const searchKey: string =\n pageAlias === 'userLists'\n ? yield select(searchKeySelectors.getSearchKey('lists'))\n : pageAlias === 'myCompanies'\n ? yield select(searchKeySelectors.getSearchKey('myCompanies'))\n : yield select(searchKeySelectors.getSearchKey('advancedSearch'));\n\n const searchType: string =\n pageAlias === 'userLists'\n ? yield select(searchTypeSelectors.getSearchType('lists'))\n : pageAlias === 'myCompanies'\n ? yield select(searchTypeSelectors.getSearchType('myCompanies'))\n : yield select(searchTypeSelectors.getSearchType('advancedSearch'));\n\n const searchCount: number = ['userLists', 'sourceScrubLists'].includes(pageAlias as string)\n ? yield select(searchCountSelectors.getSearchCount('lists'))\n : yield select(searchCountSelectors.getSearchCount(pageAlias as GridKeys));\n\n try {\n const res: AxiosResponse<SearchSaveResponse> = yield call(\n SavedSearchesService.createCompanySearch,\n title,\n saveFilters ? preProcessSearch(searchKey) : '',\n searchType,\n searchCount,\n filterQuery,\n // @ts-ignore\n sorting,\n // @ts-ignore\n columns,\n // @ts-ignore\n columnOrder || undefined,\n // @ts-ignore\n pinnedColumns,\n isDefault,\n undefined,\n undefined,\n defaultOptx\n );\n\n if (res.data) {\n const filterSources: FilterSource[] = yield select(filterSourcesSelectors.getCompanyFilters);\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getClearedFilter('advancedSearch')\n );\n\n if (isDefault) {\n yield put(actions.makeFiltersDefaultSuccess(res.data.unique_id as number));\n yield put(filterActions.changeDefaultView(res.data));\n\n if (pageAlias && viewSettingsKeys.includes(pageAlias)) {\n yield put(\n userInformationActions.updateUserSettings({\n default_view_id: typeof res.data.unique_id === 'number' ? res.data.unique_id : null,\n })\n );\n }\n }\n\n yield put(actions.saveSearchSuccess(res.data, filterSources, clearedFilters, true));\n\n if (saveFilters && pageAlias === 'advancedSearch') {\n yield put(searchActions.saveSearchTitle({ gridKey: 'advancedSearch', data: title }));\n }\n\n yield put(\n actions.applyViewSuccess({\n id: res.data.unique_id,\n label: res.data.title,\n pageAlias,\n })\n );\n\n NotificationService.success(`${title} company search was saved.`);\n callback && callback();\n }\n\n yield put(autoCompleteActions.fetchSearchAutocomplete());\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Error saving company search!');\n yield put(actions.saveSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\n// this saga is called only for \"OPTX Default\" and views coming from backend\nfunction* modifyViewSaga(action: PayloadAction<ModifyView, any, ViewOption>) {\n const {\n filters: formSaveFilters,\n sorting: formSaveSorting,\n columns: formSaveColumns,\n pinnedColumns: formSavePinnedColumns,\n title: formTitle,\n isDefault,\n id,\n } = action.payload;\n const savedSearches: SearchSave[] = yield select(selectors.getAllViews);\n const defaultSearch = savedSearches.find(search => search.is_default);\n const pageAlias: RouteAliases | null = getRouteAlias();\n const { defaultOptxView } = yield select(getViews);\n let gridKey: RouteAliases | null | 'lists' = pageAlias;\n\n if (pageAlias === 'userLists') {\n gridKey = 'lists';\n }\n\n // if a custom UI view is set as default and we want to set optx default view as default\n // we just need to set custom UI view \"is_default\" property to false and reset it's user setting\n if (\n defaultSearch &&\n customUIViewIds.includes(defaultSearch.unique_id as CustomUIViewIds) &&\n isDefault &&\n id === 'default'\n ) {\n yield put(\n userActions.updateUserSettings({\n default_view: '',\n ...(pageAlias && viewSettingsKeys.includes(pageAlias) ? { default_view_id: null } : {}),\n })\n );\n\n yield put(\n actions.modifyCustomUIViewSuccess(\n undefined,\n defaultSearch.unique_id as CustomUIViewIds,\n false\n )\n );\n\n yield put(filterActions.changeDefaultView());\n\n NotificationService.success(`${defaultOptxView.title} company search was saved.`);\n\n return;\n }\n\n let editedView;\n let saveFilters;\n let saveSorting;\n let saveColumns;\n let savePinnedColumns;\n\n // when editing a view, check whether we need to save new data or leave out data\n // for the default state we have a special case. we don't a saved search coming from api for \"OPTX Default\",\n // so we create it in UI. that's why when setting OPTX Default as the default view, we will send the current\n // default view with the is_default property being false.\n if (id === 'default') {\n editedView = { ...defaultSearch } as SearchSave;\n editedView.is_default = false;\n saveFilters = hasFilters(editedView.search_criteria);\n saveSorting = !!editedView.sortBy;\n saveColumns = !!editedView.columns;\n savePinnedColumns = !!editedView.pinned_columns;\n } else {\n editedView = { ...action.meta };\n editedView.is_default = isDefault;\n saveFilters = formSaveFilters;\n saveSorting = formSaveSorting;\n saveColumns = formSaveColumns;\n savePinnedColumns = formSavePinnedColumns;\n }\n\n let filters: Dictionary<PreselectedFilter> | undefined = undefined;\n let sorting: SortByRule<any>[] = [];\n let columns: string | undefined = undefined;\n let columnOrder: ColumnKeys[] = [];\n let pinnedColumns: string | undefined = undefined;\n\n if (\n saveFilters &&\n !hasFilters(editedView.search_criteria) &&\n editedView.search_info.type !== 'combined'\n ) {\n filters = yield select(filterSelectors.getFilter(gridKey as GridKeys));\n } else if (saveFilters && hasFilters(editedView.search_criteria)) {\n filters = editedView.filters;\n }\n\n if (saveSorting && !editedView.sortBy) {\n sorting = yield select(sortSelectors.getSorting(gridKey as GridKeys));\n } else if (saveSorting && editedView.sortBy) {\n sorting = editedView.sortBy;\n }\n\n if (saveColumns && typeof editedView.columns !== 'string') {\n columns = yield select(columnSelectors.getVisibleColumnString(gridKey as GridKeysColumns));\n columnOrder = yield select(columnSelectors.getColumnOrder(gridKey as GridKeysColumns));\n } else if (saveColumns && typeof editedView.pinned_columns === 'string') {\n columns = editedView.columns as string;\n columnOrder = editedView.column_order?.split(',') as ColumnKeys[];\n }\n\n if (savePinnedColumns && typeof editedView.pinned_columns !== 'string') {\n pinnedColumns = yield select(\n columnSelectors.getPinnedColumnsString(gridKey as GridKeysColumns)\n );\n } else if (savePinnedColumns && typeof editedView.pinned_columns === 'string') {\n pinnedColumns = editedView.pinned_columns as unknown as string;\n }\n\n const filterSourcesMap: Dictionary<BaseFilter> = yield select(\n filterSourcesSelectors.getFiltersMap\n );\n\n const filterQuery = filters ? mapFiltersToURLParams(filterSourcesMap, filters) : undefined;\n const defaultOptx: string = yield select(userSelectors.getDefaultScore);\n const searchKey = editedView.searchKey ? preProcessSearch(editedView.searchKey) : '';\n const searchType = editedView.saerchType ? editedView.saerchType : defaultSearchType;\n\n try {\n const res: AxiosResponse<SearchSaveResponse> = yield call(\n SavedSearchesService.createCompanySearch,\n editedView.title,\n searchKey,\n searchType,\n editedView.count,\n filterQuery,\n sorting,\n columns,\n columnOrder,\n pinnedColumns,\n editedView.is_default,\n editedView.unique_id as number,\n id !== 'default' && editedView.title !== formTitle ? formTitle : undefined,\n defaultOptx\n );\n const cancelSearch: boolean = yield select(searchSelectors.isCancelled('advancedSearch'));\n\n if (cancelSearch) {\n yield cancel();\n }\n\n if (res.data) {\n const filterSources: FilterSource[] = yield select(filterSourcesSelectors.getCompanyFilters);\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getClearedFilter('advancedSearch')\n );\n yield put(actions.modifyViewSuccess(res.data, filterSources, clearedFilters));\n\n // update filters in default view in store when changing the default property of a view\n if (id === 'default' || (defaultSearch && defaultSearch.unique_id === id && !isDefault)) {\n yield put(filterActions.changeDefaultView());\n } else {\n yield put(filterActions.changeDefaultView(res.data));\n }\n\n if (pageAlias && viewSettingsKeys.includes(pageAlias)) {\n yield put(\n userInformationActions.updateUserSettings({\n default_view_id: typeof id === 'number' ? id : null,\n })\n );\n }\n\n // if a default custom UI view is set as default and we make a regular view to be the\n // new default, set current custom UI view's \"is_default\" property to false and\n // reset it's user setting\n if (\n defaultSearch &&\n customUIViewIds.includes(defaultSearch.unique_id as CustomUIViewIds) &&\n isDefault\n ) {\n yield put(\n userActions.updateUserSettings({\n default_view: '',\n })\n );\n\n yield put(\n actions.modifyCustomUIViewSuccess(\n undefined,\n defaultSearch.unique_id as CustomUIViewIds,\n false\n )\n );\n }\n\n NotificationService.success(\n `${id === 'default' ? formTitle : editedView.title} company search was saved.`\n );\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Error saving company search!');\n yield put(actions.saveSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\n// this saga is called only when changing default option on custom UI views, which are hardcoded on the UI side\nfunction* modifyCustomUIViewSaga(\n action: PayloadAction<{ id: CustomUIViewIds; isDefault: boolean }>\n) {\n const { id, isDefault } = action.payload;\n\n if (isDefault) {\n const savedSearches: SearchSave[] = yield select(selectors.getAllViews);\n const defaultSearch = savedSearches.find(search => search.is_default);\n\n const defaultOptx: string = yield select(userSelectors.getDefaultScore);\n\n // if we're setting a custom UI view to default, but we have a regular view\n // previously set as default, then we need to make a request and change\n // that view's default setting\n if (defaultSearch) {\n try {\n const filterSourcesMap: Dictionary<BaseFilter> = yield select(\n filterSourcesSelectors.getFiltersMap\n );\n const filterQuery = mapFiltersToURLParams(filterSourcesMap, defaultSearch.filters);\n const res: AxiosResponse<SearchSaveResponse> = yield call(\n SavedSearchesService.createCompanySearch,\n defaultSearch.title,\n defaultSearch.searchKey ? preProcessSearch(defaultSearch.searchKey) : '',\n defaultSearch.saerchType!,\n defaultSearch.count,\n filterQuery,\n defaultSearch.sortBy,\n defaultSearch.columns === null ? undefined : defaultSearch.columns,\n defaultSearch.column_order === null\n ? undefined\n : (defaultSearch.column_order.split(',') as ColumnKeys[]),\n defaultSearch.pinned_columns === null ? undefined : defaultSearch.pinned_columns,\n false,\n defaultSearch.unique_id as number,\n undefined,\n defaultOptx\n );\n\n const cancelSearch: boolean = yield select(searchSelectors.isCancelled('advancedSearch'));\n\n if (cancelSearch) {\n yield cancel();\n }\n\n if (res.data) {\n const filterSources: FilterSource[] = yield select(\n filterSourcesSelectors.getCompanyFilters\n );\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getClearedFilter('advancedSearch')\n );\n yield put(\n actions.modifyCustomUIViewSuccess(\n mapSearchSave(res.data, clearedFilters, filterSources),\n id,\n true\n )\n );\n\n NotificationService.success(`${defaultSearch.title} company search was saved.`);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Error saving company search!');\n yield put(actions.saveSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } else {\n yield put(actions.modifyCustomUIViewSuccess(undefined, id, true));\n yield put(filterActions.changeDefaultView(defaultSearch));\n NotificationService.success(`${customUIViews[id].title} company search was saved.`);\n }\n\n yield put(\n userActions.updateUserSettings({\n default_view: id,\n default_view_id: null,\n })\n );\n\n yield put(filterActions.changeDefaultView(customUIViews[id]));\n } else {\n yield put(\n userActions.updateUserSettings({\n default_view: '',\n default_view_id: null,\n })\n );\n yield put(actions.modifyCustomUIViewSuccess(undefined, id, false));\n yield put(filterActions.changeDefaultView());\n }\n}\n\nexport function* deleteSearchSaga(action: PayloadAction<DeleteCompanySearch>) {\n const { id: searchId, viewId } = action.payload;\n\n const savedSearches: SearchSave[] = yield select(searchesSelectors.getSavedSearches);\n const shouldRefetch = fetchAfterDelete(searchId, savedSearches);\n\n try {\n const res: AxiosResponse<SearchSaveResponse> = yield call(\n SavedSearchesService.deleteCompanySearch,\n Number(searchId)\n );\n\n if (res.data) {\n yield put(actions.deleteSearchSuccess(Number(searchId)));\n\n if (shouldRefetch) {\n yield put(savedSearchesActions.initializeSavedSearchesAndViews());\n }\n\n if (searchId === viewId) {\n yield put(actions.applyViewSuccess({ id: '', label: '', pageAlias: null }));\n }\n\n const searchTitle: string = yield select(getViewLabel('advancedSearch'));\n const allSavedSearches = Object.keys(yield select(searchesSelectors.getTitles));\n\n // if condition is true, useRefreshView hook will work\n // to make applying default view smooth, we have to set loader in advance\n if (searchTitle && !allSavedSearches.includes(searchTitle)) {\n yield put(savedSearchesActions.setLoader());\n }\n\n const successMessage = 'Company search deleted successfully';\n NotificationService.success(successMessage);\n } else {\n const errorMessage = 'Error deleting company search!';\n yield put(actions.deleteSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Error deleting company search!';\n yield put(actions.deleteSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* renameSearchSaga(action: PayloadAction<RenameCompanySearch>) {\n const { searchId, title, viewId } = action.payload;\n const pageAlias: RouteAliases | null = getRouteAlias();\n\n try {\n const res: AxiosResponse<SearchSaveResponse> = yield call(\n SavedSearchesService.renameCompanySearch,\n searchId,\n title\n );\n\n if (res.data) {\n yield put(actions.renameSearchSuccess(searchId, title));\n\n if (searchId === viewId) {\n yield put(actions.applyViewSuccess({ id: searchId, label: title, pageAlias }));\n }\n\n const searchTitle: string = yield select(getViewLabel('advancedSearch'));\n const allSavedSearches = Object.keys(yield select(searchesSelectors.getTitles));\n\n // if condition is true, useRefreshView hook will work\n // to make applying default view smooth, we have to set loader in advance\n if (searchTitle && !allSavedSearches.includes(searchTitle)) {\n yield put(savedSearchesActions.setLoader());\n }\n\n const successMessage = 'Company search renamed successfully';\n NotificationService.success(successMessage);\n } else {\n const errorMessage = 'Error renaming company search!';\n yield put(actions.renameSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n let errorMessage: string;\n\n if (\n Object.values(e.response.data.errors)[0] ===\n `Company search list with a title ${title} already exists.`\n ) {\n errorMessage = Object.values(e.response.data.errors)[0] as string;\n } else {\n errorMessage = 'Error renaming company search!';\n }\n\n yield put(actions.renameSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* makeFiltersDefaultSaga(action: PayloadAction<number | string, any, boolean>) {\n const id = action.payload;\n\n const defaultOptx: string = yield select(userSelectors.getDefaultScore);\n const filterSourcesMap: Dictionary<BaseFilter> = yield select(\n filterSourcesSelectors.getFiltersMap\n );\n\n const savedSearches: SearchSave[] = yield select(selectors.getAllViews);\n const defaultSearch = savedSearches.find(search => search.is_default);\n\n let modifyViewId = id;\n let isCreatedViewDefault = true;\n\n // conditions to check whether we want to set a user created view as default or not\n // and get the view data that we want to send to backend\n if (\n (customUIViewIds.includes(id as CustomUIViewIds) && defaultSearch) ||\n id === defaultSearch?.unique_id\n ) {\n modifyViewId = defaultSearch.unique_id;\n isCreatedViewDefault = false;\n }\n\n const savedSearch: SearchSave = yield select(state =>\n selectors.getSearch(state, modifyViewId as string)\n );\n\n const {\n searchKey,\n filters,\n title,\n count: searchCount,\n sortBy,\n columns,\n column_order: columnOrder,\n pinned_columns: pinnedColumns,\n unique_id: uniqueId,\n } = savedSearch;\n\n const filterQuery = mapFiltersToURLParams(filterSourcesMap, filters);\n\n try {\n // we need to make the call to company search endpoint only if we make\n // a user created view as default, remove it as default or if we make a\n // custom UI view default and we currently have a user created view already as default.\n // when we switch default states between user created views, it is enough to make a\n // single request for the new default view\n if (\n !customUIViewIds.includes(id as CustomUIViewIds) ||\n (customUIViewIds.includes(id as CustomUIViewIds) &&\n defaultSearch &&\n !customUIViewIds.includes(defaultSearch.unique_id as CustomUIViewIds))\n ) {\n const res: AxiosResponse<SearchSaveResponse> = yield call(\n // @ts-ignore\n SavedSearchesService.createCompanySearch,\n title,\n preProcessSearch(searchKey),\n '',\n searchCount,\n filterQuery,\n sortBy,\n columns,\n columnOrder?.split(','),\n pinnedColumns,\n isCreatedViewDefault,\n uniqueId,\n undefined,\n defaultOptx\n );\n\n if (res.data) {\n const filterSources: FilterSource[] = yield select(\n filterSourcesSelectors.getCompanyFilters\n );\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getClearedFilter('advancedSearch')\n );\n yield put(actions.modifyViewSuccess(res.data, filterSources, clearedFilters));\n\n if (action.meta === undefined) {\n yield put(filterActions.changeDefaultView());\n } else {\n yield put(filterActions.changeDefaultView(res.data));\n }\n }\n }\n\n // we need to make the call to user settings endpoint to set the custom UI view\n // as default only if we are setting it as default or unsetting it, either by\n // using the menu action for that custom view or choosing a user created view as default\n if (\n customUIViewIds.includes(id as CustomUIViewIds) ||\n customUIViewIds.includes(defaultSearch?.unique_id as CustomUIViewIds)\n ) {\n const defaultView =\n customUIViewIds.includes(id as CustomUIViewIds) &&\n !customUIViewIds.includes(defaultSearch?.unique_id as CustomUIViewIds)\n ? customUIViews[id].unique_id\n : '';\n yield put(\n userActions.updateUserSettings({\n default_view: defaultView as CustomUIViewIds,\n })\n );\n }\n\n NotificationService.success(`${title} company search was updated.`);\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Error saving company search!');\n yield put(actions.saveSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* initializeSavedSearchesAndViewsSaga() {\n const settings: UserSettings = yield select(userSelectors.getSettings);\n const savedQuery = settings?.session_settings?.saved_company_searches_filters ?? '';\n const defaultCustomUIView: CustomUIViewIds = yield select(userSelectors.getDefaultCustomUIView);\n\n try {\n const searchData: InitialFavoriteListsSearchData = {\n sortBy: yield select(getAllWatchlistsSelector.getSortBy),\n fetchAll: true,\n showEmptyLists: true,\n };\n\n //@ts-ignore\n const allWatchlistsResponse = yield call(\n SavedSearchesService.initialFetchFavoriteLists,\n searchData\n );\n\n const res: AxiosResponse<any> = yield call(SavedSearchesService.getCompanySearches, {\n query: savedQuery,\n } as ListsSearchData);\n\n if (res.data) {\n const filterSources: FilterSource[] = yield select(filterSourcesSelectors.getCompanyFilters);\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getClearedFilter('advancedSearch')\n );\n const userSettings: UserInformation = yield select(userSelectors.getUserSettings);\n const isAnalyst: boolean = yield select(userSelectors.getIsAnalyst);\n const location: Location = yield select(routerSelectors.getLocation);\n\n yield put(\n actions.initializeSavedSearchesAndViewsSuccess(\n res.data.lists,\n filterSources,\n clearedFilters,\n res.data.total_list_count,\n savedQuery,\n {\n pageNumber: 1,\n pageSize: userSettings.settings?.lists_and_searches_results_per_page || 50,\n },\n undefined,\n undefined,\n defaultCustomUIView,\n isAnalyst,\n undefined,\n allWatchlistsResponse.data.lists,\n location\n )\n );\n }\n } catch (e: any) {\n yield call(searchSavedSearchesFail);\n }\n}\n\nexport default function* companySavedSearchesSaga() {\n yield takeLatest(actions.fetchSavedSearches, fetchSavedSearchesSaga);\n yield takeLatest(actions.saveSearch, saveSearchSaga);\n yield takeLatest(actions.saveView, saveViewSaga);\n yield takeLatest(actions.modifyView, modifyViewSaga);\n yield takeLatest(actions.modifyCustomUIView, modifyCustomUIViewSaga);\n yield takeLatest(actions.deleteSearch, deleteSearchSaga);\n yield takeLatest(actions.renameSearch, renameSearchSaga);\n yield takeLatest(actions.savedCompanySearchPagination, savedSearchesPaginationSaga);\n yield takeLatest(actions.makeFiltersDefault, makeFiltersDefaultSaga);\n yield takeLeading(actions.initializeSavedSearchesAndViews, initializeSavedSearchesAndViewsSaga);\n yield takeLatest(actions.sortCompanySearchesLists, sortCompanySearchesListsSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction, Dictionary } from '@reduxjs/toolkit';\nimport { values, find, findKey, Dictionary as LodashDictionary } from 'lodash';\n// models\nimport { FilterSource, Filter, PreselectedFilter } from '@models/filters';\nimport { PageInfo } from '@models/table/Pagination';\nimport { SearchSaveResponse, SearchSave, SearchStateData } from '@models/search';\nimport { CustomUIViewIds, UserInformation } from '@optx/models/user';\nimport { SortByRule } from '@models/table/sorting';\nimport { UpdateUserSettingsPayload } from '@optx/models/api/user';\nimport { CompanyWatchList } from '@optx/models/WatchList';\n// constants\nimport { customUIViewIds, customUIViews } from '@optx/constants/table/columnDisplay/company-search';\n// utils\nimport { parseSorting } from '@optx/utils/filters/parseSorting';\n// redux\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { ContactsSavedSearchesState } from '@redux/feature/saved-search/interfaces';\nimport * as actions from './actions';\nimport {\n fetchReducer,\n fetchFailReducer,\n fetchSuccessLoadingReducer,\n} from '../../feature/fetch/reducers';\nimport {\n initialState,\n fetchSavedSearchesReducer,\n fetchSavedSearchesSuccessReducer,\n saveSearchSuccessReducer,\n deleteSearchSuccessReducer,\n renameSearchSuccessReducer,\n mapSearchSave,\n} from '../../feature/saved-search/reducers';\nimport { actions as combinedSearchActions } from '@features/combine-search/state';\nimport { actions as searchActions } from '@features/grid/search';\n\nconst initializeSavedSearchesAndViewsSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<\n Array<SearchSaveResponse> | Dictionary<SearchSaveResponse>,\n any,\n {\n filterSources: Array<FilterSource<Filter<any>>>;\n clearedFilters: Dictionary<PreselectedFilter>;\n total?: number;\n query?: string;\n pagination?: PageInfo;\n sortBy?: Array<SortByRule<any>>;\n defaultCustomUIView?: CustomUIViewIds;\n myCompaniesFilterCards?: LodashDictionary<SearchStateData>;\n allWatchlists?: LodashDictionary<CompanyWatchList>;\n location?: Location;\n isAnalyst?: boolean;\n }\n >\n> = (draftState, action) => {\n const decodedPayload = action.payload as Array<SearchSaveResponse>;\n\n // for saved searches table we have pagination and search functionality, but for views\n // we need to display all of them. so, make an initial call for all saved searches,\n // no pagination included, and store views and save searches in two separate places.\n // we need them separated, because of the search functionality\n\n // include custom ui views in store and set custom view as default, if any\n const customViews = customUIViewIds.map(id => {\n if (customUIViewIds.includes(action.meta.defaultCustomUIView as CustomUIViewIds)) {\n return { ...customUIViews[id], is_default: true };\n }\n\n return customUIViews[id];\n });\n const allSavedSearches = decodedPayload.concat(customViews);\n const {\n filterSources,\n clearedFilters,\n total,\n query,\n pagination,\n sortBy,\n myCompaniesFilterCards,\n allWatchlists,\n location,\n isAnalyst,\n } = action.meta;\n\n const savedSearches = allSavedSearches.slice(0, pagination?.pageSize || 50);\n fetchSavedSearchesSuccessReducer(draftState, {\n payload: savedSearches,\n meta: {\n filterSources,\n clearedFilters,\n total,\n query,\n pagination,\n sortBy,\n myCompaniesFilterCards,\n allWatchlists,\n location,\n isSavedSearchList: true,\n isAnalyst,\n },\n type: '',\n });\n\n draftState.viewIds = [];\n\n values(allSavedSearches).forEach(search => {\n const { unique_id: id } = search;\n draftState.viewIds.push(id);\n draftState.views[id] = mapSearchSave(\n search,\n clearedFilters,\n filterSources,\n myCompaniesFilterCards,\n allWatchlists,\n location,\n true,\n undefined,\n isAnalyst\n );\n });\n};\n\nconst makeFiltersDefaultSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<number>\n> = (draftState, action) => {\n const id = action.payload;\n\n if (typeof id === 'number') {\n const currentDefaultId = findKey(draftState.views, search => search.is_default);\n\n if (currentDefaultId) {\n draftState.views[currentDefaultId].is_default = false;\n\n if (draftState.byId[currentDefaultId]) {\n draftState.byId[currentDefaultId].is_default = false;\n }\n }\n\n if (typeof currentDefaultId === 'number' && id !== currentDefaultId) {\n draftState.views[id].is_default = true;\n\n if (draftState.byId[id]) {\n draftState.byId[id].is_default = false;\n }\n }\n }\n};\n\nconst modifyViewSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<\n SearchSaveResponse,\n any,\n {\n filterSources: Array<FilterSource<Filter<any>>>;\n clearedFilters: Dictionary<PreselectedFilter>;\n }\n >\n> = (draftState, action) => {\n const {\n payload: searchSaveResponse,\n meta: { filterSources, clearedFilters },\n } = action;\n const modifiedView = { ...searchSaveResponse };\n const modifiedViewId = modifiedView.unique_id;\n const currentDefaultView = find(draftState.views, view => view.is_default);\n\n if (currentDefaultView) {\n if (\n modifiedViewId !== currentDefaultView.unique_id &&\n modifiedView.is_default &&\n currentDefaultView.is_default\n ) {\n draftState.views[currentDefaultView.unique_id].is_default = false;\n\n if (draftState.byId[currentDefaultView.unique_id]) {\n draftState.byId[currentDefaultView.unique_id].is_default = false;\n }\n }\n }\n\n if (draftState.byId[modifiedViewId]) {\n draftState.byId[modifiedViewId] = mapSearchSave(modifiedView, clearedFilters, filterSources);\n }\n\n draftState.views[modifiedViewId] = mapSearchSave(modifiedView, clearedFilters, filterSources);\n};\n\nconst modifyCustomUIViewSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<{ view?: SearchSave; customUIViewId?: CustomUIViewIds; isDefault?: boolean }>\n> = (draftState, action) => {\n const { view, customUIViewId, isDefault } = action.payload;\n\n if (view) {\n const modifiedViewId = view.unique_id;\n\n if (draftState.byId[modifiedViewId]) {\n draftState.byId[modifiedViewId] = view;\n }\n\n draftState.views[modifiedViewId] = view;\n }\n\n if (customUIViewId) {\n draftState.views[customUIViewId].is_default = !!isDefault;\n draftState.byId[customUIViewId].is_default = !!isDefault;\n }\n};\n\nconst updateSavedSearchesReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<{ shareWith: Array<number>; listId: number }>\n> = (draftState, action) => {\n const { shareWith, listId } = action.payload;\n const sharedList: number[] = [...(draftState.byId[listId]?.shared_with || [])];\n\n shareWith.forEach(item => {\n const alreadySelectedUserIndex = sharedList.indexOf(item);\n\n if (alreadySelectedUserIndex === -1) {\n sharedList.push(item);\n }\n });\n\n draftState.byId[listId].shared_with = sharedList;\n};\n\n// external actions reducers\nconst fetchUserInformationSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const sorting = action.payload.settings.session_settings?.saved_company_serches_sorting;\n const pageNumber = action.payload.settings.session_settings?.saved_company_serches_page_number;\n\n if (sorting) {\n const { sortBy } = parseSorting(sorting);\n draftState.sortBy = sortBy;\n }\n\n if (pageNumber) {\n draftState.pageNumber = pageNumber;\n }\n};\n\nconst updateUserSettingsSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<Partial<UpdateUserSettingsPayload>>\n> = (draftState, action) => {\n const { default_view: defaultViewId } = action.payload;\n\n if (defaultViewId) {\n draftState.byId[defaultViewId].is_default = true;\n draftState.views[defaultViewId].is_default = true;\n } else if (defaultViewId === '') {\n const defaultId = draftState.allIds.find(\n id => customUIViewIds.includes(id as CustomUIViewIds) && draftState.byId[id].is_default\n );\n\n if (defaultId) {\n draftState.byId[defaultId].is_default = false;\n draftState.views[defaultId].is_default = false;\n }\n }\n};\n\nconst savedCompanySearchPaginationReducer: CaseReducer<ContactsSavedSearchesState> = draftState => {\n draftState.loading = true;\n};\n\nconst loadSavedSearchReducer: CaseReducer<ContactsSavedSearchesState> = draftState => {\n draftState.shouldFetch = true;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // fetch contacts saved searches\n .addCase(actions.initializeSavedSearchesAndViews, fetchSavedSearchesReducer)\n .addCase(\n actions.initializeSavedSearchesAndViewsSuccess,\n initializeSavedSearchesAndViewsSuccessReducer\n )\n .addCase(actions.fetchSavedSearches, fetchSavedSearchesReducer)\n .addCase(actions.fetchSavedSearchesSuccess, initializeSavedSearchesAndViewsSuccessReducer)\n .addCase(actions.fetchSavedSearchesFail, fetchFailReducer)\n // save\n .addCase(actions.saveSearchSuccess, saveSearchSuccessReducer)\n .addCase(actions.saveSearchFail, fetchFailReducer)\n // delete search\n .addCase(actions.deleteSearch, fetchReducer)\n .addCase(actions.deleteSearchSuccess, deleteSearchSuccessReducer)\n .addCase(actions.deleteSearchFail, fetchFailReducer)\n // rename search\n .addCase(actions.renameSearch, fetchReducer)\n .addCase(actions.renameSearchSuccess, renameSearchSuccessReducer)\n .addCase(actions.renameSearchFail, fetchFailReducer)\n // view specific actions\n .addCase(actions.makeFiltersDefaultSuccess, makeFiltersDefaultSuccessReducer)\n .addCase(actions.modifyViewSuccess, modifyViewSuccessReducer)\n .addCase(actions.modifyCustomUIViewSuccess, modifyCustomUIViewSuccessReducer)\n // update search\n .addCase(actions.updateSavedSearches, updateSavedSearchesReducer)\n // external\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n .addCase(userInformationActions.updateUserSettingsSuccess, updateUserSettingsSuccessReducer)\n .addCase(\n userInformationActions.updateUserSettingsFromAutoSaveSuccess,\n updateUserSettingsSuccessReducer\n )\n .addCase(\n userInformationActions.updateUserSettingsForSSListSuccess,\n updateUserSettingsSuccessReducer\n )\n .addCase(\n userInformationActions.updateUserSettingsForFavoritesListSuccess,\n updateUserSettingsSuccessReducer\n )\n .addCase(\n userInformationActions.updateUserSettingsForUserListSuccess,\n updateUserSettingsSuccessReducer\n )\n .addCase(\n userInformationActions.updateUserSettingsForSavedContactSearchesSuccess,\n updateUserSettingsSuccessReducer\n )\n .addCase(\n userInformationActions.updateUserSettingsForSuggestedSearchesSuccess,\n updateUserSettingsSuccessReducer\n )\n // pagination\n .addCase(actions.savedCompanySearchPagination, savedCompanySearchPaginationReducer)\n // sort\n .addCase(actions.sortCompanySearchesLists, fetchReducer)\n // combine\n .addCase(combinedSearchActions.combineSearch, fetchReducer)\n .addCase(combinedSearchActions.combineSearchFail, fetchSuccessLoadingReducer)\n // load saved search\n .addCase(searchActions.loadSavedSearch, loadSavedSearchReducer)\n);\n\nexport default reducer;\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const TOGGLE_SEARCH_VIEW = createFeatureActionType(featureName, 'TOGGLE_SEARCH_VIEW');\nexport const CHANGED_COMPANY_CARD = createFeatureActionType(featureName, 'CHANGED_COMPANY_CARD');\nexport const TOGGLE_SEARCH_VIEW_SUCCESS = createFeatureActionType(\n featureName,\n 'TOGGLE_SEARCH_VIEW_SUCCESS'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { SearchViewType } from '@optx/models/user';\nimport * as types from './types';\nimport { GridPayloadMain } from '@optx/models/grid';\n\nexport const toggleSearchView = createAction<GridPayloadMain<SearchViewType>>(\n types.TOGGLE_SEARCH_VIEW\n);\nexport const changedCompanyCard = createAction<GridPayloadMain<boolean>>(\n types.CHANGED_COMPANY_CARD\n);\nexport const toggleSearchViewSuccess = createAction<GridPayloadMain<SearchViewType>>(\n types.TOGGLE_SEARCH_VIEW_SUCCESS\n);\n","import { createSelector } from 'reselect';\nimport { GridKeys } from '@models/grid';\nimport { selectFeatureState } from '../../selectFeature';\n\nexport const searchView = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.viewType[gridKey].searchView);\nexport const isChangedCompanyCard = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.viewType[gridKey].changedCompanyCard);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n// models\nimport { SearchViewType, UserInformation } from '@optx/models/user';\nimport { GridPayloadMain } from '@optx/models/grid';\n// constants\nimport { GRID_KEYS_SEARCH, VIEW_TYPE_INITIAL_STATE } from '@optx/constants/grid';\n// utils\nimport { generateGridReducerInitialState } from '@optx/utils/grid';\n// redux\nimport * as actions from './actions';\nimport { ViewTypeState } from './interface';\nimport { actions as userInformationActions } from '@redux/user/information';\n\nconst initialState: ViewTypeState = generateGridReducerInitialState(\n GRID_KEYS_SEARCH,\n VIEW_TYPE_INITIAL_STATE\n);\n\nexport const toggleSearchViewSuccessReducer: CaseReducer<\n ViewTypeState,\n PayloadAction<GridPayloadMain<SearchViewType>>\n> = (draftState, action) => {\n const { data, gridKey } = action.payload;\n draftState[gridKey].searchView = data;\n};\n\nexport const changedCompanyCardReducer: CaseReducer<\n ViewTypeState,\n PayloadAction<GridPayloadMain<boolean>>\n> = (draftState, action) => {\n const { data, gridKey } = action.payload;\n draftState[gridKey].changedCompanyCard = data;\n};\n\nconst fetchUserInformationSuccessReducer: CaseReducer<\n ViewTypeState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const sessionSettings = action.payload.settings.session_settings;\n\n // advanced search\n if (sessionSettings.search_view_home) {\n const searchView: SearchViewType = sessionSettings.search_view_home\n ? sessionSettings.search_view_home\n : 'table';\n draftState.advancedSearch.searchView = searchView;\n }\n\n // my companies\n if (sessionSettings.search_view_my_companies) {\n const searchView: SearchViewType = sessionSettings.search_view_my_companies\n ? sessionSettings.search_view_my_companies\n : 'table';\n draftState.myCompanies.searchView = searchView;\n }\n\n // watchlist & sslist\n if (sessionSettings.search_view_list) {\n const searchView: SearchViewType = sessionSettings.search_view_list\n ? sessionSettings.search_view_list\n : 'table';\n draftState.lists.searchView = searchView;\n }\n\n // outreach\n if (sessionSettings.sourcing_outreach_view_home) {\n const searchView: SearchViewType = sessionSettings.sourcing_outreach_view_home\n ? sessionSettings.sourcing_outreach_view_home\n : 'table';\n draftState.outreachDetails.searchView = searchView;\n }\n};\n\nconst reducer = createReducer<ViewTypeState>(initialState, builder =>\n builder\n .addCase(actions.toggleSearchViewSuccess, toggleSearchViewSuccessReducer)\n .addCase(actions.changedCompanyCard, changedCompanyCardReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n);\n\nexport default reducer;\n","import { takeLatest, put, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { SearchViewType } from '@optx/models/user';\nimport Company from '@optx/models/Company';\nimport { GridPayloadMain } from '@optx/models/grid';\n// constants\nimport { LONG_CARD_VIEW_DEFAULT_PAGE_SIZE } from '@optx/constants/pagination';\nimport {\n ADVANCED_SEARCH,\n MY_COMPANIES_PENDO,\n SEARCH_VIEW_VALUES,\n MY_COMPANIES_SEARCH_VIEW_VALUES,\n} from '@optx/constants/pendoAction';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\nimport { sendPendoData } from '@optx/utils/utils';\n// redux\nimport { actions as employeGrowthActions } from '@features/company/graphs/employee';\nimport { actions as scoreGrowthActions } from '@features/company/graphs/score';\nimport { actions as fundingRoundsActions } from '@redux/company/funding-rounds';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\nimport { actions as longCardPaginationActions } from '@features/grid/pagination-long-card';\nimport { actions as toggleViewTransitionActions } from '@optx/features/grid/view-transition';\n\nfunction* toggleSearchViewSaga(action: PayloadAction<GridPayloadMain<SearchViewType>>) {\n const { gridKey, data: newView } = action.payload;\n const oldView: SearchViewType = yield select(selectors.searchView(gridKey));\n\n let paginationLongCardActions: any;\n\n if (gridKey === 'advancedSearch') {\n paginationLongCardActions = longCardPaginationActions.changeLongCardPagination({\n gridKey: 'advancedSearch',\n data: { pageNumber: 1, pageSize: LONG_CARD_VIEW_DEFAULT_PAGE_SIZE },\n });\n sendPendoData(`${ADVANCED_SEARCH}_${SEARCH_VIEW_VALUES[newView]}`);\n } else if (gridKey === 'lists') {\n paginationLongCardActions = longCardPaginationActions.changeLongCardPagination({\n gridKey: 'lists',\n data: { pageNumber: 1, pageSize: LONG_CARD_VIEW_DEFAULT_PAGE_SIZE },\n });\n } else if (gridKey === 'myCompanies') {\n paginationLongCardActions = longCardPaginationActions.changeLongCardPagination({\n gridKey: 'myCompanies',\n data: { pageNumber: 1, pageSize: LONG_CARD_VIEW_DEFAULT_PAGE_SIZE },\n });\n sendPendoData(`${MY_COMPANIES_PENDO}_${MY_COMPANIES_SEARCH_VIEW_VALUES[newView]}`);\n } else if (gridKey === 'outreachDetails') {\n paginationLongCardActions = longCardPaginationActions.changeLongCardPagination({\n gridKey: 'outreachDetails',\n data: { pageNumber: 1, pageSize: LONG_CARD_VIEW_DEFAULT_PAGE_SIZE },\n });\n }\n\n const { pageNumber, pageSize } = yield select(paginationSelectors.getPagination(gridKey));\n\n const companies: Company[] = yield select(searchSelectors.getCompanies(gridKey));\n\n try {\n if (newView !== oldView) {\n if (newView === 'table') {\n if (companies.length !== pageSize || pageNumber !== 1) {\n yield put(\n paginationActions.changePagination({\n gridKey,\n data: { pageNumber: 1, pageSize },\n })\n );\n yield put(paginationLongCardActions);\n }\n } else if (companies.length > LONG_CARD_VIEW_DEFAULT_PAGE_SIZE || pageNumber !== 1) {\n yield put(toggleViewTransitionActions.toggleViewTransition(true));\n yield put(paginationLongCardActions);\n\n if (companies.length > 0) {\n yield put(employeGrowthActions.fetchEmployeeGrowth(companies[0].company_id));\n yield put(\n scoreGrowthActions.fetchScoreGrowth({\n company_id: companies[0].company_id,\n company_url: companies[0].company_url,\n })\n );\n yield put(fundingRoundsActions.getCompanyFundingRounds(companies[0].company_id));\n }\n }\n\n yield put(actions.toggleSearchViewSuccess({ gridKey: gridKey, data: newView }));\n\n let newViewKeys: string;\n\n if (gridKey === 'advancedSearch') {\n newViewKeys = 'search_view_home';\n } else if (gridKey === 'lists') {\n newViewKeys = 'search_view_list';\n } else if (gridKey === 'myCompanies') {\n newViewKeys = 'search_view_my_companies';\n } else {\n newViewKeys = 'sourcing_outreach_view_home';\n }\n\n yield put(userInformationActions.updateUserSettings({ [newViewKeys]: newView }));\n }\n } catch (error: any) {\n const defaultError = 'Failed to Save Search View Type';\n getErrorMessage(error, defaultError);\n }\n}\n\nexport default function* SearchViewSaga() {\n yield takeLatest(actions.toggleSearchView, toggleSearchViewSaga);\n}\n","import featureName from '../../featureName';\nimport { CompanyIndividualEditFeatureState } from '../interfaces';\n\nexport const selectFeatureState = (state: any) =>\n state[featureName] as CompanyIndividualEditFeatureState;\n","import { createSelector } from 'reselect';\nimport { IndividualEditFieldType } from '../companyIndividualEdit/interfaces';\nimport * as localSelectors from '../companyIndividualEdit/selectors';\nimport * as companyOwnerSelectors from '../companyOwner/selectors';\n\nimport { selectFeatureState } from './selectFeature';\n\nconst selectCompanyIndividualEditState = createSelector(selectFeatureState, state => {\n return state.companyIndividualEdit;\n});\n\nconst selectCompanyOwnerState = createSelector(selectFeatureState, state => {\n return state.companyOwner;\n});\n\n// slice selectors\nconst isLoadingInfo = createSelector(selectCompanyIndividualEditState, localSelectors.isLoading);\nconst isLoadingCompanyOwnerInfo = createSelector(\n selectCompanyOwnerState,\n companyOwnerSelectors.isLoading\n);\n\nconst error = createSelector(selectCompanyIndividualEditState, localSelectors.getError);\n\nconst isSubmitting = createSelector(selectCompanyIndividualEditState, localSelectors.isSubmitting);\n\nconst getAllOptions = createSelector(selectCompanyIndividualEditState, localSelectors.getData);\n\nconst failedLoadingInfo = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.failedLoadingInfo\n);\n\nconst multipleOptions = (fields: IndividualEditFieldType[]) =>\n createSelector(selectCompanyIndividualEditState, localSelectors.getMultipleOptions(fields));\n\nconst rankOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('rank')\n);\n\nconst companyOwnerOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('deal_team_leader')\n);\n\nconst dealTeamOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('deal_team')\n);\n\nconst leadSourceOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('source')\n);\n\nconst seniorAdvisorOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('senior_advisor_thesis')\n);\n\nconst stageOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('stage')\n);\n\nconst fundOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('fund')\n);\n\nconst shouldInitialFetch = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.shouldInitialFetch\n);\n\nconst sectorOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('sector')\n);\n\nexport const subSectorOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('sub_sector')\n);\n\nconst phoneOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('person_phone_type')\n);\n\nconst opportunityTypeOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getSelectOptionsByField('opportunity_type')\n);\n\nconst yearFoundedOptions = createSelector(\n selectCompanyIndividualEditState,\n localSelectors.getYearFoundedOptions\n);\n\nexport default {\n isLoadingInfo,\n isLoadingCompanyOwnerInfo,\n error,\n isSubmitting,\n failedLoadingInfo,\n multipleOptions,\n rankOptions,\n companyOwnerOptions,\n stageOptions,\n fundOptions,\n shouldInitialFetch,\n getAllOptions,\n sectorOptions,\n subSectorOptions,\n phoneOptions,\n leadSourceOptions,\n seniorAdvisorOptions,\n dealTeamOptions,\n opportunityTypeOptions,\n yearFoundedOptions,\n};\n","import companyIndividualEdit from './companyIndividualEdit';\n\nexport default { companyIndividualEdit };\n","import { combineReducers } from 'redux';\nimport { CompanyIndividualEditFeatureState } from './interfaces';\nimport companyIndividualEditReducer from './companyIndividualEdit';\nimport companyOwnerReducer from './companyOwner';\n\nconst reducer = combineReducers<CompanyIndividualEditFeatureState>({\n companyIndividualEdit: companyIndividualEditReducer,\n companyOwner: companyOwnerReducer,\n});\n\nexport default reducer;\n","import React from 'react';\nimport { Tooltip } from 'antd';\nimport styled from 'styled-components';\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n\nconst DefaultTooltip = styled(Tooltip)`\n display: block;\n`;\n\nexport const TableCellDefaultTooltip = (value: any) => {\n if (!value || value === DEFAULT_CELL_VALUE) {\n return <>{DEFAULT_CELL_VALUE}</>;\n }\n\n return (\n <DefaultTooltip title={value} className=\"text-truncate\">\n {value}\n </DefaultTooltip>\n );\n};\n\nexport default TableCellDefaultTooltip;\n","import React from 'react';\n\nexport const breakLines = (value: string) => {\n return value.split(',').map((item, key) => {\n return (\n <span key={key}>\n {item}\n <br />\n </span>\n );\n });\n};\n","import styled from 'styled-components';\n\nexport const InlineBlockLink = styled.a`\n width: 100%;\n display: flex;\n align-items: center;\n`;\n\nexport const TooltipDefaultLabel = styled.span`\n width: 100%;\n display: block;\n`;\n","import React from 'react';\nimport { Tooltip } from 'antd';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n// utils\nimport { breakLines } from '@utils/breakLines';\n// components\nimport CopyButton from '../../../CopyButton';\nimport { RecommendedContainer } from '@optx/shared/view/atoms/Typography';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n// styles\nimport { InlineBlockLink, TooltipDefaultLabel } from './TableCellLink.styled';\n\nexport const TableCellEmail = (value: any, record: any) => {\n if (!value) {\n return (\n <TruncateTooltip\n title={\n record.recommended_email && (\n <CopyButton\n copyText={record.recommended_email}\n text={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <RecommendedContainer>\n <b>SUGGESTED: </b>\n {record.recommended_email}\n </RecommendedContainer>\n }\n />\n )\n }\n >\n <TooltipDefaultLabel>{DEFAULT_CELL_VALUE}</TooltipDefaultLabel>\n </TruncateTooltip>\n );\n }\n\n return (\n <>\n <Tooltip title={<CopyButton list={breakLines(value)} />}>\n <InlineBlockLink href={`mailto:${value}`} target=\"_blank\" rel=\"noopener noreferrer\">\n <span className=\"text-ellipsis\">{value}</span>\n </InlineBlockLink>\n </Tooltip>\n </>\n );\n};\n\nexport default TableCellEmail;\n","import React from 'react';\nimport { LinkedinOutlined } from '@ant-design/icons';\nimport { convertToURL } from '@optx/utils/url';\nimport { DEFAULT_CELL_VALUE } from '../../../../../constants/table/cells';\n\nexport const TableCellLinkedin = (value: string) => {\n if (!value || value === '-') {\n return <>{DEFAULT_CELL_VALUE}</>;\n }\n\n return (\n <>\n <a href={convertToURL(value)} target=\"_blank\" rel=\"noopener noreferrer\">\n <LinkedinOutlined style={{ fontSize: 22 }} />\n </a>\n </>\n );\n};\n\nexport default TableCellLinkedin;\n","import { roundNumber } from '@optx/utils/number';\nimport { DEFAULT_CELL_VALUE } from '../../../../../constants/table/cells';\n\nconst TableCellFormatNumber = (value: any) =>\n value ? roundNumber(value, '0,0') : DEFAULT_CELL_VALUE;\n\nexport default TableCellFormatNumber;\n","import React from 'react';\nimport Company from '@optx/models/Company';\nimport { Cell } from '../../../../../models/table/Cell';\nimport { formatMoney } from '../../../../../utils/format';\nimport { cellIsEqual } from './memoize';\nimport { DEFAULT_CELL_VALUE } from '../../../../../constants/table/cells';\n\nexport const TableCellMoney: React.FC<Cell<Company>> = ({ value }) => (\n <>{value === DEFAULT_CELL_VALUE ? DEFAULT_CELL_VALUE : formatMoney(value)}</>\n);\n\nexport default React.memo(TableCellMoney, cellIsEqual);\n","import React from 'react';\nimport Company from '@optx/models/Company';\nimport { CellFormat } from '../../../../../models/table/Cell';\nimport { cellIsEqual } from './memoize';\nimport { DEFAULT_CELL_VALUE } from '../../../../../constants/table/cells';\n\nexport const TableCellFormatMoney: React.FC<CellFormat<Company>> = ({ value, formatValue }) => (\n <>{value === DEFAULT_CELL_VALUE ? DEFAULT_CELL_VALUE : formatValue(value)}</>\n);\n\nexport default React.memo(TableCellFormatMoney, cellIsEqual);\n","import React from 'react';\nimport { Tooltip } from 'antd';\n\ninterface TooltipTextProps {\n text: string;\n}\n\nexport const TooltipText: React.FC<TooltipTextProps> = ({ text }) => (\n <Tooltip title={text} className=\"text-truncate\">\n <p style={{ margin: 0 }}>{text}</p>\n </Tooltip>\n);\n\nexport default TooltipText;\n","import React from 'react';\nimport Company from '@optx/models/Company';\nimport { TooltipText } from '../../../tooltip';\nimport { Cell } from '../../../../../models/table/Cell';\nimport { DEFAULT_CELL_VALUE } from '../../../../../constants/table/cells';\nimport { cellIsEqual } from './memoize';\n\nconst TableCellList: React.FC<Cell<Company>> = ({ value }) =>\n value && value.length ? (\n <TooltipText text={value.join().toUpperCase()} />\n ) : (\n <>{DEFAULT_CELL_VALUE}</>\n );\n\nexport default React.memo(TableCellList, cellIsEqual);\n","import React from 'react';\n// models\nimport { Cell } from '@models/table/Cell';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n// components\nimport { cellIsEqual } from './memoize';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\ninterface CustomCell extends Cell<any> {\n shouldBeInUpperCase?: boolean;\n}\n\nconst TableCellListDefault: React.FC<CustomCell> = ({ value, shouldBeInUpperCase }) => {\n if (!value || value === DEFAULT_CELL_VALUE || !Array.isArray(value) || !value.length) {\n return <>{DEFAULT_CELL_VALUE}</>;\n }\n\n let valueFormated = value.join(', ');\n\n if (shouldBeInUpperCase) {\n valueFormated = valueFormated.toUpperCase();\n }\n\n return (\n <TruncateTooltip title={valueFormated} className=\"text-truncate\" placement=\"topLeft\">\n {valueFormated}\n </TruncateTooltip>\n );\n};\n\nexport default React.memo(TableCellListDefault, cellIsEqual);\n","import React from 'react';\nimport moment from 'moment';\nimport { cellIsEqual } from './memoize';\n// models\nimport { Cell } from '@models/table/Cell';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\ninterface CustomCell extends Cell<any> {\n format?: string;\n // if you want to override format pass something in \"defaultValue\" prop\n defaultValue?: string;\n}\n\nconst TableCellDate: React.FC<CustomCell> = ({ value, format, defaultValue }) => {\n const formattedDate = defaultValue || moment(value).format(format);\n\n return (\n <TruncateTooltip title={formattedDate} placement=\"topLeft\">\n <span>{formattedDate}</span>\n </TruncateTooltip>\n );\n};\n\nexport default React.memo(TableCellDate, cellIsEqual);\n","import React from 'react';\nimport Company from '@optx/models/Company';\nimport { formatNumber } from '../../../../../utils/helpers';\nimport { Cell } from '../../../../../models/table/Cell';\nimport { cellIsEqual } from './memoize';\nimport { DEFAULT_CELL_VALUE } from '../../../../../constants/table/cells';\n\nconst TableCellNumber: React.FC<Cell<Company>> = ({ value }) =>\n // @ts-ignore\n value === DEFAULT_CELL_VALUE ? DEFAULT_CELL_VALUE : formatNumber(Number(value));\n\nexport default React.memo(TableCellNumber, cellIsEqual);\n","import React from 'react';\nimport moment from 'moment';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\nimport { NOT_AVAILABLE_VALUE } from '@constants/value';\nimport { PRESENT_DATE_FORMAT, SHORT_MONTH_YEAR_DATE_FORMAT } from '@optx/constants/format/date';\n// utils\nimport { isIsoDateString } from '@utils/string';\nimport { formatDateFromDatePicker } from '@utils/date';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nconst TableCellDateInterval = (value: string, record: any) => {\n const { tenure_end_date: endDate } = record;\n let formattedValue = DEFAULT_CELL_VALUE;\n const trimedDate = value && formatDateFromDatePicker(value);\n\n if (value || endDate) {\n const formattedEndDate = isIsoDateString(endDate)\n ? moment(endDate).format(SHORT_MONTH_YEAR_DATE_FORMAT)\n : endDate || PRESENT_DATE_FORMAT;\n\n const formatedStartDate = isIsoDateString(trimedDate)\n ? moment(trimedDate).format(SHORT_MONTH_YEAR_DATE_FORMAT)\n : NOT_AVAILABLE_VALUE;\n\n formattedValue = `${formatedStartDate} - ${formattedEndDate}`;\n }\n\n if (formattedValue === DEFAULT_CELL_VALUE) {\n return <>{formattedValue}</>;\n }\n\n return <TruncateTooltip title={formattedValue}>{formattedValue}</TruncateTooltip>;\n};\n\nexport default TableCellDateInterval;\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst MatchedText = styled.span`\n font-weight: 500;\n`;\n\nconst TableCellMatch = (value: string) => {\n return value ? <MatchedText>YES</MatchedText> : 'No';\n};\n\nexport default TableCellMatch;\n","import React from 'react';\nimport { Row, Col } from 'antd';\nimport { CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons';\nimport styled from 'styled-components';\n\nconst RowWrapper = styled(Row)`\n .ant-col .anticon svg {\n height: 23px;\n width: 63px;\n }\n`;\n\nconst TableCellStatus = (value: boolean | string) => {\n let isSuccess: boolean;\n\n if (typeof value === 'string') {\n isSuccess = !value;\n } else {\n isSuccess = value;\n }\n\n return (\n <RowWrapper justify=\"space-between\">\n <Col>{isSuccess === true ? 'Success' : 'Fail'}</Col>\n <Col>\n {isSuccess === true ? (\n <CheckCircleFilled style={{ color: '#52c41a' }} />\n ) : (\n <CloseCircleFilled style={{ color: '#f5222d' }} />\n )}\n </Col>\n </RowWrapper>\n );\n};\n\nexport default TableCellStatus;\n","export const TableCellCeoRating = (value: number | null | undefined, defaultValue: string) =>\n value === null || value === undefined ? defaultValue : value;\n\nexport default TableCellCeoRating;\n","import React from 'react';\n// models\nimport { ContactPhone, CompanyUserContact } from '@optx/models/api/contacts';\n//constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nexport const TableCellPhones = (value: ContactPhone[] | null, record: CompanyUserContact) => {\n if (!value?.length) {\n return record.phone ? (\n <TruncateTooltip title={record.phone}>{record.phone}</TruncateTooltip>\n ) : (\n DEFAULT_CELL_VALUE\n );\n }\n\n const handlePhones = () => {\n if (record.phone && value.some(value => value.phone_number !== record.phone)) {\n const listOfPhoneNumbers = value.map(phone => phone.phone_number).concat(record.phone);\n\n return Array.from(new Set(listOfPhoneNumbers)).join(', ');\n }\n\n return value.map(phone => phone.phone_number).join(', ');\n };\n\n return <TruncateTooltip title={handlePhones()}>{handlePhones()}</TruncateTooltip>;\n};\n\nexport default TableCellPhones;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Typography } from 'antd';\n// models\nimport { CompanyTabLists } from '@optx/models/Company';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\nimport { OPTXChromePlugin } from '@optx/constants/pendoActions';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nconst { Text } = Typography;\n\nconst ListURL = styled.a`\n color: #1890ff;\n display: inline !important;\n`;\n\nconst TableCellListURL: React.FC = (value: any, record: CompanyTabLists) => {\n const urlPath = record.list_type === 'Watchlist' ? '/user-lists/' : '/ss-lists/';\n\n return (\n <TruncateTooltip title={value || DEFAULT_CELL_VALUE}>\n {value && record.clickable ? (\n <ListURL\n href={`${urlPath + record.unique_id}?title=${encodeURIComponent(record.title)}`}\n className=\"company-name__profile-link\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => window.pendo.track(OPTXChromePlugin.companyPage.lists_clickCompanyName)}\n >\n {value || DEFAULT_CELL_VALUE}\n </ListURL>\n ) : (\n <Text style={{ fontWeight: 600, cursor: 'default' }}>{value || DEFAULT_CELL_VALUE}</Text>\n )}\n </TruncateTooltip>\n );\n};\n\nexport default TableCellListURL;\n","import React, { useMemo } from 'react';\nimport moment from 'moment';\n// models\nimport { Cell } from '@models/table/Cell';\n// components\nimport { cellIsEqual } from './memoize';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\ninterface CustomCell extends Cell<any> {\n value: string | string[];\n format: string;\n defaultValue?: string;\n}\n\nconst TableCellListDate: React.FC<CustomCell> = ({ value, format, defaultValue }) => {\n if (defaultValue) {\n return <>{defaultValue}</>;\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const normalizedValues = useMemo(() => {\n return (value as string[])\n .reduce((result: string[], date: string) => {\n result.push(moment(date).format(format));\n\n return result;\n }, [])\n .join(', ');\n }, [value, format]);\n\n return (\n <TruncateTooltip title={normalizedValues} placement=\"topLeft\">\n {normalizedValues}\n </TruncateTooltip>\n );\n};\n\nexport default React.memo(TableCellListDate, cellIsEqual);\n","import React, { useRef } from 'react';\nimport { Tooltip } from 'antd';\nimport { TooltipProps } from 'antd/es/tooltip';\nimport styled from 'styled-components';\n// hooks\nimport { useHasOverflow } from '@optx/common/hooks/useHasOverflow';\n\ntype TruncateTooltipProps = TooltipProps & {\n maxWidth?: string;\n maxTooltipWidth?: string;\n};\n\nconst DefaultTooltip = styled(Tooltip)`\n display: inline;\n`;\n\nconst ContentWrapper = styled.div<{ $maxWidth?: string }>`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n ${props => props.$maxWidth && `max-width: ${props.$maxWidth}`};\n`;\n\nconst TruncateTooltip: React.FC<TruncateTooltipProps> = ({\n title,\n className,\n children,\n maxWidth,\n maxTooltipWidth,\n ...rest\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n const hasOverflow = useHasOverflow(ref, title as string);\n\n return (\n <ContentWrapper ref={ref} $maxWidth={maxWidth}>\n {hasOverflow ? (\n <DefaultTooltip\n title={title}\n className={className}\n overlayStyle={{ maxWidth: maxTooltipWidth }}\n {...rest}\n >\n {/* wrapping children with a div can cause problems with overflow detection */}\n {children}\n </DefaultTooltip>\n ) : (\n <>{children}</>\n )}\n </ContentWrapper>\n );\n};\n\nexport default TruncateTooltip;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { debounce } from 'lodash';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n\n/**\n * Utility hook that checks if a text will overflow a given div element by comparing its widths.\n * @param ref reference to the div element.\n * @param elementText text that will have its width compared to the div element.\n * @param callback if present, this function will executed after every overflow check.\n * @returns a boolean indicating whether the text has overflow or not.\n */\nexport const useHasOverflow = (\n ref: React.RefObject<HTMLDivElement>,\n elementText: string,\n callback?: (isOverflow: boolean) => void\n) => {\n const [hasOverflow, setHasOverflow] = useState<boolean>(false);\n\n const checkOverflow = useCallback(() => {\n const { current } = ref;\n\n if (!current) return;\n\n const elementWidth = current.offsetWidth;\n const contentWidth = current.scrollWidth;\n\n if (elementText === DEFAULT_EMPTY_VALUE) {\n setHasOverflow(false);\n if (callback) callback(false);\n } else if (contentWidth && elementWidth) {\n const isContentWider = elementWidth < contentWidth;\n\n setHasOverflow(isContentWider);\n if (callback) callback(isContentWider);\n }\n }, [callback, elementText, ref]);\n\n useEffect(() => {\n checkOverflow();\n\n const currentRef = ref.current;\n const handleResize = debounce(checkOverflow, 100);\n let resizeObserver: ResizeObserver | null = null;\n\n if (currentRef) {\n resizeObserver = new ResizeObserver(handleResize);\n resizeObserver.observe(currentRef);\n }\n\n return () => {\n if (resizeObserver && currentRef) {\n resizeObserver.unobserve(currentRef);\n }\n };\n }, [checkOverflow, ref]);\n\n return hasOverflow;\n};\n","import queryString from 'query-string';\n// models\nimport { GridKeys, GridPayload } from '@optx/models/grid';\nimport { ReferrerUrlParam, RouteAliases } from '@models/routes';\nimport { FilterSearchOriginName } from '@models/filters';\n// constants\nimport { SORT_MAPPING } from '@optx/features/grid/sort/constants';\n// utils\nimport { getRouteAlias } from './routes';\nimport { BASE_OPTX_DEFAULT_VIEW } from '@optx/features/grid/columns/state/constants';\n\n/**\n * Generate initial state for grid reducer based on the provided grid keys and initial state.\n *\n * @param gridKeys An array of grid keys used to generate the initial state.\n * @param initialState The initial state to be used for each grid key.\n * @returns An object representing the initial state for the grid reducer, where each grid key\n * is associated with the provided initial state.\n */\nexport const generateGridReducerInitialState = (gridKeys: GridKeys[], initialState: any) => {\n // workaround to get past typescript error\n // Type '{}' is missing the following properties from type 'PaginationState':\n // advancedSearch, watchlists, myCompanies, addons, outreach\n const gridList = gridKeys.map(key => [key, initialState]);\n\n return Object.fromEntries(gridList);\n};\n\n/**\n * Generates the initial state for grid columns based on the provided grid keys and initial state.\n *\n * This function creates a formatted object where each key from the `gridKeys` array is mapped to the `initialState`.\n * Additionally, it customizes the `checklistResearchInsights` property to include specific sub-properties for `company`\n * and `analyst`, while removing the `isColumnFetched` property from these sub-properties.\n *\n * @param {GridKeys[]} gridKeys - An array of keys representing the grid columns.\n * @param {any} initialState - The initial state to be assigned to each grid column.\n * @returns {object} The formatted initial state object for the grid columns.\n */\nexport const generateGridColumnReducerInitialState = (gridKeys: GridKeys[], initialState: any) => {\n // workaround to get past typescript error\n // Type '{}' is missing the following properties from type 'PaginationState':\n // advancedSearch, watchlists, myCompanies, addons, outreach\n\n const gridList = gridKeys.map(key => [key, initialState]);\n const gridListFormatted = Object.fromEntries(gridList);\n const gridListCustom = {\n ...gridListFormatted,\n checklistResearchInsights: {\n isColumnFetched: initialState.isColumnFetched,\n company: initialState,\n analyst: initialState,\n },\n defaultOptxView: BASE_OPTX_DEFAULT_VIEW,\n };\n\n delete gridListCustom.checklistResearchInsights.company.isColumnFetched;\n delete gridListCustom.checklistResearchInsights.analyst.isColumnFetched;\n\n return gridListCustom;\n};\n\n/**\n * Generates the initial state for sorting in the grid. *\n * @returns {Object} The initial state for sorting in the grid.\n */\nexport const generateSortInitialState = () => {\n const gridList = SORT_MAPPING.map(\n ({ gridKey, defaultSort, hasMultiSort, isSimilarCompaniesSort }) => [\n gridKey,\n {\n sortBy: defaultSort,\n ...(hasMultiSort && { multiSort: false }),\n loading: false,\n isSimilarCompaniesSort,\n },\n ]\n );\n\n return Object.fromEntries(gridList);\n};\n\n/**\n * Checks if the given payload is a GridPayload.\n * @template T The type of the payload data.\n * @param payload The payload to check.\n * @returns True if the payload is a GridPayload, false otherwise.\n */\nexport const isGridPayload = <T>(payload: any): payload is GridPayload<T> => {\n return payload.gridKey !== undefined;\n};\n\n/**\n * getLocationGridKey\n * @description Returns the grid key based on the route alias\n * @param {RouteAliases} [alias] - The route alias. If empty, function checks for window's location instead\n * @returns {GridKeys | ''} The grid key or an empty string\n */\nexport const getLocationGridKey = (alias?: RouteAliases | null) => {\n const routeAlias = alias ? alias : getRouteAlias();\n\n let gridKey: GridKeys | '';\n\n switch (routeAlias) {\n case 'companyOutReach':\n gridKey = 'outreachDetails';\n break;\n\n case 'userLists':\n case 'sourceScrubLists':\n gridKey = 'lists';\n break;\n\n case 'companyAddonManagement':\n gridKey = 'addons';\n break;\n\n case 'advancedSearch':\n case 'myCompanies':\n case 'contacts':\n gridKey = routeAlias;\n break;\n\n default:\n gridKey = '';\n break;\n }\n\n return gridKey;\n};\n\n/**\n * getLocationMainGridKey\n * @description Returns the main grid key based on the route alias\n * @param {RouteAliases} [alias] - The route alias. If empty, function checks for window's location instead\n * @returns {GridKeys | ''} The grid key or an empty string\n */\nexport const getLocationMainGridKey = (\n alias?: RouteAliases | null,\n companyId?: number | number[]\n) => {\n const routeAlias = alias ? alias : getRouteAlias(companyId);\n\n let gridKeyMain: GridKeys | '';\n\n switch (routeAlias) {\n case 'sourceScrubLists':\n case 'userLists':\n case 'watchList':\n gridKeyMain = 'lists';\n break;\n\n case 'advancedSearch':\n case 'myCompanies':\n gridKeyMain = routeAlias;\n break;\n\n case 'companyOutReach':\n gridKeyMain = 'outreachDetails';\n break;\n\n case 'companyAddonManagement':\n case 'companyProfile':\n gridKeyMain = 'addons';\n break;\n\n default:\n gridKeyMain = '';\n break;\n }\n\n return gridKeyMain;\n};\n\n/**\n * getSearchOriginKeyFromGridKey\n * Returns the search origin key from the given grid key\n * @param {GridKeys} gridKey - The grid key to get the search origin key from\n * @returns {FilterSearchOriginName} - The search origin key\n */\nexport const getSearchOriginKeyFromGridKey = (gridKey: GridKeys | 'sslists' | 'watchlists') => {\n let searchOriginKey: FilterSearchOriginName = 'advanced_search';\n\n switch (gridKey) {\n case 'advancedSearch':\n searchOriginKey = 'advanced_search';\n break;\n\n case 'sslists':\n searchOriginKey = 'source_scrub_list';\n break;\n\n case 'watchlists':\n searchOriginKey = 'my_watchlist';\n break;\n\n case 'myCompanies':\n case 'outreachDetails':\n searchOriginKey = 'my_companies';\n break;\n\n default:\n break;\n }\n\n return searchOriginKey;\n};\n\n/**\n * Retrieves the grid key from the referral URL parameter.\n * @returns The grid key based on the referral URL parameter.\n */\nexport const getGridKeyFromReferral = () => {\n let gridKey: GridKeys | null = null;\n\n const searchParams: ReferrerUrlParam = queryString.parse(window.location.search);\n\n switch (searchParams.referrer) {\n case '/':\n case '/search':\n gridKey = 'advancedSearch';\n break;\n\n case '/ss-lists':\n case '/user-lists':\n gridKey = 'lists';\n break;\n\n case '/my-companies':\n gridKey = 'myCompanies';\n break;\n\n default:\n gridKey = getLocationGridKey() as GridKeys;\n }\n\n return gridKey;\n};\n\n/**\n * Maps a given grid key to its corresponding grid name.\n *\n * This function takes a grid key of type `GridKeys` and returns a string\n * representing the name associated with that grid key.\n *\n * @param {GridKeys} gridKey - The key representing a specific grid.\n * @returns {string} The name associated with the provided grid key.\n */\nexport const mapGridKeyToName = (gridKey: GridKeys): string => {\n let gridName = 'Advanced Search';\n\n switch (gridKey) {\n case 'advancedSearch':\n gridName = 'Advanced Search';\n break;\n\n case 'myCompanies':\n gridName = 'My Companies';\n break;\n\n case 'addons':\n gridName = 'Add-ons';\n break;\n\n case 'outreachDetails':\n gridName = 'Outreach Details';\n break;\n\n default:\n break;\n }\n\n return gridName;\n};\n","export const OPTX_SCORE_RATIONALE_KEY = 'optx_score_rationales';\nexport const OPTX_SCORE_LOWER_RATIONALE_KEY = 'optx_score_lower_rationales';\nexport const OPTX_SCORE_UPPER_RATIONALE_KEY = 'optx_score_upper_rationales';\nexport const NEW_OPTX_SCORE_RATIONALE_KEY = 'optx_score_v3_rationales';\nexport const NEW_OPTX_SCORE_LOWER_RATIONALE_KEY = 'optx_score_v3_lower_rationales';\nexport const NEW_OPTX_SCORE_UPPER_RATIONALE_KEY = 'optx_score_v3_upper_rationales';\n\nexport const SOFTWARE_RATIONALE_KEY = 'is_software_rationales';\nexport const PSG_FIT_RATIONALE_KEY = 'psg_fit_rationales';\nexport const STAGE_RATIONALE_KEY = 'stage_pass_dead_rationales';\n\nexport const SOFTWARE_CARD_NAME = 'Software';\nexport const FIT_CARD_NAME = 'PSG Fit';\nexport const SCORE_CARD_NAME = 'Score';\nexport const NEW_SCORE_CARD_NAME = 'New Score';\n","import queryString from 'query-string';\nimport { cloneDeep } from 'lodash';\nimport { History } from 'history';\n// models\nimport { RouteAliases } from '@optx/models/routes';\nimport { GridKeys } from '@optx/models/grid';\nimport { RouteRedirectStateProps, RouteRedirectStateField } from '@models/routes';\n// constants\nimport appRoutes, { CompanyProfileTabs } from '@constants/routes';\n// storage\nimport { AdminStorage, AnalystStorage } from '@optx/storage/localStorage';\n\n/**\n * Compute company profile URL.\n * @param {number} companyId company identifier.\n * @param {string} searchParams optional stringified search parameters\n */\nexport const getCompanyProfileURL = (companyId: number, searchParams?: string) =>\n `${appRoutes.profile.replace(':id', companyId.toString())}${\n searchParams ? `?${searchParams}` : ''\n }`;\n\n/**\n * Compute add to equity touch URL\n * @param {number} companyId company identifier\n * @param {string} searchParams optional stringified search parameters\n */\nexport const geEquityTouchURL = (companyId: number, searchParams?: string) =>\n `${appRoutes.addToEquityTouch.replace(':id', companyId.toString())}?${searchParams || ''}`;\n\n/**\n * Compute add to salesloft URL\n * @param {number} companyId company identifier\n * @param {string} searchParams optional stringified search parameters\n */\nexport const getAddToSalesLoftURL = (companyId: number, searchParams?: string) =>\n `${appRoutes.addToSalesloft.replace(':id', companyId.toString())}${\n searchParams ? `?${searchParams}` : ''\n }`;\n\n/**\n * Compute list URL.\n * @param listId list identifier.\n */\nexport const getListURL = (listId: string) => appRoutes.userLists.list.replace(':id', listId);\n\n/**\n * Compute source scrub list URL.\n * @param listId list identifier.\n */\nexport const getSourceScrubListURL = (listId: string) =>\n appRoutes.userLists.sourceScrubLists.replace(':id', listId);\n\n/**\n * get the pathname from a string url that's including the protocol\n * @param {string} url a url\n */\nexport const getOriginPath = (url: string) => {\n return url.replace(window.location.origin, '');\n};\n\n/**\n * Stringify a referrer parameter used in a url\n * @param {string} value the parameter's value\n */\nexport const stringifyReferrerUrlParam = (value: string) =>\n queryString.stringify({ referrer: value });\n\n/**\n * create profile url using referrer param from url, if it exists,\n * or a fallback path sent as a second argument\n * @param {number} companyId company's id\n * @param {string} pathName a fallback path\n */\nexport const profileRedirectPath = (companyId: number, pathName: string, usePathName?: boolean) => {\n const parsedUrl = queryString.parseUrl(window.location.href);\n const {\n query: { referrer },\n } = parsedUrl;\n\n return getCompanyProfileURL(\n Number(companyId),\n stringifyReferrerUrlParam(usePathName ? pathName : (referrer as string) || pathName)\n );\n};\n\n/**\n * get page name based on URL\n * to be added new items as need arises\n */\nexport const getRouteAlias: (companyId?: number | number[]) => RouteAliases | null = companyId => {\n const { pathname, search } = window.location;\n\n if (pathname.includes('user-lists')) {\n return 'userLists';\n }\n\n if (pathname.startsWith(appRoutes.lists.myWatchList)) {\n return 'watchList';\n }\n\n if (pathname.startsWith(appRoutes.scheduledTouches)) {\n return 'touchManagement';\n }\n\n if (pathname.startsWith('/all-reports/sourcing-outreach')) {\n return 'companyOutReach';\n }\n\n if (pathname.startsWith('/all-reports/analysts-leaderboard')) {\n return 'analystsLeaderboard';\n }\n\n if (pathname.endsWith('/all-reports')) {\n return 'allReports';\n }\n\n if (pathname.includes('chrome-extension-new')) {\n return 'chromeExtension';\n }\n\n if (pathname === appRoutes.myCompanies) {\n return 'myCompanies';\n }\n\n const isAnalyst = AnalystStorage.getIsAnalyst();\n const isAdmin = AdminStorage.getIsAdmin();\n const advancedSearchPathname = isAnalyst || isAdmin ? appRoutes.advancedSearch : appRoutes.home;\n\n if (pathname === advancedSearchPathname) {\n return 'advancedSearch';\n }\n\n if (pathname === appRoutes.contacts) {\n return 'contacts';\n }\n\n if (\n search.includes(`tab=${CompanyProfileTabs.ADDON_MGMT}`) &&\n ((typeof companyId === 'number' && companyId && !pathname.includes(companyId.toString())) ||\n (Array.isArray(companyId) && companyId.length > 0))\n ) {\n return 'companyAddonManagement';\n }\n\n if (search.includes(`tab=${CompanyProfileTabs.HISTORY}`)) {\n return 'companyHistory';\n }\n\n if (pathname.includes('profile')) {\n return 'companyProfile';\n }\n\n if (pathname.includes('ss-lists')) {\n return 'sourceScrubLists';\n }\n\n if (pathname.includes('checklist-research-insights')) {\n return 'checklistResearchInsights';\n }\n\n return null;\n};\n\nexport const getRouteAliasFromGridKey: (gridKey: GridKeys) => RouteAliases = gridKey => {\n switch (gridKey) {\n case 'addons':\n return 'companyAddonManagement';\n\n case 'outreachDetails':\n case 'outreach':\n return 'companyOutReach';\n\n case 'lists':\n return 'watchList';\n\n default:\n return gridKey;\n }\n};\n\n/**\n * Retrieves the grid key corresponding to the current route alias.\n *\n * This function maps specific route aliases to their respective grid keys.\n *\n * @returns {string} The grid key corresponding to the current route alias.\n */\nexport const getGridKeyFromRouteAlias = () => {\n const route = getRouteAlias();\n\n switch (route) {\n case 'companyAddonManagement':\n return 'addons';\n\n case 'companyOutReach':\n return 'outreach';\n\n case 'myCompanies':\n return 'myCompanies';\n\n case 'advancedSearch':\n return 'advancedSearch';\n\n case 'userLists':\n return 'lists';\n\n case 'watchList':\n return 'lists';\n\n default:\n return 'advancedSearch';\n }\n};\n\n/**\n * delete specified field from history's state\n */\nexport const resetHistoryState = (\n history: History,\n state: RouteRedirectStateProps | null,\n field: RouteRedirectStateField | null\n) => {\n const { pathname, search } = history.location;\n const url = `${pathname}${search}`;\n const newState = field ? cloneDeep(state) : {};\n\n if (newState) {\n if (field && newState[field]) {\n delete newState[field];\n history.replace(url, newState);\n } else if (!state) {\n history.replace(pathname, newState);\n }\n }\n};\n\n/**\n * Extracts the company ID from the current URL if present.\n *\n * This function parses the current window's URL and attempts to extract\n * the company ID from the path segments. The company ID is expected to\n * follow the 'profile' segment in the URL path.\n *\n * @returns {string | undefined} The company ID if found and valid, otherwise undefined.\n */\nexport const getCompanyIdFromProfileUrl = (): number | undefined => {\n const url = new URL(window.location.href);\n const pathSegments = url.pathname.split('/');\n const profileIndex = pathSegments.indexOf('profile');\n\n if (profileIndex !== -1 && profileIndex + 1 < pathSegments.length) {\n const id = Number(pathSegments[profileIndex + 1]);\n\n if (!isNaN(id)) {\n return id;\n }\n }\n\n return undefined;\n};\n","import { select, put } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// constants\nimport { COLUMN_WIDTH_GRID_NAMES } from '@optx/features/grid/columns/state/constants';\nimport { ResetColumnWidthsPayload } from '@optx/features/grid/columns/state/interfaces';\n// models\nimport {\n ColumnWidth,\n ColumnKeys,\n ColumnWidthUserSettings,\n CompanyColumnDisplay,\n} from '@optx/models/table/Columns';\n// redux\nimport {\n selectors as userInformationSelectors,\n actions as userInformationActions,\n} from '@redux/user/information';\nimport { selectors as columnSelectors } from '@features/grid/columns';\n\nexport function* saveColumnWidthSaga(action: PayloadAction<ColumnWidth>) {\n const { columnId, width, userSetting } = action.payload;\n\n let columnWidths: Dictionary<number> = {};\n\n switch (COLUMN_WIDTH_GRID_NAMES[userSetting]) {\n case 'advancedSearch':\n case 'lists':\n case 'myCompanies':\n case 'outreachDetails':\n case 'pipelineReport':\n columnWidths = yield select(userInformationSelectors.columnWidthsAdvancedSearch);\n break;\n case 'checklistResearchInsights':\n columnWidths = yield select(userInformationSelectors.columnWidthsChecklist);\n break;\n case 'contacts':\n columnWidths = yield select(userInformationSelectors.columnWidthsContacts);\n break;\n case 'addons':\n columnWidths = yield select(userInformationSelectors.columnWidthsAddon);\n break;\n\n default:\n break;\n }\n\n const columnDisplayInitialState: CompanyColumnDisplay<string> | null = yield select(\n columnSelectors.getColumnDisplayInitialStateByColumnId(\n COLUMN_WIDTH_GRID_NAMES[userSetting],\n columnId\n )\n );\n let newColumnWidths = { ...columnWidths };\n\n newColumnWidths = { ...newColumnWidths, ...{ [columnId as ColumnKeys]: width } };\n\n if (\n columnDisplayInitialState &&\n columnDisplayInitialState[columnId as ColumnKeys].width === width\n ) {\n delete newColumnWidths[columnId as ColumnKeys];\n }\n\n yield put(\n userInformationActions.updateUserSettings({\n [userSetting]: newColumnWidths,\n })\n );\n}\n\nexport function* resetColumnWidthsSaga(\n action: PayloadAction<ResetColumnWidthsPayload | ColumnWidthUserSettings>\n) {\n yield put(\n userInformationActions.updateUserSettings({\n //@ts-ignore\n [action.payload.settings || action.payload]: {},\n })\n );\n}\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport { ColumnDisplay, FetchColumn, ColumnsOptionsResponse } from './interfaces';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { RouteAliases } from '@optx/models/routes';\nimport { UserInformation } from '@optx/models/user';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { SearchSave, SearchSaveResponse, View } from '@optx/models/search';\nimport { ColumnKeys } from '@optx/models/table/Columns';\n// constants\nimport {\n GRID_COLUMN_NAMES,\n GRID_STATE_OPTIONS,\n LIST_OF_SAVE_COLUMNS_SORT_GRID,\n SESSIONS_SETTINGS_COLUMNS_KEYS,\n} from './constants';\n// utils\nimport {\n getNewSorting,\n getPinnedColumns,\n getVisibleColumns,\n getPinnedColumnsOrdered,\n} from '@optx/utils/columns';\nimport { checkCurrentGridColumnsConfig } from '../utils/columns';\nimport { getRouteAlias } from '@optx/utils/routes';\nimport { matchView } from '@optx/utils/search';\nimport { removeColumnFromString } from '@utils/columns';\n// redux\nimport {\n fetchColumns,\n saveColumnWidth,\n resetColumnWidths,\n fetchColumnsSuccess,\n saveColumns,\n applyCompanyCollumnSettings,\n} from './actions';\nimport { getView } from '../../view/state/selectors';\nimport { saveColumnWidthSaga, resetColumnWidthsSaga } from '@optx/redux/grid';\nimport { selectors as companyOutreachFiltersSelectors } from '@redux/company-outreach/filters';\nimport {\n selectors as userInformationSelectors,\n actions as userInformationActions,\n} from '@redux/user/information';\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { selectors as sortSelectors, actions as sortActions } from '@features/grid/sort';\nimport {\n selectors as savedSearchSelectors,\n actions as savedSearchesActions,\n} from '@redux/company/saved-searches';\nimport { selectors as suggestedSearchesSelectors } from '@redux/company/suggested-searches';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\nimport { getDefaultViewData } from '@optx/redux/company/filters/selectors';\nimport { getFiltersQuery } from '@optx/redux/company/search/search/sagasReusable';\nimport { selectors as userSelectors } from '@redux/user/information';\n// components\nimport { CompanyColumnType } from '@optx/components/common/table/Companies/columns/virtual-column-config';\nimport { ColumnService } from '@optx/services/api';\nimport { AxiosResponse } from 'axios';\nimport NotificationService from '@optx/services/NotificationService';\n// storage\nimport { PartnerStorage } from '@optx/storage/localStorage';\n\nfunction* fetchColumnsSaga(action: PayloadAction<FetchColumn>) {\n const { gridName } = action.payload;\n const userSessionsSettings: UserInformation | null = yield select(\n userInformationSelectors.getUserSettings\n );\n const defaultViewData: SearchSaveResponse[] = yield select(getDefaultViewData);\n const isPartnerStorage = PartnerStorage.getIsPartner();\n const isPartnerSelector: boolean = yield select(userSelectors.getIsPartner);\n const isPartner = isPartnerStorage || isPartnerSelector;\n\n if (userSessionsSettings) {\n try {\n const res: AxiosResponse<ColumnsOptionsResponse> = yield call(\n ColumnService.getColumnState,\n GRID_STATE_OPTIONS[gridName]\n );\n\n switch (gridName) {\n case 'checklistResearchInsights':\n yield put(\n fetchColumnsSuccess({\n gridName: gridName,\n isChecklistResearchAnalyst: false,\n columnDisplay: res.data.ChecklistInsightsCompanyGrid.grid_initial_state,\n columnOrder: res.data.ChecklistInsightsCompanyGrid.grid_initial_column_order,\n columnSettings: userSessionsSettings,\n })\n );\n yield put(\n fetchColumnsSuccess({\n gridName: gridName,\n isChecklistResearchAnalyst: true,\n columnDisplay: res.data.ChecklistAnalystLeaderboardGrid.grid_initial_state,\n columnOrder: res.data.ChecklistAnalystLeaderboardGrid.grid_initial_column_order,\n columnSettings: userSessionsSettings,\n })\n );\n break;\n\n case 'outreachDetails':\n yield put(\n fetchColumnsSuccess({\n gridName: gridName,\n columnDisplay: res.data[GRID_COLUMN_NAMES[gridName]].grid_initial_state,\n columnOrder: res.data[GRID_COLUMN_NAMES[gridName]].grid_initial_column_order,\n columnDisplayOptxView: res.data['Advanced Search'].grid_initial_state,\n columnOrderOptxView: res.data['Advanced Search'].grid_initial_column_order,\n columnSettings: userSessionsSettings,\n isPartner,\n })\n );\n break;\n\n default:\n yield put(\n fetchColumnsSuccess({\n gridName: gridName,\n columnDisplay: res.data[GRID_COLUMN_NAMES[gridName]].grid_initial_state,\n columnOrder: res.data[GRID_COLUMN_NAMES[gridName]].grid_initial_column_order,\n columnSettings: userSessionsSettings,\n isPartner,\n })\n );\n }\n\n if (gridName === 'advancedSearch') {\n yield put(\n applyCompanyCollumnSettings({\n settings: userSessionsSettings.settings,\n defaultViews: defaultViewData,\n })\n );\n }\n } catch (error) {\n NotificationService.error('Failed to fetch Columns');\n }\n }\n}\n\nfunction* saveColumnSaga(action: PayloadAction<ColumnDisplay>) {\n const { columnDisplay, columnOrder, gridName } = action.payload;\n\n if (SESSIONS_SETTINGS_COLUMNS_KEYS[gridName] && columnDisplay) {\n const filter: Dictionary<PreselectedFilter> = yield select(filterSelectors.getFilter(gridName));\n const companyOutreachFilters: Dictionary<PreselectedFilter> = yield select(\n companyOutreachFiltersSelectors.getFilter\n );\n const sortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting(gridName));\n const searchKey: string = yield select(searchSelectors.getSearchKey(gridName));\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridName));\n const views: SearchSave[] = yield select(savedSearchSelectors.getAllViews);\n const suggestedSearches: SearchSave[] = yield select(\n suggestedSearchesSelectors.getSuggestedSearches\n );\n const currentView: View = yield select(getView(gridName));\n\n const { defaultOptxView } = yield select(savedSearchSelectors.getViews);\n const visibleColumns = getVisibleColumns({\n columnDisplay: columnDisplay,\n columnOrder: columnOrder as ColumnKeys[],\n });\n const orderOfColumns = columnOrder === null ? null : columnOrder.join();\n const pinnedColumns = getPinnedColumnsOrdered({\n columnDisplay,\n columnOrder: columnOrder as ColumnKeys[],\n });\n const pageAlias: RouteAliases | null = getRouteAlias();\n\n const currentSavedSearch = views.find(view => view.unique_id === currentView?.id);\n\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(\n getFiltersQuery,\n gridName === 'outreachDetails' ? companyOutreachFilters : filter\n );\n\n let title = '';\n let view;\n\n const includeCombined =\n filter?.list_id &&\n views.find(\n search => search.unique_id === filter.list_id && search.search_info.type === 'combined'\n );\n\n const filteredSavedSearches = includeCombined\n ? views\n : views.filter(view => view.search_info.type !== 'combined');\n\n const { matchedTitle, matchedView } = matchView(\n {\n filter: filterQuery,\n sortBy,\n searchKey,\n searchType,\n pagination: { pageSize: 50, pageNumber: 1 },\n },\n removeColumnFromString(visibleColumns, 'date_matched'),\n orderOfColumns ? removeColumnFromString(orderOfColumns, 'date_matched') : orderOfColumns,\n pinnedColumns,\n suggestedSearches ? [...suggestedSearches, ...filteredSavedSearches] : filteredSavedSearches,\n defaultOptxView,\n gridName\n );\n title = matchedTitle || '';\n view = matchedView;\n\n if (includeCombined && includeCombined.title !== title) {\n title = '';\n view = undefined;\n }\n\n const hasColumnConfiguration =\n currentSavedSearch?.columns !== null &&\n currentSavedSearch?.column_order !== null &&\n currentSavedSearch?.pinned_columns !== null;\n\n const updatedViewHasColumnsConfiguration =\n view?.columns !== null && view?.column_order !== null && view?.pinned_columns !== null;\n\n if (hasColumnConfiguration || updatedViewHasColumnsConfiguration) {\n yield put(\n savedSearchesActions.applyViewSuccess({\n id: view ? view.unique_id : '',\n label: title,\n pageAlias,\n })\n );\n }\n\n if (title === 'OPTX Default') {\n yield put(searchActions.saveSearchTitle({ gridKey: gridName, data: '' }));\n }\n\n yield put(\n userInformationActions.updateUserSettings({\n [`${SESSIONS_SETTINGS_COLUMNS_KEYS[gridName]?.[0]}`]: visibleColumns,\n [`${SESSIONS_SETTINGS_COLUMNS_KEYS[gridName]?.[1]}`]: columnOrder.join(),\n [`${SESSIONS_SETTINGS_COLUMNS_KEYS[gridName]?.[2]}`]: getPinnedColumns(columnDisplay),\n })\n );\n\n if (LIST_OF_SAVE_COLUMNS_SORT_GRID.includes(gridName)) {\n const newSort = getNewSorting(\n sortBy,\n { columnDisplay, columnOrder: columnOrder as ColumnKeys[] },\n checkCurrentGridColumnsConfig(gridName) as CompanyColumnType[]\n );\n\n if (newSort) {\n yield put(sortActions.changeSort({ gridKey: gridName, data: [newSort] }));\n }\n }\n }\n}\n\nexport default function* ColumnsSaga() {\n yield takeLatest(fetchColumns, fetchColumnsSaga);\n yield takeLatest(saveColumns, saveColumnSaga);\n yield takeLatest(saveColumnWidth, saveColumnWidthSaga);\n yield takeLatest(resetColumnWidths, resetColumnWidthsSaga);\n}\n","import { CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport {\n ColumnDisplay,\n ColumnKeys,\n CompanyColumnDisplay,\n ColumnWidth,\n} from '@optx/models/table/Columns';\nimport { getPinnedColumns, getNewColumnDisplay } from '@optx/utils/columns';\nimport { ColumnFeatureState } from '@optx/features/grid/columns/state/interfaces';\n\nexport const updateColumnReducer = (\n draftState: ColumnDisplay | ColumnFeatureState,\n columnVisibility: string | null | undefined,\n columnOrder: string | null | undefined,\n pinnedColumns: string | null | undefined,\n updateVisibility: boolean,\n updatePins: boolean\n) => {\n // if both column visibility and pins are saved we just need to update\n // the columnDisplay object with the appropriate values for each column\n // and just save the column order as is\n if (updateVisibility && updatePins && draftState.columnDisplay) {\n draftState.columnDisplay = getNewColumnDisplay(\n draftState.columnDisplay,\n columnVisibility as string,\n pinnedColumns as string\n );\n\n if (columnOrder) {\n draftState.columnOrder = columnOrder?.split(',') as ColumnKeys[];\n }\n // if we only have column visibility saved, we need to update the visibility property\n // but keep in mind that pinned columns should always be on top\n } else if (updateVisibility && !updatePins && draftState.columnDisplay) {\n const newColumnDisplay = getNewColumnDisplay(\n draftState.columnDisplay,\n columnVisibility as string\n );\n\n const pinnedColumnsList = getPinnedColumns(newColumnDisplay).split(',');\n const newColumnOrder = columnOrder?.split(',');\n\n draftState.columnDisplay = newColumnDisplay;\n\n // the column order can influence the position of existing pinned columns and move them\n // so that they are not first in the list anymore, because of this\n // we need to update the column order to move the pinned columns to the top\n if (newColumnOrder) {\n draftState.columnOrder = pinnedColumnsList.concat(\n newColumnOrder.filter(columnId => !newColumnDisplay[columnId as ColumnKeys].pinned)\n ) as ColumnKeys[];\n }\n\n // if we only have pinned columns saved, we need to update the pinned property of each column\n // and mark them as visible. also we need to update the column order and move them to the top\n } else if (!updateVisibility && updatePins && draftState.columnDisplay) {\n const newColumnDisplay: CompanyColumnDisplay | {} = {};\n\n Object.keys(draftState.columnDisplay).forEach(columnId => {\n // @ts-ignore\n newColumnDisplay[columnId as ColumnKeys] = {\n ...draftState.columnDisplay![columnId as ColumnKeys],\n // update pinned property for each column and only update visible\n // property to true for pinned columns\n ...(pinnedColumns?.includes(columnId) && { visible: true }),\n pinned: pinnedColumns?.includes(columnId) || false,\n };\n });\n\n draftState.columnDisplay = newColumnDisplay as CompanyColumnDisplay;\n\n if (pinnedColumns?.length) {\n const pinnedColumnsList = getPinnedColumns(newColumnDisplay as CompanyColumnDisplay).split(\n ','\n );\n\n draftState.columnOrder = pinnedColumnsList.concat(\n (draftState.columnOrder as ColumnKeys[]).filter(\n columnId => !draftState.columnDisplay?.[columnId].pinned\n )\n ) as ColumnKeys[];\n }\n // special case for dragging column header only\n } else if (!columnVisibility && !pinnedColumns && columnOrder) {\n draftState.columnOrder = columnOrder.split(',') as ColumnKeys[];\n }\n};\n\nexport const saveColumnWidthReducer: CaseReducer<ColumnDisplay, PayloadAction<ColumnWidth>> = (\n draftState,\n action\n) => {\n const { columnId, width } = action.payload;\n\n if (columnId && draftState.columnDisplay[columnId]) {\n draftState.columnDisplay[columnId].width = width;\n }\n};\n","import { each } from 'lodash';\n// models\nimport { CompanyColumnDisplay } from '@optx/models/table/Columns';\n\n/**\n * return a string list of default columns\n * @param columns columns object\n */\nexport const getDefaultVisibleColumns = (columns: CompanyColumnDisplay) => {\n const visibleColumns: string[] = [];\n\n each(columns, (value, key) => {\n if (value.visible) {\n visibleColumns.push(key);\n }\n });\n\n return visibleColumns.join(',');\n};\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// interfaces\nimport { UserSessionSettings, UserSettings } from '@optx/models/user';\nimport { CompanyFiltersMeta, SearchSaveResponse } from '@optx/models/search';\nimport {\n ColumnDisplay,\n ColumnDisplayPayload,\n ColumnFeatureState,\n ColumnState,\n ColumnUpdate,\n DateMatchedActions,\n ResetColumnWidthsPayload,\n} from './interfaces';\nimport { ColumnWidth } from '@optx/models/table/Columns';\n// constants\nimport { COLUMNS_INITIAL_STATE, GRID_KEYS_COLUMNS } from '@optx/constants/grid';\nimport { customUIViews } from '@optx/constants/table/columnDisplay/company-search';\nimport {\n BASE_OPTX_DEFAULT_VIEW_GRID_KEYS,\n COLUMN_WIDTH_GRID_NAMES,\n SESSIONS_SETTINGS_COLUMNS_KEYS,\n SESSIONS_SETTINGS_COLUMNS_WIDTH_KEYS,\n} from './constants';\n// utils\nimport { generateGridColumnReducerInitialState } from '@optx/utils/grid';\n// redux\nimport {\n saveColumns,\n fetchColumnsSuccess,\n saveColumnWidth,\n updateColumn,\n resetColumnWidths,\n addRemoveDateMatched,\n applyCompanyCollumnSettings,\n} from './actions';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches';\nimport { reducers as columnReducers } from '@optx/features/columns/update-columns';\nimport { gridUpdateColumnWidthsReducer } from '@optx/redux/grid';\nimport { getDefaultVisibleColumns } from '@optx/utils/columnsDefaultVisible';\n\nconst initialState: ColumnState = generateGridColumnReducerInitialState(\n GRID_KEYS_COLUMNS,\n COLUMNS_INITIAL_STATE\n);\n\nconst fetchColumnsSuccessReducer: CaseReducer<ColumnState, PayloadAction<ColumnDisplayPayload>> = (\n draftState,\n action\n) => {\n const {\n columnDisplay,\n columnOrder,\n gridName,\n columnSettings,\n isChecklistResearchAnalyst,\n isPartner,\n columnDisplayOptxView,\n columnOrderOptxView,\n } = action.payload;\n\n const isAnalyst = isChecklistResearchAnalyst ? 'analyst' : 'company';\n\n const columnState =\n gridName !== 'checklistResearchInsights'\n ? draftState[gridName]\n : (draftState.checklistResearchInsights[isAnalyst] as ColumnFeatureState);\n\n columnState.columnDisplay = columnDisplay;\n columnState.columnOrder = columnOrder;\n columnState.columnDisplayInitialState = columnDisplay;\n columnState.columnOrderInitialState = columnOrder;\n\n if (gridName === 'outreachDetails') {\n columnReducers.updateColumnReducer(\n draftState.outreachDetails,\n customUIViews.sourcingOrder.columns,\n customUIViews.sourcingOrder.column_order,\n customUIViews.sourcingOrder.pinned_columns,\n typeof customUIViews.sourcingOrder.columns === 'string',\n typeof customUIViews.sourcingOrder.pinned_columns === 'string'\n );\n }\n\n if (SESSIONS_SETTINGS_COLUMNS_KEYS[gridName]) {\n const columns = columnSettings.settings.session_settings\n ? (columnSettings.settings.session_settings[\n SESSIONS_SETTINGS_COLUMNS_KEYS[\n gridName\n ]?.[0] as string as unknown as keyof UserSessionSettings\n ] as string | undefined)\n : undefined;\n\n const columnOrder = columnSettings.settings.session_settings\n ? (columnSettings.settings.session_settings[\n SESSIONS_SETTINGS_COLUMNS_KEYS[\n gridName\n ]?.[1] as string as unknown as keyof UserSessionSettings\n ] as string | undefined)\n : undefined;\n\n const pinnedColumns = columnSettings.settings.session_settings\n ? (columnSettings.settings.session_settings[\n SESSIONS_SETTINGS_COLUMNS_KEYS[\n gridName\n ]?.[2] as string as unknown as keyof UserSessionSettings\n ] as string | undefined)\n : undefined;\n\n columnReducers.updateColumnReducer(\n columnState,\n columns,\n columnOrder,\n pinnedColumns,\n typeof columns === 'string',\n typeof pinnedColumns === 'string'\n );\n }\n\n // removing \"Last Viewed\" column for Partners\n if (isPartner && columnState.columnDisplay) {\n delete columnState.columnDisplay.last_viewed;\n\n if (columnState.columnDisplayInitialState?.last_viewed) {\n delete columnState.columnDisplayInitialState.last_viewed;\n }\n\n columnState.columnOrderInitialState = columnState.columnOrder.filter(item => {\n return item !== 'last_viewed';\n });\n\n columnState.columnOrder = columnState.columnOrder.filter(item => {\n return item !== 'last_viewed';\n });\n }\n\n const optxDefaultView = draftState.defaultOptxView;\n\n if (\n BASE_OPTX_DEFAULT_VIEW_GRID_KEYS.includes(gridName) &&\n gridName !== 'checklistResearchInsights'\n ) {\n const updatedDefaultOptxView = {\n ...optxDefaultView,\n columns: getDefaultVisibleColumns(draftState[gridName].columnDisplayInitialState as any),\n column_order: draftState[gridName].columnOrderInitialState.join(),\n };\n\n draftState.defaultOptxView = updatedDefaultOptxView;\n }\n\n if (gridName === 'outreachDetails' && columnDisplayOptxView && columnOrderOptxView) {\n const updatedDefaultOptxView = {\n ...optxDefaultView,\n columns: getDefaultVisibleColumns(columnDisplayOptxView),\n column_order: columnOrderOptxView.join(),\n };\n draftState.defaultOptxView = updatedDefaultOptxView;\n }\n\n if (\n columnSettings?.settings[SESSIONS_SETTINGS_COLUMNS_WIDTH_KEYS[gridName] as keyof UserSettings]\n ) {\n gridUpdateColumnWidthsReducer(\n columnState,\n columnSettings.settings[\n SESSIONS_SETTINGS_COLUMNS_WIDTH_KEYS[gridName] as keyof UserSettings\n ] as Dictionary<number>\n );\n }\n\n draftState[gridName].isColumnFetched = true;\n};\n\nconst saveColumnsReducer: CaseReducer<ColumnState, PayloadAction<ColumnDisplay>> = (\n draftState,\n action\n) => {\n const { columnDisplay, columnOrder, gridName, isChecklistResearchAnalyst } = action.payload;\n\n const columnType = isChecklistResearchAnalyst ? 'analyst' : 'company';\n\n if (gridName !== 'checklistResearchInsights') {\n draftState[gridName].columnDisplay = columnDisplay;\n draftState[gridName].columnOrder = columnOrder;\n }\n\n if (columnType) {\n draftState.checklistResearchInsights[columnType].columnDisplay = columnDisplay;\n draftState.checklistResearchInsights[columnType].columnOrder = columnOrder;\n }\n};\n\nconst saveColumnWidthReducer: CaseReducer<ColumnState, PayloadAction<ColumnWidth<string>>> = (\n draftState,\n action\n) => {\n const { columnId, width, userSetting } = action.payload;\n\n if (userSetting === 'column_widths_key_check_list') {\n const columnState =\n draftState.checklistResearchInsights.analyst.columnDisplay?.[columnId] ||\n draftState.checklistResearchInsights.company.columnDisplay?.[columnId];\n\n if (columnId && columnState) {\n columnState.width = width;\n }\n }\n\n const columnState = (draftState[COLUMN_WIDTH_GRID_NAMES[userSetting]] as ColumnFeatureState)\n .columnDisplay;\n\n if (columnId && columnState) {\n columnState[columnId].width = width;\n }\n};\n\nconst applyCompanyCollumnSettingsReducer: CaseReducer<\n ColumnState,\n PayloadAction<Omit<CompanyFiltersMeta, 'searchOrigin' | 'isAnalystOrIsAdmin'>>\n> = (draftState, action) => {\n const settings = action.payload.settings;\n const customUIViewId = action.payload.settings?.default_view ?? '';\n\n let columns = null;\n let columnOrder = null;\n let pinnedColumns = null;\n\n if (customUIViewId) {\n columns = customUIViews[customUIViewId].columns;\n columnOrder = customUIViews[customUIViewId].column_order;\n pinnedColumns = customUIViews[customUIViewId].pinned_columns;\n } else if (action.payload.defaultViews.length) {\n columns = action.payload.defaultViews[0].columns;\n columnOrder = action.payload.defaultViews[0].column_order;\n pinnedColumns = action.payload.defaultViews[0].pinned_columns;\n }\n\n if (columns !== null || columnOrder !== null || pinnedColumns !== null) {\n columnReducers.updateColumnReducer(\n draftState.advancedSearch,\n columns,\n columnOrder,\n pinnedColumns,\n columns !== null && typeof settings?.session_settings.company_display_columns !== 'string',\n pinnedColumns !== null &&\n typeof settings?.session_settings.company_pinned_columns !== 'string'\n );\n }\n};\n\nconst updateColumnReducer: CaseReducer<ColumnState, PayloadAction<ColumnUpdate>> = (\n draftState,\n action\n) => {\n const { columnOrder, columns, gridName, pinnedColumns, checklistResearchColumnType } =\n action.payload;\n\n if (gridName === 'checklistResearchInsights' && checklistResearchColumnType) {\n const columnState = draftState.checklistResearchInsights[\n checklistResearchColumnType\n ] as ColumnFeatureState;\n columnReducers.updateColumnReducer(\n columnState,\n columns,\n columnOrder,\n pinnedColumns,\n columns !== null,\n pinnedColumns !== null\n );\n } else {\n const columnState = draftState[gridName] as ColumnFeatureState;\n const hasTransactionsColumn = columnOrder?.includes('transaction_notes');\n let customColumnOrder = columnOrder;\n\n if (!hasTransactionsColumn && columnOrder) {\n const columnOrderList = columnOrder.split(',');\n const nextStepsIndex = columnOrderList.indexOf('next_steps');\n\n if (nextStepsIndex !== -1) {\n columnOrderList.splice(nextStepsIndex + 1, 0, 'transaction_notes');\n customColumnOrder = columnOrderList.toString();\n }\n }\n\n columnReducers.updateColumnReducer(\n columnState,\n columns,\n customColumnOrder,\n pinnedColumns,\n columns !== null,\n pinnedColumns !== null\n );\n }\n};\n\nconst resetColumnWidthsReducer: CaseReducer<\n ColumnState,\n PayloadAction<ResetColumnWidthsPayload>\n> = (draftState, action) => {\n const columnState = draftState[\n COLUMN_WIDTH_GRID_NAMES[action.payload.settings]\n ] as ColumnFeatureState;\n\n const { checklistResearchColumnType } = action.payload;\n\n if (COLUMN_WIDTH_GRID_NAMES[action.payload.settings] !== 'checklistResearchInsights') {\n columnState.columnOrder.forEach(columnId => {\n columnState.columnDisplay![columnId].width = columnState.columnDisplayInitialState?.[columnId]\n .width as number;\n });\n }\n\n draftState.checklistResearchInsights[checklistResearchColumnType!]?.columnOrder.forEach(\n columnId => {\n if (\n draftState.checklistResearchInsights[checklistResearchColumnType!]\n .columnDisplayInitialState![columnId]\n ) {\n draftState.checklistResearchInsights[checklistResearchColumnType!].columnDisplay![\n columnId\n ].width = draftState.checklistResearchInsights[checklistResearchColumnType!]\n .columnDisplayInitialState![columnId].width as number;\n }\n }\n );\n};\n\nconst initializeSavedSearchesAndViewsSuccessReducer: CaseReducer<\n ColumnState,\n PayloadAction<Array<SearchSaveResponse> | Dictionary<SearchSaveResponse>, any>\n> = (draftState, action) => {\n const allSavedSearches = action.payload as Array<SearchSaveResponse>;\n\n const query = window.location.search ? window.location.search.replace('?', '') : undefined;\n const listId = query?.split('=')[1];\n const list = query?.split('=')[0] === 'saved_search_id';\n\n if (list) {\n const savedSearch = allSavedSearches.find(search => search.unique_id.toString() === listId);\n\n if (savedSearch) {\n const columns = savedSearch.columns;\n const columnOrder = savedSearch.column_order;\n const pinnedColumns = savedSearch.pinned_columns;\n\n columnReducers.updateColumnReducer(\n draftState.advancedSearch,\n columns,\n columnOrder,\n pinnedColumns,\n typeof columns === 'string',\n typeof pinnedColumns === 'string'\n );\n }\n }\n};\n\nconst addRemoveDateMatchedReducer: CaseReducer<ColumnState, PayloadAction<DateMatchedActions>> = (\n draftState,\n action\n) => {\n const innerAction = action.payload;\n\n let index = draftState.advancedSearch.columnOrder.indexOf('date_matched');\n\n if (\n (index !== -1 && innerAction === 'remove_column') ||\n (index !== -1 && index !== 0 && innerAction === 'add_as_first_column') ||\n (index === 1 && innerAction === 'add_column')\n ) {\n draftState.advancedSearch.columnOrder.splice(index, 1);\n index = -1;\n }\n\n if (\n innerAction === 'add_as_first_column' &&\n draftState.advancedSearch.columnDisplay &&\n index === -1\n ) {\n draftState.advancedSearch.columnOrder.splice(1, 0, 'date_matched');\n draftState.advancedSearch.columnDisplay.date_matched.visible = true;\n draftState.advancedSearch.columnDisplay.date_matched.pinned = true;\n } else if (\n innerAction === 'add_column' &&\n draftState.advancedSearch.columnDisplay &&\n index === -1\n ) {\n const pinnedArr = draftState.advancedSearch.columnOrder.map(col => {\n return draftState.advancedSearch.columnDisplay![col].pinned ? 'pinned' : 'not-pinned';\n });\n\n const firstNotPinned = pinnedArr.indexOf('not-pinned');\n draftState.advancedSearch.columnOrder.splice(firstNotPinned, 0, 'date_matched');\n draftState.advancedSearch.columnDisplay.date_matched.visible = false;\n draftState.advancedSearch.columnDisplay.date_matched.pinned = false;\n } else if (innerAction === 'remove_column' && draftState.advancedSearch.columnDisplay) {\n draftState.advancedSearch.columnDisplay.date_matched.visible = false;\n draftState.advancedSearch.columnDisplay.date_matched.pinned = false;\n }\n};\n\nconst reducer = createReducer<ColumnState>(initialState, builder =>\n builder\n .addCase(saveColumns, saveColumnsReducer)\n .addCase(fetchColumnsSuccess, fetchColumnsSuccessReducer)\n .addCase(saveColumnWidth, saveColumnWidthReducer)\n .addCase(applyCompanyCollumnSettings, applyCompanyCollumnSettingsReducer)\n .addCase(\n savedSearchesActions.initializeSavedSearchesAndViewsSuccess,\n initializeSavedSearchesAndViewsSuccessReducer\n )\n .addCase(addRemoveDateMatched, addRemoveDateMatchedReducer)\n .addCase(resetColumnWidths, resetColumnWidthsReducer)\n .addCase(updateColumn, updateColumnReducer)\n);\n\nexport default reducer;\n","import { Dictionary, cloneDeep } from 'lodash';\n// models\nimport { ColumnKeys } from '@optx/models/table/Columns';\nimport { ColumnFeatureState } from '@optx/features/grid/columns/state/interfaces';\n\nexport const gridUpdateColumnWidthsReducer = (\n draftState: ColumnFeatureState,\n columnWidths: Dictionary<number>\n) => {\n const { columnDisplay, columnOrder, columnDisplayInitialState } = draftState;\n\n // in case api doesn't return any changes for column widths, whether because they were\n // reset or never changed, check column widths and restore them to default size if necessary\n if (!Object.keys(columnWidths).length) {\n const newColumns = { ...draftState.columnDisplay };\n\n columnOrder.forEach(columnId => {\n if (columnDisplay![columnId].width !== columnDisplayInitialState![columnId].width) {\n newColumns[columnId as ColumnKeys].width = columnDisplayInitialState![columnId].width;\n }\n });\n\n draftState.columnDisplay = newColumns;\n } else if (columnDisplayInitialState) {\n const newColumns = { ...draftState.columnDisplay };\n const mutableColumns = cloneDeep(newColumns);\n\n columnOrder.forEach(columnId => {\n if (columnWidths[columnId]) {\n mutableColumns[columnId as ColumnKeys].width = columnWidths[columnId];\n } else {\n mutableColumns[columnId as ColumnKeys].width = columnDisplayInitialState[columnId].width;\n }\n });\n\n draftState.columnDisplay = mutableColumns;\n }\n};\n","import { select, call, put, cancel, cancelled, fork, take } from 'redux-saga/effects';\nimport { Dictionary } from 'lodash';\nimport { AxiosResponse } from 'axios';\nimport queryString from 'query-string';\n// models\nimport { PreselectedFilter, FilterSource } from '@models/filters';\nimport { ColumnKeys } from '@models/table/Columns';\nimport Company from '@models/Company';\nimport { SelectOption } from '@optx/models/Option';\nimport { SearchPayloadRequest, CustomSearchPayloadRequest } from '@models/api/contacts';\nimport { UpdateUserSettingsPayload } from '@models/api/user';\nimport { SearchSave, SearchStateData, View } from '@models/search';\nimport { DefaultViews } from '@redux/company/filters/interfaces';\nimport { UserSessionSettings, UserInformation } from '@models/user';\nimport { SuccessErrorCallback } from '@models/callback';\nimport { GridKeys, GetGridSearchData } from '@models/grid';\nimport { AddonManagementPayload } from '@redux/company/addon-management/interfaces';\nimport { SelectedCompanies, SelectedCompaniesGrids } from '@optx/models/bulkActions';\n// constants\nimport { COMPANY_DEFAULT_SORT } from '@constants/table/sort/defaultSort';\nimport { searchTypeKey, searchTypeOptions } from '@features/grid/search-type/state/constants';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { SearchService, AnalystService, CompanyService, UserService } from '@services/api';\n// utils\nimport {\n matchSavedSearches,\n matchView,\n isCustomUIView,\n mapSearchCounterQuery,\n mapSortQuery,\n getSearchTypeInfo,\n} from '@utils/search';\nimport { getRouteAliasFromGridKey } from '@utils/routes';\nimport { sortSimilarCompanies } from '@optx/utils/utils';\nimport { parseFilter } from '@utils/filters/parseFilters';\nimport { getSearchOriginKeyFromGridKey } from '@utils/grid';\n// redux\nimport * as actions from './actions';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport { actions as searchKeyActions } from '@features/grid/searchkey';\nimport { actions as searchCountActions } from '@features/grid/search-count';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { getFiltersQuery } from '@redux/company/search/search/sagasReusable';\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { selectors as viewSelectors } from '@features/grid/view';\nimport { selectors as listsSelectors } from '@redux/lists/details';\nimport {\n selectors as userInformationSelectors,\n actions as userInformationActions,\n} from '@redux/user/information';\nimport { selectors as suggestedSearchesSelectors } from '@redux/company/suggested-searches';\nimport {\n actions as savedSearchesActions,\n selectors as savedSearchesSelectors,\n} from '@redux/company/saved-searches';\nimport { selectors as listsDetailsSelectors } from '@redux/lists/details';\nimport { userInfoUpdateSaga, getGridSearchDataSaga } from '@features/grid/state/sagasReusable';\nimport { selectors as columnSelectors, actions as columnActions } from '@features/grid/columns';\nimport { selectors as myCompaniesFilterCardsSelectors } from '@optx/redux/my-companies/filters-cards';\nimport {\n actions as paginationActions,\n selectors as paginationSelectors,\n} from '@features/grid/pagination';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { selectors as companyOutReachFiltersSelectors } from '@redux/company-outreach/filters';\nimport { actions as selectedCompaniesActions } from '@features/bulk-actions/selected-companies';\n\n/**\n * Update company filters for current session.\n * @param payload search payload containing filters.\n * @param gridKey the grid key\n * @param optionalSettings other optional user setting to be saved.\n */\nexport function* updateFilterSettings(\n payload: SearchPayloadRequest,\n gridKey: GridKeys,\n optionalSettings: Partial<UpdateUserSettingsPayload> = {},\n from?: string\n) {\n // just for myCompanies\n const selectedCardId: string = yield select(myCompaniesFilterCardsSelectors.getSelectedCardId);\n const selectedCard: SearchStateData = yield select(\n myCompaniesFilterCardsSelectors.getSelectedCard\n );\n\n const newPayload: CustomSearchPayloadRequest = { ...payload };\n delete newPayload.pagination;\n\n let queryPayload: Dictionary<PreselectedFilter> = {};\n\n if (gridKey === 'outreachDetails') {\n const parsedTableGridQuery = queryString.parse(payload.tableGridQuery!);\n const filterRangeValues: [string, string] = yield select(\n companyOutReachFiltersSelectors.getSourcingFilterOptionsDateValue\n );\n\n let customFilterPayload = {};\n\n if (filterRangeValues) {\n customFilterPayload = {\n ...newPayload.filter,\n ddate_lower: filterRangeValues[0],\n ddate_upper: filterRangeValues[1],\n };\n } else {\n customFilterPayload = {\n ...newPayload.filter,\n ddate_lower: parsedTableGridQuery.ddate_lower as string,\n ddate_upper: parsedTableGridQuery.ddate_upper as string,\n };\n }\n\n queryPayload = mapSearchCounterQuery(\n newPayload.searchKey,\n newPayload.searchType,\n customFilterPayload,\n payload.analystId !== undefined\n ? payload.analystId\n : (parsedTableGridQuery.analyst_id as string),\n payload.sourcingOutReachColumnName || (parsedTableGridQuery.column_name as string)\n );\n } else {\n queryPayload = {\n ...mapSearchCounterQuery(newPayload.searchKey, newPayload.searchType, newPayload.filter),\n ...(gridKey === 'myCompanies'\n ? { [searchTypeKey[newPayload.searchType]]: newPayload.searchKey }\n : {}),\n };\n }\n\n let newQueryPayload = { ...queryPayload };\n\n if (payload.listType === 'combined') {\n newQueryPayload.combined_search_id = payload.fromSavedList as string;\n }\n\n if (gridKey === 'myCompanies') {\n let stageFilter: PreselectedFilter = [];\n\n // if \"stage\" and \"next_touch_date\" filters are identical with default card filters\n // we dont save them in session sesttings\n if (selectedCardId === 'card1') {\n // @ts-ignore\n stageFilter = (selectedCard?.filter?.stage?.every((item: string) =>\n (queryPayload?.stage as string[])?.includes(item)\n ) as PreselectedFilter)\n ? []\n : queryPayload.stage;\n } else {\n stageFilter = queryPayload?.stage || [];\n }\n\n newQueryPayload.stage = stageFilter;\n }\n\n const query = queryString.stringify(\n { ...newQueryPayload, search_title: payload.searchTitle },\n { arrayFormat: 'comma' }\n );\n const userSettings: UserInformation | null = yield select(\n userInformationSelectors.getUserSettings\n );\n\n try {\n const cancelSearch: boolean = yield select(searchSelectors.isCancelled(gridKey));\n\n if (cancelSearch) {\n yield cancel();\n }\n\n let gridKeySessionName = '';\n\n switch (gridKey) {\n case 'advancedSearch':\n gridKeySessionName = 'company';\n break;\n\n case 'lists':\n gridKeySessionName = 'user_list';\n break;\n\n case 'outreachDetails':\n gridKeySessionName = 'sourcing_outreach_detail';\n break;\n\n case 'myCompanies':\n gridKeySessionName = 'my_companies';\n break;\n\n case 'addons':\n gridKeySessionName = 'addon';\n break;\n\n default:\n break;\n }\n\n const hasUserSettingsChanged = Boolean(\n userSettings &&\n query !==\n userSettings.settings.session_settings[\n `${gridKeySessionName}_filters` as keyof UserSessionSettings\n ]\n );\n\n if (hasUserSettingsChanged || Object.keys(optionalSettings).length) {\n const sortQuery = queryString.stringify(mapSortQuery(newPayload.sortBy || []), {\n arrayFormat: 'comma',\n });\n\n let updateUserSettingsData = {\n [gridKeySessionName + '_sorting']: sortQuery,\n [gridKeySessionName + '_filters']: query,\n my_companies_selected_card_id: gridKey === 'myCompanies' ? selectedCardId : undefined,\n ...optionalSettings,\n };\n\n if (from === 'loadSuggestedSearch') {\n yield put(\n userInformationActions.updateUserSettingsForSuggestedSearches(updateUserSettingsData)\n );\n } else {\n yield put(userInformationActions.updateUserSettings(updateUserSettingsData));\n }\n }\n } catch (error: any) {\n NotificationService.error('Failed persisting filters settings!');\n } finally {\n // @ts-ignore\n if (yield cancelled()) {\n yield put(\n actions.cancelCompanySearch({\n gridKey,\n data: false,\n })\n );\n }\n }\n}\n\n/**\n * Search companies.\n * @param data query payload data.\n * @param newFilter new filter.\n * @param addSearchHeader omit search header, when a new search is made.\n * @param searchTitle saved search title.\n * @param updateSessionSettings update filter settings to be able to load them on next refresh.\n */\nexport function* searchCompanies(\n data: SearchPayloadRequest,\n gridKey: GridKeys,\n newFilter: Dictionary<PreselectedFilter>,\n addSearchHeader?: boolean,\n searchTitle?: string,\n updateSessionSettings: Partial<UpdateUserSettingsPayload> | boolean = true,\n callback?: SuccessErrorCallback,\n isSimilarCompaniesSearch?: boolean,\n currentDefaultSearch?: SearchSave | undefined\n) {\n const isSourceScrub: boolean = yield select(listsSelectors.isSourceScrubRoute);\n\n const { pageNumber: currentPageNumber, pageSize: currentPageSize } = yield select(\n paginationSelectors.getPagination(gridKey)\n );\n const { pageNumber: newPageNumber, pageSize: newPageSize } = data.pagination;\n\n if (currentPageNumber === newPageNumber || currentPageSize !== newPageSize) {\n yield put(\n selectedCompaniesActions.deselectCompanyIds({ gridName: gridKey as SelectedCompaniesGrids })\n );\n }\n\n const listGridKey = gridKey === 'lists' && isSourceScrub ? 'sslists' : 'watchlists';\n const isSimilarCompaniesSorting: boolean | undefined = yield select(\n sortSelectors.isSimilarCompaniesSort(gridKey)\n );\n\n try {\n const searchOriginKey = getSearchOriginKeyFromGridKey(\n gridKey === 'lists' ? listGridKey : gridKey\n );\n\n const filtersSearchOriginValue: number = yield select(state =>\n filterSourcesSelectors.getFilterSearchOrigin(state, searchOriginKey)\n );\n\n let payloadData = { ...data };\n\n if (payloadData.fromSavedList === 'default') {\n delete payloadData.fromSavedList;\n }\n\n if (typeof filtersSearchOriginValue === 'number') {\n payloadData = {\n ...payloadData,\n searchOrigin: filtersSearchOriginValue,\n sortBy: payloadData.sortBy,\n };\n }\n\n let columns: string = '';\n let columnOrder: ColumnKeys[] = [];\n let pinnedColumns: string = '';\n let suggestedSearches: SearchSave[] = [];\n\n if (gridKey !== 'outreach') {\n columns = yield select(columnSelectors.getVisibleColumnString(gridKey));\n columnOrder = yield select(columnSelectors.getColumnOrder(gridKey));\n pinnedColumns = yield select(columnSelectors.getPinnedColumnsString(gridKey));\n }\n\n // if updateSessionSettings and columns this will result in changing view after search loaded\n // we need to compare with correct columns\n if (\n gridKey === 'advancedSearch' &&\n updateSessionSettings &&\n typeof updateSessionSettings !== 'boolean'\n ) {\n if (updateSessionSettings.company_display_columns) {\n columns = updateSessionSettings.company_display_columns;\n }\n\n if (updateSessionSettings.company_column_order) {\n columnOrder = updateSessionSettings.company_column_order.split(',') as ColumnKeys[];\n }\n\n if (updateSessionSettings.company_pinned_columns) {\n pinnedColumns = updateSessionSettings.company_pinned_columns;\n }\n }\n\n const savedSearches: SearchSave[] = yield select(savedSearchesSelectors.getAllViews);\n const { defaultOptxView } = yield select(savedSearchesSelectors.getViews);\n const sessionSettings: UserSessionSettings = yield select(\n userInformationSelectors.getSessionSettings\n );\n\n let matchData = { ...data };\n const { new_date_matched, ...restFilters } = matchData.filter;\n\n if (new_date_matched) {\n matchData.filter = restFilters;\n }\n\n let savedSearchView;\n // we need to check if it is matched only for savedSearches\n // we need it to remove/add Date Matched column\n const ignoreSort = matchData.sortBy.find(sort => sort.id === 'date_matched');\n\n const { matchedView } = matchView(\n matchData,\n columns.replace('date_matched', '').replace(',,', ','),\n columnOrder.filter(col => col !== 'date_matched').join(),\n pinnedColumns,\n savedSearches.length\n ? [...savedSearches.filter(search => search.unique_id !== 'sourcingOrder')]\n : [],\n defaultOptxView,\n undefined,\n undefined,\n ignoreSort ? true : undefined\n );\n savedSearchView = matchedView;\n\n // ignores listMatch and takes it from list_id\n if (data.list_id && savedSearches.find(search => search.unique_id === data.list_id)) {\n savedSearchView = savedSearches.find(search => search.unique_id === data.list_id);\n }\n\n let res: AxiosResponse<Company[]>;\n\n if (gridKey === 'advancedSearch' && payloadData.listType !== 'saved') {\n delete payloadData.filter.saved_list_id;\n delete payloadData.filter.ss_list_id;\n }\n\n if (gridKey === 'outreachDetails') {\n delete payloadData.filter.saved_list_id;\n res = yield call(AnalystService.getCompaniesListOutReach, payloadData);\n } else if (gridKey === 'addons') {\n // we don't need search origin and date range filters on addon page\n delete payloadData.searchOrigin;\n delete payloadData.filter.ddate_lower;\n delete payloadData.filter.ddate_upper;\n\n res = yield call(\n CompanyService.fetchCompanyAddonManagement,\n payloadData as AddonManagementPayload\n );\n } else {\n if (\n savedSearchView &&\n savedSearchView.unique_id !== 'sourcingOrder' &&\n savedSearchView.unique_id !== 'default' &&\n ((savedSearchView.search_info.type !== 'combined' && data.listType !== 'combined') ||\n (savedSearchView.search_info.type === 'combined' && data.listType === 'combined'))\n ) {\n // used only for saved searches\n payloadData.list_id = savedSearchView.unique_id;\n }\n\n if (!payloadData.list_id) {\n delete payloadData.filter.new_date_matched;\n\n if (payloadData.sortBy.find(sort => sort.id === 'date_matched')) {\n payloadData.sortBy = COMPANY_DEFAULT_SORT;\n }\n }\n\n const query = window.location.search ? window.location.search.replace('?', '') : undefined;\n const isFromPlugin = query?.includes('company_id');\n\n if (isFromPlugin) {\n payloadData.searchKey = '';\n payloadData.pagination = { ...payloadData.pagination, pageNumber: 1 };\n }\n\n res = yield call(SearchService.searchCompanies, payloadData, addSearchHeader);\n }\n\n // get latest Saved Searches\n const latestSavedSearches: SearchSave[] = yield select(savedSearchesSelectors.getAllViews);\n const filteredSavedSearches: SearchSave[] = latestSavedSearches.filter(\n search => search.search_info.type !== 'combined'\n );\n const currentSearch = latestSavedSearches.find(\n search => search.unique_id === data.fromSavedList\n );\n\n if (gridKey === 'myCompanies') {\n const newFilterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n newFilter\n );\n matchData.filter = { ...newFilterQuery, source_tag_filter: [] };\n }\n\n // Combined searches doesnt have regular filters but we are still comparing as matched view\n // if we are not sending listType as combined we should ignore founded savedSearchView it its combined\n if (savedSearchView?.search_info.type === 'combined' && data.listType !== 'combined') {\n savedSearchView = undefined;\n }\n\n let title = searchTitle || savedSearchView?.title;\n let view;\n\n if (gridKey === 'advancedSearch') {\n suggestedSearches = yield select(suggestedSearchesSelectors.getSuggestedSearches);\n }\n\n // check new search request against saved searches\n if (!title && data.listType !== 'combined') {\n const { matchedTitle, matchedView } = matchView(\n matchData,\n columns.replace('date_matched', '').replace(',,', ','),\n columnOrder.filter(col => col !== 'date_matched').join(),\n pinnedColumns,\n suggestedSearches.length\n ? [...filteredSavedSearches, ...suggestedSearches]\n : filteredSavedSearches,\n defaultOptxView,\n gridKey,\n sessionSettings.my_companies_filters\n );\n title = matchedTitle;\n view = matchedView;\n\n if (!view) {\n const { matchedTitle, matchedView } = matchView(\n matchData,\n columns.replace('date_matched', '').replace(',,', ','),\n columnOrder.filter(col => col !== 'date_matched').join(),\n pinnedColumns,\n suggestedSearches.length ? [...suggestedSearches] : [],\n defaultOptxView,\n gridKey,\n sessionSettings.my_companies_filters\n );\n title = matchedTitle;\n view = matchedView;\n }\n\n // if no saved searches matched, check against\n // suggested searches and also include sorting\n if (title === undefined) {\n title = matchSavedSearches(data, suggestedSearches, true);\n }\n } else {\n view = savedSearches.find(search => search.title === searchTitle);\n }\n\n const isAdvancedSearch = gridKey === 'advancedSearch';\n\n const cancelSearch: boolean = yield select(searchSelectors.isCancelled(gridKey));\n\n if (cancelSearch) {\n yield cancel();\n }\n\n let searchData = {\n ...data,\n filter: newFilter,\n };\n let viewId;\n\n if (gridKey === 'advancedSearch') {\n if (title) {\n view = savedSearches.find(search => search.title === title);\n if (!view) view = suggestedSearches.find(search => search.title === title);\n }\n\n if (view) {\n viewId = view.unique_id;\n }\n\n searchData = { ...searchData, fromSavedList: viewId, searchTitle: title };\n\n if (data.listType === 'combined') {\n searchData.searchTitle = currentSearch?.title;\n }\n }\n\n const companies: Company[] =\n gridKey === 'addons' ? (res.data as unknown as { data: Company[] }).data : res.data;\n\n if (gridKey === 'advancedSearch' && (isSimilarCompaniesSearch || isSimilarCompaniesSorting)) {\n const similarCompanyId = (searchData.filter.similarCompanies as SelectOption)?.value\n .split(',')\n .pop()!;\n\n const similarCompanyName = companies.find(\n company => company.company_id === Number(similarCompanyId)\n )?.company_name;\n\n const persistedSimilarCompanyName: SelectOption = yield select(\n filterSelectors.getSimilarCompanyName()\n );\n\n if (similarCompanyId !== undefined) {\n searchData = {\n ...searchData,\n filter: {\n ...searchData.filter,\n similarCompanies: {\n ...(searchData.filter.similarCompanies as SelectOption),\n label: similarCompanyName || persistedSimilarCompanyName?.label || '',\n },\n },\n };\n }\n }\n\n if (isAdvancedSearch && 'similarCompanies' in searchData.filter) {\n searchData = {\n ...searchData,\n searchTitle: '',\n };\n }\n\n if (isAdvancedSearch && payloadData.list_id) {\n searchData = {\n ...searchData,\n list_id: payloadData.list_id,\n };\n }\n\n if (isAdvancedSearch && !payloadData.clearNewMatches) {\n const oldListId: string | number | null | undefined = yield select(\n searchSelectors.getAdvancedSearchListId('advancedSearch')\n );\n\n if (oldListId && (oldListId !== payloadData.list_id || !payloadData.list_id)) {\n const clearNewMatches = {\n list_id: Number(oldListId) ?? 0,\n };\n\n yield call(UserService.clearNewMatchesFromLists, clearNewMatches);\n }\n }\n\n // remove new_date_matched filter\n if (!payloadData.filter.new_date_matched && searchData.filter.new_date_matched) {\n const { new_date_matched, ...rest } = searchData.filter;\n searchData.filter = rest;\n }\n\n if (searchData.listType === 'combined') {\n searchData = {\n ...searchData,\n fromSavedList: payloadData.fromSavedList,\n };\n }\n\n yield put(\n actions.searchCompaniesSuccess(\n sortSimilarCompanies(\n isSimilarCompaniesSorting,\n companies,\n searchData.filter.similarCompanies as SelectOption<string>\n ),\n {\n gridKey,\n data: searchData,\n }\n )\n );\n\n if (data.perMultiplePages) {\n const allCompanies: SelectedCompanies[] = yield select(searchSelectors.getCompanies(gridKey));\n const { pageSize } = data.pagination;\n\n yield put(\n selectedCompaniesActions.selectCompanyIds({\n gridName: gridKey as SelectedCompaniesGrids,\n pageSize,\n selectedCompanies: allCompanies,\n })\n );\n }\n\n if (\n gridKey === 'advancedSearch' &&\n payloadData.list_id &&\n payloadData.filter.new_date_matched\n ) {\n yield put(columnActions.addRemoveDateMatched('add_as_first_column'));\n } else if (payloadData.list_id) {\n yield put(columnActions.addRemoveDateMatched('add_column'));\n } else {\n yield put(columnActions.addRemoveDateMatched('remove_column'));\n }\n\n if (gridKey === 'advancedSearch') {\n const view: View = yield select(viewSelectors.getView(gridKey));\n const suggestedSearches: SearchSave[] = yield select(\n suggestedSearchesSelectors.getSuggestedSearches\n );\n const isOptxDefaultView = view.id === 'default';\n const searchTitle: string | undefined = yield select(searchSelectors.getSearchName(gridKey));\n\n const addFromSavedListParam =\n view.id !== '' && !isOptxDefaultView && !isCustomUIView(view.id);\n const isSuggestedSearch = suggestedSearches.some(search => search.title === searchTitle);\n const addSearchTitleParam = searchTitle && isSuggestedSearch && !addFromSavedListParam;\n\n payloadData = {\n ...payloadData,\n ...(addFromSavedListParam && { fromSavedList: viewId }),\n ...(addSearchTitleParam && {\n filter: { ...payloadData.filter },\n search_title: title,\n }),\n };\n }\n\n if (gridKey === 'lists') {\n yield put(\n searchKeyActions.setSearchKey({\n data: payloadData.searchKey,\n gridKey,\n })\n );\n yield put(\n searchCountActions.searchCount({\n data: payloadData,\n gridKey,\n })\n );\n } else {\n yield put(searchKeyActions.setSearchKey({ data: payloadData.searchKey, gridKey: gridKey }));\n yield put(searchCountActions.searchCount({ data: payloadData, gridKey: gridKey }));\n }\n\n const applyViewData = {\n id: view ? view.unique_id : '',\n label: title || '',\n pageAlias: getRouteAliasFromGridKey(gridKey),\n };\n\n if (title !== 'Recently Funded' && data.listType !== 'combined') {\n applyViewData.id = viewId || '';\n applyViewData.label = title || '';\n }\n\n if (data.listType !== 'combined') {\n applyViewData.id = viewId || '';\n applyViewData.label = title || '';\n }\n\n if (data.listType === 'combined') {\n applyViewData.label = currentSearch?.title || '';\n applyViewData.id = data.fromSavedList || '';\n }\n\n if (\n currentDefaultSearch &&\n !(isSimilarCompaniesSearch || isSimilarCompaniesSorting) &&\n (gridKey === 'advancedSearch' || gridKey === 'lists')\n ) {\n yield put(\n savedSearchesActions.applyViewSuccess({\n id: currentDefaultSearch.unique_id,\n label: currentDefaultSearch.title,\n pageAlias: getRouteAliasFromGridKey(gridKey),\n })\n );\n } else {\n yield put(savedSearchesActions.applyViewSuccess(applyViewData));\n }\n\n if (view === undefined && currentDefaultSearch === undefined) {\n yield put(actions.saveSearchTitle({ gridKey, data: '' }));\n }\n\n callback && callback(null);\n\n if (updateSessionSettings) {\n yield call(\n updateFilterSettings,\n data,\n gridKey,\n updateSessionSettings as Partial<UpdateUserSettingsPayload>\n );\n }\n } finally {\n // @ts-ignore\n if (yield cancelled()) {\n yield put(\n actions.cancelCompanySearch({\n gridKey,\n data: false,\n })\n );\n }\n }\n}\n\n// send error as a parameter because in same cases we can have a javascript error that doesn't appear in\n// dev console, but we can console log it\nexport function* searchCompaniesFail(gridKey: GridKeys, error: any, errorNumber?: number) {\n let errorMessage = 'Get companies fail, Server error!';\n if (gridKey === 'outreachDetails')\n errorMessage = 'Get Sourcing OutReach Companies fail, Server error!';\n if (gridKey === 'myCompanies') errorMessage = 'Get My Companies fail, Server error!';\n if (gridKey === 'addons') errorMessage = 'Failed to fetch company Add-on Management!';\n if (errorNumber === 400) errorMessage = 'Not found!';\n\n yield put(actions.searchCompaniesFail({ gridKey, data: errorMessage }));\n NotificationService.error(errorMessage);\n}\n\nexport function* initializeLongCardSearchSaga(gridKey: GridKeys, tableGridQuery?: string) {\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey);\n let {\n sortBy,\n filter: filterQuery,\n searchKey,\n searchType,\n originalFilter: filter,\n pagination,\n } = gridSearchData;\n\n let sessionFilters: string | undefined = '';\n\n if (gridKey === 'lists' || gridKey === 'outreachDetails') {\n const sessionSettings: UserSessionSettings = yield select(\n userInformationSelectors.getSessionSettings\n );\n const { filters: defaultFilters, searchKey: defaultSearchKey }: DefaultViews = yield select(\n filterSourcesSelectors.getDefaultViews\n );\n const {\n user_list_filters: listsSessionFilters,\n sourcing_outreach_detail_filters: outreachSessionFilters,\n } = sessionSettings;\n\n let savedFilters = {};\n\n if (gridKey === 'lists') {\n sessionFilters = listsSessionFilters;\n } else if (gridKey === 'outreachDetails') {\n sessionFilters = outreachSessionFilters;\n }\n\n if (sessionFilters) {\n const companyFilters: FilterSource[] = yield select(filterSourcesSelectors.getCompanyFilters);\n const [parsedFilters] = parseFilter(sessionFilters, companyFilters);\n\n savedFilters = parsedFilters;\n }\n\n if (\n sessionFilters === undefined &&\n Object.keys(defaultFilters).length &&\n !window.location.search\n ) {\n filter = defaultFilters;\n searchKey = defaultSearchKey;\n }\n\n const listId: string = yield select(listsDetailsSelectors.getRouteListId);\n const isSourceScrub: boolean = yield select(listsDetailsSelectors.isSourceScrubRoute);\n\n // @ts-ignore\n filter = {\n ...filter,\n ...savedFilters,\n ...(isSourceScrub\n ? { ss_list_id: listId, saved_list_id: null }\n : { ss_list_id: null, saved_list_id: listId }),\n };\n\n filterQuery = yield call(getFiltersQuery, filter);\n }\n\n let searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterQuery,\n pagination,\n sortBy,\n };\n\n if (gridKey === 'outreachDetails' && tableGridQuery) {\n const parsedSessionsFilters = queryString.parse(sessionFilters!);\n\n const parsedTableGridQuery = queryString.parse(tableGridQuery);\n\n const customTableGridQuery = {\n ...parsedTableGridQuery,\n analyst_id:\n parsedSessionsFilters.analyst_id !== undefined\n ? parsedSessionsFilters.analyst_id\n : parsedTableGridQuery.analyst_id,\n column_name: parsedSessionsFilters.column_name || parsedTableGridQuery.column_name,\n ddate_upper: parsedSessionsFilters.ddate_upper || parsedTableGridQuery.ddate_upper,\n ddate_lower: parsedSessionsFilters.ddate_lower || parsedTableGridQuery.ddate_lower,\n };\n\n searchData.tableGridQuery = queryString.stringify(customTableGridQuery, {\n arrayFormat: 'comma',\n });\n }\n\n let isSimilarCompaniesSearch = false;\n\n if (gridKey === 'advancedSearch' && filter.similarCompanies) {\n isSimilarCompaniesSearch = true;\n yield put(sortActions.similarCompaniesSortingAction(true));\n }\n\n try {\n yield call(\n searchCompanies,\n searchData,\n gridKey,\n filter,\n undefined,\n '',\n true,\n undefined,\n isSimilarCompaniesSearch\n );\n\n if (gridKey === 'advancedSearch') {\n const view: View = yield select(viewSelectors.getView(gridKey));\n const suggestedSearches: SearchSave[] = yield select(\n suggestedSearchesSelectors.getSuggestedSearches\n );\n const isOptxDefaultView = view.id === 'default';\n const searchTitle: string | undefined = yield select(searchSelectors.getSearchName(gridKey));\n\n const addFromSavedListParam =\n view.id !== '' && !isOptxDefaultView && !isCustomUIView(view.id);\n const isSuggestedSearch = suggestedSearches.some(search => search.title === searchTitle);\n const addSearchTitleParam = searchTitle && isSuggestedSearch && !addFromSavedListParam;\n\n searchData = {\n ...searchData,\n ...(addFromSavedListParam && { fromSavedList: view.id }),\n ...(addSearchTitleParam && {\n filter: { ...searchData.filter },\n search_title: searchTitle,\n }),\n };\n }\n\n if (gridKey === 'lists') {\n yield put(\n searchCountActions.searchCount({\n gridKey,\n data: searchData,\n })\n );\n } else {\n yield put(\n searchCountActions.searchCount({\n gridKey,\n data: searchData,\n })\n );\n }\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n}\n\nexport function* initialCompanySearchSaga(gridKey: GridKeys, tableGridQuery?: string) {\n const isSavedSearchesLoaded: boolean = yield select(savedSearchesSelectors.loaded);\n const urlQuery = window.location.search ? window.location.search.replace('?', '') : undefined;\n const list = urlQuery?.split('=')[0] === 'saved_search_id';\n const listOfSavedSearches: SearchSave[] = yield select(savedSearchesSelectors.getAllViews);\n const isParentSearch = urlQuery?.includes('parentCompanySearch');\n const isTagSearch = urlQuery?.includes('company_tag');\n const isFromPlugin = urlQuery?.includes('company_id');\n const hasQueryInURL = urlQuery?.includes('query');\n\n let currentDefaultSearch: SearchSave | undefined;\n\n if ((isFromPlugin || list) && !isSavedSearchesLoaded) {\n yield take(savedSearchesActions.initializeSavedSearchesAndViewsSuccess);\n }\n\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey);\n let { sortBy, searchKey, originalFilter: filter, pagination, searchType } = gridSearchData;\n\n const sessionSettings: UserSessionSettings = yield select(\n userInformationSelectors.getSessionSettings\n );\n const {\n sourcing_outreach_detail_filters: outreachColumnSelectorsessionFilters,\n user_list_filters: listsSessionFilters,\n company_filters: companySessionFilters,\n } = sessionSettings;\n\n let sessionFilters: string | undefined = '';\n\n switch (gridKey) {\n case 'advancedSearch':\n sessionFilters = companySessionFilters;\n break;\n\n case 'lists':\n sessionFilters = listsSessionFilters;\n break;\n\n case 'outreachDetails':\n sessionFilters = outreachColumnSelectorsessionFilters;\n break;\n\n default:\n break;\n }\n\n const defaultViews: DefaultViews = yield select(filterSourcesSelectors.getDefaultViews);\n const { filters: defaultFilters, searchKey: defaultSearchKey, data: defaultData } = defaultViews;\n const customClearedFilter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getCustomClearedFilter(gridKey)\n );\n\n const { searchType: filtersSearchType, searchId } = getSearchTypeInfo(sessionFilters);\n let listType;\n let id;\n\n if (!isParentSearch && !isTagSearch && !isFromPlugin) {\n listType = filtersSearchType;\n id = searchId;\n }\n\n if (\n sessionFilters === undefined &&\n Object.keys(defaultFilters).length &&\n !window.location.search\n ) {\n filter = defaultFilters;\n searchKey = defaultSearchKey;\n listType = defaultData[0]?.search_info.type || '';\n id = defaultData[0]?.unique_id;\n }\n\n if (gridKey === 'lists') {\n const listId: string = yield select(listsDetailsSelectors.getRouteListId);\n const isSourceScrub: boolean = yield select(listsDetailsSelectors.isSourceScrubRoute);\n\n // @ts-ignore\n filter = {\n ...(listType === 'combined' ? customClearedFilter : filter),\n ...(isSourceScrub\n ? { ss_list_id: listId, saved_list_id: null }\n : { ss_list_id: null, saved_list_id: listId }),\n };\n }\n\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(getFiltersQuery, filter);\n\n let searchData: SearchPayloadRequest = {\n searchKey:\n urlQuery && !hasQueryInURL\n ? defaultSearchKey\n : (filterQuery?.query as string) ||\n (filterQuery?.company_name_or_url as string) ||\n searchKey,\n searchType: urlQuery\n ? searchTypeOptions.defaultSearchType\n : filterQuery?.company_name_or_url\n ? searchTypeOptions.companyNameOrUrl\n : searchType,\n filter: filterQuery,\n pagination,\n sortBy,\n fromSavedList: id,\n listType,\n };\n\n if (gridKey === 'outreachDetails' && tableGridQuery) {\n const parsedSessionsFilters = queryString.parse(sessionFilters!);\n\n const parsedTableGridQuery = queryString.parse(tableGridQuery);\n\n const customTableGridQuery = {\n ...parsedTableGridQuery,\n analyst_id:\n parsedSessionsFilters.analyst_id !== undefined\n ? parsedSessionsFilters.analyst_id\n : parsedTableGridQuery.analyst_id,\n column_name: parsedSessionsFilters.column_name || parsedTableGridQuery.column_name,\n ddate_upper: parsedSessionsFilters.ddate_upper || parsedTableGridQuery.ddate_upper,\n ddate_lower: parsedSessionsFilters.ddate_lower || parsedTableGridQuery.ddate_lower,\n };\n\n searchData.tableGridQuery = queryString.stringify(customTableGridQuery, {\n arrayFormat: 'comma',\n });\n }\n\n try {\n let searchTitle: undefined | string,\n updateSessionSettings: Partial<UpdateUserSettingsPayload> | boolean;\n\n if (gridKey === 'outreachDetails') {\n searchTitle = '';\n updateSessionSettings = {\n sourcing_outreach_results_page_number: pagination.pageNumber,\n };\n } else {\n searchTitle = undefined;\n updateSessionSettings = false;\n }\n\n if (gridKey === 'advancedSearch' && filter.similarCompanies) {\n yield put(sortActions.similarCompaniesSortingAction(true));\n }\n\n // When we open combined search from Notification panel we have to pass\n // listType and listId to be able to apply the search\n const query = window.location.search ? window.location.search.replace('?', '') : undefined;\n const listId = Number(query?.split('=')[1]);\n const savedSearches: SearchSave[] = yield select(savedSearchesSelectors.getAllViews);\n const currentSearch = savedSearches.find(search => search.unique_id === listId);\n\n if (currentSearch?.search_info.type === 'combined' && query) {\n searchData.fromSavedList = listId;\n searchData.listType = currentSearch?.search_info.type || '';\n searchData.searchKey = currentSearch.searchKey || '';\n }\n\n if (!sessionFilters) {\n currentDefaultSearch = listOfSavedSearches.find(view => view.is_default);\n }\n\n yield fork(\n searchCompanies,\n searchData,\n gridKey,\n filter,\n undefined,\n searchTitle,\n updateSessionSettings,\n undefined,\n undefined,\n currentDefaultSearch\n );\n\n yield call(userInfoUpdateSaga, gridKey, pagination);\n\n if (gridKey === 'advancedSearch') {\n const view: View = yield select(viewSelectors.getView(gridKey));\n const suggestedSearches: SearchSave[] = yield select(\n suggestedSearchesSelectors.getSuggestedSearches\n );\n const isOptxDefaultView = view.id === 'default';\n const searchTitle: string | undefined = yield select(\n searchSelectors.getSearchName('advancedSearch')\n );\n\n const addFromSavedListParam =\n view.id !== '' && !isOptxDefaultView && !isCustomUIView(view.id);\n const isSuggestedSearch = suggestedSearches.some(search => search.title === searchTitle);\n const addSearchTitleParam = searchTitle && isSuggestedSearch && !addFromSavedListParam;\n\n searchData = {\n ...searchData,\n ...(addFromSavedListParam && { fromSavedList: view.id }),\n ...(addSearchTitleParam && {\n filter: { ...searchData.filter, search_title: searchTitle as string },\n }),\n };\n }\n\n if (gridKey === 'outreachDetails')\n yield put(paginationActions.changePaginationSuccess({ gridKey, data: pagination }));\n } catch (error: any) {\n if (gridKey === 'outreachDetails') {\n yield call(searchCompaniesFail, gridKey, error, error.response.status as number);\n } else {\n yield call(searchCompaniesFail, gridKey, error);\n }\n }\n}\n","import { createAction } from '@reduxjs/toolkit';\n// interfaces/types\nimport { FilterSource } from '@optx/models/filters';\nimport * as types from './types';\nimport {\n ChangeCardSubfilterPayload,\n DefaultSourcingOutReachFilters,\n SourcingFilterOptions,\n UpdateSourcingOutReachFiltersPayload,\n} from './interfaces';\n\nexport const updateSourcingFilterOptions = createAction<SourcingFilterOptions>(\n types.UPDATE_SOURCING_FILTER_OPTIONS\n);\n\nexport const updateSourcingOutReachFilters = createAction<UpdateSourcingOutReachFiltersPayload>(\n types.UPDATE_SOURCING_OUTREACH_FILTERS\n);\n\nexport const fetchSourcingOutReachFiltersSuccess = createAction<FilterSource>(\n types.FETCH_SOURCING_OUT_REACH_FILTERS_SUCCESS\n);\n\nexport const resetSessionFilter = createAction(types.RESET_SESSION_FILTERS);\n\nexport const resetStoreFilter = createAction(types.RESET_STORE_FILTERS);\n\nexport const setDefaultSourcingOutReachFilters = createAction<DefaultSourcingOutReachFilters>(\n types.SET_DEFAULT_SOURCING_OUT_REACH_FILTERS\n);\n\nexport const changeCard = createAction<string>(types.CHANGE_CARD);\n\nexport const changeCardSubfilter = createAction<ChangeCardSubfilterPayload>(\n types.CHANGE_CARD_SUBFILTER\n);\n\nexport const changeCardSubfilterSuccess = createAction<ChangeCardSubfilterPayload>(\n types.CHANGE_CARD_SUBFILTER_SUCCESS\n);\n","export const INITIALIZE_COMPANIES_OUT_REACH_CARDS = 'INITIALIZE_COMPANIES_OUT_REACH_CARDS';\n\nexport const FETCH_COMPANIES_OUT_REACH_CARDS =\n ' companies-outreach/FETCH_COMPANIES_OUT_REACH_CARDS';\nexport const FETCH_COMPANIES_OUT_REACH_CARDS_SUCCESS =\n ' companies-outreach/FETCH_COMPANIES_OUT_REACH_CARDS_SUCCESS';\nexport const FETCH_COMPANIES_OUT_REACH_CARDS_FAIL =\n ' companies-outreach/FETCH_COMPANIES_OUT_REACH_CARDS_FAIL';\n\nexport const FETCH_SOURCING_OUT_REACH_FILTERS_SUCCESS =\n 'companies-outreach/FETCH_SOURCING_OUT_REACH_FILTERS_SUCCESS';\n\nexport const SET_DEFAULT_SOURCING_OUT_REACH_FILTERS =\n 'companies-outreach/SET_DEFAULT_SOURCING_OUT_REACH_FILTERS';\n\nexport const UPDATE_SOURCING_OUTREACH_FILTERS =\n 'companies-outreach/UPDATE_SOURCING_OUTREACH_FILTERS';\n\nexport const RESET_SESSION_FILTERS = 'companies-outreach/RESET_SESSION_FILTERS';\n\nexport const RESET_STORE_FILTERS = 'companies-outreach/RESET_STORE_FILTERS';\n\nexport const UPDATE_SOURCING_FILTER_OPTIONS = 'companies-outreach/UPDATE_SOURCING_FILTER_OPTIONS';\n\nexport const CHANGE_CARD = ' companies-outreach/CHANGE_CARD';\nexport const CHANGE_CARD_SUBFILTER = ' companies-outreach/CHANGE_CARD_SUBFILTER';\nexport const CHANGE_CARD_SUBFILTER_SUCCESS = ' companies-outreach/CHANGE_CARD_SUBFILTER_SUCCESS';\n","import { createSelector } from 'reselect';\nimport queryString from 'query-string';\n// interfaces\nimport { AppState } from '@optx/redux/interfaces';\n// utils\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\n// redux\nimport { selectors as companyFilterSelectors } from '@redux/company/filters';\nimport { getSearchKey } from '@optx/features/grid/searchkey/state/selectors';\n\nconst selectCompaniesOutReachState = (state: AppState) => state.companyOutSourcing.filter;\n\nexport const sourcingOutReachFiltersLoaded = createSelector(\n selectCompaniesOutReachState,\n state => !!state.fetchedAt\n);\n\nexport const getFilter = createSelector(selectCompaniesOutReachState, state => state.filter);\nexport const getSourcingFiltersOptions = (sourcingField: 'analyst_id' | 'column_name') =>\n createSelector(\n selectCompaniesOutReachState,\n state =>\n state.sourcingOutReachFilter?.data\n ?.find((list: { column: string }) => list.column === sourcingField)\n ?.data.map((item: any) => ({\n label: item.name || item.label,\n value: item.value,\n })) || []\n );\n\nexport const getSourcingFiltersOptionsDate = createSelector(\n selectCompaniesOutReachState,\n state =>\n state.sourcingOutReachFilter?.data?.find((list: { column: string }) => list.column === 'ddate')\n ?.data || []\n);\n\nexport const getSourcingFilterOptionsDateValue = createSelector(\n selectCompaniesOutReachState,\n state => state.sourcingOutReachFilterOptions?.ddate\n);\n\nexport const getSourcingOptitonsFilterValues = (filterKey: 'analyst_id' | 'column_name') =>\n createSelector(\n selectCompaniesOutReachState,\n state => state.sourcingOutReachFilterOptions![filterKey]\n );\n\nexport const getCustomClearedFilter = createSelector(\n selectCompaniesOutReachState,\n state => state.customClearedfilter\n);\nexport const getClearedFilter = createSelector(selectCompaniesOutReachState, state => state.clear);\n\nexport const getSelectedCardId = createSelector(selectCompaniesOutReachState, state => {\n if (state.selectedCard) {\n return state.selectedCard.id;\n }\n\n if (state.selectedCardId) {\n return state.selectedCardId;\n }\n\n return null;\n});\n\nexport const getSubFilter = createSelector(selectCompaniesOutReachState, state => state.subFilter);\n\nexport const searchKey = getSearchKey('outreachDetails');\n\n/**\n * Check whether or not there are filters applied or we have a search key or subfilter active\n */\nexport const showClearButton = createSelector(\n getSearchKey('outreachDetails'),\n getSubFilter,\n companyFilterSelectors.getFiltersMap,\n getCustomClearedFilter,\n getFilter,\n (searchKey, subfilter, normalizedFilters, customClearedFilter, filter) => {\n if (searchKey || subfilter) {\n return true;\n }\n\n const currentFilter = mapFiltersToURLParams(normalizedFilters, filter);\n const filterQuery = queryString.stringify(currentFilter, { arrayFormat: 'comma' });\n\n const clearedFilter = mapFiltersToURLParams(normalizedFilters, customClearedFilter);\n const clearedFilterQuery = queryString.stringify(clearedFilter, {\n arrayFormat: 'comma',\n });\n\n return filterQuery !== clearedFilterQuery;\n }\n);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\n// models\nimport { FilterSource } from '@optx/models/filters';\nimport { CompanyFiltersMeta } from '@optx/models/search';\nimport Company from '@optx/models/Company';\nimport { FormCheckboxOption, SelectOption } from '@optx/models/Option';\nimport { SearchPayload } from '@optx/models/api/contacts';\nimport { UserInformation } from '@optx/models/user';\nimport { SearchStateData } from '@models/search';\nimport { GridPayload } from '@models/grid';\n// constants\n// utils\nimport { mapPreselectedFilters } from '@optx/utils/filters/preselectedValues';\nimport { parseFilter } from '@utils/filters/parseFilters';\n// interfaces\nimport {\n SourcingOutReachFilterState,\n SourcingFilterOptions,\n DefaultSourcingOutReachFilters,\n UpdateSourcingOutReachFiltersPayload,\n} from './interfaces';\n// redux\nimport { actions as userInformationActions } from '../../user/information';\nimport { actions as companyFiltersActions } from '../../company/filters';\nimport { actions as searchActions } from '@features/grid/search';\nimport * as actions from './actions';\n\nexport const initialState: SourcingOutReachFilterState = {\n filter: {},\n sourcingOutReachFilter: {} as FilterSource,\n sourcingOutReachFilterOptions: {},\n customClearedfilter: {},\n clear: {},\n label: null,\n preselectedFilter: {},\n fetchedAt: '',\n cards: {},\n selectedCard: null,\n selectedCardId: '',\n subFilter: '',\n panelFilters: '',\n};\n\nconst fetchSourcingOutReachSearchSuccessReducer: CaseReducer<\n SourcingOutReachFilterState,\n PayloadAction<Array<Company>, any, GridPayload<Partial<SearchPayload>>>\n> = (draftState, action) => {\n const { gridKey, data } = action.meta;\n\n if (gridKey === 'outreachDetails' && data.filter) draftState.filter = data.filter;\n};\n\nconst updateSourcingOutReachFilterOptionsSuccessReducer: CaseReducer<\n SourcingOutReachFilterState,\n PayloadAction<SourcingFilterOptions>\n> = (draftState, action) => {\n if (draftState.sourcingOutReachFilterOptions) {\n draftState.sourcingOutReachFilterOptions[action.payload.filterKey] = action.payload.value;\n draftState.label = action.payload.label;\n }\n};\n\nconst updateSourcingOutReachFiltersReducer: CaseReducer<\n SourcingOutReachFilterState,\n PayloadAction<UpdateSourcingOutReachFiltersPayload>\n> = (draftState, action) => {\n // for panelFiltersQuery we currently have 2 cases:\n // 1. if shouldRemoveFilter is true, then panelFiltersQuery contains just the filter key\n // 2. otherwise, it's the entire query of filters\n const { panelFiltersQuery, shouldRemoveFilter } = action.payload;\n const { pipeline_rank, addon_bool, ...restFilters } = queryString.parse(panelFiltersQuery, {\n arrayFormat: 'comma',\n });\n\n if (draftState.panelFilters !== panelFiltersQuery) {\n if (shouldRemoveFilter) {\n draftState.panelFilters = queryString.stringify(restFilters);\n\n // when removing the filter we use the first case,\n // so we can use panelFiltersQuery as a key in filter and clear Dictionaries\n draftState.filter[panelFiltersQuery] = draftState.clear[panelFiltersQuery];\n\n return;\n } else {\n draftState.panelFilters = panelFiltersQuery;\n }\n }\n\n if (pipeline_rank) {\n const newPipelineRank = (draftState.filter.pipeline_rank as FormCheckboxOption[]).map(rank =>\n rank.value === pipeline_rank ? { ...rank, checked: true } : rank\n );\n\n draftState.filter = { ...draftState.filter, pipeline_rank: newPipelineRank };\n }\n\n if (addon_bool) {\n draftState.filter = { ...draftState.filter, addon_bool: addon_bool as string };\n }\n};\n\nconst clearSourcingOutReachFilterOptionsReducer: CaseReducer<\n SourcingOutReachFilterState\n> = draftState => {\n const filterKeys = ['analyst_id', 'column_name', 'ddate'];\n\n if (draftState.sourcingOutReachFilterOptions) {\n filterKeys.forEach((_, index) => {\n draftState.sourcingOutReachFilterOptions![filterKeys[index]] = undefined;\n });\n }\n};\n\nconst fetchSourcingOutReachFiltersSuccessReducer: CaseReducer<\n SourcingOutReachFilterState,\n PayloadAction<FilterSource>\n> = (draftState, action) => {\n // @ts-ignore\n draftState.sourcingOutReachFilter = action.payload[0];\n};\n\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccessReducer: CaseReducer<\n SourcingOutReachFilterState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const persistedFilter = action.payload.settings.session_settings\n ? action.payload.settings.session_settings.sourcing_outreach_detail_filters\n : undefined;\n\n const selectedCardId = action.payload.settings.session_settings\n ? action.payload.settings.session_settings.my_companies_selected_card_id\n : '';\n\n if (persistedFilter !== undefined) {\n draftState.persistedFilter = persistedFilter;\n }\n\n if (selectedCardId) {\n draftState.selectedCardId = selectedCardId;\n }\n\n draftState.sessionFilter =\n action.payload.settings.session_settings?.sourcing_outreach_detail_filters;\n};\n\nconst setDefaultSourcingOutReachFiltersReducer: CaseReducer<\n SourcingOutReachFilterState,\n PayloadAction<DefaultSourcingOutReachFilters>\n> = (draftState, action) => {\n if (draftState.sourcingOutReachFilterOptions) {\n const defaultDate = [\n action.payload.tableGridQuery.ddate_lower,\n action.payload.tableGridQuery.ddate_upper,\n ];\n\n const listOfAnalystIds = action.payload.listOfAnalyst as unknown as SelectOption<string>[];\n\n const listOfColumnNames = action.payload.listOfColumNames as unknown as SelectOption<string>[];\n\n const columnName = listOfColumnNames.find(column => {\n return column.value === action.payload.tableGridQuery.column_name;\n });\n\n draftState.sourcingOutReachFilterOptions.column_name =\n columnName as unknown as SelectOption<string>;\n\n draftState.columnNamesFilterDefault = columnName as unknown as SelectOption<string>[];\n\n draftState.dateFilterDefault = defaultDate as [string | null, string | null];\n\n draftState.sourcingOutReachFilterOptions.ddate = defaultDate as [string | null, string | null];\n\n const persistedFiltersKeys = queryString.parse(draftState.sessionFilter!);\n\n let tableGridQueryAnalystId = '';\n\n if (persistedFiltersKeys.analyst_id === '') {\n draftState.sourcingOutReachFilterOptions.analyst_id = [] as unknown as SelectOption<string>;\n draftState.analystIdsFilterDefault = [] as unknown as SelectOption<string>[];\n } else if (persistedFiltersKeys.analyst_id) {\n tableGridQueryAnalystId = persistedFiltersKeys.analyst_id as string;\n } else {\n const payloadAnalystIdList = action.payload.tableGridQuery.analyst_id;\n\n if (payloadAnalystIdList) {\n tableGridQueryAnalystId = Array.isArray(payloadAnalystIdList)\n ? payloadAnalystIdList.join(',')\n : payloadAnalystIdList;\n }\n }\n\n if (tableGridQueryAnalystId) {\n let analystId: SelectOption[] = [];\n\n if (tableGridQueryAnalystId === 'All') {\n analystId = [{ label: 'All', value: 'All' }];\n } else {\n const listOfPersistedAnalystIds = tableGridQueryAnalystId\n .split(',')\n .map(list => Number(list));\n\n analystId = listOfAnalystIds.filter(analyst =>\n listOfPersistedAnalystIds.includes(analyst.value as unknown as number)\n );\n }\n\n draftState.sourcingOutReachFilterOptions.analyst_id =\n analystId as unknown as SelectOption<string>;\n\n draftState.analystIdsFilterDefault = analystId as unknown as SelectOption<string>[];\n }\n\n if (persistedFiltersKeys.column_name) {\n const listOfColumnNames = action.payload\n .listOfColumNames as unknown as SelectOption<string>[];\n\n const columnName = listOfColumnNames.find(column => {\n return column.value === persistedFiltersKeys.column_name;\n });\n\n draftState.sourcingOutReachFilterOptions.column_name =\n columnName as unknown as SelectOption<string>;\n }\n\n if (persistedFiltersKeys.ddate_lower && persistedFiltersKeys.ddate_upper) {\n draftState.sourcingOutReachFilterOptions.ddate = [\n persistedFiltersKeys.ddate_lower as any,\n persistedFiltersKeys.ddate_upper as any,\n ];\n }\n }\n};\n\nexport const fetchFiltersSuccessReducer: CaseReducer<\n SourcingOutReachFilterState,\n PayloadAction<Array<FilterSource>, any, CompanyFiltersMeta>\n> = (draftState, action) => {\n const clearedFilter = mapPreselectedFilters(action.payload, false);\n const customClearedfilter = {\n ...clearedFilter,\n ...draftState.preselectedFilter,\n };\n draftState.customClearedfilter = customClearedfilter;\n draftState.clear = clearedFilter;\n\n if (draftState.persistedFilter !== undefined) {\n // Load persisted filter if available.\n const [parsedFilters] = parseFilter(draftState.persistedFilter, action.payload);\n draftState.filter = parsedFilters;\n } else {\n draftState.filter = customClearedfilter;\n }\n\n // remove persisted filter, is not needed anymore.\n delete draftState.persistedFilter;\n draftState.fetchedAt = new Date().toISOString();\n};\n\nconst resetSessionFilterReducer: CaseReducer<SourcingOutReachFilterState> = draftState => {\n const customClearedFilter = draftState.customClearedfilter;\n draftState.sessionFilter = '';\n draftState.filter = customClearedFilter;\n draftState.sourcingOutReachFilterOptions = {};\n};\n\nconst changeCardReducer: CaseReducer<SourcingOutReachFilterState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.selectedCard = { ...draftState.cards[action.payload], id: action.payload };\n draftState.selectedCardId = action.payload;\n draftState.subFilter = '';\n\n draftState.filter = {\n ...draftState.preselectedFilter,\n ...draftState.filter,\n };\n draftState.customClearedfilter = {\n ...draftState.customClearedfilter,\n ...draftState.preselectedFilter,\n };\n};\n\nconst changeCardSubfilterSuccessReducer: CaseReducer<\n SourcingOutReachFilterState,\n PayloadAction<{ cardId: string; subFilter: string }>\n> = (draftState, action) => {\n const { cardId, subFilter } = action.payload;\n draftState.selectedCard = { ...draftState.cards[cardId], id: cardId };\n draftState.selectedCardId = cardId;\n draftState.subFilter = subFilter;\n};\n\nconst clearFilterSuccessReducer: CaseReducer<\n SourcingOutReachFilterState,\n PayloadAction<SearchStateData | null | undefined>\n> = (draftState, action) => {\n const { payload: selectedCard } = action;\n\n if (selectedCard) {\n draftState.selectedCard = selectedCard;\n }\n\n draftState.subFilter = '';\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(companyFiltersActions.fetchCompanyFiltersSuccess, fetchFiltersSuccessReducer)\n .addCase(\n companyFiltersActions.fetchCompanyFiltersForNotificationsSuccess,\n fetchFiltersSuccessReducer\n )\n .addCase(actions.updateSourcingFilterOptions, updateSourcingOutReachFilterOptionsSuccessReducer)\n .addCase(actions.updateSourcingOutReachFilters, updateSourcingOutReachFiltersReducer)\n .addCase(actions.resetStoreFilter, resetSessionFilterReducer)\n .addCase(actions.setDefaultSourcingOutReachFilters, setDefaultSourcingOutReachFiltersReducer)\n .addCase(\n actions.fetchSourcingOutReachFiltersSuccess,\n fetchSourcingOutReachFiltersSuccessReducer\n )\n .addCase(searchActions.searchCompaniesSuccess, fetchSourcingOutReachSearchSuccessReducer)\n .addCase(searchActions.clearSearch, clearSourcingOutReachFilterOptionsReducer)\n .addCase(searchActions.clearFilterSuccess, clearFilterSuccessReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n .addCase(actions.changeCard, changeCardReducer)\n .addCase(actions.changeCardSubfilterSuccess, changeCardSubfilterSuccessReducer)\n);\n\nexport default reducer;\n","import React, { useState, useEffect, useCallback, MouseEvent } from 'react';\nimport styled from 'styled-components';\nimport { Popover } from 'antd';\n// utils\nimport { styledColors } from '@optx/utils/theme/colors';\n// components\nimport { TooltipPlacement } from 'antd/lib/tooltip';\nimport Icon from '../Icon';\n\ninterface EditPopoverProps {\n content?: JSX.Element;\n title?: string;\n closePopup?: boolean;\n customOverlayStyle?: React.CSSProperties;\n setClosePopup?: (closePopup: boolean) => void;\n onClick?: () => void;\n // trigger only when popup will close\n onVisibilityChange?: () => void;\n // trigger on popup visibility change\n onVisibilityUpdate?: (visibility: boolean) => void;\n className?: string;\n hidePenIcon?: boolean;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n placement?: TooltipPlacement;\n isDynamicPopoverHeight?: boolean;\n destroyOnHide?: boolean;\n actionPendo?: string;\n overlayClassName?: string;\n}\n\n// visible is string because of firebug. if we convert to boolean there is console error.\nconst PenIcon = styled(Icon)<{ visible: string }>`\n cursor: pointer;\n visibility: ${props => (props?.visible === 'true' ? 'visible' : 'unset')};\n\n :hover {\n color: ${styledColors.blue6};\n }\n`;\n\nconst EditPopover: React.FC<EditPopoverProps> = ({\n children,\n content,\n title,\n closePopup,\n setClosePopup,\n customOverlayStyle,\n onClick,\n onVisibilityChange,\n onVisibilityUpdate,\n className,\n getPopupContainer,\n hidePenIcon = false,\n placement = 'top',\n isDynamicPopoverHeight,\n destroyOnHide = false,\n actionPendo,\n overlayClassName,\n ...rest\n}) => {\n const [popupVisibility, setPopupVisibility] = useState(false);\n const handleClick = useCallback(\n (e: MouseEvent) => {\n e.stopPropagation();\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n onClick && onClick();\n setPopupVisibility(prevState => !prevState);\n },\n [onClick, actionPendo]\n );\n\n useEffect(() => {\n if (closePopup) {\n setPopupVisibility(false);\n\n if (setClosePopup) {\n setClosePopup(false);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [closePopup, actionPendo]);\n\n const handleVisibleChange = (visible: boolean) => {\n setPopupVisibility(visible);\n };\n\n useEffect(() => {\n onVisibilityUpdate && onVisibilityUpdate(popupVisibility);\n\n if (!popupVisibility && onVisibilityChange) onVisibilityChange();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [popupVisibility]);\n\n // currently, there is an issue with antd Popover, where, if you open it from a dropdown menu option,\n // like we have on History tab, for audit fields, and it's height changes, the position of the\n // popover is recalculated by the library and it's moved somewhere outside the screen. This happens\n // for fields like Product Category, Software Company, Ops Team, Last Round and Deal Team. For now, the fix\n // is to get the initial position of the popover, which is correct, add a style tag and set the position\n // in css, using important. After the popover is closed, if these styles where created, remove them from the DOM.\n // The isDynamicPopoverHeight is used to mark fields for which it is possible for their height to change\n // setTimeout is used to allow time for popover node element to be added to the DOM and have it's position set,\n // after that we can grab the position and hardcode it in css, so that it's no longer overwritten\n useEffect(() => {\n if (isDynamicPopoverHeight && popupVisibility) {\n setTimeout(() => {\n const style = document.createElement('style');\n style.className = 'popover-position-fix';\n const popoverHTML = document.querySelector('.ant-popover') as HTMLElement;\n\n if (popoverHTML) {\n style.textContent = `\n .ant-popover {\n left: ${popoverHTML.offsetLeft}px !important;\n top: ${popoverHTML.offsetTop}px !important;\n }\n `;\n document.head.appendChild(style);\n }\n }, 1000);\n } else if (!popupVisibility) {\n const style = document.querySelectorAll('.popover-position-fix')[0];\n\n if (style) {\n style.remove();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [popupVisibility]);\n\n return (\n <div className={className}>\n <Popover\n content={content}\n title={title}\n trigger=\"click\"\n visible={popupVisibility}\n overlayStyle={customOverlayStyle}\n onVisibleChange={handleVisibleChange}\n getPopupContainer={getPopupContainer}\n placement={placement}\n destroyTooltipOnHide={destroyOnHide}\n overlayClassName={overlayClassName}\n {...rest}\n >\n <span className=\"edit-field--container\" onClick={handleClick} role=\"presentation\">\n <span className=\"edit-field--value\">{children}</span>\n {!hidePenIcon && (\n <span className=\"edit-pen\">\n <PenIcon iconName=\"pen\" visible={popupVisibility.toString()} />\n </span>\n )}\n </span>\n </Popover>\n </div>\n );\n};\n\nexport default EditPopover;\n","import numeral from 'numeral';\n// models\nimport { AbbreviateNumberParams } from '@optx/models/number';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n\n// format number to short notation (K, M...)\nexport const abbreviateNumber = ({\n value,\n maxValue,\n dot,\n roundHalfEven,\n format = '0a',\n}: AbbreviateNumberParams) => {\n if (Number(value) >= maxValue! && dot !== undefined) {\n // eslint-disable-next-line no-bitwise\n return `${numeral(dot).format(format, n => (roundHalfEven ? roundToHalfEven(n) : ~~n))}+`;\n }\n\n if (typeof value === 'string') {\n return numeral(value.toUpperCase()).format(format, n =>\n // eslint-disable-next-line no-bitwise\n roundHalfEven ? roundToHalfEven(n) : ~~n\n );\n }\n\n // eslint-disable-next-line no-bitwise\n return numeral(value).format(format, n => (roundHalfEven ? roundToHalfEven(n) : ~~n));\n};\n\n/**\n * check if a number is Even\n * @param n number to be checked\n */\nexport function isEven(n: number) {\n return n % 2 === 0;\n}\n\n/**\n * function to round a number to half even\n * @param value number to be rounded\n */\nexport function roundToHalfEven(value: number) {\n const roundedValue = Math.round(value);\n\n const expression = (value > 0 ? value : -value) % 1 === 0.5;\n\n if (expression) {\n if (isEven(roundedValue)) {\n return roundedValue;\n }\n\n return roundedValue - 1;\n }\n\n return roundedValue;\n}\n\n/**\n * function to format a monetary value when have a minus character in the beginning\n * @param value\n */\nexport const normalizeMonetaryMinusValues = (value: string) => {\n const word = value;\n const splitedWord = word.split('');\n\n if (splitedWord[0].includes('-') && value.length > 1) {\n const formatedValue = word.replace('-', '');\n\n return `-$${formatedValue}`;\n }\n\n if (value === DEFAULT_CELL_VALUE) {\n return value;\n }\n\n if (!splitedWord[0].includes('$')) {\n return `$${value}`;\n }\n\n return value;\n};\n\n/**\n * Abbreviate number greater than a threshold.\n * @param value\n * @param thresholdValue\n * @param defaultValue no numeric value defaults to \"-\"\n * @param isRoundHalfEven\n */\nexport const abbreviateValue = (\n value: number | string | null | undefined,\n thresholdValue: number = 999,\n defaultValue: string | number = DEFAULT_CELL_VALUE,\n isRoundHalfEven: boolean = false,\n format?: string | undefined\n) => {\n if (!value) return defaultValue;\n\n if (value > thresholdValue) {\n return abbreviateNumber({ value, roundHalfEven: isRoundHalfEven, format });\n }\n\n return value;\n};\n\n// parse short notation to number\nexport const parseNumberFromAbbreviation = (\n value: string | undefined,\n maxFilterValue?: number,\n minFilterValue?: number,\n inputType?: 'min' | 'max'\n) => {\n if (value === '') {\n if (inputType === 'min') {\n return numeral(minFilterValue).value();\n }\n\n if (inputType === 'max') {\n return numeral(maxFilterValue).value();\n }\n }\n\n let finalValue = value;\n\n if (typeof value === 'string' && value![value!.length - 1] === '+') {\n finalValue = value?.substring(0, value.length - 1);\n }\n\n if (typeof finalValue === 'string' && /[a-z]+$/.test(finalValue)) {\n finalValue = finalValue.toUpperCase();\n }\n\n const inputValue = numeral(finalValue).value();\n\n if (inputValue! > maxFilterValue!) {\n return numeral(maxFilterValue).value();\n }\n\n if (inputValue! < minFilterValue!) {\n return numeral(minFilterValue).value();\n }\n\n return inputValue;\n};\n\n// return true if value is negative\nexport const isNegative = (value: number) => Math.sign(value) === -1;\n\n// converts negative number to positive\nexport const convertToPositive = (value: number) => (isNegative(value) ? Math.abs(value) : value);\n\n// convert number to logarithm\nexport const logarithmNumber = (value: number) => {\n let newValue = value;\n\n // Logarithm doesnt calc negative values, so covert number to positive,\n // get the Math.log value and convert to negative.\n if (isNegative(newValue)) {\n newValue = Math.abs(newValue);\n\n return -Math.abs(Math.log(newValue));\n }\n\n return Math.log(newValue);\n};\n\n/**\n * Compute percentage value from total.\n * @param value\n * @param total\n * @param decimals number of decimals. Defaults to 0 decimals.\n */\nexport const computePercent = (value: number, total: number, decimals = 0) => {\n try {\n if (total === 0) {\n return 0;\n }\n\n return Number(((value / total) * 100).toFixed(decimals));\n } catch (error: any) {\n return 0;\n }\n};\n\n/**\n * Round negative numbers the same way as positive numbers\n * @param number\n * @param format\n */\nexport const roundNumber = (number: string | number | undefined | null, format: string) => {\n let value = number;\n\n if (value === null || value === undefined) return '';\n\n // some value is \"$421.4214,42 (plus unknown) and we need to remove the plus unknown part\"\n if (value && value.toString().includes(' (plus Unknown)')) {\n value = value.toString().split(' (')[0];\n }\n\n if (Number(value) < 0) {\n return `-${numeral(Math.abs(Number(value))).format(format)}`;\n }\n\n return numeral(value).format(format);\n};\n\n/**\n * Takes in a number or string and multiplies it by 1,000,000, then adds the decimal value if present.\n * @param {number | string} input - The number or string to be multiplied and summed.\n * @returns {number} The result of multiplying and summing the input.\n */\n\nexport const numberToMillions = (input: number | string): number => {\n let isInputNegative = Number.isNaN(Number(input)) ? false : Number(input) < 0;\n const normalizedInput = isInputNegative ? String(input).replace('-', '') : String(input);\n\n const parts = normalizedInput.split('.');\n const firstPart = Number(parts[0]) * 1000000;\n const secondPart = parts[1] ? Number('0.' + parts[1]) * 1000000 : 0;\n\n let result = firstPart + secondPart;\n\n if (isInputNegative) {\n result = -result;\n }\n\n return result;\n};\n","import { TableCellCompanyName } from '@components/common/table/AntTable/cells';\nimport { ColumnsType } from 'antd/lib/table';\nimport { SelectedCompanies } from '@optx/models/bulkActions';\n\nexport const BULK_EDIT_DEFAULT_COLUMNS: ColumnsType<SelectedCompanies> = [\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n render: TableCellCompanyName,\n },\n];\n","import { EditingFieldsState } from './interfaces';\n\nexport const getResults = (state: EditingFieldsState) => state.results;\n\nexport const isInProgress = (state: EditingFieldsState) => state.inProgress;\nexport const isCompleted = (state: EditingFieldsState) => state.completed;\nexport const getPercentageCompleted = (state: EditingFieldsState) => state.percentageCompleted;\nexport const getSelectedCompaniesCount = (state: EditingFieldsState) =>\n state.selectedCompaniesCount;\nexport const cancel = (state: EditingFieldsState) => state.cancel;\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { has } from 'lodash';\n// models\nimport { CompanyBulkEditingResults, EquityTouchBulkCompanies } from '@optx/models/bulkActions';\nimport { UserInformation } from '@optx/models/user';\nimport { EditingFieldsState } from '@features/bulk-actions/edit-fields/state/interfaces';\n// redux\nimport {\n actions as selectedCompaniesActions,\n interfaces as selectedCompaniesModels,\n} from '@features/bulk-actions/selected-companies';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport * as actions from './actions';\n\nconst initialState: EditingFieldsState = {\n results: [],\n inProgress: false,\n completed: false,\n percentageCompleted: 0,\n selectedCompaniesCount: 0,\n cancel: false,\n};\n\nconst saveResultsReducer: CaseReducer<\n EditingFieldsState,\n PayloadAction<CompanyBulkEditingResults[]>\n> = (draftState, action) => {\n draftState.results = action.payload;\n};\n\nconst updateProgressReducer: CaseReducer<EditingFieldsState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.inProgress = action.payload;\n};\n\nconst updateCompletedReducer: CaseReducer<EditingFieldsState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.completed = action.payload;\n};\n\nconst updatePercentageReducer: CaseReducer<EditingFieldsState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n const addProgress = action.payload;\n\n if (addProgress === 0 || addProgress === 100) {\n draftState.percentageCompleted = action.payload;\n } else {\n draftState.percentageCompleted += action.payload;\n }\n};\n\nconst selectCompanyIdsReducer: CaseReducer<\n EditingFieldsState,\n PayloadAction<selectedCompaniesModels.SelectedCompaniesPayload>\n> = (draftState, action) => {\n draftState.selectedCompaniesCount = action.payload.selectedCompanies.length;\n};\n\nconst resetProgressReducer: CaseReducer<EditingFieldsState> = draftState => {\n draftState.results = [];\n draftState.completed = false;\n draftState.percentageCompleted = 0;\n};\n\nconst cancelReducer: CaseReducer<EditingFieldsState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.cancel = action.payload;\n};\n\n// External reducers\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccess: CaseReducer<\n EditingFieldsState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const persistedFilter = action.payload.settings.session_settings\n ? action.payload.settings.session_settings.et_form_auto_save\n : undefined;\n\n if (persistedFilter !== null && persistedFilter !== undefined) {\n if (has(persistedFilter, 'Company Name')) {\n return;\n }\n\n const companiesById = (persistedFilter?.companiesById ?? {}) as EquityTouchBulkCompanies;\n const allCompanyIds: string[] = [];\n Object.keys(companiesById).forEach(companyId => {\n if (Number.isInteger(Number(companyId))) {\n allCompanyIds.push(companyId);\n }\n });\n draftState.selectedCompaniesCount = allCompanyIds.filter(item => item).map(item => Number(item))\n .length as number;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.saveResults, saveResultsReducer)\n .addCase(actions.updateProgress, updateProgressReducer)\n .addCase(actions.updateCompleted, updateCompletedReducer)\n .addCase(actions.updatePercentage, updatePercentageReducer)\n .addCase(actions.resetProgress, resetProgressReducer)\n .addCase(actions.cancel, cancelReducer)\n .addCase(selectedCompaniesActions.selectCompanyIds, selectCompanyIdsReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccess)\n);\n\nexport default reducer;\n","import { takeLatest, put, call, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport { AxiosResponse } from 'axios';\nimport { SelectOption } from '@optx/models/Option';\nimport { CompanyBulkEditingResults, BulkEditFieldResponse } from '@optx/models/bulkActions';\nimport { Addon } from '@optx/models/Company';\n// constants\nimport {\n BULK_EDIT_COMPANY_LIMIT_SYNCED_TO_ET,\n BULK_EDIT_COMPANY_LIMIT_ADD_TO_WATCHLIST,\n BULK_EDIT_COMPANY_LIMIT_REMOVE_FROM_WATCHLIST,\n BULK_EDIT_COMPANY_LIMIT_ADD_TAGS,\n BULK_EDIT_COMPANY_LIMIT_SET_AS_SOFTWARE_COMPANY,\n} from '@optx/config/bulkConfig';\n// services\nimport { CompanyService } from '@optx/services/api';\nimport NotificationService from '@optx/services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport * as actions from './actions';\nimport { BulkEditFields } from './interfaces';\nimport * as selectedCompaniesActions from '../../selected-companies/state/actions';\n\nfunction* bulkEditFieldSaga(action: PayloadAction<BulkEditFields>) {\n const { selectedCompanies, selectedData, field, rationale } = action.payload;\n const companies = [...selectedCompanies];\n let fieldValue: string | string[] =\n typeof selectedData === 'string' ? selectedData : selectedData[0].value;\n const extraOptions: Dictionary<string> = {};\n let dataField = field;\n let BULK_EDIT_COMPANY_LIMIT = BULK_EDIT_COMPANY_LIMIT_SYNCED_TO_ET;\n\n switch (dataField) {\n case 'watchlist':\n BULK_EDIT_COMPANY_LIMIT = BULK_EDIT_COMPANY_LIMIT_ADD_TO_WATCHLIST;\n break;\n case 'remove_from_watchlist':\n BULK_EDIT_COMPANY_LIMIT = BULK_EDIT_COMPANY_LIMIT_REMOVE_FROM_WATCHLIST;\n break;\n case 'cs_tags':\n BULK_EDIT_COMPANY_LIMIT = BULK_EDIT_COMPANY_LIMIT_ADD_TAGS;\n break;\n case 'is_software':\n BULK_EDIT_COMPANY_LIMIT = BULK_EDIT_COMPANY_LIMIT_SET_AS_SOFTWARE_COMPANY;\n break;\n case 'stage':\n extraOptions.stage_rationale = rationale as string;\n break;\n default:\n break;\n }\n\n // special case for company owner, need to send\n // equity touch related poperty names\n if (dataField === 'company_owner_id') {\n dataField = 'deal_team_leader';\n extraOptions.deal_team_leader_name = (selectedData[0] as SelectOption).label;\n }\n\n // for pipeline_rank column, we need to send rank as parameter\n if (dataField === 'pipeline_rank') {\n dataField = 'rank';\n }\n\n // for addon, we need to send the actual name and the company addon id\n let addonId;\n\n if (dataField === 'addon') {\n fieldValue = (selectedData as SelectOption[]).map(data => data.label);\n addonId = (selectedData[0] as SelectOption).id;\n }\n\n if (dataField === 'product_category') {\n fieldValue = (selectedData as SelectOption[]).map(data => data.label).join(',');\n }\n\n if (dataField === 'cs_tags') {\n const arrayOfTags: string[] = [];\n\n (selectedData as SelectOption[]).forEach(company => {\n arrayOfTags.push(company.value);\n });\n\n fieldValue = arrayOfTags.toString();\n }\n\n const companiesBatch = companies.slice(0, BULK_EDIT_COMPANY_LIMIT);\n\n try {\n const res: AxiosResponse<Dictionary<BulkEditFieldResponse>> = yield call(\n CompanyService.bulkEdit,\n companiesBatch.map(company => company.company_id),\n dataField,\n fieldValue,\n extraOptions\n );\n\n if (res.data) {\n const failedCompanies = res.data;\n const currentResults: CompanyBulkEditingResults[] = yield select(\n bulkActionsSelectors.editFields.results\n );\n const nextResults: CompanyBulkEditingResults[] = [];\n\n yield put(\n actions.updatePercentage(Math.round((BULK_EDIT_COMPANY_LIMIT / companies.length) * 100))\n );\n\n companiesBatch.forEach(company => {\n const { company_id: id, company_url: url, company_name: name, raw_url: rawUrl } = company;\n let errorMessage = '';\n let scoreInfo = null;\n\n if (Object.keys(failedCompanies).includes(id.toString())) {\n errorMessage = !failedCompanies[id].status\n ? failedCompanies[id].reason_to_failed ?? ''\n : '';\n\n if (field === 'company_owner_id' || field === 'stage') {\n scoreInfo = {\n score: failedCompanies[id].optx_score,\n score_growth: failedCompanies[id].optx_score_growth,\n optx_score_trends: failedCompanies[id].optx_score_trends,\n score_v3: failedCompanies[id].score_v3,\n score_v3_growth: failedCompanies[id].score_v3_growth,\n optx_score_v3_trends: failedCompanies[id].optx_score_v3_trends,\n il_optx_score: failedCompanies[id].il_optx_score,\n il_score_growth: failedCompanies[id].il_optx_score_growth,\n il_optx_score_trends: failedCompanies[id].il_optx_score_trends,\n };\n }\n }\n\n nextResults.push({\n company_id: id,\n company_url: url,\n raw_url: rawUrl,\n company_name: name,\n sync_status: !errorMessage,\n error_reason: errorMessage,\n ...(scoreInfo && scoreInfo),\n });\n });\n\n const finalResults = [...currentResults, ...nextResults];\n\n yield put(actions.saveResults(finalResults));\n\n companies.splice(0, BULK_EDIT_COMPANY_LIMIT);\n const cancelSearch: boolean = yield select(bulkActionsSelectors.editFields.cancel);\n\n if (!cancelSearch) {\n if (companies.length) {\n yield put(\n actions.bulkEditField({ selectedCompanies: companies, selectedData, field, rationale })\n );\n } else {\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage(100));\n\n const successfulResults = finalResults.filter(company => company.sync_status);\n\n if (successfulResults) {\n yield put(\n actions.bulkEditFieldSuccess({\n companyIds: successfulResults.map(company => company.company_id),\n selectedData,\n field,\n ...((field === 'company_owner_id' || field === 'stage') && {\n additionalInfo: successfulResults,\n }),\n ...(field === 'stage' ? { rationale: extraOptions?.stage_rationale } : {}),\n ...(field === 'addon' && { additionalAddonId: addonId }),\n })\n );\n\n if (field !== 'cs_tags') {\n let formattedValue: string | string[] | Addon | null = (\n selectedData[0] as SelectOption\n ).label;\n\n if (field === 'product_category') {\n formattedValue = (selectedData as SelectOption[]).map(data => data.label);\n }\n\n if (field === 'addon') {\n const hasBlankOption = (selectedData as SelectOption[]).some(\n option => option.value === 'None'\n );\n\n let addons: Addon | null = null;\n\n if (!hasBlankOption) {\n addons = (selectedData as SelectOption[]).reduce((acc, curr) => {\n return { ...acc, [curr.value]: curr.id };\n }, {});\n }\n\n formattedValue = addons;\n }\n\n yield put(\n selectedCompaniesActions.bulkUpdateDataSuccess({\n updatedCompaniesIds: successfulResults.map(company => company.company_id),\n changedValue: formattedValue,\n editFieldKey: field === 'company_owner_id' ? 'company_owner' : field,\n ...(field === 'stage' ? { extraOptions } : {}),\n })\n );\n }\n }\n }\n } else {\n const canceledCompanies: CompanyBulkEditingResults[] = [];\n const prevResults: CompanyBulkEditingResults[] = yield select(\n bulkActionsSelectors.editFields.results\n );\n\n if (companies.length) {\n companies.forEach(company => {\n const {\n company_id: id,\n company_url: url,\n company_name: name,\n raw_url: rawUrl,\n } = company;\n\n canceledCompanies.push({\n company_id: id,\n company_url: url,\n raw_url: rawUrl,\n company_name: name,\n sync_status: false,\n error_reason: 'Canceled by user',\n });\n });\n }\n\n yield put(actions.saveResults([...prevResults, ...canceledCompanies]));\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.cancel(false));\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n }\n } catch (e: any) {\n const message = getErrorMessage(e, 'Failed to edit fields!');\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.cancel(false));\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n NotificationService.error(message);\n }\n}\n\nexport default function* bulkEditSaga() {\n yield takeLatest(actions.bulkEditField, bulkEditFieldSaga);\n}\n","import React from 'react';\nimport { Result, Button, Progress } from 'antd';\nimport { useSelector } from 'react-redux';\nimport styled from 'styled-components';\n// redux\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\n\nconst ProgressWrapper = styled(Progress)`\n .ant-progress-inner {\n box-shadow: inset 1px 1px 3px rgba(0, 0, 0, 0.08);\n }\n`;\n\nconst ResultWrapper = styled(Result)`\n padding: 48px 32px;\n`;\n\ninterface InProgressProps {\n visibilityChange: (visibility: boolean) => void;\n}\n\nconst InProgress: React.FC<InProgressProps> = ({ visibilityChange }) => {\n const percentage = useSelector(bulkActionsSelectors.editFields.percentageCompleted);\n\n const handleCancel = (event: React.MouseEvent<HTMLElement>) => {\n if (event && event.currentTarget) {\n event.currentTarget.blur();\n }\n\n visibilityChange(true);\n };\n\n return (\n <>\n <ProgressWrapper percent={percentage} showInfo={false} />\n <ResultWrapper\n key=\"in-progress-key\"\n status=\"success\"\n title=\"In Progress\"\n subTitle=\"Depending on the number of companies, this may take awhile\"\n icon={<></>}\n extra={[<Button onClick={handleCancel}>Cancel</Button>]}\n />\n </>\n );\n};\n\nexport default InProgress;\n","import React from 'react';\nimport { Result } from 'antd';\nimport { useSelector } from 'react-redux';\nimport styled from 'styled-components';\n// redux\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport { SelectedCompaniesGrids } from '@optx/models/bulkActions';\n\nconst ResultWrapper = styled(Result)`\n padding: 48px 32px;\n`;\n\ninterface CompletedProps {\n fieldName: string;\n gridName: SelectedCompaniesGrids;\n}\n\nconst Completed: React.FC<CompletedProps> = ({ fieldName, gridName }) => {\n const successfulCount = useSelector(\n fieldName === 'Software'\n ? bulkActionsSelectors.software.getSuccessCount\n : fieldName === 'AI / ML'\n ? bulkActionsSelectors.aiMl.getSuccessCount\n : bulkActionsSelectors.editFields.successfulCount\n );\n const totalCount = useSelector(\n bulkActionsSelectors.selectedCompanies.getSelectedCompanies(gridName)\n );\n\n let proccessName: string;\n\n if (fieldName === 'Watchlist') {\n proccessName = 'added to the Watchlists';\n } else if (fieldName === 'AI / ML') {\n proccessName = 'Updated for AI / ML';\n } else {\n proccessName = 'Set as Software Company';\n }\n\n return (\n <>\n {fieldName === 'Watchlist' || fieldName === 'Software' || fieldName === 'AI / ML' ? (\n <ResultWrapper\n key=\"result-wrapper-key\"\n status={!successfulCount ? 'error' : 'success'}\n title={`${successfulCount || 0}/${totalCount.length} ${\n totalCount.length === 1 ? 'Company' : 'Companies'\n } ${successfulCount === 0 ? proccessName : `Successfully ${proccessName}`}`}\n />\n ) : (\n <ResultWrapper\n key=\"result-wrapper-key\"\n status={!successfulCount ? 'error' : 'success'}\n title={`${successfulCount || 0}/${totalCount.length} ${\n totalCount.length === 1 ? 'Company' : \"Companies'\"\n } ${fieldName === 'Company Owner' ? 'Owner' : fieldName} Successfully Set`}\n subTitle=\"It may take up to 5 minutes for the data to show in Equity Touch\"\n />\n )}\n </>\n );\n};\n\nexport default Completed;\n","import { ColumnType } from 'antd/lib/table';\n// redux\nimport { CompanyBulkEditingResults } from '@optx/models/bulkActions';\n// components\nimport {\n TableCellURL,\n TableCellCompanyName,\n TableCellStatus,\n} from '@components/common/table/AntTable/cells';\nimport { TableCellErrorReason } from './cells';\n\nconst columns: ColumnType<CompanyBulkEditingResults>[] = [\n {\n dataIndex: 'company_url',\n title: '',\n render: (value: string, record: CompanyBulkEditingResults) => (\n <TableCellURL value={value} record={{ url: record.raw_url }} />\n ),\n width: 42,\n align: 'center',\n },\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n render: TableCellCompanyName,\n },\n {\n dataIndex: 'sync_status',\n title: 'Sync Status',\n render: TableCellStatus,\n },\n {\n dataIndex: 'error_reason',\n title: 'Error Reason',\n className: 'contact-cell',\n render: TableCellErrorReason,\n },\n];\n\nexport default columns;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Table } from 'antd';\n// constants\nimport { defaultColumns } from '@components/common/table/TableBulkEditingResults';\n// redux\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\n\nconst BulkEditingResults: React.FC = () => {\n const results = useSelector(bulkActionsSelectors.editFields.results);\n\n return (\n <Table\n tableLayout=\"fixed\"\n columns={defaultColumns}\n rowKey={'company_id'}\n dataSource={results}\n pagination={false}\n bordered\n className=\"legacy-table\"\n style={{ maxHeight: '45vh', overflowY: 'auto' }}\n />\n );\n};\n\nexport default BulkEditingResults;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// redux\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\n// components\nimport { SelectedCompaniesGrids, SelectedCompaniesKeys } from '@optx/models/bulkActions';\nimport InProgress from './InProgress';\nimport Completed from './Completed';\nimport BulkEditingResults from './BulkEditingResults';\n\ninterface BulkEditCompletionProps {\n visibilityChange: (visibility: boolean) => void;\n fieldName: string;\n gridName: SelectedCompaniesGrids;\n editField: SelectedCompaniesKeys;\n}\n\nconst BulkEditCompletion: React.FC<BulkEditCompletionProps> = ({\n visibilityChange,\n fieldName,\n editField,\n gridName,\n}) => {\n const completed = useSelector(bulkActionsSelectors.editFields.isCompleted);\n\n return (\n <>\n {completed ? (\n <Completed fieldName={fieldName} gridName={gridName} />\n ) : (\n <InProgress visibilityChange={visibilityChange} />\n )}\n {!['remove_from_watchlist', 'is_software', 'is_ai_ml'].includes(editField) ? (\n <BulkEditingResults />\n ) : null}\n </>\n );\n};\n\nexport default BulkEditCompletion;\n","import styled from 'styled-components';\nimport { Modal, Row, Col } from 'antd';\nimport { ColProps } from 'antd/lib/col';\nimport { ModalProps } from 'antd/lib/modal';\n\ninterface ModalWrapperProps extends ModalProps {\n isCompleted: boolean;\n}\n\ninterface BoxWrapperProps extends ColProps {\n width?: string;\n $isStageField?: boolean;\n}\n\nconst ModalWrapper = styled(Modal)<ModalWrapperProps>`\n top: 50%;\n transform: translateY(-50%);\n padding: 0;\n\n .ant-modal-header,\n .ant-modal-footer {\n border-color: #e8e8e8;\n }\n\n .ant-modal-body {\n background: #f3f6f9;\n }\n\n th.ant-table-cell {\n padding: 19px 7px;\n }\n\n .ant-table-wrapper {\n height: 400px;\n overflow-y: auto;\n }\n\n .ant-btn:first-child {\n display: ${props => (props.isCompleted ? 'none' : 'inline-block')};\n }\n`;\n\nconst RowWrapper = styled(Row)`\n justify-content: space-between;\n padding: 13px 15px;\n`;\n\nconst BoxWrapper = styled(Col)<BoxWrapperProps>`\n width: ${({ width }) => width || 'calc(50% - 17px)'};\n padding: 20px 30px;\n background: #fff;\n box-shadow: 0px 0px 10px rgba(66, 17, 115, 0.06);\n border-radius: 8px;\n ${({ $isStageField }) => $isStageField && 'min-height: 255px;'};\n\n .ant-typography:not(.multiselect__value-container .ant-typography) {\n display: inline-block;\n margin-bottom: 13px;\n }\n`;\n\nexport const Styled = {\n ModalWrapper,\n RowWrapper,\n BoxWrapper,\n};\n","import React, { useContext, Context, useState, useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useUnmount } from '@umijs/hooks';\nimport { useLocation } from 'react-router';\nimport { Table, Typography, Modal, Alert, Tooltip } from 'antd';\n// models\nimport { ProductCategory } from '@optx/models/Company';\nimport {\n BulkEditFieldContext,\n SelectedCompanies,\n SelectedCompaniesKeys,\n} from '@optx/models/bulkActions';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { MERGE_COMPANIES_LIMIT } from '@optx/config/bulkConfig';\n// utils\nimport { showRationaleForStage } from '@optx/utils/helpers';\n// redux\nimport { BULK_EDIT_DEFAULT_COLUMNS } from '@features/bulk-actions/edit-fields/state/constants';\nimport {\n resetProgress,\n updateProgress,\n bulkEditField,\n cancel,\n} from '@features/bulk-actions/edit-fields/state/actions';\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as searchCountSelectors } from '@features/grid/search-count';\nimport { actions as addonActions } from '@redux/company/addon-management';\nimport {\n actions as addToWatchListActions,\n actions as removeFromWatchListActions,\n} from '@features/bulk-actions/bulk-watchlist';\nimport { actions as bulkSoftwareActions } from '@features/bulk-actions/bulk-software';\nimport { actions as bulkAiMlActions } from '@features/bulk-actions/bulk-ai-ml';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport { getIsAdminOrAnalyst } from '@optx/redux/user/information/selectors';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { actions as listsActions, selectors as listSelectors } from '@redux/favorite-lists/lists';\nimport { actions as bulkMergeCompaniesActions } from '@optx/features/bulk-actions/bulk-merge-companies';\n// components\nimport { BULK_MERGE_COMPANIES_COLUMNS } from '@optx/features/bulk-actions/bulk-merge-companies/constants';\nimport BulkEditCompletion from '../bulk-edit-progress/BulkEditCompletion';\n// styles\nimport { Styled } from './BulkEditModal.styled';\n\ninterface BulkEditModalProps {\n title: string;\n visible: boolean;\n changeVisibility: (visible: boolean) => void;\n editField: SelectedCompaniesKeys;\n editFieldTitle: string;\n column: string;\n context: Context<BulkEditFieldContext>;\n selectedCompanies: SelectedCompanies[];\n isValid: boolean;\n validation: (isValid: boolean) => void;\n}\n\nconst renderProductCategoriesTitle = (productCategory: ProductCategory[] | null | string[]) => {\n if (productCategory?.length === 0) {\n return DEFAULT_EMPTY_VALUE;\n }\n\n return (productCategory as ProductCategory[])?.map(category => category.category).join(', ');\n};\n\nexport const BulkEditModal: React.FC<BulkEditModalProps> = ({\n title,\n visible,\n changeVisibility,\n editField,\n editFieldTitle,\n column,\n context,\n selectedCompanies,\n children,\n isValid,\n validation,\n}) => {\n const dispatch = useDispatch();\n const location = useLocation();\n const { selectedData, setSelectedData, gridName } = useContext(context);\n const { rationaleValue } = useContext(context);\n const [confirmationVisibility, setConfirmationVisibility] = useState(false);\n const isInProgress = useSelector(bulkActionsSelectors.editFields.isInProgress);\n const listId = location.pathname.split('/')[2];\n const searchCompanyCount = useSelector(searchCountSelectors.getSearchCount('lists'));\n const isCompleted = useSelector(bulkActionsSelectors.editFields.isCompleted);\n const isAddonGridRefreshed = column === 'addon' && gridName === 'addons';\n\n const isFetchingInProgress = useSelector(listSelectors.isLoading);\n const [isWatchlistStateUpdating, setIsWatchlistStateUpdating] = useState(isFetchingInProgress);\n\n const isAdminOrAnalyst = useSelector(getIsAdminOrAnalyst);\n\n const okText = useMemo(() => {\n switch (isCompleted) {\n case true:\n return 'Close';\n\n case false:\n if (editField === 'merge_companies') return 'Merge';\n if (editField === 'remove_from_watchlist' || editField === 'remove_from_addon_management')\n return 'Remove';\n\n return 'Add';\n\n default:\n return 'Add';\n }\n }, [editField, isCompleted]);\n\n useEffect(() => {\n setIsWatchlistStateUpdating(isFetchingInProgress);\n }, [isFetchingInProgress]);\n\n const selectedCompaniesNumber = useMemo(() => {\n const { length } = selectedCompanies;\n\n if (editField === 'merge_companies') {\n switch (true) {\n case length >= MERGE_COMPANIES_LIMIT:\n return MERGE_COMPANIES_LIMIT;\n\n default:\n return length;\n }\n } else {\n return length;\n }\n }, [editField, selectedCompanies]);\n\n const handleOk = () => {\n if (isCompleted) {\n dispatch(resetProgress());\n changeVisibility(false);\n } else if (isValid && editField === 'watchlist') {\n dispatch(updateProgress(true));\n dispatch(\n addToWatchListActions.bulkAddToWatchList({\n selectedCompanies,\n selectedData: selectedData as SelectOption<string>[],\n field: editField,\n })\n );\n } else if (isValid && editField === 'remove_from_watchlist') {\n dispatch(updateProgress(true));\n dispatch(\n removeFromWatchListActions.bulkRemoveFromWatchList({\n selectedCompanies,\n listId,\n listDetailCount: searchCompanyCount,\n })\n );\n } else if (isValid && editField === 'remove_from_addon_management') {\n dispatch(updateProgress(true));\n dispatch(\n addonActions.bulkRemoveAddon({\n selectedCompanies,\n })\n );\n } else if (isValid && editField === 'is_ai_ml') {\n dispatch(updateProgress(true));\n dispatch(\n bulkAiMlActions.bulkAiMl({\n selectedCompanies,\n isAiMl: selectedData === DEFAULT_EMPTY_VALUE ? null : (selectedData as boolean),\n })\n );\n } else if (isValid && ((selectedData as SelectOption[]).length || editField === 'rationale')) {\n dispatch(updateProgress(true));\n dispatch(\n bulkEditField({\n selectedCompanies,\n // special case for rationale, if user wants to send an empty value,\n // we must pass 'blank' text to the endpoint\n selectedData: (editField === 'rationale' && !(selectedData as SelectOption[]).length\n ? 'blank'\n : selectedData) as SelectOption[] | string,\n field: editField,\n ...(editField === 'stage' ? { rationale: rationaleValue } : {}),\n })\n );\n } else if (editField === 'merge_companies') {\n dispatch(updateProgress(true));\n dispatch(\n bulkMergeCompaniesActions.bulkMergeCompanies({\n selectedCompanies: selectedCompanies.slice(0, MERGE_COMPANIES_LIMIT),\n })\n );\n } else if (editField === 'is_software') {\n dispatch(updateProgress(true));\n dispatch(\n bulkSoftwareActions.bulkSoftware({\n selectedCompanies,\n isSoftware: selectedData as boolean,\n rationale: rationaleValue,\n isAdminOrAnalyst,\n })\n );\n }\n\n if (column === 'watchlist' && isCompleted) {\n dispatch(listsActions.resetFetchedAt());\n }\n\n if (column === 'remove_from_watchlist' && isCompleted) {\n setTimeout(() => {\n dispatch(searchActions.initialCompaniesSearch({ gridKey: 'lists', data: undefined }));\n }, 200);\n }\n\n if ((column === 'remove_from_addon_management' || isAddonGridRefreshed) && isCompleted) {\n dispatch(\n addonActions.fetchAdditionalFilters({\n companyId: Number(listId),\n shouldBeAddedToLoading: true,\n isBulkRemoved: true,\n })\n );\n }\n };\n\n const handleOkConfirmation = () => {\n dispatch(cancel(true));\n dispatch(customGlobalLoaderActions.toggle({ loading: true, customText: 'Canceling...' }));\n setConfirmationVisibility(false);\n };\n\n const handleCancelConfirmation = () => {\n setConfirmationVisibility(false);\n };\n\n useUnmount(() => {\n handleCancel();\n });\n\n useEffect(() => {\n if (isInProgress === false) {\n setConfirmationVisibility(false);\n }\n }, [isInProgress]);\n\n const handleCancel = () => {\n if (isInProgress) {\n setConfirmationVisibility(true);\n } else {\n dispatch(resetProgress());\n\n if (column === 'watchlist' && isCompleted) {\n dispatch(listsActions.resetFetchedAt());\n }\n\n if (column === 'remove_from_watchlist' && isCompleted) {\n setTimeout(() => {\n dispatch(searchActions.initialCompaniesSearch({ gridKey: 'lists', data: undefined }));\n }, 200);\n }\n\n setSelectedData([]);\n changeVisibility(false);\n }\n };\n\n const notDisplayedColumns = [\n 'fund',\n 'tags',\n 'rationale',\n 'remove_from_watchlist',\n 'remove_from_addon_management',\n 'is_software',\n 'is_ai_ml',\n 'watchlist',\n ];\n\n const defaultColumnRender = {\n dataIndex: column,\n title: editFieldTitle,\n render: (column: string) => (\n <Tooltip placement=\"topLeft\" title={column}>\n {column}\n </Tooltip>\n ),\n };\n\n const customColumnRenders = {\n product_category: {\n dataIndex: ['product_category', 'category'],\n title: editFieldTitle,\n render: (column: string, record: SelectedCompanies) => (\n <Tooltip placement=\"topLeft\" title={renderProductCategoriesTitle(record.product_category)}>\n {renderProductCategoriesTitle(record.product_category)}\n </Tooltip>\n ),\n },\n addon: {\n dataIndex: 'addon',\n title: editFieldTitle,\n render: (column: string, record: SelectedCompanies) =>\n Object.keys(record.addon || {}).join(', '),\n },\n };\n\n const columnRender =\n customColumnRenders[column as keyof typeof customColumnRenders] || defaultColumnRender;\n\n const mergeCompaniesColumns = [...BULK_MERGE_COMPANIES_COLUMNS];\n const columns = [\n ...BULK_EDIT_DEFAULT_COLUMNS,\n ...(!notDisplayedColumns.includes(column) ? [columnRender] : []),\n ];\n\n useEffect(() => {\n // when closing the modal reset selected data\n !visible && setSelectedData([]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visible]);\n\n useEffect(() => {\n if (editField === 'merge_companies' && isCompleted) {\n changeVisibility(false);\n dispatch(resetProgress());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editField, isCompleted]);\n\n // sort selectedCompanies in bulkEditModal\n\n const sortedSelected = () => {\n const sortedSelectedCompanies = [...selectedCompanies];\n\n return sortedSelectedCompanies.sort((CompanyA, CompanyB) =>\n CompanyA.company_name > CompanyB.company_name ? 1 : -1\n );\n };\n\n const dataSource =\n editField === 'merge_companies'\n ? selectedCompanies.slice(0, MERGE_COMPANIES_LIMIT)\n : sortedSelected();\n\n return (\n <>\n <Styled.ModalWrapper\n title={title}\n visible={visible}\n onOk={handleOk}\n onCancel={handleCancel}\n width={editField === 'is_software' ? 1045 : 840}\n okText={okText}\n okButtonProps={{\n loading: isInProgress || isWatchlistStateUpdating,\n disabled:\n (selectedData.toString() === '' && editField === 'watchlist') ||\n (editField === 'merge_companies' && dataSource.length !== MERGE_COMPANIES_LIMIT) ||\n (editField === 'stage' &&\n Array.isArray(selectedData) &&\n selectedData.length !== 0 &&\n showRationaleForStage((selectedData as SelectOption<string>[])[0].label) &&\n !rationaleValue),\n }}\n destroyOnClose\n isCompleted={isCompleted}\n >\n {(isInProgress || isCompleted) && editField !== 'merge_companies' ? (\n <BulkEditCompletion\n visibilityChange={setConfirmationVisibility}\n gridName={gridName}\n fieldName={editFieldTitle}\n editField={editField}\n />\n ) : (\n <Styled.RowWrapper>\n <Styled.BoxWrapper\n width={\n editField === 'merge_companies' ||\n editField === 'remove_from_watchlist' ||\n editField === 'remove_from_addon_management'\n ? '100%'\n : undefined\n }\n >\n <Typography.Text className=\"ant-modal-title\">\n {selectedCompaniesNumber} Selected Companies\n </Typography.Text>\n <Table\n tableLayout=\"fixed\"\n columns={editField === 'merge_companies' ? mergeCompaniesColumns : columns}\n rowKey={'company_id'}\n dataSource={dataSource}\n pagination={false}\n bordered\n className=\"legacy-table\"\n />\n {editField === 'merge_companies' &&\n selectedCompanies.length !== MERGE_COMPANIES_LIMIT && (\n <Alert\n type=\"error\"\n message={`Only ${MERGE_COMPANIES_LIMIT} companies can be merged.`}\n className=\"mt-4\"\n />\n )}\n </Styled.BoxWrapper>\n {editField !== 'merge_companies' &&\n editField !== 'remove_from_watchlist' &&\n editField !== 'remove_from_addon_management' && (\n <Styled.BoxWrapper $isStageField={editField === 'stage'}>\n {children}\n </Styled.BoxWrapper>\n )}\n </Styled.RowWrapper>\n )}\n </Styled.ModalWrapper>\n <Modal\n title=\"Confirmation\"\n visible={confirmationVisibility}\n onOk={handleOkConfirmation}\n onCancel={handleCancelConfirmation}\n destroyOnClose\n >\n Are you sure you want to cancel the operation?\n </Modal>\n </>\n );\n};\n","import React, { useState, useContext, Context } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Typography } from 'antd';\nimport { ValueType } from 'react-select';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { AppState } from '@optx/redux/interfaces';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { showRationaleForStage } from '@optx/utils/helpers';\n// redux\nimport { selectors } from '@components/feature/company-individual-edit/state';\nimport { getFormRationales } from '@optx/redux/company/filters/selectors';\n// components\nimport SingleSelect from '@optx/components/common/select/SingleSelect';\nimport RationaleSection from '@optx/features/company/edit-fields/components/RationaleSection';\n\ninterface EditStageProps {\n context: Context<BulkEditFieldContext>;\n}\n\nexport const EditStage: React.FC<EditStageProps> = ({ context }) => {\n const { setSelectedData, setRationaleValue } = useContext(context);\n\n const initialSelectValue = { value: '', label: '' };\n const [selectedValue, setSelectedValue] = useState(initialSelectValue);\n const [selectedRationale, setSelectedRationale] = useState<string | null>(null);\n\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.stageOptions),\n ];\n\n const isLoadingInfo = useSelector(selectors.companyIndividualEdit.isLoadingInfo);\n\n const rationaleOptions = useSelector(\n (state: AppState) => getFormRationales(state, 'stage_pass_dead_rationales') ?? []\n );\n\n const handleRationaleChange = (value: string) => {\n setSelectedRationale(value);\n setRationaleValue(value);\n };\n\n const otherRationaleOption =\n selectedRationale && rationaleOptions.find(rationale => rationale.value === selectedRationale)\n ? ''\n : selectedRationale;\n\n const showIsOtherOrTag = (key?: string) => {\n const values = rationaleOptions.map(option => option.value).slice(0, -1);\n\n if (key === 'tag') {\n return !!(\n otherRationaleOption &&\n otherRationaleOption !== DEFAULT_EMPTY_VALUE &&\n !values.includes(otherRationaleOption)\n );\n }\n\n if (!selectedRationale) {\n return false;\n }\n\n return !!(\n !values.includes(selectedRationale) &&\n selectedRationale !== undefined &&\n selectedRationale !== DEFAULT_EMPTY_VALUE &&\n selectedRationale.length > 0\n );\n };\n\n const handleOtherChange = (option: React.SetStateAction<string | null>) => {\n if (option !== DEFAULT_EMPTY_VALUE) {\n setSelectedRationale(option);\n\n if (typeof option === 'string') {\n setRationaleValue(option);\n } else {\n setRationaleValue(undefined);\n }\n }\n };\n\n const handleSelectChange = (option: ValueType<SelectOption<string>>) => {\n setSelectedValue(option as SelectOption);\n setSelectedData([option as SelectOption]);\n setRationaleValue(undefined);\n setSelectedRationale(null);\n };\n\n const customRationaleValue = showIsOtherOrTag() ? 'other' : selectedRationale;\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">Select New Stage</Typography.Text>\n\n <SingleSelect\n placeholder=\"search or select stage\"\n options={selectOptions}\n onChange={handleSelectChange}\n value={selectedValue}\n isLoading={isLoadingInfo}\n closeMenuOnSelect={true}\n className=\"single-select-menu-is-opened-container is-stage\"\n maxMenuHeight={200}\n />\n\n {showRationaleForStage(selectedValue.label) && (\n <RationaleSection\n rationaleOptions={rationaleOptions}\n rationaleValue={customRationaleValue}\n handleRationaleChange={handleRationaleChange}\n otherRationaleValue={otherRationaleOption}\n showIsOtherOrTag={showIsOtherOrTag}\n handleOtherChange={handleOtherChange}\n isRationaleRequired\n isHeightOverflow\n />\n )}\n </>\n );\n};\n","import React, { useState, useContext, Context } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Typography } from 'antd';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// components\nimport SingleSelect from '@optx/components/common/select/SingleSelect';\n// redux\nimport { selectors } from '@components/feature/company-individual-edit/state';\n\ninterface EditPipelineRankProps {\n context: Context<BulkEditFieldContext>;\n}\n\nexport const EditPipelineRank: React.FC<EditPipelineRankProps> = ({ context }) => {\n const { setSelectedData } = useContext(context);\n\n const initialSelectValue = { value: '', label: '' };\n const [selectedValue, setSelectedValue] = useState(initialSelectValue);\n\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.rankOptions),\n ];\n const isLoadingInfo = useSelector(selectors.companyIndividualEdit.isLoadingInfo);\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">Select New Pipeline Rank</Typography.Text>\n\n <SingleSelect\n options={selectOptions}\n onChange={option => {\n setSelectedValue(option as SelectOption);\n setSelectedData([option as SelectOption]);\n }}\n value={selectedValue}\n menuIsOpen\n isLoading={isLoadingInfo}\n className=\"single-select-menu-is-opened-container\"\n maxMenuHeight={200}\n />\n </>\n );\n};\n","import React, { useState, useContext, Context } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Typography } from 'antd';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// components\nimport SingleSelect from '@optx/components/common/select/SingleSelect';\n// redux\nimport { selectors } from '@components/feature/company-individual-edit/state';\n\ninterface EditCompanyOwnerProps {\n context: Context<BulkEditFieldContext>;\n}\n\nexport const EditCompanyOwner: React.FC<EditCompanyOwnerProps> = ({ context }) => {\n const { setSelectedData } = useContext(context);\n\n const initialSelectValue = { value: '', label: '' };\n const [selectedValue, setSelectedValue] = useState(initialSelectValue);\n\n const selectOptions: SelectOption[] = [\n { value: 'blank', label: 'Unowned' },\n ...useSelector(selectors.companyIndividualEdit.companyOwnerOptions),\n ];\n const isLoadingInfo = useSelector(selectors.companyIndividualEdit.isLoadingInfo);\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">\n Select New Company Owner (Last Name)\n </Typography.Text>\n\n <SingleSelect\n options={selectOptions}\n onChange={option => {\n setSelectedValue(option as SelectOption);\n setSelectedData([option as SelectOption]);\n }}\n value={selectedValue}\n menuIsOpen\n isLoading={isLoadingInfo}\n className=\"single-select-menu-is-opened-container\"\n maxMenuHeight={200}\n />\n </>\n );\n};\n","import React, { useState, useContext, Context } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Typography } from 'antd';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// components\nimport SingleSelect from '@optx/components/common/select/SingleSelect';\n// redux\nimport { selectors } from '@components/feature/company-individual-edit/state';\n\ninterface EditFundProps {\n context: Context<BulkEditFieldContext>;\n}\n\nexport const EditFund: React.FC<EditFundProps> = ({ context }) => {\n const { setSelectedData } = useContext(context);\n\n const initialSelectValue = { value: 'None', label: 'None' };\n const [selectedValue, setSelectedValue] = useState(initialSelectValue);\n\n const selectOptions = useSelector(selectors.companyIndividualEdit.fundOptions);\n const isLoadingInfo = useSelector(selectors.companyIndividualEdit.isLoadingInfo);\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">Select New Fund</Typography.Text>\n\n <SingleSelect\n options={selectOptions}\n onChange={option => {\n setSelectedValue(option as SelectOption);\n setSelectedData([option as SelectOption]);\n }}\n value={selectedValue}\n menuIsOpen\n isLoading={isLoadingInfo}\n className=\"single-select-menu-is-opened-container\"\n maxMenuHeight={200}\n />\n </>\n );\n};\n","import React, { useState, useContext, Context } from 'react';\nimport { Typography, Input } from 'antd';\n// models\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n\ninterface EditRationaleProps {\n context: Context<BulkEditFieldContext>;\n isValid: boolean;\n validation: (isValid: boolean) => void;\n}\n\nexport const EditRationale: React.FC<EditRationaleProps> = ({ context, isValid, validation }) => {\n const { setSelectedData } = useContext(context);\n\n const [value, setValue] = useState('');\n\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n const value = event.target.value;\n setValue(value);\n\n if (value.length > 500 && isValid) {\n validation(false);\n } else if (value.length <= 500 && !isValid) {\n validation(true);\n }\n };\n\n const handleBlur = () => {\n setSelectedData(value);\n };\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">Add New Rationale</Typography.Text>\n <Input.TextArea rows={6} value={value} onChange={handleChange} onBlur={handleBlur} />\n {!isValid && (\n <Typography.Text style={{ color: '#ff4d4f' }}>Maximum 500 characters</Typography.Text>\n )}\n </>\n );\n};\n","import styled from 'styled-components';\n\nconst AsyncWrapper = styled.div`\n .multiselect-select {\n &__control {\n border: 1px solid #d9d9d9;\n border-radius: 0;\n\n .multiselect-select__value-container {\n padding-left: 34px;\n height: 40px;\n\n .multiselect-select__value-container__icon {\n position: absolute;\n top: 10px;\n left: 12px;\n height: 14px;\n }\n }\n\n .multiselect-select__indicator-separator {\n display: none;\n }\n }\n\n &__menu {\n margin-top: -1px;\n border-radius: 0;\n box-shadow: none;\n border: 1px solid #d9d9d9;\n position: static;\n }\n }\n`;\n\nconst Styles = {\n AsyncWrapper,\n};\n\nexport default Styles;\n","import React, { Context, useContext, useState } from 'react';\nimport { Typography } from 'antd';\nimport { OptionsType } from 'react-select';\nimport { debounce } from 'lodash';\n// models\nimport { SuccessErrorCallback } from '@models/callback';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { GET_ET_COMPANIES_ENDPOINT } from '@constants/asyncEndpoints';\nimport { SEARCH_MINIMUM_CHAR_COUNT } from '@optx/constants/search';\n// hooks\nimport useAsyncSearch from '@hooks/select/useAsyncSearch';\n// components\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\nimport { AsyncMultiSelect } from '@optx/shared/view/molecules/Select';\nimport Styled from './EditAddon.style';\n\ninterface EditAddonProps {\n context: Context<BulkEditFieldContext>;\n}\n\nexport const EditAddon: React.FC<EditAddonProps> = ({ context }) => {\n const [isDisabled, setIsDisabled] = useState<boolean>(false);\n const [selectedOptions, setSelectedOptions] = useState<OptionsType<SelectOption>>([]);\n const [fetchedOptions, setFetchedOptions] = useState<OptionsType<SelectOption>>([\n { label: 'Clear add-ons', value: 'None' },\n ]);\n\n const { setSelectedData } = useContext(context);\n\n const { loadOptions } = useAsyncSearch({ endpoint: GET_ET_COMPANIES_ENDPOINT });\n\n const getLoadOptionsDelay = debounce((query: string, callback: SuccessErrorCallback) => {\n if (query.length >= SEARCH_MINIMUM_CHAR_COUNT) {\n loadOptions(query, options => {\n const callbackResult = callback(options);\n\n // set current filter to a cached variable.\n setFetchedOptions(options);\n\n return callbackResult;\n });\n }\n }, 300);\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">Select New Add-on</Typography.Text>\n <Styled.AsyncWrapper>\n <AsyncMultiSelect\n className=\"addon--multiselect-async bulk-action-multiselect\"\n onChange={options => {\n let mappedOptions = (options as SelectOption[]).map(option => ({\n ...option,\n label: option.value,\n }));\n\n const blankOption = (mappedOptions as SelectOption[]).find(\n option => option.value === 'None'\n );\n\n if (blankOption) {\n mappedOptions = [blankOption];\n }\n\n setIsDisabled(!!blankOption);\n setSelectedData(mappedOptions);\n setSelectedOptions(mappedOptions);\n }}\n loadOptions={getLoadOptionsDelay}\n defaultOptions={fetchedOptions}\n defaultValue={selectedOptions}\n loadingMessage={({ inputValue }) =>\n inputValue.length > 2 ? 'Loading...' : 'Begin typing'\n }\n isDisabled={isDisabled}\n isOptionDisabled={() => false}\n // addon values can repeat causing multiselect issues\n getOptionValue={(option: SelectOption) => option.id?.toString() || ''}\n menuIsOpen\n maxMenuHeight={200}\n onBlur={() => setFetchedOptions([{ label: 'Clear add-ons', value: 'None' }])}\n />\n </Styled.AsyncWrapper>\n </>\n );\n};\n","import React, { useState, useContext, Context } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Typography } from 'antd';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// components\nimport SingleSelect from '@optx/components/common/select/SingleSelect';\n// redux\nimport { selectors } from '@components/feature/company-individual-edit/state';\n\ninterface EditLeadSourceProps {\n context: Context<BulkEditFieldContext>;\n}\n\nexport const EditLeadSource: React.FC<EditLeadSourceProps> = ({ context }) => {\n const { setSelectedData } = useContext(context);\n\n const initialSelectValue = { value: '', label: '' };\n const [selectedValue, setSelectedValue] = useState(initialSelectValue);\n\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.leadSourceOptions),\n ];\n const isLoadingInfo = useSelector(selectors.companyIndividualEdit.isLoadingInfo);\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">Select Lead Source</Typography.Text>\n\n <SingleSelect\n options={selectOptions}\n onChange={option => {\n setSelectedValue(option as SelectOption);\n setSelectedData([option as SelectOption]);\n }}\n value={selectedValue}\n menuIsOpen\n isLoading={isLoadingInfo}\n className=\"single-select-menu-is-opened-container\"\n maxMenuHeight={200}\n />\n </>\n );\n};\n","import React, { useState, useContext, Context } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Typography } from 'antd';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// components\nimport SingleSelect from '@optx/components/common/select/SingleSelect';\n// redux\nimport { selectors } from '@components/feature/company-individual-edit/state';\n\ninterface EditSeniorAdvisorProps {\n context: Context<BulkEditFieldContext>;\n}\n\nexport const EditSeniorAdvisor: React.FC<EditSeniorAdvisorProps> = ({ context }) => {\n const { setSelectedData } = useContext(context);\n\n const initialSelectValue = { value: '', label: '' };\n const [selectedValue, setSelectedValue] = useState(initialSelectValue);\n\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.seniorAdvisorOptions),\n ];\n const isLoadingInfo = useSelector(selectors.companyIndividualEdit.isLoadingInfo);\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">Select Senior Advisor Thesis</Typography.Text>\n\n <SingleSelect\n options={selectOptions}\n onChange={option => {\n setSelectedValue(option as SelectOption);\n setSelectedData([option as SelectOption]);\n }}\n value={selectedValue}\n menuIsOpen\n isLoading={isLoadingInfo}\n className=\"single-select-menu-is-opened-container\"\n maxMenuHeight={200}\n />\n </>\n );\n};\n","import React, { Context, useState, useContext, useEffect } from 'react';\nimport { Typography, Row, Col } from 'antd';\nimport Radio, { RadioChangeEvent } from 'antd/lib/radio';\nimport styled from 'styled-components';\n// models\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\nimport { AppState } from '@optx/redux/interfaces';\n// redux\nimport { useSelector } from 'react-redux';\nimport { getFormRationales } from '@optx/redux/company/filters/selectors';\nimport { getIsAdminOrAnalyst } from '@optx/redux/user/information/selectors';\nimport CreateOtherRaionale from '@optx/features/company/edit-fields/components/CreateOtherRationale';\n\ninterface EditSoftwareProps {\n context: Context<BulkEditFieldContext>;\n}\n\nconst ContentWrapper = styled.div`\n .popover-radio__container {\n display: flex;\n flex-direction: column;\n gap: 10;\n }\n\n .ant-radio {\n top: 0;\n\n .ant-radio-inner:after {\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) !important;\n }\n }\n\n .rationale_select-async {\n display: block;\n width: 100%;\n }\n\n .ant-radio-group {\n width: 100%;\n\n .ant-radio-button-wrapper {\n width: 100%;\n }\n }\n`;\n\nexport const EditSoftware: React.FC<EditSoftwareProps> = ({ context }) => {\n const { setSelectedData } = useContext(context);\n\n const [radioValue, setRadioValue] = useState(false);\n const [isOther, setIsOther] = useState<string>();\n const { setRationaleValue } = useContext(context);\n\n const isAdminOrAnalyst = useSelector(getIsAdminOrAnalyst);\n\n const rationaleOptions = useSelector(\n (state: AppState) => getFormRationales(state, 'is_software_rationales') || []\n );\n\n useEffect(() => {\n setSelectedData(false);\n setRationaleValue('');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onChange = (e: RadioChangeEvent) => {\n setSelectedData(e.target.value);\n setRadioValue(e.target.value);\n };\n\n const handleRationaleChange = (e: RadioChangeEvent) => {\n setIsOther(e.target.value);\n setRationaleValue(e.target.value);\n };\n\n const handleOtherChange = (option: string | undefined) => {\n setRationaleValue(option);\n };\n\n return (\n <ContentWrapper className=\"popover-radio__container\">\n <Typography.Text className=\"ant-modal-title\">Select New Software</Typography.Text>\n <Radio.Group\n className=\"popover-radio ant-popover-content-wrapper\"\n onChange={onChange}\n value={radioValue}\n >\n <Radio value style={{ display: 'flex', alignItems: 'center', lineHeight: 2 }}>\n Yes\n </Radio>\n <Radio value={false} style={{ display: 'flex', alignItems: 'center', lineHeight: 2 }}>\n No\n </Radio>\n </Radio.Group>\n {isAdminOrAnalyst && radioValue === false && (\n <>\n <Row style={{ marginTop: 13 }}>\n <Typography.Text className=\"ant-modal-title\" style={{ fontWeight: '500' }}>\n Train the algorithm and tell us why(optional)\n </Typography.Text>\n </Row>\n <Radio.Group buttonStyle=\"solid\" onChange={handleRationaleChange}>\n {rationaleOptions?.map(option => (\n <Col key={option.value} style={{ textAlign: 'center', marginTop: 10 }}>\n <Radio.Button value={option.value}>{option.label}</Radio.Button>\n </Col>\n ))}\n </Radio.Group>\n {isOther === 'other' && (\n <Row style={{ marginTop: 20 }}>\n <Typography.Text>Please Explain</Typography.Text>\n <CreateOtherRaionale onInputChange={handleOtherChange} isSoftwareModal={true} />\n </Row>\n )}\n </>\n )}\n </ContentWrapper>\n );\n};\n","import React, { useState, useContext, Context } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Typography } from 'antd';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// redux\nimport { selectors } from '@components/feature/company-individual-edit/state';\n// components\nimport SingleSelect from '@optx/components/common/select/SingleSelect';\n\ninterface EditSubsectorProps {\n context: Context<BulkEditFieldContext>;\n}\n\nexport const EditSubsector: React.FC<EditSubsectorProps> = ({ context }) => {\n const { setSelectedData } = useContext(context);\n\n const initialSelectValue = { value: '', label: '' };\n const [selectedValue, setSelectedValue] = useState(initialSelectValue);\n\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.subSectorOptions),\n ];\n const isLoadingInfo = useSelector(selectors.companyIndividualEdit.isLoadingInfo);\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">Select New Sub-sector</Typography.Text>\n\n <SingleSelect\n options={selectOptions}\n onChange={option => {\n setSelectedValue(option as SelectOption);\n setSelectedData([option as SelectOption]);\n }}\n value={selectedValue}\n menuIsOpen\n isLoading={isLoadingInfo}\n className=\"single-select-menu-is-opened-container\"\n maxMenuHeight={200}\n />\n </>\n );\n};\n","import React, { useState, useContext, Context } from 'react';\nimport { Typography } from 'antd';\nimport { OptionsType } from 'react-select';\nimport { debounce } from 'lodash';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// constants\nimport { COMPANY_PRODUCT_CATEGORY_ENDPOINT } from '@constants/asyncEndpoints';\n// hooks\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\n// components\nimport { AsyncMultiSelect } from '@optx/shared/view/molecules/Select';\n\ninterface EditProductCategoryProps {\n context: Context<BulkEditFieldContext>;\n}\n\nexport const EditProductCategory: React.FC<EditProductCategoryProps> = ({ context }) => {\n const { setSelectedData } = useContext(context);\n const { loadOptions } = useAsyncSearch({ endpoint: COMPANY_PRODUCT_CATEGORY_ENDPOINT });\n const [fetchedOptions, setFetchedOptions] = useState<OptionsType<SelectOption>>([]);\n\n const getLoadOptionsDelay = debounce((query: string, callback: SuccessErrorCallback) => {\n if (query.length > 2) {\n loadOptions(query, options => {\n const callbackResult = callback(options);\n\n // set current filter to a cached variable.\n setFetchedOptions(options);\n\n return callbackResult;\n });\n }\n }, 300);\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">Select Product Category</Typography.Text>\n\n <AsyncMultiSelect\n className=\"addon--multiselect-async bulk-action-multiselect\"\n onChange={options => {\n setSelectedData(options as SelectOption[]);\n }}\n loadOptions={getLoadOptionsDelay}\n defaultOptions={fetchedOptions}\n loadingMessage={({ inputValue }) => (inputValue.length > 2 ? 'Loading...' : 'Begin typing')}\n menuIsOpen\n maxMenuHeight={200}\n />\n </>\n );\n};\n","import styled from 'styled-components';\nimport Radio from 'antd/lib/radio';\n\nconst ContentWrapper = styled.div`\n .popover-radio__container {\n display: flex;\n flex-direction: column;\n gap: 10;\n }\n\n .ant-radio {\n top: 0;\n\n .ant-radio-inner:after {\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) !important;\n }\n }\n\n .rationale_select-async {\n display: block;\n width: 100%;\n }\n\n .ant-radio-group {\n width: 100%;\n\n .ant-radio-button-wrapper {\n width: 100%;\n }\n }\n`;\nconst RadioStyled = styled(Radio)`\n display: flex;\n alignitems: center;\n lineheight: 2;\n`;\n\nexport const Styled = {\n ContentWrapper,\n RadioStyled,\n};\n","import React, { Context, useState, useContext, useEffect } from 'react';\nimport { Typography } from 'antd';\nimport Radio, { RadioChangeEvent } from 'antd/lib/radio';\n// models\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// styles\nimport { Styled } from './EditAiMl.styles';\n\ninterface EditSoftwareProps {\n context: Context<BulkEditFieldContext>;\n}\n\nexport const EditAiMl: React.FC<EditSoftwareProps> = ({ context }) => {\n const { setSelectedData } = useContext(context);\n\n const [radioValue, setRadioValue] = useState(DEFAULT_EMPTY_VALUE);\n\n useEffect(() => {\n setSelectedData(DEFAULT_EMPTY_VALUE);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onChange = (e: RadioChangeEvent) => {\n setSelectedData(e.target.value);\n setRadioValue(e.target.value);\n };\n\n return (\n <Styled.ContentWrapper className=\"popover-radio__container\">\n <Typography.Text className=\"ant-modal-title\">Select AI / ML</Typography.Text>\n <Radio.Group\n className=\"popover-radio ant-popover-content-wrapper\"\n onChange={onChange}\n value={radioValue}\n >\n <Styled.RadioStyled value>Yes</Styled.RadioStyled>\n <Styled.RadioStyled value={false}>No</Styled.RadioStyled>\n <Styled.RadioStyled value={DEFAULT_EMPTY_VALUE}>Unknown</Styled.RadioStyled>\n </Radio.Group>\n </Styled.ContentWrapper>\n );\n};\n","import React, { Context } from 'react';\n// redux\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// components\nimport { EditStage } from '@features/bulk-actions/edit-fields/components/EditStage';\nimport { EditPipelineRank } from '@features/bulk-actions/edit-fields/components/EditPipelineRank';\nimport { EditCompanyOwner } from '@features/bulk-actions/edit-fields/components/EditCompanyOwner';\nimport { EditFund } from '@features/bulk-actions/edit-fields/components/EditFund';\nimport { EditRationale } from '@features/bulk-actions/edit-fields/components/EditRationale';\nimport { EditAddon } from '@features/bulk-actions/edit-fields/components/edit-addon/EditAddon';\nimport { EditLeadSource } from '@features/bulk-actions/edit-fields/components/EditLeadSource';\nimport { EditSeniorAdvisor } from '@features/bulk-actions/edit-fields/components/EditSeniorAdvisor';\nimport { EditWatchList } from '@features/bulk-actions/bulk-watchlist';\nimport { BulkAddTags } from '@optx/features/tags/tags';\nimport { EditSoftware } from './EditSoftware';\nimport { EditSubsector } from './EditSubsector';\nimport { EditProductCategory } from './EditProductCategory';\nimport { EditAiMl } from './EditAiMl';\n\ninterface BulkEditFieldProps {\n field: string;\n context: Context<BulkEditFieldContext>;\n isValid: boolean;\n validation: (isValid: boolean) => void;\n}\n\nexport const BulkEditField: React.FC<BulkEditFieldProps> = ({\n field,\n context,\n isValid,\n validation,\n}) => {\n let component = null;\n\n switch (field) {\n case 'stage':\n component = <EditStage context={context} />;\n break;\n case 'pipeline_rank':\n component = <EditPipelineRank context={context} />;\n break;\n case 'company_owner_id':\n component = <EditCompanyOwner context={context} />;\n break;\n case 'fund':\n component = <EditFund context={context} />;\n break;\n case 'rationale':\n component = <EditRationale context={context} isValid={isValid} validation={validation} />;\n break;\n case 'addon':\n component = <EditAddon context={context} />;\n break;\n case 'is_software':\n component = <EditSoftware context={context} />;\n break;\n case 'cs_tags':\n component = <BulkAddTags context={context} />;\n break;\n case 'watchlist':\n component = <EditWatchList context={context} />;\n break;\n case 'lead_source':\n component = <EditLeadSource context={context} />;\n break;\n case 'senior_advisor_thesis':\n component = <EditSeniorAdvisor context={context} />;\n break;\n case 'sub_sector':\n component = <EditSubsector context={context} />;\n break;\n case 'product_category':\n component = <EditProductCategory context={context} />;\n break;\n case 'is_ai_ml':\n component = <EditAiMl context={context} />;\n break;\n default:\n return null;\n }\n\n return <>{component}</>;\n};\n","export interface GlobalConfig {\n short_date: {\n DATE_FORMAT: string;\n GOOGLE_MAPS_API_KEY: string;\n };\n grid_date: {\n DATE_FORMAT: string;\n };\n GOOGLE_LOCATION_API_KEY: string;\n JWT_ENCRYPTION_SECRET_KEY: string;\n}\n\n/**\n * Global configuration.\n */\nconst config: GlobalConfig = {\n short_date: {\n // Default to US standard.\n DATE_FORMAT: 'MM/DD/YYYY',\n GOOGLE_MAPS_API_KEY: process.env.REACT_APP_GOOGLE_MAPS_API_KEY || '<<API_KEY>>',\n },\n grid_date: {\n // Default grid format\n DATE_FORMAT: 'MMM DD, YYYY',\n },\n GOOGLE_LOCATION_API_KEY:\n process.env.REACT_APP_GOOGLE_LOCATION_API_KEY &&\n typeof process.env.REACT_APP_GOOGLE_LOCATION_API_KEY === 'string' &&\n process.env.REACT_APP_GOOGLE_LOCATION_API_KEY.length\n ? process.env.REACT_APP_GOOGLE_LOCATION_API_KEY\n : '<<LOCATION_API_KEY>>',\n JWT_ENCRYPTION_SECRET_KEY:\n process.env.REACT_APP_JWT_SECRET_KEY &&\n typeof process.env.REACT_APP_JWT_SECRET_KEY === 'string' &&\n process.env.REACT_APP_JWT_SECRET_KEY.length\n ? process.env.REACT_APP_JWT_SECRET_KEY\n : '<<JWT_SECRET_KEY>>',\n};\n\nexport default config;\n","import { createSelector } from 'reselect';\n// redux\nimport { selectors as localSelectors } from '../../edit-fields';\nimport { selectFeatureState } from './selectFeature';\n\nconst editingFieldsState = createSelector(selectFeatureState, state => {\n return state.editingFields;\n});\n\n// slice selectors\nconst results = createSelector(editingFieldsState, localSelectors.getResults);\n\nconst isInProgress = createSelector(editingFieldsState, localSelectors.isInProgress);\nconst isCompleted = createSelector(editingFieldsState, localSelectors.isCompleted);\n\nconst percentageCompleted = createSelector(\n editingFieldsState,\n localSelectors.getPercentageCompleted\n);\n\nconst selectedCompaniesCount = createSelector(\n editingFieldsState,\n localSelectors.getSelectedCompaniesCount\n);\n\nconst successfulCount = createSelector(results, results => {\n const successCompanies = results.filter(company => company.sync_status);\n\n if (successCompanies) {\n return successCompanies.length;\n }\n\n return 0;\n});\n\nconst cancel = createSelector(editingFieldsState, localSelectors.cancel);\nexport default {\n results,\n isInProgress,\n isCompleted,\n percentageCompleted,\n selectedCompaniesCount,\n successfulCount,\n cancel,\n};\n","/* eslint-disable no-param-reassign */\nimport { createSelector } from 'reselect';\nimport { Dictionary, pick, each } from 'lodash';\n// models\nimport { EquityTouchContact } from '@models/equityTouch';\nimport { CompanyProfile } from '@models/Company';\nimport { SelectOption } from '@models/Option';\n// constants\nimport { BULK_ACTIONS_CONTACT_FIELDS } from '@constants/equitytouch';\n// redux\nimport { selectors as localSelectors } from '../../equity-touch';\nimport { selectFeatureState } from './selectFeature';\n\nconst equityTouchState = createSelector(selectFeatureState, state => {\n return state.equityTouch;\n});\n\n// slice selectors\nconst shouldFetch = createSelector(equityTouchState, localSelectors.shouldFetch);\nconst loading = createSelector(equityTouchState, localSelectors.loading);\nconst getFormData = createSelector(equityTouchState, localSelectors.formData);\nconst getCompanies = createSelector(equityTouchState, localSelectors.companies);\nconst getAllIds = createSelector(equityTouchState, localSelectors.allIds);\nconst getQueue = createSelector(equityTouchState, localSelectors.getQueue);\nconst getCompanyData = createSelector(equityTouchState, localSelectors.companyData);\nconst getBulkValues = createSelector(equityTouchState, localSelectors.bulkValues);\nconst getTemporaryData = createSelector(equityTouchState, localSelectors.getTemporaryData);\nconst getListId = createSelector(equityTouchState, localSelectors.getListId);\nconst getListType = createSelector(equityTouchState, localSelectors.getListType);\n\nconst getCompanyEqtData = (companyId: number) => {\n return createSelector(equityTouchState, localSelectors.companyEqtData(companyId));\n};\n\nconst getCompanyEqtTemporaryData = (companyId: number) => {\n return createSelector(equityTouchState, localSelectors.getCompanyTemporaryData(companyId));\n};\n\nconst getSelectedContactIds = createSelector(\n getCompanies,\n getCompanyData,\n (companiesById, companyData) => {\n let contactIds: number[] = [];\n\n if (Object.keys(companyData).length) {\n contactIds =\n (companiesById[(companyData as CompanyProfile).company_id]\n ?.selectedContactIds as number[]) || [];\n }\n\n return contactIds;\n }\n);\n\nconst getContacts = createSelector(\n getCompanies,\n getCompanyData,\n getSelectedContactIds,\n (companiesById, companyData, contactIds) => {\n let contacts: EquityTouchContact[] = [];\n\n if (Object.keys(companyData).length) {\n if (contactIds.length) {\n contacts = companiesById[(companyData as CompanyProfile).company_id]\n .contacts as EquityTouchContact[];\n }\n\n (companyData as CompanyProfile).contacts.forEach(contact => {\n if (!contactIds.includes(contact.person_id as number)) {\n contacts.push(pick(contact, BULK_ACTIONS_CONTACT_FIELDS));\n }\n });\n }\n\n return contacts;\n }\n);\n\nconst getInitialFormValues = createSelector(\n getFormData,\n getBulkValues,\n getTemporaryData,\n (formData, bulkValues, temporaryData) => {\n if (temporaryData.step1) return temporaryData.step1;\n\n if (Object.keys(bulkValues).length) {\n return bulkValues as Dictionary<string | number | boolean | number[] | SelectOption>;\n }\n\n let lead = '';\n let fund = '';\n let rank = '';\n let stage = '';\n let sector = '';\n let source = '';\n let companyType = '';\n\n if (Object.keys(formData).length) {\n if (formData['Company Type'].database_matched) {\n companyType = formData['Company Type'].database_matched.itemId;\n }\n\n if (formData['Deal Team Lead'].database_matched) {\n lead = formData['Deal Team Lead'].database_matched.itemId;\n }\n\n if (formData.Fund.database_matched) {\n fund = formData.Fund.database_matched.itemId;\n }\n\n if (formData.Rank.database_matched) {\n rank = formData.Rank.database_matched.itemId;\n }\n\n if (formData.Stage.database_matched) {\n stage = formData.Stage.database_matched.itemId;\n }\n\n if (formData.Sector.database_matched) {\n sector = formData.Sector.database_matched.itemId;\n }\n\n if (formData.Source.database_matched) {\n source = formData.Source.database_matched.itemId;\n }\n }\n\n const initialData: Dictionary<string | number | boolean | number[] | string[] | SelectOption> =\n {\n 'Add-On': false,\n 'Add-On For': [],\n 'Company Type': companyType,\n 'Deal Team Lead': lead,\n 'Equity Check': '',\n Fund: fund,\n Funding: '',\n Groups: '',\n Investors: '',\n Rationale: '',\n Rank: rank,\n Sector: sector,\n Source: source,\n Stage: stage,\n FTEs: '',\n };\n\n return initialData;\n }\n);\n\nconst getEditCompanyPosition = createSelector(getCompanyData, getAllIds, (company, allIds) => {\n let position;\n\n if (company) {\n each(allIds, (id, index) => {\n if (id === (company as CompanyProfile).company_id) {\n position = index + 1;\n\n return false;\n }\n\n return true;\n });\n }\n\n return position;\n});\n\nconst results = createSelector(equityTouchState, localSelectors.getResults);\n\nconst isInProgress = createSelector(equityTouchState, localSelectors.isInProgress);\nconst isCompleted = createSelector(equityTouchState, localSelectors.isCompleted);\n\nconst percentageCompleted = createSelector(equityTouchState, localSelectors.getPercentageCompleted);\n\nconst selectedCompaniesCount = createSelector(\n equityTouchState,\n localSelectors.getSelectedCompaniesCount\n);\n\nconst successfulCount = createSelector(results, results => {\n const successCompanies = results.reduce((acc: number, item) => {\n if (item.et_sync_status) {\n acc += 1;\n }\n\n return acc;\n }, 0);\n\n return successCompanies;\n});\n\nconst cancel = createSelector(equityTouchState, localSelectors.cancel);\n\nconst getCadence = createSelector(getBulkValues, bulkValues => bulkValues.cadence);\n\nexport default {\n shouldFetch,\n loading,\n getFormData,\n getInitialFormValues,\n getCompanies,\n getAllIds,\n getQueue,\n getCompanyData,\n getCadence,\n getBulkValues,\n getCompanyEqtData,\n getCompanyEqtTemporaryData,\n getEditCompanyPosition,\n getContacts,\n results,\n isInProgress,\n isCompleted,\n percentageCompleted,\n selectedCompaniesCount,\n successfulCount,\n cancel,\n getTemporaryData,\n getListId,\n getListType,\n};\n","import { CompanyWithContacts } from '@features/bulk-actions/salesloft/state/interfaces';\n/* eslint-disable no-param-reassign */\nimport { createSelector } from 'reselect';\nimport { selectors as localSelectors } from '../../salesloft';\nimport { selectFeatureState } from './selectFeature';\n\nconst salesloftState = createSelector(selectFeatureState, state => {\n return state.salesloft;\n});\n\n// slice selectors\nconst salesloftBulkCompanies = createSelector(salesloftState, localSelectors.companies);\nconst salesloftBulkContacts = createSelector(salesloftState, localSelectors.contacts);\nconst results = createSelector(salesloftState, localSelectors.results);\nconst isCompleted = createSelector(salesloftState, localSelectors.isCompleted);\nconst inProgress = createSelector(salesloftState, localSelectors.inProgress);\nconst cancel = createSelector(salesloftState, localSelectors.cancel);\nconst modalVisible = createSelector(salesloftState, localSelectors.modalVisible);\nconst percentageCompleted = createSelector(salesloftState, localSelectors.getPercentageCompleted);\nconst getCadenceId = createSelector(salesloftState, localSelectors.getCadenceId);\nconst getAttentionCount = createSelector(salesloftBulkCompanies, salesloftBulkCompanies => {\n const count = salesloftBulkCompanies.reduce((acc: number, company: CompanyWithContacts) => {\n const hasPrimaryContact = company.contacts?.some(contact => contact.primary_contact);\n acc = hasPrimaryContact ? acc : acc + 1;\n\n return acc;\n }, 0);\n\n return count;\n});\nconst successfulCount = createSelector(results, results => {\n const successCompanies = results.reduce((acc: number, item) => {\n if (item.contacts.every(contact => contact.sl_sync_status)) {\n acc += 1;\n }\n\n return acc;\n }, 0);\n\n return successCompanies;\n});\nexport default {\n salesloftBulkCompanies,\n salesloftBulkContacts,\n results,\n getCadenceId,\n percentageCompleted,\n getAttentionCount,\n successfulCount,\n inProgress,\n isCompleted,\n modalVisible,\n cancel,\n};\n","/* eslint-disable no-param-reassign */\nimport { createSelector } from 'reselect';\nimport { selectors as localSelectors } from '../../bulk-merge-companies';\nimport { selectFeatureState } from './selectFeature';\n\nconst mergeCompaniesState = createSelector(selectFeatureState, state => {\n return state.mergeCompanies;\n});\n\nconst getMergeCompaniesStatus = createSelector(mergeCompaniesState, localSelectors.getStatus);\n\nexport default { getMergeCompaniesStatus };\n","/* eslint-disable no-param-reassign */\nimport { createSelector } from 'reselect';\nimport { selectors as localSelectors } from '../../bulk-software';\nimport { selectFeatureState } from './selectFeature';\n\nconst softwareState = createSelector(selectFeatureState, state => {\n return state.software;\n});\n\nconst getSuccessCount = createSelector(softwareState, localSelectors.getSuccessCount);\n\nexport default { getSuccessCount };\n","/* eslint-disable no-param-reassign */\nimport { createSelector } from 'reselect';\nimport { selectors as localSelectors } from '../../bulk-ai-ml';\nimport { selectFeatureState } from './selectFeature';\n\nconst aiMlState = createSelector(selectFeatureState, state => {\n return state.aiMl;\n});\n\nconst getSuccessCount = createSelector(aiMlState, localSelectors.getSuccessCount);\n\nexport default { getSuccessCount };\n","import selectedCompanies from './selectedCompanies';\nimport editFields from './editingFields';\nimport equityTouch from './equityTouch';\nimport salesloft from './salesloft';\nimport mergeCompanies from './mergeCompanies';\nimport software from './software';\nimport aiMl from './aiMl';\n\nexport default {\n selectedCompanies,\n editFields,\n equityTouch,\n salesloft,\n mergeCompanies,\n software,\n aiMl,\n};\n","import { combineReducers } from 'redux';\n// models\nimport { BulkActionsState } from './interfaces';\n// redux\nimport { selectedCompaniesReducer } from '../selected-companies';\nimport { editingFieldsReducer } from '../edit-fields';\nimport { equityTouchReducer } from '../equity-touch';\nimport { bulkSalesloftReducer } from '../salesloft';\nimport { mergeCompaniesReducer } from '../bulk-merge-companies';\nimport { bulkSoftwareReducer } from '../bulk-software';\nimport { bulkAiMlReducer } from '../bulk-ai-ml';\n\nconst reducer = combineReducers<BulkActionsState>({\n selectedCompanies: selectedCompaniesReducer,\n editingFields: editingFieldsReducer,\n equityTouch: equityTouchReducer,\n salesloft: bulkSalesloftReducer,\n mergeCompanies: mergeCompaniesReducer,\n software: bulkSoftwareReducer,\n aiMl: bulkAiMlReducer,\n});\n\nexport default reducer;\n","import { fork } from 'redux-saga/effects';\n// redux\nimport { saga as selectedCompaniesSaga } from '../../selected-companies';\nimport { saga as bulkEditSaga } from '../../edit-fields';\nimport { saga as equityTouchSaga } from '../../equity-touch';\nimport { saga as salesloftSaga } from '../../salesloft';\nimport { saga as bulkAddToWatchListSaga } from '../../bulk-watchlist';\nimport { saga as bulkMergeCompaniesSaga } from '../../bulk-merge-companies';\nimport { saga as bulkSoftwareSaga } from '../../bulk-software';\nimport { saga as bulkAiMlSaga } from '../../bulk-ai-ml';\n\nexport default function* bulkActionsSagas() {\n yield fork(selectedCompaniesSaga);\n yield fork(bulkEditSaga);\n yield fork(equityTouchSaga);\n yield fork(salesloftSaga);\n yield fork(bulkAddToWatchListSaga);\n yield fork(bulkMergeCompaniesSaga);\n yield fork(bulkSoftwareSaga);\n yield fork(bulkAiMlSaga);\n}\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport featureName from './featureName';\nimport reducer from './state/reducer';\nimport saga from './state/sagas';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","import { createAction } from '@reduxjs/toolkit';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport {\n SaveView,\n ModifyView,\n ViewOption,\n ViewSuccess,\n DeleteCompanySearch,\n SearchSave,\n} from '@optx/models/search';\nimport { CustomUIViewIds } from '@optx/models/user';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport * as types from './types';\nimport {\n prepareFetchSuccess,\n prepareSaveSearch,\n prepareSaveSearchSuccess,\n renameSearchPrepare,\n} from '../../feature/saved-search/actions';\n\n// fetch contacts saved searches actions\nexport const initializeSavedSearchesAndViews = createAction(\n types.INITIALIZE_SAVED_SEARCHES_AND_VIEWS\n);\nexport const initializeSavedSearchesAndViewsSuccess = createAction(\n types.INITIALIZE_SAVED_SEARCHES_AND_VIEWS_SUCCESS,\n prepareFetchSuccess\n);\n\nexport const fetchSavedSearches = createAction<string | undefined>(types.FETCH_SAVED_SEARCHES);\nexport const fetchSavedSearchesSuccess = createAction(\n types.FETCH_SAVED_SEARCHES_SUCCESS,\n prepareFetchSuccess\n);\nexport const fetchSavedSearchesFail = createAction<string>(types.FETCH_SAVED_SEARCHES_FAIL);\n\n// save search\nexport const saveSearch = createAction(types.SAVE_SEARCH, prepareSaveSearch);\nexport const saveSearchSuccess = createAction(types.SAVE_SEARCH_SUCCESS, prepareSaveSearchSuccess);\nexport const saveSearchFail = createAction<string>(types.SAVE_SEARCH_FAIL);\n\n// save view\nexport const saveView = createAction<SaveView>(types.SAVE_VIEW);\nexport const modifyView = createAction(\n types.MODIFY_VIEW,\n (formData: ModifyView, searchData: ViewOption) => ({\n payload: formData,\n meta: searchData,\n })\n);\nexport const modifyCustomUIView = createAction(\n types.MODIFY_CUSTOM_UI_VIEW,\n (id: CustomUIViewIds, isDefault: boolean) => ({\n payload: {\n id,\n isDefault,\n },\n })\n);\n\nexport const updateSavedSearches = createAction(\n types.UPDATE_SAVED_SEARCHES,\n (shareWith: Array<number>, listId: number) => ({\n payload: {\n shareWith,\n listId,\n },\n })\n);\n\n// apply view success\nexport const applyViewSuccess = createAction<ViewSuccess>(types.APPLY_VIEW_SUCCESS);\n\nexport const modifyViewSuccess = createAction(types.MODIFY_VIEW_SUCCESS, prepareSaveSearchSuccess);\nexport const modifyCustomUIViewSuccess = createAction(\n types.MODIFY_CUSTOM_UI_VIEW_SUCCESS,\n (view?: SearchSave, customUIViewId?: CustomUIViewIds, isDefault?: boolean) => ({\n payload: {\n view,\n customUIViewId,\n isDefault,\n },\n })\n);\n\n// delete search\nexport const deleteSearch = createAction<DeleteCompanySearch>(types.DELETE_SEARCH);\nexport const deleteSearchSuccess = createAction<number>(types.DELETE_SEARCH_SUCCESS);\nexport const deleteSearchFail = createAction<string>(types.DELETE_SEARCH_FAIL);\n\n// rename search\nexport const renameSearch = createAction(types.RENAME_SEARCH, renameSearchPrepare);\nexport const renameSearchSuccess = createAction(types.RENAME_SEARCH_SUCCESS, renameSearchPrepare);\nexport const renameSearchFail = createAction<string>(types.RENAME_SEARCH_FAIL);\n\n// pagination\nexport const savedCompanySearchPagination = createAction<PageInfo>(\n types.SAVED_COMPANY_SEARCH_PAGINATION\n);\n\n// sort\nexport const sortCompanySearchesLists = createAction<SortByRule<any>[]>(types.SORT_SAVED_SEARCHES);\n\nexport const makeFiltersDefault = createAction(\n types.MAKE_FILTERS_DEFAULT,\n (id: number | string, isDefault?: boolean) => ({ payload: id, meta: isDefault })\n);\nexport const makeFiltersDefaultSuccess = createAction<number>(types.MAKE_FILTERS_DEFAULT_SUCCESS);\n\nexport const setLoader = createAction(types.SET_LOADER);\n","// fetch saved searches\nexport const INITIALIZE_SAVED_SEARCHES_AND_VIEWS =\n 'company/saved-searches/INITIALIZE_SAVED_SEARCHES_AND_VIEWS';\nexport const INITIALIZE_SAVED_SEARCHES_AND_VIEWS_SUCCESS =\n 'company/saved-searches/INITIALIZE_SAVED_SEARCHES_AND_VIEWS_SUCCESS';\n\nexport const FETCH_SAVED_SEARCHES = 'company/saved-searches/FETCH_SAVED_SEARCHES';\nexport const FETCH_SAVED_SEARCHES_SUCCESS = 'company/saved-searches/FETCH_SAVED_SEARCHES_SUCCESS';\nexport const FETCH_SAVED_SEARCHES_FAIL = 'company/saved-searches/FETCH_SAVED_SEARCHES_FAIL';\n\n// save search\nexport const SAVE_SEARCH = 'company/saved-searches/SAVE_SEARCH';\nexport const SAVE_SEARCH_SUCCESS = 'company/saved-searches/SAVE_SEARCH_SUCCESS';\nexport const SAVE_SEARCH_FAIL = 'company/saved-searches/SAVE_SEARCH_FAIL';\n\n// save view\nexport const SAVE_VIEW = 'company/saved-searches/SAVE_VIEW';\nexport const MODIFY_VIEW = 'company/saved-searches/MODIFY_VIEW';\nexport const MODIFY_VIEW_SUCCESS = 'company/saved-searches/MODIFY_VIEW_SUCCESS';\n\nexport const MODIFY_CUSTOM_UI_VIEW = 'company/saved-searches/MODIFY_CUSTOM_UI_VIEW';\nexport const MODIFY_CUSTOM_UI_VIEW_SUCCESS = 'company/saved-searches/MODIFY_CUSTOM_UI_VIEW_SUCCESS';\n\n// update saved searches\nexport const UPDATE_SAVED_SEARCHES = 'company/saved-searches/UPDATE_SAVED_SEARCHES';\n\n// apply view success\nexport const APPLY_VIEW_SUCCESS = 'company/saved-searches/APPLY_VIEW_SUCCESS';\n\n// delete search\nexport const DELETE_SEARCH = 'company/saved-searches/DELETE_SEARCH';\nexport const DELETE_SEARCH_SUCCESS = 'company/saved-searches/DELETE_SEARCH_SUCCESS';\nexport const DELETE_SEARCH_FAIL = 'company/saved-searches/DELETE_SEARCH_FAIL';\n\n// delete search\nexport const RENAME_SEARCH = 'company/saved-searches/RENAME_SEARCH';\nexport const RENAME_SEARCH_SUCCESS = 'company/saved-searches/RENAME_SEARCH_SUCCESS';\nexport const RENAME_SEARCH_FAIL = 'company/saved-searches/RENAME_SEARCH_FAIL';\n\n// pagination\nexport const SAVED_COMPANY_SEARCH_PAGINATION =\n 'company/saved-searches/SAVED_COMPANY_SEARCH_PAGINATION';\n\n// sort\nexport const SORT_SAVED_SEARCHES = 'company/saved-searches/SORT_SAVED_SEARCHES';\n\nexport const MAKE_FILTERS_DEFAULT = 'company/saved-searches/MAKE_FILTERS_DEFAULT';\n\nexport const MAKE_FILTERS_DEFAULT_SUCCESS = 'company/saved-searches/MAKE_FILTERS_DEFAULT_SUCCESS';\n\nexport const UPDATE_QUERY = 'company/saved-searches/UPDATE_QUERY';\n\nexport const SET_LOADER = 'company/saved-searches/SET_LOADER';\n","import { createFeatureActionType } from '@utils/feature';\nimport { featureName } from '@features/grid/featureName';\n\nexport const INITIAL_COMPANIES_SEARCH = createFeatureActionType(\n featureName,\n 'INITIAL_COMPANIES_SEARCH'\n);\n\nexport const CHANGE_PAGINATION_SUCCESS = createFeatureActionType(\n featureName,\n 'CHANGE_PAGINATION_SUCCESS'\n);\n\nexport const COMPANIES_SEARCH = createFeatureActionType(featureName, 'COMPANIES_SEARCH');\n\nexport const COMPANIES_SEARCH_SUCCESS = createFeatureActionType(\n featureName,\n 'COMPANIES_SEARCH_SUCCESS'\n);\n\nexport const COMPANIES_SEARCH_FAIL = createFeatureActionType(featureName, 'COMPANIES_SEARCH_FAIL');\n\nexport const CANCEL_COMPANY_SEARCH = createFeatureActionType(featureName, 'CANCEL_COMPANY_SEARCH');\n\nexport const HIDE_CANCEL_SEARCH = createFeatureActionType(featureName, 'HIDE_CANCEL_SEARCH');\n\nexport const UPDATE_TRENDING = createFeatureActionType(featureName, 'UPDATE_TRENDING');\n\nexport const CLEAR_COMPANY_SEARCH = createFeatureActionType(featureName, 'CLEAR_COMPANY_SEARCH');\n\nexport const CLEAR_COMPANY_SEARCH_SUCCESS = createFeatureActionType(\n featureName,\n 'CLEAR_COMPANY_SEARCH_SUCCESS'\n);\n\nexport const RESET_COMPANY_SEARCH = createFeatureActionType(featureName, 'RESET_COMPANY_SEARCH');\n\nexport const RESET_COMPANY_SEARCH_SUCCESS = createFeatureActionType(\n featureName,\n 'RESET_COMPANY_SEARCH_SUCCESS'\n);\n\nexport const LOAD_SAVED_SEARCH = createFeatureActionType(featureName, 'LOAD_SAVED_SEARCH');\n\nexport const LOAD_SUGGESTED_SEARCH = createFeatureActionType(featureName, 'LOAD_SUGGESTED_SEARCH');\n\nexport const RESET_FILTER = createFeatureActionType(featureName, 'RESET_FILTER');\n\nexport const LOAD_AUTOCOMPLETE_SEARCH = createFeatureActionType(\n featureName,\n 'LOAD_AUTOCOMPLETE_SEARCH'\n);\n\nexport const LOAD_COMPANIES_BY_FILTER = createFeatureActionType(\n featureName,\n 'LOAD_COMPANIES_BY_FILTER'\n);\n\nexport const SAVE_SEARCH_TITLE = createFeatureActionType(featureName, 'SAVE_SEARCH_TITLE');\n\nexport const DELETE_SAVED_LIST = createFeatureActionType(featureName, 'DELETE_SAVED_LIST');\n\nexport const LOAD_COMPANIES_BY_FILTER_COMPLETED = createFeatureActionType(\n featureName,\n 'LOAD_COMPANIES_BY_FILTER_COMPLETED'\n);\n\nexport const LOAD_DIVERSITY_FILTER = createFeatureActionType(featureName, 'LOAD_DIVERSITY_FILTER');\n\nexport const INITIALIZE_LONG_CARD_SEARCH = createFeatureActionType(\n featureName,\n 'INITIALIZE_LONG_CARD_SEARCH'\n);\n\nexport const SHOULD_UPDATE_SOURCING_OUT_REACH_ANALYST_INFO = createFeatureActionType(\n featureName,\n 'SHOULD_UPDATE_SOURCING_OUT_REACH_ANALYST_INFO'\n);\n\nexport const UPDATE_SOURCING_OUT_REACH_ANALYST_INFO = createFeatureActionType(\n featureName,\n 'UPDATE_SOURCING_OUT_REACH_ANALYST_INFO'\n);\n\nexport const REMOVE_FILTER = createFeatureActionType(featureName, 'REMOVE_FILTER');\n\nexport const CLEAR_FILTER_SUCCESS = createFeatureActionType(featureName, 'CLEAR_FILTER_SUCCESS');\n\nexport const FETCH_COUNT = createFeatureActionType(featureName, 'FETCH_COUNT');\n\nexport const FETCH_COUNT_SUCCESS = createFeatureActionType(featureName, 'FETCH_COUNT_SUCCESS');\n\nexport const FETCH_COUNT_FAIL = createFeatureActionType(featureName, 'FETCH_COUNT_FAIL');\n\nexport const MY_COMPANIES_CLEAR_SEARCH = createFeatureActionType(\n featureName,\n 'MY_COMPANIES_CLEAR_SEARCH'\n);\n\nexport const CHANGE_SEARCH_TYPE = createFeatureActionType(featureName, 'CHANGE_SEARCH_TYPE');\n\nexport const LOAD_SEARCH = createFeatureActionType(featureName, 'LOAD_SEARCH');\n\nexport const CLEAR_DATE_MATCHES = createFeatureActionType(featureName, 'CLEAR_DATE_MATCHES');\n","import { createAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport Company from '@models/Company';\nimport { ChartBarIntervalKeys } from '@models/charts/data';\nimport { GridPayloadMain } from '@models/grid';\nimport { PreselectedFilter } from '@models/filters';\nimport { SuccessErrorCallback } from '@models/callback';\nimport { LoadSuggestedSearch, ResetFilter } from './interfaces';\nimport { SearchPayload } from '@models/api/contacts';\nimport { SearchAutocomplete } from '@models/search-autocomplete';\nimport { SearchStateData, LoadSearch } from '@models/search';\nimport { ClearMatchedFromListPayload } from '@models/api/user';\nimport * as types from './types';\n\nexport const initialCompaniesSearch = createAction<\n GridPayloadMain<Partial<SearchPayload> | undefined>\n>(types.INITIAL_COMPANIES_SEARCH);\n\nexport const searchCompanies = createAction(\n types.COMPANIES_SEARCH,\n (payload: GridPayloadMain<Partial<SearchPayload> | undefined>, resetSubFilter?: boolean) => ({\n payload,\n meta: resetSubFilter,\n })\n);\n\nexport const searchCompaniesSuccess = createAction(\n types.COMPANIES_SEARCH_SUCCESS,\n (companies: Company[], searchPayload: GridPayloadMain<Partial<SearchPayload>>) => ({\n payload: companies,\n meta: searchPayload,\n })\n);\n\nexport const searchCompaniesFail = createAction<GridPayloadMain<string>>(\n types.COMPANIES_SEARCH_FAIL\n);\n\nexport const cancelCompanySearch = createAction<GridPayloadMain<boolean>>(\n types.CANCEL_COMPANY_SEARCH\n);\n\nexport const hideCancelSearch = createAction<GridPayloadMain<boolean>>(types.HIDE_CANCEL_SEARCH);\n\nexport const updateTrending = createAction<GridPayloadMain<ChartBarIntervalKeys>>(\n types.UPDATE_TRENDING\n);\n\nexport const clearSearch = createAction(\n types.CLEAR_COMPANY_SEARCH,\n (\n customClearedFilter: GridPayloadMain<Dictionary<PreselectedFilter> | boolean | undefined>,\n callback?: SuccessErrorCallback\n ) => ({\n payload: customClearedFilter,\n meta: callback,\n })\n);\n\nexport const clearSearchSuccess = createAction<GridPayloadMain<boolean>>(\n types.CLEAR_COMPANY_SEARCH_SUCCESS\n);\n\nexport const resetSearch = createAction(\n types.RESET_COMPANY_SEARCH,\n (shouldSort: GridPayloadMain<boolean>, callback?: SuccessErrorCallback) => ({\n payload: shouldSort,\n meta: callback,\n })\n);\n\nexport const resetSearchSuccess = createAction<GridPayloadMain<boolean>>(\n types.RESET_COMPANY_SEARCH_SUCCESS\n);\n\n// add search id, title and listType to store when appyling a saved search\nexport const loadSavedSearch = createAction(\n types.LOAD_SAVED_SEARCH,\n (\n payload: GridPayloadMain<{\n searchId: number | string;\n title: string;\n listType: string;\n newOnly?: boolean;\n hasNewMatches?: boolean;\n }>\n ) => ({\n payload,\n })\n);\n\nexport const loadSuggestedSearch = createAction<GridPayloadMain<LoadSuggestedSearch>>(\n types.LOAD_SUGGESTED_SEARCH\n);\n\nexport const resetFilter = createAction<GridPayloadMain<ResetFilter>>(types.RESET_FILTER);\n\nexport const loadAutocompleteSearch = createAction<GridPayloadMain<SearchAutocomplete>>(\n types.LOAD_AUTOCOMPLETE_SEARCH\n);\n\nexport const loadCompaniesByFilter = createAction(\n types.LOAD_COMPANIES_BY_FILTER,\n (filterKey: string, value: GridPayloadMain<PreselectedFilter>) => ({\n payload: value,\n meta: filterKey,\n })\n);\n\nexport const saveSearchTitle = createAction<GridPayloadMain<string>>(types.SAVE_SEARCH_TITLE);\n\nexport const deleteSavedList = createAction<GridPayloadMain<string>>(types.DELETE_SAVED_LIST);\n\nexport const changeSearchType = createAction<GridPayloadMain<string>>(types.CHANGE_SEARCH_TYPE);\n\n// external actions\n\nexport const loadCompaniesByFilterCompleted = createAction(\n types.LOAD_COMPANIES_BY_FILTER_COMPLETED\n);\n\nexport const loadDiversityFilter = createAction<string>(types.LOAD_DIVERSITY_FILTER);\n\nexport const initializeLongCardSearch = createAction(types.INITIALIZE_LONG_CARD_SEARCH);\n\n// sourcing outreach actions\nexport const shouldUpdateSourcingOutReachAnalystInfo = createAction<boolean>(\n types.SHOULD_UPDATE_SOURCING_OUT_REACH_ANALYST_INFO\n);\n\nexport const updateSourcingOutReachAnalystInfo = createAction<{\n tableGridQuery: string;\n}>(types.UPDATE_SOURCING_OUT_REACH_ANALYST_INFO);\n\nexport const removeFilter = createAction<GridPayloadMain<ResetFilter>>(types.REMOVE_FILTER);\n\nexport const clearFilterSuccess = createAction<SearchStateData | null | undefined>(\n types.CLEAR_FILTER_SUCCESS\n);\nexport const loadSearch = createAction<GridPayloadMain<LoadSearch>>(types.LOAD_SEARCH);\n\nexport const clearDateMatches = createAction<ClearMatchedFromListPayload>(types.CLEAR_DATE_MATCHES);\n","export const SAVE_SEARCH_AS_LIST_LIMIT = 1000;\n","import { call, put } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { FavoriteListsSearchData } from '@models/lists/search';\n// services\nimport { SavedSearchesService } from '@services/api';\nimport * as actions from './actions';\n\n// search\nexport function* searchLists(data: FavoriteListsSearchData) {\n const res: AxiosResponse<any> = yield call(SavedSearchesService.getFavoriteLists, data);\n\n yield put(\n actions.fetchFavoriteListsSuccess({\n data: res.data.lists,\n total: res.data.total_list_count,\n ...data,\n showEmptyLists: data.showEmptyLists || false,\n })\n );\n}\n","import { takeLatest, call, put, select, fork } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\nimport { AxiosResponse } from 'axios';\nimport { push } from 'react-router-redux';\nimport queryString from 'query-string';\n// constants\nimport { FAVORITE_LIST_OWNER } from '@constants/lists';\nimport { LISTS_ROUTES } from '@constants/routes';\nimport { SAVE_SEARCH_AS_LIST_LIMIT } from './constants';\n// models\nimport { SearchStateData } from '@models/search';\nimport { BaseFilter, PreselectedFilter } from '@optx/models/filters';\nimport {\n CompanyWatchList,\n FetchFavoriteLists,\n UpdateListAssociation,\n PublicWatchListActionPayload,\n} from '@models/WatchList';\nimport { SearchPayloadRequest } from '@models/api/contacts';\nimport { PageInfo } from '@models/table/Pagination';\nimport { FavoriteListsSearchData, InitialFavoriteListsSearchData } from '@models/lists/search';\nimport { RouteAliases } from '@optx/models/routes';\nimport { SortByRule, SortRule } from '@models/table/sorting';\n// utils\nimport { mapSortQuery } from '@optx/utils/search';\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\nimport { getRouteAlias } from '@utils/routes';\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// services\nimport { SavedSearchesService, UserService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport { selectors as userSelectors, actions as userActions } from '@redux/user/information';\nimport { selectors as listsAndSearchesSelectors } from '@features/lists-and-searches';\nimport { actions as listsAndSearchesActions } from '@features/lists-and-searches/pagination';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport { getSearchKey } from '@optx/features/grid/search/state/selectors';\nimport { selectors as searchCountSelectors } from '@features/grid/search-count';\nimport { selectors as myCompaniesFilterCardsSelectors } from '@optx/redux/my-companies/filters-cards';\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { deleteCompanyInCurrentList } from '@redux/lists/details/actions';\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport * as actions from './actions';\nimport * as favoriteListsSelectors from './selectors';\nimport companyListsSagas from '../company-lists/sagas';\nimport { searchLists } from './sagasReusable';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\nimport { selectors as listsDetailsSelectors } from '@redux/lists/details';\n\nexport function* searchListsFail() {\n const errorMessage = 'Error fetching watch lists!';\n yield put(actions.fetchFavoriteListsFail(errorMessage));\n NotificationService.error(errorMessage);\n}\n\nexport function* initialFetchFavoriteListsSaga(\n action: PayloadAction<FetchFavoriteLists | undefined>\n) {\n const fetchAll = action.payload?.fetchAll;\n const showEmptyLists = action.payload?.showEmptyLists;\n const sorting: SortByRule<any>[] = yield select(favoriteListsSelectors.getSortBy);\n const searchData: InitialFavoriteListsSearchData = {\n sortBy: sorting,\n fetchAll,\n showEmptyLists: showEmptyLists ?? true,\n };\n\n try {\n // @ts-ignore\n const res = yield call(SavedSearchesService.initialFetchFavoriteLists, searchData);\n\n yield put(\n actions.initialFetchFavoritesListsSuccess({\n data: res.data.lists,\n total: res.data.total_list_count,\n ...searchData,\n showEmptyLists: searchData.showEmptyLists,\n })\n );\n } catch (e: any) {\n yield call(searchListsFail);\n }\n}\n\nexport function* fetchFavoriteListsSaga(action: PayloadAction<FetchFavoriteLists | undefined>) {\n const payloadQuery = action.payload?.query || '';\n const fetchAll = action.payload?.fetchAll;\n const showEmptyLists = action.payload?.showEmptyLists;\n const pageNumber: number = yield select(favoriteListsSelectors.getPageNumber);\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n const pagination = { pageNumber, pageSize };\n const userPageNumber: number = yield select(userSelectors.getFavoritesListResultsPageNumber);\n const query: string = yield select(favoriteListsSelectors.getQuery);\n const sorting: SortByRule<any>[] = yield select(favoriteListsSelectors.getSortBy);\n const searchData: FavoriteListsSearchData = {\n query: payloadQuery || '',\n sortBy: sorting,\n pagination:\n action.payload && action.payload.query !== query\n ? { ...pagination, pageNumber: 1 }\n : pagination,\n fetchAll,\n showEmptyLists: showEmptyLists ?? true,\n };\n\n try {\n yield call(searchLists, searchData);\n\n if (showEmptyLists) {\n yield put(actions.resetFetchedAt());\n }\n\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettingsForFavoritesList({\n favorites_list_page_number: searchData.pagination.pageNumber,\n my_watchlists_filters: payloadQuery,\n })\n );\n } else {\n yield put(\n userActions.updateUserSettingsForFavoritesList({ my_watchlists_filters: payloadQuery })\n );\n }\n } catch (e: any) {\n yield call(searchListsFail);\n }\n}\n\nexport function* sortFavoriteListsSaga(\n action: PayloadAction<{ data: SortRule<any>; hideHistory?: boolean }>\n) {\n const sorting = action.payload.data.sortBy;\n const hideHistory = action.payload.hideHistory;\n const userPageNumber: number = yield select(userSelectors.getFavoritesListResultsPageNumber);\n const showEmptyLists: boolean = yield select(favoriteListsSelectors.showEmptyLists);\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n const pagination = { pageNumber: 1, pageSize };\n const query: string = yield select(favoriteListsSelectors.getQuery);\n const searchData: FavoriteListsSearchData = {\n query,\n pagination,\n sortBy: sorting,\n fetchAll: true,\n showEmptyLists,\n };\n const sortQuery = queryString.stringify(mapSortQuery(sorting), {\n arrayFormat: 'comma',\n });\n\n try {\n yield call(searchLists, searchData);\n\n if (!hideHistory) {\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettingsForFavoritesList({\n favorites_list_sorting: sortQuery,\n favorites_list_page_number: searchData.pagination.pageNumber,\n })\n );\n } else {\n yield put(\n userActions.updateUserSettingsForFavoritesList({ favorites_list_sorting: sortQuery })\n );\n }\n }\n } catch (e: any) {\n yield call(searchListsFail);\n }\n}\n\nexport function* favoriteListsPaginationSaga(action: PayloadAction<PageInfo>) {\n const pagination = action.payload;\n const query: string = yield select(favoriteListsSelectors.getQuery);\n const sorting: SortByRule<any>[] = yield select(favoriteListsSelectors.getSortBy);\n const userPageNumber: number = yield select(userSelectors.getFavoritesListResultsPageNumber);\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n const showEmptyLists: boolean = yield select(favoriteListsSelectors.showEmptyLists);\n\n const searchData: FavoriteListsSearchData = {\n query,\n pagination,\n sortBy: sorting,\n showEmptyLists,\n };\n\n try {\n yield call(searchLists, searchData);\n\n if (\n searchData.pagination.pageSize !== pageSize &&\n searchData.pagination.pageNumber !== userPageNumber\n ) {\n yield put(\n userActions.updateUserSettingsForFavoritesList({\n lists_and_searches_results_per_page: pagination.pageSize,\n favorites_list_page_number: pagination.pageNumber,\n })\n );\n yield put(\n listsAndSearchesActions.updateMyWatchlistTabsPagination({\n actions: ['sourceScrub', 'companySearches', 'contactSearches'],\n pagination,\n })\n );\n } else if (searchData.pagination.pageSize !== pageSize) {\n yield put(\n userActions.updateUserSettings({\n lists_and_searches_results_per_page: pagination.pageSize,\n })\n );\n yield put(\n listsAndSearchesActions.updateMyWatchlistTabsPagination({\n actions: ['sourceScrub', 'companySearches', 'contactSearches'],\n pagination,\n })\n );\n } else if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettingsForFavoritesList({\n favorites_list_page_number: pagination.pageNumber,\n })\n );\n }\n } catch (e: any) {\n yield call(searchListsFail);\n }\n}\n\nexport function* updateFavoriteListAddonSaga(action: PayloadAction<UpdateListAssociation>) {\n const { payload } = action;\n const { listId, addonCompany } = payload;\n const isDeleting = addonCompany === 'blank';\n\n try {\n const res: AxiosResponse<{ addon_company_id: number }> = yield call(\n UserService.updateFavoriteListAddon,\n payload\n );\n\n if (res.data) {\n const { addon_company_id: addonCompanyId } = res.data;\n\n const updatedPayload: UpdateListAssociation = {\n listId,\n addonCompany: !isDeleting ? addonCompany : undefined,\n addonCompanyId,\n };\n\n yield put(actions.updateFavoriteListAssociationSuccess(updatedPayload));\n\n const successMessage = isDeleting\n ? 'List association successfully removed!'\n : `Watchlist successfully associated to ${updatedPayload.addonCompany}!`;\n\n NotificationService.success(successMessage);\n } else {\n const errorMessage = isDeleting\n ? 'Error removing associated company from Watchlist!'\n : 'Error associating company to Watchlist!';\n\n NotificationService.error(errorMessage);\n yield put(actions.updateFavoriteListAssociationFail(errorMessage));\n }\n } catch (error: any) {\n const errorMessage = isDeleting\n ? 'Error removing associated company from Watchlist!'\n : 'Error associating company to Watchlist!';\n\n NotificationService.error(errorMessage);\n yield put(actions.updateFavoriteListAssociationFail(errorMessage));\n }\n}\n\nexport function* createFavoriteListSaga(\n action: PayloadAction<{ title: string; company_id: number }>\n) {\n const { payload } = action;\n\n try {\n const res: AxiosResponse<CompanyWatchList> = yield call(\n SavedSearchesService.addCompanyToList,\n action.payload\n );\n const sorting: SortByRule<any>[] = yield select(favoriteListsSelectors.getSortBy);\n\n yield put(actions.createFavoriteListSuccess({ list: res.data, companyId: payload.company_id }));\n yield put(actions.fetchFavoriteLists({ query: '', sortBy: sorting, fetchAll: true }));\n NotificationService.success(`Create watchlist ${payload.title} success!`);\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to add to Watchlist!');\n NotificationService.error(message);\n yield put(actions.createFavoriteListFail(message));\n }\n}\n\nexport function* deleteFavoriteListSaga(action: PayloadAction<number>) {\n try {\n yield call(SavedSearchesService.deleteFavoriteList, action.payload);\n yield put(actions.deleteFavoriteListSuccess(action.payload));\n\n const successMessage = 'Watch List deleted successfully';\n NotificationService.success(successMessage);\n } catch (error: any) {\n const errorMessage = 'Error deleting watch list!';\n yield put(actions.deleteFavoriteListFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* renameFavoriteListSaga(action: PayloadAction<{ title: string; list_id: number }>) {\n try {\n yield call(SavedSearchesService.renameFavoriteList, action.payload);\n yield put(actions.renameFavoriteListSuccess(action.payload));\n\n const successMessage = 'Watch List renamed successfully';\n NotificationService.success(successMessage);\n } catch (error: any) {\n let errorMessage: string;\n\n if (\n Object.values(error.response.data.errors)[0] ===\n `Watchlist with a title ${action.payload.title} already exists.`\n ) {\n errorMessage = Object.values(error.response.data.errors)[0] as string;\n } else {\n errorMessage = 'Error renaming watch list!';\n }\n\n yield put(actions.renameFavoriteListFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* deleteCompanyFromListSaga(\n action: PayloadAction<{ list_id: string; company_id: number }>\n) {\n const { payload } = action;\n\n try {\n // @ts-ignore\n const res = yield call(SavedSearchesService.deleteCompanyInList, payload);\n yield put(\n actions.deleteCompanyFromListSuccess({\n companyId: payload.company_id,\n listId: payload.list_id,\n })\n );\n\n if (res.data) {\n const lists: CompanyWatchList[] = yield select(favoriteListsSelectors.getListsNormalized);\n const list = (lists as CompanyWatchList[]).find(\n (item: CompanyWatchList) => item.unique_id === Number(payload.list_id)\n );\n\n if (list && list.count === 0) {\n const isSourceScrub = window.location.pathname.substr(1).startsWith('ss');\n\n if (isSourceScrub) {\n yield put(push(LISTS_ROUTES.sourceScrubLists));\n } else {\n yield put(push(LISTS_ROUTES.myWatchList));\n }\n }\n }\n\n yield put(searchActions.initialCompaniesSearch({ gridKey: 'lists', data: undefined }));\n yield put(deleteCompanyInCurrentList(payload.company_id));\n\n NotificationService.success('Delete company from list success!');\n } catch (e: any) {\n const errorMessage = 'Delete company from list fail!';\n yield put(actions.deleteCompanyFromListFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* removeSharedListSaga(action: PayloadAction<number | string>) {\n const { payload } = action;\n\n try {\n yield call(UserService.removeSharedList, payload);\n yield put(actions.removeSharedListSuccess(payload));\n\n NotificationService.success('Watch List removed successfully');\n } catch (e: any) {\n const errorMessage = 'Error removing watch list!';\n yield put(actions.deleteCompanyFromListFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* addCompanyToListSaga(\n action: PayloadAction<{\n selectedLists: { list_title: string; list_id: number | null }[];\n company_id: number;\n error_on_conflict: boolean;\n }>\n) {\n const { company_id: companyId, selectedLists } = action.payload;\n const titles: string[] = selectedLists.map(item => item.list_title);\n\n const existingListIds: number[] = [];\n const newTitles: string[] = [];\n\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n\n selectedLists.flat().map(data => {\n if (data.list_id !== null) {\n return existingListIds.push(Number(data.list_id));\n }\n\n return newTitles.push(data.list_title.toString());\n });\n\n try {\n // @ts-ignore\n const res = yield call(UserService.bulkAddToWatchlist, [companyId], existingListIds, newTitles);\n\n if (res.data) {\n const failureListIds: number[] = [];\n const successListIds: number[] = [];\n\n res.data.map((item: { status: boolean; message: string; list_id: number }) => {\n if (item.status) {\n return successListIds.push(item.list_id);\n }\n\n return failureListIds.push(item.list_id);\n });\n\n if (failureListIds.length > 0) {\n const list: CompanyWatchList[] = yield select(\n favoriteListsSelectors.getWatchlists(failureListIds)\n );\n const titles: string[] = list.map((item: CompanyWatchList) => item.title);\n NotificationService.error(`Failed to add company to ${titles.join(', ')}`);\n }\n\n if (successListIds.length > 0) {\n const list: CompanyWatchList[] = yield select(\n favoriteListsSelectors.getWatchlists(successListIds)\n );\n\n const ownerName: string = yield select(userSelectors.getFullName);\n yield put(actions.addCompanyToListSuccess(companyId, list, ownerName));\n\n const titles: string[] = list.map((item: CompanyWatchList) => item.title);\n NotificationService.success(`Company was added to ${titles.join(', ')} list(s)!`);\n }\n } else {\n const errorMessage = res.data[0].message;\n\n yield put(actions.addCompanyToListFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n } catch (error: any) {\n let errorMessage = '';\n\n if (error.response.status === 409) {\n errorMessage = 'Company is already part of this list';\n } else if (Object.values(error.response.data.errors)[0] === 'Company is not in Equity Touch') {\n errorMessage = Object.values(error.response.data.errors)[0] as string;\n } else {\n errorMessage = `Failed to add company to ${titles.join(', ')}!`;\n }\n\n yield put(actions.addCompanyToListFail(errorMessage));\n NotificationService.error(errorMessage);\n\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n}\n\nexport function* saveSearchAsListSaga(\n action: PayloadAction<{ title: string; page?: number; callback?: () => void }>\n) {\n const { title, page = 1, callback } = action.payload;\n const pageAlias: RouteAliases | null = getRouteAlias();\n\n let searchKey: string;\n let sortBy: SortByRule<any>[];\n let filter: Dictionary<PreselectedFilter>;\n let filterQuery: Dictionary<string | Array<number | string>>;\n let getCompanyCount: number;\n let searchType: string;\n\n // save search as list separate with homepage and my companies for filters\n if (pageAlias === 'myCompanies') {\n searchKey = yield select(getSearchKey('myCompanies'));\n sortBy = yield select(sortSelectors.getSorting('myCompanies'));\n getCompanyCount = yield select(searchCountSelectors.getSearchCount('myCompanies'));\n searchType = yield select(searchTypeSelectors.getSearchType('myCompanies'));\n\n const selectedCard: SearchStateData = yield select(\n myCompaniesFilterCardsSelectors.getSelectedCard\n );\n const subFilter: string = yield select(myCompaniesFilterCardsSelectors.getSubFilter);\n\n if (subFilter) {\n // @ts-ignore\n filter = { ...selectedCard.filter, ...selectedCard.data[subFilter] };\n } else {\n filter = { ...selectedCard.filter };\n }\n\n // @ts-ignore\n filterQuery = filter;\n } else if (pageAlias === 'userLists' || pageAlias === 'sourceScrubLists') {\n searchKey = yield select(getSearchKey('lists'));\n sortBy = yield select(sortSelectors.getSorting('lists'));\n filter = yield select(filterSelectors.getFilter('lists'));\n getCompanyCount = yield select(searchCountSelectors.getSearchCount('lists'));\n searchType = yield select(searchTypeSelectors.getSearchType('lists'));\n const listId: string = yield select(listsDetailsSelectors.getRouteListId);\n\n const normalizedFilters: Dictionary<BaseFilter> = yield select(\n filterSourcesSelectors.getFiltersMap\n );\n\n filterQuery = mapFiltersToURLParams(normalizedFilters, filter);\n\n if (pageAlias === 'sourceScrubLists') {\n filterQuery.ss_list_id = listId;\n }\n } else {\n searchKey = yield select(getSearchKey('advancedSearch'));\n sortBy = yield select(sortSelectors.getSorting('advancedSearch'));\n filter = yield select(filterSelectors.getFilter('advancedSearch'));\n getCompanyCount = yield select(searchCountSelectors.getSearchCount('advancedSearch'));\n searchType = yield select(searchTypeSelectors.getSearchType('advancedSearch'));\n\n const normalizedFilters: Dictionary<BaseFilter> = yield select(\n filterSourcesSelectors.getFiltersMap\n );\n\n filterQuery = mapFiltersToURLParams(normalizedFilters, filter);\n }\n\n const userName: string = yield select(userSelectors.getFullName);\n const totalPageCount = Math.ceil(getCompanyCount / 1000);\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterQuery,\n pagination: { pageNumber: page, pageSize: SAVE_SEARCH_AS_LIST_LIMIT },\n sortBy,\n };\n\n try {\n const res: AxiosResponse<Dictionary<CompanyWatchList>> = yield call(\n SavedSearchesService.saveSearchAsList,\n title,\n searchData\n );\n const isCancel: boolean = yield select(favoriteListsSelectors.isCancel);\n\n res.data[Object.keys(res.data)[0]] = {\n ...res.data[Object.keys(res.data)[0]],\n owner_name: userName,\n origin: FAVORITE_LIST_OWNER,\n };\n\n const getKeys = Object.keys(res.data)[0];\n const getCount = res.data[getKeys].count;\n const value = res.data[getKeys];\n\n const isUnderLimit = getCount < SAVE_SEARCH_AS_LIST_LIMIT && page === 1;\n\n if (!isCancel) {\n if (res.data) {\n yield put(actions.saveTitle(''));\n\n if (totalPageCount !== page) {\n yield put(actions.updateCompleted(false));\n yield put(\n actions.updatePercentage(isUnderLimit ? Number(getCount) : Number(getCount) * page)\n );\n\n yield put(\n actions.saveSearchAsList({\n title,\n page: page + 1,\n })\n );\n } else {\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage(Number(getCompanyCount)));\n yield put(\n actions.saveSearchAsListSuccess({ [getKeys]: { ...value, count: getCompanyCount } })\n );\n NotificationService.success(`Create watchlist ${title} success!`);\n callback && callback();\n }\n }\n } else {\n yield put(actions.saveTitle(''));\n yield put(actions.updateCompleted(true));\n yield put(\n actions.updatePercentage(isUnderLimit ? Number(getCount) : SAVE_SEARCH_AS_LIST_LIMIT * page)\n );\n\n const message = `Create watchlist ${title} canceled!`;\n yield put(\n actions.saveSearchAsListSuccess({\n [getKeys]: {\n ...value,\n count: isUnderLimit ? Number(getCount) : SAVE_SEARCH_AS_LIST_LIMIT * page,\n },\n })\n );\n NotificationService.success(message);\n }\n } catch (e: any) {\n // save the title to reducer, create a new action\n yield put(actions.saveTitle(title));\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage(SAVE_SEARCH_AS_LIST_LIMIT * (page - 1)));\n const message = `Create watchlist ${title} failed!`;\n yield put(actions.saveSearchAsListFail(message));\n NotificationService.error(message);\n }\n}\n\nexport function* tryAgainSaveSearchAsListsaga() {\n const title: string = yield select(favoriteListsSelectors.getTitle);\n const lastPercentage: number = yield select(favoriteListsSelectors.getPercentage);\n yield put(\n actions.saveSearchAsList({ title, page: lastPercentage / SAVE_SEARCH_AS_LIST_LIMIT + 1 })\n );\n}\n\nfunction* publicWatchListSaga(action: PayloadAction<PublicWatchListActionPayload>) {\n const { list_id: listId, is_public: isPublic } = action.payload;\n\n const payload = {\n list_id: listId as number,\n is_public: isPublic,\n };\n\n const errorMessage = isPublic ? 'Failed to make list not public!' : 'Failed to make list public!';\n\n try {\n const res: AxiosResponse<Array<PublicWatchListActionPayload>> = yield call(\n UserService.publicList,\n payload\n );\n\n if (res.data && res.data.length) {\n const { origin } = res.data[0];\n\n const successMessage = isPublic\n ? 'List published successfully!'\n : 'List made not public successfully!';\n\n yield put(\n actions.publicWatchListSuccess({\n list_id: listId as number,\n is_public: isPublic,\n origin: origin as string,\n })\n );\n\n NotificationService.success(successMessage);\n } else {\n yield put(actions.publicWatchListFail(errorMessage));\n\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const message = getErrorMessage(error, errorMessage);\n\n yield put(actions.publicWatchListFail(message));\n\n NotificationService.error(message);\n }\n}\n\nexport default function* favoriteListsSagas() {\n yield takeLatest(actions.initialFetchFavoritesLists, initialFetchFavoriteListsSaga);\n yield takeLatest(actions.fetchFavoriteLists, fetchFavoriteListsSaga);\n yield takeLatest(actions.sortFavoriteLists, sortFavoriteListsSaga);\n yield takeLatest(actions.createFavoriteList, createFavoriteListSaga);\n yield takeLatest(actions.deleteFavoriteList, deleteFavoriteListSaga);\n yield takeLatest(actions.renameFavoriteList, renameFavoriteListSaga);\n yield takeLatest(actions.deleteCompanyFromList, deleteCompanyFromListSaga);\n yield takeLatest(actions.removeSharedList, removeSharedListSaga);\n yield takeLatest(actions.addCompanyToList, addCompanyToListSaga);\n yield takeLatest(actions.saveSearchAsList, saveSearchAsListSaga);\n yield takeLatest(actions.tryAgainSaveSearchAsList, tryAgainSaveSearchAsListsaga);\n yield takeLatest(actions.favoriteListsPagination, favoriteListsPaginationSaga);\n yield takeLatest(actions.updateFavoriteListAssociation, updateFavoriteListAddonSaga);\n yield takeLatest(actions.publicWatchList, publicWatchListSaga);\n yield fork(companyListsSagas);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, pickBy } from 'lodash';\n// models\nimport {\n CompanyWatchList,\n AddCompanyToWatchList,\n DeleteCompanyFromWatchList,\n UpdateListPermission,\n UpdateListAssociation,\n PublicWatchListActionPayload,\n} from '@models/WatchList';\nimport { PageInfo } from '@models/table/Pagination';\nimport { UserInformation } from '@optx/models/user';\nimport { SortByRule } from '@models/table/sorting';\nimport {\n BulkAddToWatchList,\n BulkRemoveFromWatchList,\n} from '@optx/features/bulk-actions/bulk-watchlist/state/interfaces';\n// utils\nimport { normalizeData } from '@utils/utils';\nimport { parseSorting } from '@optx/utils/filters/parseSorting';\n// constants\nimport { FAVORITE_LISTS_DEFAULT_SORT } from '@constants/table/sort/defaultSort';\n// reducer\nimport { actions as pipelineReportActions } from '@features/pipeline-report/state';\nimport * as bulkWatchlistsActions from '@features/bulk-actions/bulk-watchlist/state/actions';\nimport { fetchReducer, fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport * as actions from './actions';\nimport { FavoriteListsState } from './interfaces';\n\nexport const initialState: FavoriteListsState = {\n byId: {},\n allIds: [],\n allWatchlists: {},\n error: '',\n loading: false,\n fetchedAt: '',\n total: 0,\n query: '',\n pageNumber: 1,\n title: '',\n completed: false,\n percentage: 0,\n cancel: false,\n sortBy: FAVORITE_LISTS_DEFAULT_SORT,\n showEmptyLists: null,\n loadingPublic: false,\n errorPublic: '',\n};\n\nconst initialFetchFavoriteListsSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<{\n data: Array<CompanyWatchList>;\n total: number;\n sortBy: Array<SortByRule<any>>;\n showEmptyLists: boolean;\n }>\n> = (draftState, action) => {\n const { data, showEmptyLists } = action.payload;\n\n const watchlists: CompanyWatchList[] = [];\n const allWatchlists: CompanyWatchList[] = data;\n\n const watchListsById = {} as Dictionary<CompanyWatchList>;\n const allWatchlistsById = {} as Dictionary<CompanyWatchList>;\n\n watchlists.forEach((listItem: CompanyWatchList) => {\n watchListsById[listItem.unique_id] = listItem;\n });\n allWatchlists.forEach((listItem: CompanyWatchList) => {\n allWatchlistsById[listItem.unique_id] = listItem;\n });\n\n const filteredAllWatchlists = data\n .filter(item => item.share_permission !== 1)\n .reduce(normalizeData('unique_id'), {}) as Dictionary<CompanyWatchList>;\n\n draftState.allWatchlists = filteredAllWatchlists;\n\n draftState.byId = allWatchlistsById;\n\n draftState.allIds = watchlists.map(listItem => listItem.unique_id);\n draftState.total = action.payload.total;\n draftState.loading = false;\n draftState.sortBy = action.payload.sortBy;\n draftState.showEmptyLists = showEmptyLists;\n\n if (!draftState.fetchedAt) {\n draftState.fetchedAt = new Date().toISOString();\n }\n};\n\n// fetch favorite lists success reducer\nconst fetchFavoriteListsSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<{\n data: Array<CompanyWatchList>;\n query: string;\n total: number;\n pagination: PageInfo;\n fetchAll?: boolean;\n sortBy: Array<SortByRule<any>>;\n showEmptyLists: boolean;\n }>\n> = (draftState, action) => {\n const { data, fetchAll, pagination, showEmptyLists } = action.payload;\n\n let watchlists: CompanyWatchList[] = [];\n const allWatchlists: CompanyWatchList[] = data;\n\n if (fetchAll) {\n watchlists = data.slice(0, pagination.pageSize);\n } else {\n watchlists = data;\n }\n\n const watchListsById = {} as Dictionary<CompanyWatchList>;\n const allWatchlistsById = {} as Dictionary<CompanyWatchList>;\n\n watchlists.forEach((listItem: CompanyWatchList) => {\n watchListsById[listItem.unique_id] = listItem;\n });\n allWatchlists.forEach((listItem: CompanyWatchList) => {\n allWatchlistsById[listItem.unique_id] = listItem;\n });\n\n draftState.byId = allWatchlistsById;\n\n draftState.allIds = watchlists.map(listItem => listItem.unique_id);\n draftState.query = action.payload.query || '';\n draftState.total = action.payload.total;\n draftState.pageNumber = action.payload.pagination.pageNumber;\n draftState.loading = false;\n draftState.sortBy = action.payload.sortBy;\n draftState.showEmptyLists = showEmptyLists;\n\n if (!draftState.fetchedAt) {\n draftState.fetchedAt = new Date().toISOString();\n }\n};\n\nexport const fetchUserInformationSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const sorting = action.payload.settings.session_settings?.favorites_list_sorting;\n const query = action.payload.settings.session_settings?.my_watchlists_filters;\n const pageNumber = action.payload.settings.session_settings?.favorites_list_page_number;\n\n if (sorting) {\n const { sortBy } = parseSorting(sorting);\n draftState.sortBy = sortBy;\n }\n\n if (query) {\n draftState.query = query;\n }\n\n if (pageNumber) {\n draftState.pageNumber = pageNumber;\n }\n};\n\n// delete list success\nconst deleteFavoriteListSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<number | string>\n> = (draftState, action) => {\n const listId = action.payload;\n draftState.loading = false;\n draftState.byId = pickBy(draftState.byId, (value, key) => key !== listId.toString());\n draftState.allWatchlists = pickBy(\n draftState.allWatchlists,\n (value, key) => key !== listId.toString()\n );\n const index = draftState.allIds.findIndex(id => id === listId);\n\n if (index !== -1) {\n draftState.allIds.splice(index, 1);\n }\n\n draftState.total -= 1;\n};\n\n// create list success\nconst createListSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<{\n companyId: number;\n list: CompanyWatchList;\n }>\n> = (draftState, action) => {\n const { list } = action.payload;\n\n draftState.loading = false;\n draftState.allWatchlists = { ...draftState.allWatchlists, [list.unique_id]: list };\n};\n\n// delete list success\nconst renameFavoriteListSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<{ list_id: number | string; title: string }>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.byId[action.payload.list_id].title = action.payload.title;\n\n if (draftState.allWatchlists[action.payload.list_id]) {\n draftState.allWatchlists[action.payload.list_id].title = action.payload.title;\n }\n};\n\n// remove list success\nconst removeSharedListSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<number | string>\n> = (draftState, action) => {\n const listId = action.payload;\n draftState.loading = false;\n draftState.byId = pickBy(draftState.byId, (value, key) => key !== listId.toString());\n draftState.allWatchlists = pickBy(\n draftState.allWatchlists,\n (value, key) => key !== listId.toString()\n );\n const index = draftState.allIds.findIndex(id => id === listId);\n\n if (index !== -1) {\n draftState.allIds.splice(index, 1);\n }\n\n draftState.total -= 1;\n};\n\nconst updateFavoriteListCountReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<{ list_id: number | string; count: number }>\n> = (draftState, action) => {\n const { list_id: listId, count } = action.payload;\n draftState.loading = false;\n\n if (draftState.byId[listId]) {\n draftState.byId[listId].count = count!;\n }\n};\n\n// add company to list success\nconst addCompanyToListSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<AddCompanyToWatchList>\n> = (draftState, action) => {\n const { watchLists } = action.payload;\n\n draftState.loading = false;\n watchLists.forEach(list => {\n draftState.allWatchlists[list.unique_id].count =\n Number(draftState.allWatchlists[list.unique_id].count) + watchLists.length;\n draftState.byId[list.unique_id].count =\n Number(draftState.byId[list.unique_id].count) + watchLists.length;\n });\n};\n\n// delete company from list success\nconst deleteCompanyFromListSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<DeleteCompanyFromWatchList>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.byId[action.payload.listId].count--;\n draftState.allWatchlists[action.payload.listId].count--;\n};\n\n// save search as list success\nconst saveSearchAsListSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<Dictionary<CompanyWatchList>>\n> = (draftState, action) => {\n for (const uniqueId in action.payload) {\n if (Object.prototype.hasOwnProperty.call(action.payload, uniqueId)) {\n const newList: CompanyWatchList = { ...action.payload[uniqueId], unique_id: uniqueId };\n\n draftState.byId[uniqueId] = newList;\n draftState.allIds.unshift(Number(uniqueId));\n draftState.allWatchlists[uniqueId] = action.payload[uniqueId];\n }\n }\n};\n\nconst updateFavoriteListPermissionReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<UpdateListPermission>\n> = (draftState, action) => {\n const listId = action.payload.listId;\n draftState.byId[listId].share_permission = action.payload.userPermission;\n draftState.loading = false;\n};\n\nconst updateFavoriteListAssociationSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<UpdateListAssociation>\n> = (draftState, action) => {\n const { listId, addonCompany, addonCompanyId } = action.payload;\n\n draftState.loading = false;\n\n if (draftState.byId[listId]) {\n draftState.byId[listId].addon_company = addonCompany;\n draftState.byId[listId].addon_company_id = addonCompanyId;\n }\n\n if (draftState.allWatchlists[listId]) {\n draftState.allWatchlists[listId].addon_company = addonCompany;\n draftState.allWatchlists[listId].addon_company_id = addonCompanyId;\n }\n};\n\nconst resetFetchedAtReducer: CaseReducer<FavoriteListsState> = draftState => {\n draftState.fetchedAt = '';\n};\n\nconst fetchFavoriteListPagination: CaseReducer<FavoriteListsState> = draftState => {\n draftState.loading = true;\n};\n\nconst updateListCountReducer: CaseReducer<FavoriteListsState, PayloadAction<number>> = (\n draftState,\n { payload }\n) => {\n if (draftState.allWatchlists[payload]) {\n draftState.allWatchlists[payload].count++;\n }\n\n if (draftState.byId[payload]) {\n draftState.byId[payload].count++;\n }\n};\n\nconst updateCompletedReducer: CaseReducer<FavoriteListsState, PayloadAction<boolean>> = (\n draftState,\n { payload }\n) => {\n draftState.completed = payload;\n draftState.cancel = false;\n};\n\nconst updatePercentageReducer: CaseReducer<FavoriteListsState, PayloadAction<number>> = (\n draftState,\n { payload }\n) => {\n draftState.percentage = payload;\n};\n\nconst saveTitleReducer: CaseReducer<FavoriteListsState, PayloadAction<string>> = (\n draftState,\n { payload }\n) => {\n draftState.title = payload;\n};\n\nconst cancelSaveSearchAsListReducer: CaseReducer<FavoriteListsState> = draftState => {\n draftState.cancel = true;\n};\n\nconst resetSaveSearchAsListReducer: CaseReducer<FavoriteListsState> = draftState => {\n draftState.cancel = false;\n draftState.percentage = 0;\n draftState.completed = false;\n};\n\nconst bulkRemoveFromWatchListReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<BulkRemoveFromWatchList>\n> = (draftState, action) => {\n const count = action.payload.selectedCompanies.length;\n const { listId } = action.payload;\n\n if (draftState.byId[listId] && typeof draftState.byId[listId].count === 'number') {\n draftState.byId[listId].count -= count;\n }\n\n if (\n draftState.allWatchlists[listId] &&\n typeof draftState.allWatchlists[listId].count === 'number'\n ) {\n draftState.allWatchlists[listId].count -= count;\n }\n};\n\nconst bulkAddToWatchListReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<BulkAddToWatchList>\n> = (draftState, action) => {\n const count = action.payload.selectedCompanies.length;\n const { selectedData } = action.payload;\n\n selectedData.forEach(list => {\n if (draftState.byId[list.value]) {\n draftState.byId[list.value].count = Number(draftState.byId[list.value].count) + Number(count);\n }\n\n if (draftState.allWatchlists[list.value]) {\n draftState.allWatchlists[list.value].count =\n Number(draftState.allWatchlists[list.value].count) + Number(count);\n }\n });\n};\n\nconst publicWatchListReducer: CaseReducer<FavoriteListsState> = draftState => {\n draftState.loadingPublic = true;\n draftState.errorPublic = '';\n};\n\nconst publicWatchListSuccessReducer: CaseReducer<\n FavoriteListsState,\n PayloadAction<PublicWatchListActionPayload>\n> = (draftState, action) => {\n const { list_id: listId, is_public: isPublic, origin } = action.payload;\n\n if (draftState.byId[listId as number]) {\n draftState.byId[listId as number] = {\n ...draftState.byId[listId as number],\n is_public: isPublic,\n origin: origin,\n };\n }\n\n if (draftState.allWatchlists[listId as number]) {\n draftState.allWatchlists[listId as number] = {\n ...draftState.allWatchlists[listId as number],\n is_public: isPublic,\n origin: origin,\n };\n }\n\n draftState.loadingPublic = false;\n};\n\nconst publicWatchListFailReducer: CaseReducer<FavoriteListsState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.loadingPublic = false;\n draftState.errorPublic = action.payload;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // initial fetch favorites lists\n .addCase(actions.initialFetchFavoritesLists, fetchReducer)\n .addCase(actions.initialFetchFavoritesListsSuccess, initialFetchFavoriteListsSuccessReducer)\n // fetch favorites lists\n .addCase(actions.fetchFavoriteLists, fetchReducer)\n .addCase(actions.fetchFavoriteListsSuccess, fetchFavoriteListsSuccessReducer)\n .addCase(actions.fetchFavoriteListsFail, fetchFailReducer)\n // sort favorites lists\n .addCase(actions.sortFavoriteLists, fetchReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n // pagination\n .addCase(actions.favoriteListsPagination, fetchFavoriteListPagination)\n // create favorite list\n .addCase(actions.createFavoriteList, fetchReducer)\n .addCase(actions.createFavoriteListSuccess, createListSuccessReducer)\n .addCase(actions.createFavoriteListFail, fetchFailReducer)\n // delete favorite list\n .addCase(actions.deleteFavoriteList, fetchReducer)\n .addCase(actions.deleteFavoriteListSuccess, deleteFavoriteListSuccessReducer)\n .addCase(actions.deleteFavoriteListFail, fetchFailReducer)\n // remove favorite list\n .addCase(actions.removeSharedList, fetchReducer)\n .addCase(actions.removeSharedListSuccess, removeSharedListSuccessReducer)\n .addCase(actions.removeSharedListFail, fetchFailReducer)\n // rename favorite list\n .addCase(actions.renameFavoriteList, fetchReducer)\n .addCase(actions.renameFavoriteListSuccess, renameFavoriteListSuccessReducer)\n .addCase(actions.renameFavoriteListFail, fetchFailReducer)\n // update favorite list count after bulk remove\n .addCase(actions.updateFavoriteListCount, updateFavoriteListCountReducer)\n // add company to list\n .addCase(actions.addCompanyToList, fetchReducer)\n .addCase(actions.addCompanyToListSuccess, addCompanyToListSuccessReducer)\n .addCase(actions.addCompanyToListFail, fetchFailReducer)\n // delete company in list\n .addCase(actions.deleteCompanyFromList, fetchReducer)\n .addCase(actions.deleteCompanyFromListSuccess, deleteCompanyFromListSuccessReducer)\n .addCase(actions.deleteCompanyFromListFail, fetchFailReducer)\n // save search as list\n .addCase(actions.saveSearchAsListSuccess, saveSearchAsListSuccessReducer)\n .addCase(pipelineReportActions.saveSearchAsListSuccess, saveSearchAsListSuccessReducer)\n .addCase(actions.updateCompleted, updateCompletedReducer)\n .addCase(actions.updatePercentage, updatePercentageReducer)\n .addCase(actions.cancelSaveSearchAsList, cancelSaveSearchAsListReducer)\n .addCase(actions.resetSaveSearchAsList, resetSaveSearchAsListReducer)\n .addCase(actions.saveTitle, saveTitleReducer)\n .addCase(actions.saveSearchAsListFail, fetchFailReducer)\n // update list\n .addCase(actions.updateFavoriteListPermission, updateFavoriteListPermissionReducer)\n // add list association\n .addCase(actions.updateFavoriteListAssociation, fetchReducer)\n .addCase(\n actions.updateFavoriteListAssociationSuccess,\n updateFavoriteListAssociationSuccessReducer\n )\n .addCase(actions.updateFavoriteListAssociationFail, fetchFailReducer)\n // reset fetchedAt\n .addCase(actions.resetFetchedAt, resetFetchedAtReducer)\n // edit imported list\n .addCase(actions.updateListCount, updateListCountReducer)\n // bulk remove\n .addCase(bulkWatchlistsActions.bulkRemoveFromWatchList, bulkRemoveFromWatchListReducer)\n .addCase(bulkWatchlistsActions.bulkAddToWatchList, bulkAddToWatchListReducer)\n // public list\n .addCase(actions.publicWatchList, publicWatchListReducer)\n .addCase(actions.publicWatchListSuccess, publicWatchListSuccessReducer)\n .addCase(actions.publicWatchListFail, publicWatchListFailReducer)\n);\n\nexport default reducer;\n","import moment from 'moment';\nimport { Dictionary, isEmpty } from 'lodash';\n// models\nimport {\n ParsedUpcomingTouchesNotificationDetails,\n UpcomingTouchesNotificationDetails,\n} from '@optx/models/notifications';\nimport { ImportedCompany } from '@optx/features/list-import/state/interfaces';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { ISO_DATE_FORMAT, NOTIFICATION_DATE_FRAME_FORMAT } from '@optx/constants/format/date';\n\nexport const formatNumber = (n: string | number) => String(n).replace(/(.)(?=(\\d{3})+$)/g, '$1,');\n\nexport const hasBlankOrNoneLabel = (item: string) => {\n if (item === undefined) return false;\n\n return ['blank', 'none'].includes(item.toLowerCase());\n};\n\nexport const hasBlankLabel = (item: string) => {\n return ['blank'].includes(item.toLowerCase());\n};\n\nexport const showRationaleForStage = (selectedOption: string) =>\n ['Dead', 'Pass'].includes(selectedOption);\n\nexport const showOpinionForNextSteps = (selectedOption: string) => selectedOption === 'Other';\n\nexport const parseDataByPastTime = (data: UpcomingTouchesNotificationDetails[]) => {\n const results = {\n data: {\n Today: {\n dateData: [] as unknown as UpcomingTouchesNotificationDetails[],\n dateFrame: '',\n },\n },\n count: 0,\n };\n\n const todayNew = moment().format(ISO_DATE_FORMAT);\n const filteredData = data.filter(item => moment(item.next_update).diff(todayNew, 'days') <= 0);\n\n // Logic for 'Today' notifications\n const todayDate = moment().subtract(0, 'd');\n const todayDateFrame = todayDate.format(NOTIFICATION_DATE_FRAME_FORMAT);\n\n results.data.Today.dateFrame = `${todayDateFrame}`;\n results.data.Today.dateData = filteredData;\n results.count = filteredData.length;\n\n return results;\n};\n\nconst objectReverse = <T>(source: Dictionary<T>): Dictionary<T> =>\n Object.keys(source)\n .reverse()\n .reduce((acc: Dictionary<T>, key: string) => ({ ...acc, [key]: source[key] }), {});\n\nexport const parseDataByNextTime = (\n data: UpcomingTouchesNotificationDetails[],\n hasUpcomingTouchesSorting?: string\n) => {\n const dataSet: Dictionary<ParsedUpcomingTouchesNotificationDetails> = {\n Today: {\n dateData: [],\n dateFrame: '',\n },\n Tomorrow: {\n dateData: [],\n dateFrame: '',\n },\n 'This week': {\n dateData: [],\n dateFrame: '',\n },\n 'Next week': {\n dateData: [],\n dateFrame: '',\n },\n };\n\n let results = {\n data: dataSet,\n count: 0,\n };\n\n if (hasUpcomingTouchesSorting === 'asc') {\n results.data = objectReverse(dataSet);\n }\n\n const todayNew = moment().format(ISO_DATE_FORMAT);\n const filteredData = data.filter(item => moment(item.next_update).diff(todayNew, 'days') >= 0);\n\n // Logic for 'Today' notifications\n const todayDate = moment().add(0, 'd');\n const today = todayDate.format(ISO_DATE_FORMAT);\n const todayDateFrame = todayDate.format(NOTIFICATION_DATE_FRAME_FORMAT);\n\n results.data.Today.dateFrame = `${todayDateFrame}`;\n\n // Logic for 'Tomorrow' notifications\n const tomorrowDate = moment().add(1, 'd');\n const tomorrow = tomorrowDate.format(ISO_DATE_FORMAT);\n const tomorrowDateFrame = tomorrowDate.format(NOTIFICATION_DATE_FRAME_FORMAT);\n\n results.data.Tomorrow.dateFrame = `${tomorrowDateFrame}`;\n\n // Logic for 'This Week' notifications\n const lastDayOfThisWeek = moment().add(6, 'd').format(ISO_DATE_FORMAT);\n\n // Logic for 'Next week' notifications\n const startDayOfNextWeek = moment().add(7, 'd').format(ISO_DATE_FORMAT);\n const lastDayOfNextWeek = moment().add(13, 'd').format(ISO_DATE_FORMAT);\n\n filteredData.forEach(item => {\n const futureTouchDate = moment(item.next_update);\n\n if (futureTouchDate.isSame(today)) {\n results.data.Today.dateData.push(item);\n results.count++;\n } else if (futureTouchDate.isSame(tomorrow)) {\n results.data.Tomorrow.dateData.push(item);\n results.count++;\n } else if (futureTouchDate.isBetween(tomorrow, lastDayOfThisWeek)) {\n results.data['This week'].dateData.push(item);\n results.count++;\n } else if (futureTouchDate.isBetween(startDayOfNextWeek, lastDayOfNextWeek)) {\n results.data['Next week'].dateData.push(item);\n results.count++;\n }\n });\n\n return results;\n};\n\nexport const convertPayloadImport = (dataImport: Array<{}>) => {\n const result: Array<{}> = [];\n let data = {\n data: [] as unknown as {},\n };\n\n if (!isEmpty(dataImport)) {\n dataImport.forEach((value: { [x: string]: string }) => {\n let cmp = '';\n let url = '';\n\n for (const pr in value) {\n if (typeof pr == 'string') {\n switch (pr.toLowerCase()) {\n case 'company':\n cmp = pr;\n break;\n case 'url':\n url = pr;\n break;\n default:\n break;\n }\n }\n }\n\n if (cmp && url && value[cmp]) {\n result.push({\n Company: value[cmp].trim(),\n URL: value[url].trim(),\n Website: value[url].trim(),\n });\n }\n });\n }\n\n data = { data: result };\n const dataString = JSON.stringify(data);\n\n return { dataString, data: data.data as ImportedCompany[] };\n};\n\nexport const copyToClipboard = (value: string | JSX.Element) => {\n if (!navigator.clipboard) {\n return;\n }\n\n navigator.clipboard.writeText(value as string);\n};\n\n/**\n * convertLinkedinURL - called to convert Linkedin URL to acceptable, if it's invalid.\n * @param {string} linkedinUrlValue - value that user entered to input field\n */\nexport const convertLinkedinURL = (linkedinUrlValue: string | null | undefined) => {\n if (!linkedinUrlValue) return linkedinUrlValue;\n let linkedinUrl = linkedinUrlValue;\n\n if (linkedinUrlValue.includes('/mwlite/')) {\n linkedinUrl = linkedinUrlValue.replace('/mwlite/', '/');\n }\n\n // Remove subdomain if is present\n linkedinUrl = linkedinUrl.replace(/\\/\\/(.*?)linkedin/g, '//www.linkedin');\n\n switch (!!linkedinUrl) {\n case linkedinUrl.startsWith('https://www.linkedin.com/in/'):\n case linkedinUrl.startsWith('https://linkedin.com/in/'):\n case linkedinUrl.startsWith('https://www.linkedin.com/in'):\n case linkedinUrl.startsWith('http://www.linkedin.com/in'):\n return linkedinUrl;\n\n case linkedinUrl.startsWith('www.linkedin.com/in/'):\n case linkedinUrl.startsWith('www.linkedin.com/in'):\n return linkedinUrl.replace('www', 'https://www');\n\n case linkedinUrl.startsWith('http://www.linkedin.com/in/'):\n case linkedinUrl.startsWith('http://linkedin.com/in/'):\n return linkedinUrl.replace('http', 'https');\n\n case linkedinUrl.startsWith('linkedin.com/in/'):\n case linkedinUrl.startsWith('linkedin.com/in'):\n return linkedinUrl.replace('linkedin', 'https://www.linkedin');\n\n default:\n return `https://www.linkedin.com/in/${linkedinUrl}`;\n }\n};\n\n/**\n * makeUnique - called to make unique array of objects by keys\n * @param {any} array - source array to make unique\n * @param {string[]} keys - keys to base the array to be made unique\n */\nexport const makeUnique = (array: any[], keys: string[]) => {\n if (!keys.length || !array.length) return [];\n\n return array.reduce((list, item) => {\n const hasItem = list.find((listItem: any) => keys.every(key => listItem[key] === item[key]));\n if (!hasItem) list.push(item);\n\n return list;\n }, []);\n};\n\n/**\n * Normalizes a given value to its corresponding label\n * @param {SelectOption} value - The value to be normalized\n * @param {SelectOption[]} options - The list of options to search for the normalized value\n *\n * @returns {string} The normalized value's label\n */\nexport const normalizeValue = (value: SelectOption, options: SelectOption[]) => {\n if (value.value !== 'blank') {\n const option = options.find(item => item.value.toString() === value.value);\n\n if (option) {\n return option.label;\n }\n }\n\n return value.value;\n};\n\n/**\n * Ensures that the Pendo script is loaded before proceeding.\n *\n * - If `window.pendo` is already available, resolves immediately.\n * - If the script with `id=\"pendo-io-script\"` is found, waits for its `onload` event.\n * - If the script is not found, rejects with an error.\n *\n * @returns {Promise<void>} A promise that resolves when Pendo is loaded or rejects if the script is missing.\n */\nexport const pendoLoadingHelper: () => Promise<void> = () => {\n if (window.pendo) {\n return Promise.resolve();\n }\n\n const pendoScript = document.getElementById('pendo-io-script');\n\n if (!pendoScript) {\n return Promise.reject('Pendo script is not found.');\n }\n\n return new Promise<void>(resolve => {\n if (!pendoScript.onload && window.pendo) {\n resolve();\n } else {\n pendoScript.onload = () => resolve();\n }\n });\n};\n","import { SortByRule } from '@models/table/sorting';\n\nexport const COMPANY_DEFAULT_SORT: Array<SortByRule<any>> = [\n {\n id: 'company_name',\n desc: false,\n },\n];\n\nexport const COMPANY_LIST_NEW_MATCHED_SORT: Array<SortByRule<any>> = [\n {\n id: 'date_matched',\n desc: false,\n },\n];\n\nexport const COMPANY_LIST_NEW_MATCHES_SORT: Array<SortByRule<any>> = [\n {\n id: 'date_matched',\n desc: true,\n },\n];\n\nexport const CONTACT_DEFAULT_SORT: Array<SortByRule<any>> = [\n {\n id: 'last_name',\n desc: false,\n },\n];\n\nexport const MYCOMPANIES_DEFAULT_SORT_US: Array<SortByRule<any>> = [\n {\n id: 'score',\n desc: true,\n },\n];\n\nexport const MYCOMPANIES_DEFAULT_SORT_IL: Array<SortByRule<any>> = [\n {\n id: 'il_optx_score',\n desc: true,\n },\n];\n\nexport const ANALYST_HOME_DEFAULT_SORT_US: Array<SortByRule<any>> = [\n {\n id: 'score',\n desc: true,\n },\n];\n\nexport const ANALYST_HOME_DEFAULT_SORT_IL: Array<SortByRule<any>> = [\n {\n id: 'il_optx_score',\n desc: true,\n },\n];\n\nexport const USER_DEFAULT_SORT: Array<SortByRule<any>> = [\n {\n id: 'display_name',\n desc: false,\n },\n];\n\nexport const COMPANY_TAB_LISTS_DEFAULT_SORT: Array<SortByRule<any>> = [\n {\n id: 'modified_at',\n desc: true,\n },\n];\n\nexport const SOURCE_SCRUB_LISTS_DEFAULT_SORT: Array<SortByRule<any>> = [\n {\n id: 'last_refreshed_at',\n desc: true,\n },\n];\n\nexport const FAVORITE_LISTS_DEFAULT_SORT: Array<SortByRule<any>> = [\n {\n id: 'modified_at',\n desc: true,\n },\n];\n\nexport const FAVORITE_LISTS_POPUP_DEFAULT_SORT: Array<SortByRule<any>> = [\n {\n id: 'recently_used',\n desc: true,\n },\n];\n\n// list of columns that should sort descending first when selected;\nexport const SORT_DESCENDING_BY_DEFAULT = ['score', 'year_founded'];\n\nexport const SCHEDULED_TOUCHES_DEFAULT_SORT: Array<SortByRule<any>> = [\n {\n id: 'optx',\n desc: false,\n },\n];\n\nexport const FILES_DEFAULT_SORT: Array<SortByRule<any>> = [\n {\n id: 'registered_at',\n desc: true,\n },\n];\n","/**\n * Generate uniquer key of 5 characters in length.\n */\nexport const generateUniqueKey = () => Math.random().toString(36).substr(2, 5);\n","import moment from 'moment';\nimport { Dictionary } from 'lodash';\n// models\nimport { PreselectedFilter, BaseFilter } from '@optx/models/filters';\nimport {\n FormCheckableRangeOption,\n FormCheckboxOption,\n SelectOption,\n LogicOption,\n} from '@optx/models/Option';\nimport { CheckableRangeOption, SingleCheckboxRangeOption } from '@optx/models/RangeOption';\n// constants\nimport { ISO_DATE_FORMAT } from '../../constants/format/date';\n// utils\nimport { lowerRangeKey, upperRangeKey } from './rangeKey';\n\nconst mapFiltersToURLParams = (\n normalizedSources: Dictionary<BaseFilter<any>>,\n filters: Dictionary<PreselectedFilter>,\n histogramFilters?: Array<string>,\n options?: {\n dateRangeFormatUpperLower?: boolean;\n }\n) => {\n const mappedFilters: Dictionary<string | Array<number | string>> = {};\n\n // map current sources\n const keys = Object.keys(filters);\n keys.forEach(filterColumn => {\n const filter = normalizedSources[filterColumn];\n\n if (filter) {\n const currentFilterData = filters[filterColumn];\n\n switch (filter.type) {\n case 'range_input': {\n const data = currentFilterData as Array<FormCheckableRangeOption>;\n const lowerOptions: Array<number | string> = [];\n const upperOptions: Array<number | string> = [];\n\n const histogramFiltersLength = histogramFilters ? histogramFilters.length : 0;\n const histogramList = histogramFilters || [];\n const histogramListFieldIndex = histogramList.indexOf(filterColumn);\n // The following code validate these situations:\n // - if histogramList doesn't exist or has no values, it should validate only the min/max/range 'if' below\n // - if histogramList exists the filter should be in the list, otherwise\n // even though the range might be different, if it's not in the list, don't include\n let shouldValidateHistogramFilters = !histogramFiltersLength;\n\n if (histogramFiltersLength && histogramListFieldIndex > -1) {\n shouldValidateHistogramFilters = true;\n }\n\n data.forEach((option, index) => {\n // this code gets the original min/max and compare the option with it\n // instead of comparing with the newer min/max values\n const originalMinMax: Array<number> = [];\n filter.data.forEach((filterItem: any) => {\n if (typeof filterItem.min === 'number' && typeof filterItem.max === 'number') {\n originalMinMax.push(filterItem.min);\n originalMinMax.push(filterItem.max);\n }\n });\n\n if (\n (originalMinMax[0] !== option.range[0] || originalMinMax[1] !== option.range[1]) &&\n shouldValidateHistogramFilters\n ) {\n lowerOptions.push(option.range[0]);\n upperOptions.push(option.range[1]);\n }\n\n const ebitdaString: string[] = [];\n\n if (option.check && index === 0) {\n option.check.forEach(item => {\n // special case for ebitda_numeric, api cannot handle sending all possible checkbox\n // options with existing parameters. it's required that UI sends some of these in a separate\n // parameter called ebitda_string.\n // TODO if we need to apply this to another column, then we need to make some api changes\n // for the parameter names and make this functionality generic\n if (item.checked) {\n if (filterColumn !== 'ebitda_numeric') {\n if (\n filterColumn === 'last_ebitda_margin' ||\n filterColumn === 'last_gross_margin'\n ) {\n if (\n item.value === 'not_blank' ||\n item.value === 'blank' ||\n item.value === 'include_below'\n ) {\n lowerOptions.push(item.value);\n upperOptions.push(item.value);\n }\n } else {\n lowerOptions.push(item.value);\n upperOptions.push(item.value);\n }\n } else {\n if (item.value === 'not_blank') {\n lowerOptions.push(item.value);\n upperOptions.push(item.value);\n } else {\n ebitdaString.push(item.value);\n mappedFilters.ebitda_string = ebitdaString.join(',');\n }\n }\n }\n });\n }\n });\n\n mappedFilters[lowerRangeKey(filter.column)] = lowerOptions;\n mappedFilters[upperRangeKey(filter.column)] = upperOptions;\n break;\n }\n\n case 'checkbox': {\n const data = currentFilterData as Array<FormCheckboxOption>;\n const options: Array<string | number> = [];\n\n data.forEach(item => {\n if (item.checked) {\n options.push(item.value);\n }\n });\n\n // add custom option if available\n const customOption = filters[`${filterColumn}_custom`] as\n | SingleCheckboxRangeOption\n | undefined;\n\n if (customOption && customOption.checked && customOption.value) {\n options.push(customOption.value);\n }\n\n mappedFilters[filter.column] = options;\n break;\n }\n\n case 'multi_text': {\n const data = currentFilterData as Array<SelectOption>;\n const options: Array<string> = [];\n\n data.forEach(item => {\n if (item.value) {\n options.push(item.value);\n }\n });\n\n // we have a special filter called geo_range with two text fields, that is connected to\n // a helper filter called geo_country, which is a single select dropdown.\n // they're connected with \"used_by\" and \"used_for\" properties.\n // the helper select value must be sent within the \"multi_text\" filter parameter, in this case:\n // geo_range=<zip_code>,<range>,<country>\n // if this filter type has a helper select filter, add it's value at the end\n if (filter.used_for.length) {\n filter.used_for.forEach(columnName => {\n if (filters[columnName] && (filters[columnName] as SelectOption).value) {\n options.push((filters[columnName] as SelectOption).value);\n }\n });\n }\n\n mappedFilters[filter.column] = options;\n break;\n }\n\n case 'logic_checkbox': {\n const data = currentFilterData as Array<LogicOption>;\n const options: Array<string> = [];\n\n data.forEach(item => {\n if (item.in) {\n options.push(`${item.value}-1-0`);\n }\n\n if (item.notIn) {\n options.push(`${item.value}-0-1`);\n }\n });\n\n mappedFilters[filter.column] = options;\n break;\n }\n\n case 'multiple_range_nr': {\n const data = currentFilterData as Array<CheckableRangeOption>;\n const lowerOptions: Array<number> = [];\n const upperOptions: Array<number> = [];\n\n data.forEach(item => {\n if (item.checked) {\n lowerOptions.push(item.min);\n upperOptions.push(item.max);\n }\n });\n\n // add custom option if available\n const customOption = filters[`${filterColumn}_custom`] as\n | CheckableRangeOption\n | undefined;\n\n if (customOption && customOption.checked && customOption.min && customOption.max) {\n lowerOptions.push(customOption.min);\n upperOptions.push(customOption.max);\n }\n\n mappedFilters[lowerRangeKey(filter.column)] = lowerOptions;\n mappedFilters[upperRangeKey(filter.column)] = upperOptions;\n break;\n }\n\n case 'date_range': {\n const [start, end] = currentFilterData as Array<SelectOption>;\n const lowerOptions: Array<string> = [];\n const upperOptions: Array<string> = [];\n\n if (typeof start === 'object' && typeof end === 'object') {\n if (start.value) {\n lowerOptions.push(moment(start.value).format(ISO_DATE_FORMAT));\n }\n\n if (end.value) {\n upperOptions.push(moment(end.value).format(ISO_DATE_FORMAT));\n }\n }\n\n if (typeof start === 'string' && typeof end === 'string') {\n if (start) {\n lowerOptions.push(moment(start).format(ISO_DATE_FORMAT));\n }\n\n if (end) {\n upperOptions.push(moment(end).format(ISO_DATE_FORMAT));\n }\n }\n\n mappedFilters[lowerRangeKey(filter.column)] = lowerOptions;\n mappedFilters[upperRangeKey(filter.column)] = upperOptions;\n break;\n }\n\n case 'radio': {\n if (currentFilterData) {\n mappedFilters[filter.column] = currentFilterData as string;\n }\n\n break;\n }\n\n case 'endpoint_query': {\n if (currentFilterData) {\n mappedFilters[filter.column] = (currentFilterData as Array<SelectOption>).map(\n item => item.value\n );\n }\n\n break;\n }\n\n case 'multi_select': {\n if (currentFilterData) {\n mappedFilters[filter.column] = (currentFilterData as Array<SelectOption>)?.map(\n option => option?.value ?? option\n );\n }\n\n break;\n }\n\n case 'single_select': {\n if (currentFilterData) {\n mappedFilters[filter.column] = (currentFilterData as Array<SelectOption>).map(\n option => option.value\n );\n }\n\n break;\n }\n\n case 'date_range_radio': {\n if (currentFilterData) {\n mappedFilters[filter.column] = currentFilterData as [string, string];\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n });\n\n if (filters.similarCompanies) {\n mappedFilters.company_id = (filters.similarCompanies as SelectOption).value?.split(',');\n }\n\n // Handle special filter cases.\n // add current list id\n if (filters.saved_list_id) {\n mappedFilters.saved_list_id = filters.saved_list_id as string;\n }\n\n // add source scrub list id\n if (filters.ss_list_id) {\n mappedFilters.ss_list_id = filters.ss_list_id as string;\n }\n\n // Handle special case for filter for companies user is assigned.\n if (filters.my_assigned_companies) {\n mappedFilters.my_assigned_companies = filters.my_assigned_companies as string;\n }\n\n if (filters.queryParsed) {\n const values = Object.values(filters.queryParsed);\n Object.keys(filters.queryParsed).forEach((key, index) => {\n if (key === 'column_name' || key === 'analyst_id') {\n return;\n }\n\n if (key === 'touch_type' || key === 'so_stage') {\n mappedFilters[key] = values[index]?.toString().split(',');\n } else {\n mappedFilters[key] = values[index];\n }\n });\n }\n\n // Handle special case to show only new date matched.\n if (filters.new_date_matched) {\n mappedFilters.new_date_matched = filters.new_date_matched as string;\n }\n\n // Handle special case for IVC or Israel tag use case.\n if (filters.is_in_israel) {\n mappedFilters.is_in_israel = filters.is_in_israel as string;\n }\n\n // Special case for is portfolio/platform.\n if (filters.is_platform) {\n mappedFilters.is_platform = filters.is_platform as string;\n }\n\n // Special case for parent company.\n if (filters.parentcompany) {\n const formatedValue: string =\n filters.parentcompany instanceof Array\n ? filters.parentcompany.join()\n : (filters.parentcompany as string);\n mappedFilters.parentcompany = formatedValue;\n }\n\n // Special case for query.\n if (filters.query) {\n const formatedValue: string =\n filters.query instanceof Array ? filters.query.join() : (filters.query as string);\n mappedFilters.query = formatedValue;\n }\n\n // Special case for Company Name+URL query.\n if (filters.company_name_or_url) {\n if (Array.isArray(filters.company_name_or_url)) {\n mappedFilters.company_name_or_url = filters.company_name_or_url.join(',');\n } else {\n mappedFilters.company_name_or_url = filters.company_name_or_url as string;\n }\n }\n\n if (filters.ddate) {\n const sourcingDatesFilter = filters.ddate as unknown as string[];\n mappedFilters.ddate_lower = sourcingDatesFilter[0];\n mappedFilters.ddate_upper = sourcingDatesFilter[1];\n }\n\n // handle special case for next and last touch date (hidden from filters modal)\n if (filters.next_touch_date) {\n const nextTouchDateFilter = filters.next_touch_date as string | string[];\n let nextTouchDate: string[] = [];\n\n if (typeof nextTouchDateFilter === 'string') {\n mappedFilters.next_touch_date = nextTouchDateFilter;\n } else if ((nextTouchDateFilter as string[]).every(filter => typeof filter === 'string')) {\n nextTouchDate = nextTouchDateFilter as string[];\n mappedFilters.next_touch_date = nextTouchDate;\n } else {\n nextTouchDate = (filters.next_touch_date as SingleCheckboxRangeOption[]).map(\n filter => filter.value\n ) as string[];\n mappedFilters.next_touch_date = nextTouchDate;\n }\n }\n\n if (filters.last_touch_date) {\n const lastTouchDateFilter = filters.last_touch_date as string | string[];\n let lastTouchDate: string[] = [];\n\n if (typeof lastTouchDateFilter === 'string') {\n mappedFilters.last_touch_date = lastTouchDateFilter;\n } else if ((lastTouchDateFilter as string[]).every(filter => typeof filter === 'string')) {\n lastTouchDate = lastTouchDateFilter as string[];\n mappedFilters.last_touch_date = lastTouchDate;\n } else {\n lastTouchDate = (filters.last_touch_date as SingleCheckboxRangeOption[]).map(\n filter => filter.value\n ) as string[];\n mappedFilters.last_touch_date = lastTouchDate;\n }\n }\n\n // if column type is date_range_radio and if we want to send to api as\n // lower and upper you can pass the option\n // dateRangeFormatUpperLower: true\n // this will send the date range as [KEY]_lower and [KEY]_upper\n if (options?.dateRangeFormatUpperLower) {\n keys.forEach(filterColumn => {\n const column = normalizedSources[filterColumn];\n\n if (column) {\n if (column.type === 'date_range_radio') {\n const findFilter = filters[column.column];\n const sourcingDatesFilter = findFilter as unknown as string[];\n mappedFilters[lowerRangeKey(filterColumn)] = sourcingDatesFilter[0];\n mappedFilters[upperRangeKey(filterColumn)] = sourcingDatesFilter[1];\n\n delete mappedFilters[filterColumn];\n }\n }\n });\n }\n\n if (filters.addon_bool) {\n mappedFilters.addon_bool = filters.addon_bool as string;\n }\n\n if (filters.wrt_over_6_wks) {\n mappedFilters.wrt_over_6_wks = filters.wrt_over_6_wks as string;\n }\n\n if (filters.wrt_over_6_months) {\n mappedFilters.wrt_over_6_months = filters.wrt_over_6_months as string;\n }\n\n if (filters.wrt_nothing_scheduled) {\n mappedFilters.wrt_nothing_scheduled = filters.wrt_nothing_scheduled as string;\n }\n\n if (filters.wst_over_6_months) {\n mappedFilters.wst_over_6_months = filters.wst_over_6_months as string;\n }\n\n if (filters.wst_over_6_wks) {\n mappedFilters.wst_over_6_wks = filters.wst_over_6_wks as string;\n }\n\n if (filters.wst_within_6_wks) {\n mappedFilters.wst_within_6_wks = filters.wst_within_6_wks as string;\n }\n\n if (filters.mfst_8_to_14_days) {\n mappedFilters.mfst_8_to_14_days = filters.mfst_8_to_14_days as string;\n }\n\n if (filters.mfst_next_7_days) {\n mappedFilters.mfst_next_7_days = filters.mfst_next_7_days as string;\n }\n\n if (filters.mfst_next_30_days) {\n mappedFilters.mfst_next_30_days = filters.mfst_next_30_days as string;\n }\n\n if (filters.mfst_past_due) {\n mappedFilters.mfst_past_due = filters.mfst_past_due as string;\n }\n\n if (filters.stn30_8_to_14_days_away) {\n mappedFilters.stn30_8_to_14_days_away = filters.stn30_8_to_14_days_away as string;\n }\n\n if (filters.stn30_next_7_days) {\n mappedFilters.stn30_next_7_days = filters.stn30_next_7_days as string;\n }\n\n if (filters.stn30_next_30_days) {\n mappedFilters.stn30_next_30_days = filters.stn30_next_30_days as string;\n }\n\n if (filters.stn30_past_due) {\n mappedFilters.stn30_past_due = filters.stn30_past_due as string;\n }\n\n if (filters.next_touch_date_days) {\n mappedFilters.next_touch_date_days = filters.next_touch_date_days as string;\n }\n\n if (filters.last_touch_date_days) {\n mappedFilters.last_touch_date_days = filters.last_touch_date_days as string;\n }\n\n return mappedFilters;\n};\n\nexport default mapFiltersToURLParams;\n","export default 'bulk-equity-touch';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const initializeEquityTouchBulk = createFeatureActionType(\n featureName,\n 'INITIALIZE_EQUITY_TOUCH_BULK'\n);\n\nexport const initializeEquityTouchBulkSuccess = createFeatureActionType(\n featureName,\n 'INITIALIZE_EQUITY_TOUCH_BULK_SUCCESS'\n);\n\nexport const initializeIndividualEditing = createFeatureActionType(\n featureName,\n 'INDIVIDUAL_EDITING_INTIALIZATION'\n);\n\nexport const fetchFormDataSuccess = createFeatureActionType(featureName, 'FETCH_FORM_DATA_SUCCESS');\n\nexport const addToEquityTouchBulk = createFeatureActionType(\n featureName,\n 'ADD_TO_EQUITY_TOUCH_BULK'\n);\n\nexport const addToEquityTouchBulkSuccess = createFeatureActionType(\n featureName,\n 'ADD_TO_EQUITY_TOUCH_BULK_SUCCESS'\n);\n\nexport const addToEquityTouchBulkFail = createFeatureActionType(\n featureName,\n 'ADD_TO_EQUITY_TOUCH_BULK_FAIL'\n);\n\nexport const fetchCompany = createFeatureActionType(featureName, 'FETCH_COMPANY');\nexport const fetchCompanySuccess = createFeatureActionType(featureName, 'FETCH_COMPANY_SUCCESS');\n\nexport const addBulkContacts = createFeatureActionType(featureName, 'ADD_BULK_CONTACTS');\nexport const updateBulkContact = createFeatureActionType(featureName, 'UPDATE_BULK_CONTACT');\nexport const updateBulkCadence = createFeatureActionType(featureName, 'UPDATE_BULK_CADENCE');\nexport const updateBulkContactSuccess = createFeatureActionType(\n featureName,\n 'UPDATE_BULK_CONTACT_SUCCESS'\n);\n\nexport const updateBulkCompany = createFeatureActionType(featureName, 'UPDATE_BULK_COMPANY');\n\nexport const updateProgress = createFeatureActionType(featureName, 'UPDATE_PROGRESS');\n\nexport const updateCompleted = createFeatureActionType(featureName, 'UPDATE_COMPLETED');\n\nexport const updatePercentage = createFeatureActionType(featureName, 'UPDATE_PERCENTAGE');\n\nexport const saveResults = createFeatureActionType(featureName, 'SAVE_RESULTS');\n\nexport const resetProgress = createFeatureActionType(featureName, 'RESET_PROGRESS');\n\nexport const cancel = createFeatureActionType(featureName, 'CANCEL');\n\nexport const resolveSalesloft = createFeatureActionType(featureName, 'RESOLVE_SALESLOFT');\nexport const resolveSalesloftSuccess = createFeatureActionType(\n featureName,\n 'RESOLVE_SALESLOFT_SUCCESS'\n);\nexport const salesloftSelectContactsBulk = createFeatureActionType(\n featureName,\n 'SALESLOFT_SELECT_CONTACTS_BULK'\n);\n\nexport const selectCadenceIndividually = createFeatureActionType(\n featureName,\n 'SELECT_CADENCE_INDIVIDUALLY'\n);\n\nexport const fetchContacts = createFeatureActionType(featureName, 'FETCH_CONTACTS');\nexport const fetchContactsSuccess = createFeatureActionType(featureName, 'FETCH_CONTACTS_SUCCESS');\n\nexport const autoSave = createFeatureActionType(featureName, 'AUTO_SAVE');\nexport const updateTemporaryData = createFeatureActionType(featureName, 'UPDATE_TEMPORARY_DATA');\n","import { createAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport { EquityTouchFetchedField, EquityTouchContact } from '@models/equityTouch';\nimport {\n CompanyBulkData,\n BulkCompanyData,\n EquityTouchBulkSuccess,\n ResolveSalesloft,\n ResolveSalesloftSuccess,\n UpdateCompanyAndSubmit,\n SalesloftContactsBulk,\n EquityTouchBulkResults,\n EquityTouchBulkAutoSave,\n SelectedCompaniesData,\n TemporaryDataEquityTouch,\n EquityTouchBulkCompanies,\n} from '@models/bulkActions';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { CompanyProfile } from '@models/Company';\n// redux\nimport * as types from './types';\n\nexport const initializeEquityTouchBulk = createAction<SelectedCompaniesData>(\n types.initializeEquityTouchBulk\n);\n\nexport const initializeEquityTouchBulkSuccess = createAction<BulkCompanyData>(\n types.initializeEquityTouchBulkSuccess\n);\n\nexport const initializeIndividualEditing = createAction<\n Dictionary<string | number | number[] | boolean>\n>(types.initializeIndividualEditing);\n\nexport const fetchFormDataSuccess = createAction(\n types.fetchFormDataSuccess,\n (formData: Dictionary<EquityTouchFetchedField>, isInitializing: boolean, companyId?: number) => ({\n payload: {\n formData,\n isInitializing,\n companyId,\n },\n })\n);\n\nexport const addToEquityTouchBulk = createAction<CompanyBulkData>(types.addToEquityTouchBulk);\nexport const addToEquityTouchBulkSuccess = createAction<EquityTouchBulkSuccess>(\n types.addToEquityTouchBulkSuccess\n);\nexport const addToEquityTouchBulkFail = createAction<string>(types.addToEquityTouchBulkFail);\n\nexport const fetchCompany = createAction(\n types.fetchCompany,\n (companyId: number, fetchEqtData: boolean = true) => ({\n payload: {\n companyId,\n fetchEqtData,\n },\n })\n);\nexport const fetchCompanySuccess = createAction<CompanyProfile>(types.fetchCompanySuccess);\n\nexport const addBulkContacts = createAction(\n types.addBulkContacts,\n (contacts: EquityTouchContact[], companyId: number) => ({\n payload: {\n contacts,\n companyId,\n },\n })\n);\n\nexport const updateBulkContact = createAction(\n types.updateBulkContact,\n (payload: Partial<CompanyUserContact>, callback?: VoidFunction) => ({\n payload,\n meta: callback,\n })\n);\n\nexport const updateBulkCadence = createAction<EquityTouchBulkCompanies>(types.updateBulkCadence);\n\nexport const updateBulkContactSuccess = createAction<Partial<CompanyUserContact>>(\n types.updateBulkContactSuccess\n);\n\nexport const updateBulkCompany = createAction<UpdateCompanyAndSubmit>(types.updateBulkCompany);\n\nexport const updateProgress = createAction<boolean>(types.updateProgress);\n\nexport const updateCompleted = createAction<boolean>(types.updateCompleted);\n\nexport const updatePercentage = createAction<number>(types.updatePercentage);\n\nexport const saveResults = createAction<EquityTouchBulkResults[]>(types.saveResults);\n\nexport const resetProgress = createAction(types.resetProgress);\n\nexport const cancel = createAction<boolean>(types.cancel);\n\nexport const resolveSalesloft = createAction<ResolveSalesloft>(types.resolveSalesloft);\nexport const resolveSalesloftSuccess = createAction<ResolveSalesloftSuccess>(\n types.resolveSalesloftSuccess\n);\n\nexport const salesloftSelectContactsBulk = createAction<SalesloftContactsBulk>(\n types.salesloftSelectContactsBulk\n);\n\nexport const selectCadenceIndividually = createAction(\n types.selectCadenceIndividually,\n (cadenceId: number | string, companyId: number) => ({\n payload: {\n cadenceId,\n companyId,\n },\n })\n);\n\nexport const fetchContacts = createAction<number>(types.fetchContacts);\nexport const fetchContactsSuccess = createAction(\n types.fetchContactsSuccess,\n (contacts: CompanyUserContact[], companyId: number) => ({\n payload: {\n contacts,\n companyId,\n },\n })\n);\n\nexport const autoSave = createAction<EquityTouchBulkAutoSave | null>(types.autoSave);\n\nexport const updateTemporaryData = createAction<TemporaryDataEquityTouch>(\n types.updateTemporaryData\n);\n","import { Dictionary } from 'lodash';\nimport { createAction } from '@reduxjs/toolkit';\n// interfaces/types\nimport { SearchCompanyPayload } from '@models/search';\nimport * as types from './types';\nimport { SearchStateData } from '@models/search';\nimport { ChangeCardSubfilterPayload } from './interfaces';\n\nexport const initializeMyCompaniesCards = createAction(types.INITIALIZE_MY_COMPANIES_CARDS);\n\nexport const fetchMyCompaniesCards = createAction(\n types.FETCH_MY_COMPANIES_CARDS,\n (payload: Partial<SearchCompanyPayload>, resetSubFilter?: boolean) => ({\n payload,\n meta: resetSubFilter,\n })\n);\nexport const fetchMyCompaniesCardsSuccess = createAction<Dictionary<SearchStateData>>(\n types.FETCH_MY_COMPANIES_CARDS_SUCCESS\n);\nexport const fetchMyCompaniesCardsFail = createAction<string>(types.FETCH_MY_COMPANIES_CARDS_FAIL);\n\nexport const changeCard = createAction<string>(types.CHANGE_CARD);\n\nexport const changeCardSubfilter = createAction<ChangeCardSubfilterPayload>(\n types.CHANGE_CARD_SUBFILTER\n);\n\nexport const changeCardSubfilterSuccess = createAction<ChangeCardSubfilterPayload>(\n types.CHANGE_CARD_SUBFILTER_SUCCESS\n);\n","export const INITIALIZE_MY_COMPANIES_CARDS = 'INITIALIZE_MY_COMPANIES_CARDS';\n\nexport const FETCH_MY_COMPANIES_CARDS = 'my-companies/FETCH_MY_COMPANIES_CARDS';\nexport const FETCH_MY_COMPANIES_FILTER_CARDS = 'my-companies/FETCH_MY_COMPANIES_FILTER_CARDS';\nexport const FETCH_MY_COMPANIES_CARDS_SUCCESS = 'my-companies/FETCH_MY_COMPANIES_CARDS_SUCCESS';\nexport const FETCH_MY_COMPANIES_CARDS_FAIL = 'my-companies/FETCH_MY_COMPANIES_CARDS_FAIL';\n\nexport const CHANGE_CARD = 'my-companies/CHANGE_CARD';\nexport const CHANGE_CARD_SUBFILTER = 'my-companies/CHANGE_CARD_SUBFILTER';\nexport const CHANGE_CARD_SUBFILTER_SUCCESS = 'my-companies/CHANGE_CARD_SUBFILTER_SUCCESS';\n","import { takeLatest, call, put, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// services\nimport { UserService, SearchService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// models\nimport { SearchPayload, SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { FilterSearchOriginName, PreselectedFilter, FilterSource } from '@optx/models/filters';\nimport { UserSessionSettings } from '@models/user';\n// utils\nimport { processCardList, getCompanyOwner, myCompaniesCardsFilters } from '@utils/myCompanies';\nimport { filterOutExcludedFilters, getSearchTypeInfo, preProcessSearch } from '@optx/utils/search';\n// redux\nimport { actions as searchKeyActions } from '@features/grid/searchkey';\nimport { actions as searchCountActions } from '@features/grid/search-count';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport { getFiltersQuery, handleTouchFilters } from '@redux/company/search/search/sagasReusable';\nimport { selectors as companiesFilterSelectors } from '@redux/company/filters';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport { UpdateUserSettingsPayload } from '@optx/models/api/user';\nimport { AxiosResponse } from 'axios';\nimport { Dictionary } from 'lodash';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { SearchViewType } from '@optx/models/user';\nimport Company from '@optx/models/Company';\nimport * as selectors from './selectors';\nimport * as actions from './actions';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport {\n selectors as histogramSelectors,\n actions as histogramActions,\n} from '@features/grid/histograms';\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\nimport { updateFilterSettings, searchCompanies } from '@features/grid/search/state/sagasReusable';\nimport { SearchStateData, SearchCompanyPayload } from '@models/search';\nimport { selectors as paginationSelectors } from '@features/grid/pagination';\nimport { selectors as filterSelectors } from '@features/grid/filter';\nimport { selectors as longCardPaginationSelectors } from '@features/grid/pagination-long-card';\nimport { getViewId } from '@optx/features/grid/view/state/selectors';\nimport { getListType } from '@optx/features/grid/search/state/selectors';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\n\n/**\n * Fetch Cards section for My Companies\n */\nfunction* fetchMyCompaniesCardsSaga(\n action: PayloadAction<Partial<SearchCompanyPayload>, any, boolean>\n) {\n let filterQuery = {};\n\n const { filter, shouldHandleTouchFilters, shouldResetPageNumber } = action.payload;\n\n if (filter) {\n const touchFilters: Dictionary<PreselectedFilter> = yield call(handleTouchFilters, filter);\n filterQuery = yield call(getFiltersQuery, touchFilters);\n }\n\n const searchKey = action.payload.searchKey ? preProcessSearch(action.payload.searchKey) : '';\n const searchType = action.payload.searchType as string;\n const fetched: boolean = yield select(searchSelectors.fetched);\n const selectedCard: SearchStateData = yield select(selectors.getSelectedCard);\n const selectedCardId: string = yield select(selectors.getSelectedCardId);\n const allFiltersWithHistograms: string[] = yield select(\n histogramSelectors.allFiltersWithHistograms('myCompanies')\n );\n\n try {\n const res: AxiosResponse<Dictionary<SearchStateData>> = yield call(\n UserService.fetchMyCompaniesCards,\n searchKey,\n searchType,\n {\n ...filterQuery,\n saved_list_id: undefined,\n },\n selectedCardId ? (selectedCardId as string) : 'card1'\n );\n\n if (res.data) {\n const cardsList = processCardList(res.data);\n yield put(actions.fetchMyCompaniesCardsSuccess(cardsList));\n\n const searchData: Partial<SearchPayload> = {\n searchKey,\n searchType,\n filter: action.payload.filter,\n shouldHandleTouchFilters,\n };\n\n if (shouldResetPageNumber) searchData.shouldResetPageNumber = shouldResetPageNumber;\n\n yield put(\n searchActions.searchCompanies(\n {\n gridKey: 'myCompanies',\n data: searchData,\n },\n action.meta\n )\n );\n\n if (action.meta) {\n yield put(searchActions.clearFilterSuccess(selectedCard));\n }\n\n if (!fetched) {\n yield put(histogramActions.init());\n } else {\n yield put(\n histogramActions.fetchHistogramFilters(\n 'myCompanies',\n filter || {},\n allFiltersWithHistograms\n )\n );\n }\n } else {\n const errorMessage = 'Error fetching My Companies!';\n yield put(actions.fetchMyCompaniesCardsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = `Error fetching My Companies - ${e}`;\n yield put(actions.fetchMyCompaniesCardsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* initializeMyCompaniesCardsSaga() {\n const searchKey: string = yield select(searchSelectors.getSearchKey('myCompanies'));\n const searchType: string = yield select(searchTypeSelectors.getSearchType('myCompanies'));\n let filter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter('myCompanies')\n );\n const authorizedComponents: Dictionary<boolean> = yield select(\n userInformationSelectors.authorizedComponents\n );\n let companyOwner: Array<{ value: string; label: string }> | undefined;\n const selectedCardId: string = yield select(selectors.getSelectedCardId);\n\n // check for combinded searche from sesstionSettings or other lists\n const sessionSettings: UserSessionSettings = yield select(\n userInformationSelectors.getSessionSettings\n );\n const { my_companies_filters: myCompanySessionFilters } = sessionSettings;\n const { searchType: listIdType, searchId } = getSearchTypeInfo(myCompanySessionFilters);\n\n // for analysts we need to apply company owner filter\n // check is user is analyst, search for company owner filter,\n // get the company owner id for the current user\n if (\n !authorizedComponents.admin_portal_link &&\n // @ts-ignore\n (filter?.company_owner_id === undefined || filter?.company_owner_id?.length === 0)\n ) {\n const filterSources: FilterSource[] = yield select(companiesFilterSelectors.getCompanyFilters);\n const userName: string = yield select(userInformationSelectors.getFullName);\n\n companyOwner = getCompanyOwner(filterSources, userName);\n filter = { ...filter, company_owner_id: companyOwner };\n }\n\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(getFiltersQuery, filter);\n\n const allFiltersWithHistograms: string[] = yield select(\n histogramSelectors.allFiltersWithHistograms('myCompanies')\n );\n\n const filteredQuery = filterOutExcludedFilters(filterQuery);\n\n try {\n const res: AxiosResponse<Dictionary<SearchStateData>> = yield call(\n UserService.fetchMyCompaniesCards,\n searchKey,\n searchType,\n {\n ...filteredQuery,\n saved_list_id: undefined,\n },\n selectedCardId ? (selectedCardId as string) : 'card1'\n );\n\n if (res.data) {\n const cardsList = processCardList(res.data);\n\n yield put(actions.fetchMyCompaniesCardsSuccess(cardsList));\n\n const selectedCard: SearchStateData = yield select(selectors.getSelectedCard);\n const tablePagination: PageInfo = yield select(\n paginationSelectors.getPagination('myCompanies')\n );\n const longCardPagination: PageInfo = yield select(\n longCardPaginationSelectors.getLongCardPagination('myCompanies')\n );\n const subFilter: string = yield select(selectors.getSubFilter);\n const sortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting('myCompanies'));\n const viewType: SearchViewType = yield select(viewTypeSelectors.searchView('myCompanies'));\n\n const pagination: PageInfo = {\n pageNumber: viewType === 'table' ? tablePagination.pageNumber : 1,\n pageSize: viewType === 'table' ? tablePagination.pageSize : longCardPagination.pageSize,\n };\n const searchType: string = yield select(searchTypeSelectors.getSearchType('myCompanies'));\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: {\n ...selectedCard?.filter,\n // @ts-ignore\n ...(subFilter ? selectedCard?.data[subFilter] : {}),\n ...filterQuery,\n source_tag_filter: selectedCard?.filter?.source_tag_filter,\n ...myCompaniesCardsFilters(selectedCard, {\n nextTouchDate: filterQuery.next_touch_date as any,\n lastTouchDateDays: filterQuery.last_touch_date_days as any,\n stage: filterQuery.stage as any,\n }),\n },\n pagination,\n sortBy,\n ...(searchId && { fromSavedList: searchId, listType: listIdType }),\n };\n\n yield call(searchCompanies, searchData, 'myCompanies', filter);\n\n const fetched: boolean = yield select(searchSelectors.fetched('myCompanies'));\n\n if (!fetched) {\n yield put(histogramActions.init());\n } else {\n yield put(\n histogramActions.fetchHistogramFilters('myCompanies', filter, allFiltersWithHistograms)\n );\n }\n } else {\n const errorMessage = 'Error fetching My Companies!';\n yield put(actions.fetchMyCompaniesCardsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = `Error fetching My Companies - ${e}`;\n yield put(actions.fetchMyCompaniesCardsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* changeCardSaga() {\n const searchKey: string = yield select(searchSelectors.getSearchKey('myCompanies'));\n const searchType: string = yield select(searchTypeSelectors.getSearchType('myCompanies'));\n const filter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter('myCompanies')\n );\n const listType: string = yield select(getListType('myCompanies'));\n const selectedCardId: string = yield select(selectors.getSelectedCardId);\n const customClearedFilter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getCustomClearedFilter('myCompanies')\n );\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(\n getFiltersQuery,\n listType === 'combined' ? customClearedFilter : filter\n );\n const allFiltersWithHistograms: string[] = yield select(\n histogramSelectors.allFiltersWithHistograms('myCompanies')\n );\n\n try {\n const res: AxiosResponse<Dictionary<SearchStateData>> = yield call(\n UserService.fetchMyCompaniesCards,\n searchKey,\n searchType,\n {\n ...filterQuery,\n saved_list_id: undefined,\n },\n selectedCardId\n );\n\n if (res.data) {\n const selectedCard: SearchStateData = yield select(selectors.getSelectedCard);\n const tablePagination: PageInfo = yield select(\n paginationSelectors.getPagination('myCompanies')\n );\n const userPageNumber: number = yield select(\n userInformationSelectors.getMyCompaniesResultsPageNumber\n );\n\n const longCardPagination: PageInfo = yield select(\n longCardPaginationSelectors.getLongCardPagination('myCompanies')\n );\n const subFilter: string = yield select(selectors.getSubFilter);\n const sortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting('myCompanies'));\n const id: number = yield select(getViewId('myCompanies'));\n const listType: string = yield select(getListType('myCompanies'));\n const searchView: SearchViewType = yield select(viewTypeSelectors.searchView('myCompanies'));\n const pagination: PageInfo = {\n pageNumber: 1,\n pageSize: searchView === 'table' ? tablePagination.pageSize : longCardPagination.pageSize,\n };\n const savedListId = selectedCard.filter?.saved_list_id\n ? { saved_list_id: selectedCard.filter?.saved_list_id }\n : { saved_list_id: undefined };\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: subFilter\n ? {\n ...selectedCard.filter,\n // @ts-ignore\n ...selectedCard.data[subFilter],\n ...filterQuery,\n ...savedListId,\n source_tag_filter: selectedCard.filter.source_tag_filter,\n ...myCompaniesCardsFilters(selectedCard, {\n nextTouchDate: filterQuery.next_touch_date as any,\n lastTouchDateDays: filterQuery.last_touch_date_days as any,\n stage: filterQuery.stage as any,\n }),\n query: searchKey,\n }\n : {\n ...selectedCard.filter,\n ...filterQuery,\n ...savedListId,\n source_tag_filter: selectedCard.filter.source_tag_filter,\n ...myCompaniesCardsFilters(selectedCard, {\n nextTouchDate: filterQuery.next_touch_date as any,\n lastTouchDateDays: filterQuery.last_touch_date_days as any,\n stage: filterQuery.stage as any,\n }),\n query: searchKey,\n },\n pagination,\n sortBy,\n fromSavedList: id,\n listType,\n };\n\n // save settings on card change\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield call(updateFilterSettings, searchData, 'myCompanies', {\n my_companies_results_page_number: searchData.pagination.pageNumber,\n });\n } else {\n yield call(\n updateFilterSettings,\n searchData,\n 'myCompanies',\n true as unknown as Partial<UpdateUserSettingsPayload>\n );\n }\n\n yield put(searchCountActions.searchCount({ data: searchData, gridKey: 'myCompanies' }));\n\n const searchOriginKey: FilterSearchOriginName = 'my_companies';\n const filtersSearchOriginValue: number = yield select(state =>\n companiesFilterSelectors.getFilterSearchOrigin(state, searchOriginKey)\n );\n\n let payloadData = { ...searchData };\n\n if (typeof filtersSearchOriginValue === 'number') {\n payloadData = {\n ...payloadData,\n searchOrigin: filtersSearchOriginValue,\n };\n }\n\n const searchResults: AxiosResponse<Company[]> = yield call(\n SearchService.searchCompanies,\n payloadData,\n false\n );\n const matchData = { ...searchData };\n const newFilterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n filter\n );\n matchData.filter = { ...newFilterQuery, source_tag_filter: [] };\n yield put(\n searchActions.searchCompaniesSuccess(searchResults.data, {\n gridKey: 'myCompanies',\n data: {\n ...searchData,\n filter,\n },\n })\n );\n yield put(\n searchKeyActions.setSearchKey({ data: searchData.searchKey, gridKey: 'myCompanies' })\n );\n const fetched: boolean = yield select(searchSelectors.fetched);\n\n if (!fetched) {\n yield put(histogramActions.init());\n } else {\n yield put(\n histogramActions.fetchHistogramFilters('myCompanies', filter, allFiltersWithHistograms)\n );\n }\n } else {\n const errorMessage = 'Error fetching My Companies!';\n yield put(actions.fetchMyCompaniesCardsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = `Error fetching My Companies - ${e}`;\n yield put(actions.fetchMyCompaniesCardsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* myCompaniesFilterSaga() {\n yield takeLatest(actions.fetchMyCompaniesCards, fetchMyCompaniesCardsSaga);\n yield takeLatest(actions.initializeMyCompaniesCards, initializeMyCompaniesCardsSaga);\n yield takeLatest(actions.changeCard, changeCardSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, each } from 'lodash';\n// models\nimport { UserInformation } from '@optx/models/user';\n// interfaces\nimport { MyCompaniesFilterCardsState } from './interfaces';\nimport { SearchStateData } from '@optx/models/search';\n// redux\nimport { actions as userInformationActions } from '../../user/information';\nimport { actions as searchActions } from '@features/grid/search';\nimport * as actions from './actions';\n\nexport const initialState: MyCompaniesFilterCardsState = {\n // equity touch source is added for every search\n cards: {},\n selectedCard: null,\n selectedCardId: 'card1',\n subFilter: '',\n};\n\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccessReducer: CaseReducer<\n MyCompaniesFilterCardsState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const selectedCardId = action.payload.settings.session_settings\n ? action.payload.settings.session_settings.my_companies_selected_card_id\n : '';\n\n if (selectedCardId) {\n draftState.selectedCardId = selectedCardId;\n }\n\n draftState.sessionFilter = action.payload.settings.session_settings?.my_companies_filters;\n};\n\nconst fetchMyCompaniesCardsSuccessReducer: CaseReducer<\n MyCompaniesFilterCardsState,\n PayloadAction<Dictionary<SearchStateData>>\n> = (draftState, action) => {\n if (draftState.selectedCardId) {\n const card = action.payload[draftState.selectedCardId];\n draftState.selectedCard = { ...card, id: draftState.selectedCardId };\n\n each(draftState.selectedCard?.data, (subFilter, subFilterKey) => {\n if (draftState.sessionFilter?.includes(Object.keys(subFilter)[0])) {\n draftState.subFilter = subFilterKey;\n\n return false;\n }\n\n return true;\n });\n }\n\n draftState.cards = action.payload;\n};\n\nconst changeCardReducer: CaseReducer<MyCompaniesFilterCardsState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.selectedCard = { ...draftState.cards[action.payload], id: action.payload };\n draftState.selectedCardId = action.payload;\n draftState.subFilter = '';\n};\n\nconst changeCardSubfilterSuccessReducer: CaseReducer<\n MyCompaniesFilterCardsState,\n PayloadAction<{ cardId: string; subFilter: string }>\n> = (draftState, action) => {\n const { cardId, subFilter } = action.payload;\n draftState.selectedCard = { ...draftState.cards[cardId], id: cardId };\n draftState.selectedCardId = cardId;\n draftState.subFilter = subFilter;\n};\n\nconst clearFilterSuccessReducer: CaseReducer<\n MyCompaniesFilterCardsState,\n PayloadAction<SearchStateData | null | undefined>\n> = (draftState, action) => {\n const { payload: selectedCard } = action;\n\n if (selectedCard) {\n draftState.selectedCard = selectedCard;\n }\n\n draftState.subFilter = '';\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(searchActions.clearFilterSuccess, clearFilterSuccessReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n .addCase(actions.fetchMyCompaniesCardsSuccess, fetchMyCompaniesCardsSuccessReducer)\n .addCase(actions.changeCard, changeCardReducer)\n .addCase(actions.changeCardSubfilterSuccess, changeCardSubfilterSuccessReducer)\n);\n\nexport default reducer;\n","// equity-touch\nexport const BULK_ADD_COMPANY_LIMIT_EQUITY_TOUCH = 2;\n\n// salesloft\nexport const BULK_ADD_COMPANY_LIMIT_SALESLOFT = 5;\n\n// watchlist\nexport const BULK_EDIT_COMPANY_LIMIT_ADD_TO_WATCHLIST = 10;\nexport const BULK_EDIT_COMPANY_LIMIT_REMOVE_FROM_WATCHLIST = 10;\n\n// relates to actions that are synced with ET\nexport const BULK_EDIT_COMPANY_LIMIT_SYNCED_TO_ET = 7;\n\n// relates to actions that aren't synced with ET\nexport const BULK_EDIT_COMPANY_LIMIT_ADD_TAGS = 10;\nexport const MERGE_COMPANIES_LIMIT = 2;\nexport const BULK_EDIT_COMPANY_LIMIT_SET_AS_SOFTWARE_COMPANY = 25;\nexport const BULK_EDIT_COMPANY_LIMIT_SET_AS_AI_ML_COMPANY = 25;\n\nexport const MAX_ET_SL_COMPANIES = 500;\n\nexport const MAX_SELECT_ALL_COMPANIES = 2500;\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { FilterSource, PreselectedFilter } from '@models/filters';\nimport { FilterTag } from '@optx/models/tags';\nimport { ApplyFiltersPayload } from '../interfaces';\nimport { types } from '../types';\n\nexport const fetch = createAction(types.filters.fetchFilters.REQUEST);\nexport const fetchSuccess = createAction<Array<FilterSource>>(types.filters.fetchFilters.SUCCESS);\nexport const fetchFail = createAction<string>(types.filters.fetchFilters.FAILURE);\n\nexport const clearFilters = createAction(types.filters.clearFilters);\nexport const resetToDefault = createAction(types.filters.resetToDefault);\n\nexport const applyFilters = createAction<Partial<ApplyFiltersPayload>>(types.filters.applyFilters);\n\nexport const resetFilter = createAction<FilterTag>(types.filters.resetFilter);\nexport const updateFilters = createAction<{ key: string; value: PreselectedFilter }>(\n types.filters.updateFilters\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { types } from '../types';\n\nexport const toggleDefaultTableView = createAction<'company' | 'analyst'>(\n types.ui.toggleDefaultTable\n);\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { types } from '../types';\nimport { CardsState } from '../interfaces';\n\nexport const fetchCard = createAction(types.card.FETCH_CARD);\nexport const fetchCardSuccess = createAction<\n Omit<CardsState, 'psgFit'> & { psg_fit: Record<string, string | null> }\n>(types.card.FETCH_CARD_SUCCESS);\n","import { createAction } from '@reduxjs/toolkit';\nimport * as search from './search';\nimport * as filters from './filters';\nimport * as ui from './ui';\nimport * as card from './card';\nimport { types } from '../types';\n\nconst init = createAction(types.init);\n\nexport const actions = {\n // feature\n init,\n // slices\n search,\n filters,\n card,\n ui,\n};\n","import { actions as filters } from './filters';\nimport { actions as search } from './search';\nimport { actions as touchesAcrossRegion } from './touchesAcrossRegion';\nimport { actions as additionalStatistics } from './additionalsStatistics';\nimport { actions as emailStatistics } from './emailStatistics';\nimport { actions as smartTouchScore } from './smartTouchScore';\nimport { actions as pipelineInformation } from './pipeline-information';\n\nexport { filters };\nexport { search };\nexport { touchesAcrossRegion };\nexport { emailStatistics };\nexport { additionalStatistics };\nexport { smartTouchScore };\nexport { pipelineInformation };\n","import React from 'react';\nimport { GlobalOutlined } from '@ant-design/icons';\n// utils\nimport Company from '@optx/models/Company';\nimport { cellIsEqual } from '../../AntTable/cells/memoize';\nimport { Cell } from '../../../../../models/table/Cell';\n\nconst TableCellCompanyURL: React.FC<Cell<Company>> = ({ record }) => {\n const { raw_url: rawUrl } = record;\n\n return (\n <>\n {rawUrl && (\n <a href={rawUrl} title={rawUrl} target=\"__blank\">\n <GlobalOutlined className=\"icon-globe\" />\n </a>\n )}\n </>\n );\n};\n\nexport default React.memo(TableCellCompanyURL, cellIsEqual);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// models\nimport Company from '@models/Company';\nimport { Cell } from '@models/table/Cell';\n// redux\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\n// components\nimport DropdownAdd from '@components/DropdownAdd';\n\nconst TableCellAdvancedSearchActions: React.FC<Cell<Company>> = ({ value, record, index }) => {\n const view = useSelector(viewTypeSelectors.searchView('advancedSearch'));\n\n return <DropdownAdd record={record} index={index} view={view} />;\n};\n\nexport default TableCellAdvancedSearchActions;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// models\nimport Company from '@models/Company';\nimport { Cell } from '@models/table/Cell';\n// redux\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\n// components\nimport DropdownAdd from '@components/DropdownAdd';\n\nconst TableCellMyCompaniesActions: React.FC<Cell<Company>> = ({ value, record, index }) => {\n const view = useSelector(viewTypeSelectors.searchView('myCompanies'));\n\n return <DropdownAdd record={record} index={index} view={view} />;\n};\n\nexport default TableCellMyCompaniesActions;\n","import React from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport Company from '@models/Company';\nimport { Cell } from '@models/table/Cell';\nimport { TableCellMyWatchlistsActions } from '../../TableMyWatchlists/cells';\nimport { TableCellAdvancedSearchActions } from '../../TableAdvancedSearch/cells';\nimport { TableCellMyCompaniesActions } from '../../TableMyCompanies/cells';\n\nconst TableCellActions: React.FC<Cell<Company>> = ({ value, record, index }) => {\n const { pathname } = useLocation();\n\n if (pathname.startsWith('/user-lists')) {\n return <TableCellMyWatchlistsActions value={value} record={record} index={index} />;\n }\n\n if (pathname.startsWith('/my-companies')) {\n return <TableCellMyCompaniesActions value={value} record={record} index={index} />;\n }\n\n return <TableCellAdvancedSearchActions value={value} record={record} index={index} />;\n};\n\nexport default React.memo(TableCellActions);\n","import React from 'react';\nimport Company from '@optx/models/Company';\nimport { Cell } from '../../../../../models/table/Cell';\nimport { cellIsEqual } from '../../AntTable/cells/memoize';\nimport { DEFAULT_CELL_VALUE } from '../../../../../constants/table/cells';\nimport { normalizeNegativeSignValues } from '@optx/utils/utils';\n\nexport const TableCellPercentageGrowth: React.FC<Cell<Company>> = ({ value, record }) => {\n let textClassName = '';\n\n if (value !== null) {\n if (value > 0) {\n textClassName = 'cell-growth';\n }\n } else {\n textClassName = 'empty-cell';\n }\n\n return (\n <span className={textClassName}>\n {value > 0 ? '+' : ''}\n {normalizeNegativeSignValues(value?.toString())}\n {value !== DEFAULT_CELL_VALUE ? '%' : ''}\n </span>\n );\n};\n\nexport default React.memo(TableCellPercentageGrowth, cellIsEqual);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '@optx/redux/interfaces';\nimport Company from '@optx/models/Company';\nimport { selectors } from '../../../../../redux/company/filters';\nimport { Cell } from '../../../../../models/table/Cell';\nimport { DEFAULT_CELL_VALUE } from '../../../../../constants/table/cells';\nimport { cellIsEqual } from '../../AntTable/cells/memoize';\n\nconst TableCellLocation: React.FC<Cell<Company>> = ({ value }) => {\n let displayName = DEFAULT_CELL_VALUE;\n\n const locationName = useSelector((state: AppState) =>\n selectors.getLocationName(state, value || '')\n );\n\n if (locationName) {\n displayName = `${locationName} (${value})`;\n }\n\n return <>{displayName}</>;\n};\n\nexport default React.memo(TableCellLocation, cellIsEqual);\n","import styled from 'styled-components';\nimport PopoverComponent from '@optx/shared/view/molecules/Popover';\nimport { Tag as AntTag } from 'antd';\n\nconst Popover = styled(PopoverComponent)`\n max-width: 500px;\n width: 500px;\n\n &.ant-popover-placement-rightTop,\n &.ant-popover-placement-leftTop {\n .ant-popover-arrow {\n top: 51px;\n }\n }\n`;\n\ninterface PopoverTitleProps {\n fullWidth?: boolean;\n}\n\nconst PopoverTitle = styled.span<PopoverTitleProps>`\n font-style: normal;\n font-weight: 600;\n font-size: 14px;\n line-height: 22px;\n /* Gray / gray-9 */\n color: #262626;\n\n margin-right: 4px;\n\n display: inline-block;\n max-width: ${({ fullWidth }) => (fullWidth ? '100%' : '50%')};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst PopoverTitleWrapper = styled.div`\n width: 100%;\n width: 100%;\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n\n .parent-company-tag {\n margin-left: auto;\n max-width: 40%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .enabled-tag {\n &:hover {\n cursor: pointer;\n }\n }\n\n & a {\n display: flex;\n font-size: 18px;\n color: #262626; /* Gray / gray-9 */\n }\n\n & a:hover {\n color: #1890ff;\n }\n`;\n\nconst PopoverContentDescription = styled.p`\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n margin-bottom: 4px;\n /* Gray / gray-8 */\n color: #595959;\n\n & a {\n color: #595959;\n }\n\n & a:hover {\n color: #1890ff;\n }\n`;\n\nconst TagsWrapper = styled.div`\n padding-bottom: 12px;\n .ant-tag--special {\n margin: 5px 8px 0 0;\n font-size: 12px;\n background: #d6e4ff;\n /* Dark BLue */\n color: #334d6e;\n }\n`;\n\ninterface TagProps {\n left?: number;\n}\n\nconst Tag = styled(AntTag)<TagProps>`\n margin: 5px 8px 0 0;\n font-size: 12px;\n position: ${({ left }) => (left ? 'absolute' : 'static')};\n left: ${({ left }) => `${left}px` || 'unset'};\n`;\n\nconst SubTitle = styled.span`\n font-weight: 600;\n`;\n\nconst TagContainer = styled.span`\n display: inline-flex;\n flex-wrap: wrap;\n height: 27px;\n overflow-y: hidden;\n max-width: 100%;\n position: relative;\n padding-right: 70px;\n`;\n\nexport default {\n Popover,\n PopoverTitle,\n PopoverContentDescription,\n PopoverTitleWrapper,\n TagsWrapper,\n Tag,\n SubTitle,\n TagContainer,\n};\n","import React from 'react';\nimport { Typography } from 'antd';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { stringListToView } from '@optx/utils/format';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nconst TableCellStringList = (value: Array<string> | null) => {\n const viewValue = stringListToView(value, 'None');\n\n return viewValue ? (\n <TruncateTooltip title={viewValue}>\n <Typography.Text style={{ maxWidth: '100%' }}>{viewValue}</Typography.Text>\n </TruncateTooltip>\n ) : (\n DEFAULT_EMPTY_VALUE\n );\n};\n\nexport default TableCellStringList;\n","import React, { ChangeEvent, useState, useEffect } from 'react';\nimport { Button, Input, Tooltip } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n// models\nimport Company from '@optx/models/Company';\nimport { ChartBarIntervalKeys } from '@optx/models/charts/data';\n// constants\nimport { ABBREVIATION_ERROR_MESSAGE, message } from '@optx/constants/table/cells';\n// utils\nimport { abbreviateValue, parseNumberFromAbbreviation } from '@optx/utils/number';\nimport { validateIntegerAbbreviation } from '@optx/utils/validation';\n// redux\nimport { actions as userValuesActions } from '@optx/redux/company/user-values';\nimport { selectors as searchSelectors } from '@features/grid/search';\n// components\nimport { InlineEdit } from '@shared/view/molecules/edit/InlineEdit';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport { TrendingLine } from '@optx/components/common/charts';\nimport { cellIsEqual } from '../../AntTable/cells/memoize';\n\nconst title = 'Edit \"Number of Employees\" value';\n\ntype TableCellNumberOfEmployeesProps = {\n value: string;\n record: Company;\n};\n\nconst TableCellNumberOfEmployees: React.FC<TableCellNumberOfEmployeesProps> = ({\n value,\n record,\n}) => {\n const [numEmployees, setNumEmployees] = useState<string | number | null>(abbreviateValue(value));\n const [label, setLabel] = useState(abbreviateValue(value));\n const [closePopup, setClosePopup] = useState(false);\n const [period, setPeriod] = useState<ChartBarIntervalKeys>('1Y');\n const dispatch = useDispatch();\n const { pathname } = useLocation();\n const myCompaniesTrending = useSelector(searchSelectors.getTrending('myCompanies'));\n const searchTrending = useSelector(searchSelectors.getTrending('advancedSearch'));\n const watchlistTrending = useSelector(searchSelectors.getTrending('lists'));\n\n const handleChangeInput = (event: ChangeEvent<HTMLInputElement>) => {\n const value = event.currentTarget.value;\n\n if (validateIntegerAbbreviation(value as string)) {\n setNumEmployees(value.toUpperCase());\n } else {\n message().error(ABBREVIATION_ERROR_MESSAGE);\n }\n };\n\n const handleCancel = () => setClosePopup(true);\n\n const handleSave = () => {\n dispatch(\n userValuesActions.updateCompanyUserValues({\n companyId: record.company_id,\n fieldKey: 'num_employees',\n value: parseNumberFromAbbreviation(numEmployees?.toString()),\n })\n );\n const newLabel = abbreviateValue(parseNumberFromAbbreviation(numEmployees!.toString()));\n setLabel(newLabel);\n setClosePopup(true);\n };\n\n useEffect(() => {\n if (pathname.startsWith('/user-lists') || pathname.startsWith('/ss-lists')) {\n setPeriod(watchlistTrending);\n } else if (pathname.startsWith('/my-companies')) {\n setPeriod(myCompaniesTrending);\n } else {\n setPeriod(searchTrending);\n }\n }, [myCompaniesTrending, pathname, searchTrending, watchlistTrending]);\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n const content = (\n <div onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n <Input\n value={numEmployees || undefined}\n onChange={handleChangeInput}\n placeholder=\"Enter total employees\"\n />\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button className=\"profile-information__save\" type=\"primary\" onClick={handleSave}>\n Save\n </Button>\n </div>\n </div>\n );\n\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n />\n }\n fill\n >\n <span className=\"d-flex align-items-center\">\n {record?.employee_count_trends && (\n <TrendingLine points={record?.employee_count_trends[period]} color=\"#52C41A\" />\n )}\n <Tooltip title={label} className=\"flex-grow-1\">\n <span>{label}</span>\n </Tooltip>\n </span>\n </InlineEdit>\n );\n};\n\nexport default React.memo(TableCellNumberOfEmployees, cellIsEqual);\n","import React, { FC, useEffect, useState } from 'react';\nimport { TrendingLine } from '@optx/components/common/charts';\nimport { useLocation } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { Tooltip } from 'antd';\n// models\nimport Company from '@models/Company';\nimport { ChartBarIntervalKeys } from '@optx/models/charts/data';\n// utils\nimport { getIsPsgCompany } from '@optx/utils/company';\n// redux\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as userSelectors } from '@redux/user/information';\n\ntype TableCellOPTXScoreProps = {\n company: Company;\n isNewScore?: boolean;\n};\n\nconst renderCompanyOPTXScoreTrendline = (\n company: Company,\n defaultOPTXScore: string,\n period: ChartBarIntervalKeys,\n isNewScore: boolean = false\n) => {\n let points: (number | null)[] = [];\n\n if (isNewScore) {\n points = company?.optx_score_v3_trends?.[period] || [];\n } else if (defaultOPTXScore === 'il') {\n points = company.il_optx_score_trends?.[period] || [];\n } else {\n points = company?.optx_score_trends?.[period] || [];\n }\n\n return <TrendingLine points={points} color={isNewScore ? '#219653' : '#1890FF'} />;\n};\n\nconst TableCellOPTXScore: FC<TableCellOPTXScoreProps> = ({ company, isNewScore }) => {\n const [period, setPeriod] = useState<ChartBarIntervalKeys>('1Y');\n const { pathname } = useLocation();\n const myCompaniesTrending = useSelector(searchSelectors.getTrending('myCompanies'));\n const searchTrending = useSelector(searchSelectors.getTrending('advancedSearch'));\n const watchlistTrending = useSelector(searchSelectors.getTrending('lists'));\n const defaultOptxScore = useSelector(userSelectors.getDefaultScore);\n const companyOutReachTrending = useSelector(searchSelectors.getTrending('outreachDetails'));\n\n const score = isNewScore\n ? company.score_v3\n : defaultOptxScore === 'il'\n ? company.il_optx_score\n : company.score;\n\n useEffect(() => {\n if (pathname.startsWith('/user-lists') || pathname.startsWith('/ss-lists')) {\n setPeriod(watchlistTrending);\n } else if (pathname.startsWith('/my-companies')) {\n setPeriod(myCompaniesTrending);\n } else if (pathname.startsWith('/all-reports')) {\n setPeriod(companyOutReachTrending);\n } else {\n setPeriod(searchTrending);\n }\n }, [companyOutReachTrending, myCompaniesTrending, pathname, searchTrending, watchlistTrending]);\n\n const handleNanOptxScore = (score: number) => {\n if (typeof score !== 'number') {\n return 'N/A';\n }\n\n return Number(score);\n };\n\n if (getIsPsgCompany(company))\n return (\n <Tooltip title=\"PSG Company\">\n <span>PSG Company</span>\n </Tooltip>\n );\n\n return (\n <span className=\"d-flex align-items-center\">\n <span className=\"flex-grow-1\">{handleNanOptxScore(score)}</span>\n\n {renderCompanyOPTXScoreTrendline(company, defaultOptxScore, period, isNewScore)}\n </span>\n );\n};\n\nexport default React.memo(TableCellOPTXScore);\n","import React from 'react';\n// models\nimport Company from '@optx/models/Company';\nimport { Cell } from '@optx/models/table/Cell';\n// constants\nimport { cellIsEqual } from '../../AntTable/cells/memoize';\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nconst TableCellDescription: React.FC<Cell<Company>> = ({ value, record }) => {\n return (\n <>\n {value ? (\n <TruncateTooltip title={value} placement=\"topLeft\">\n {value}\n </TruncateTooltip>\n ) : (\n <>{DEFAULT_CELL_VALUE}</>\n )}\n </>\n );\n};\n\nexport default React.memo(TableCellDescription, cellIsEqual);\n","import React, { ReactNode } from 'react';\n// redux\nimport Company, { CompanyProfile } from '@optx/models/Company';\n// hooks\nimport useIsAdminOrAnalyst from '@optx/common/hooks/useisAdminOrAnalyst';\n// components\nimport EditFieldOPTX from '@optx/features/company/edit-fields/components/EditFieldOPTX';\nimport EditFieldNewOPTX from '@optx/features/company/edit-fields/components/EditFieldNewOPTX';\n\ninterface TableCellScoreAdminProps {\n record: Company | CompanyProfile;\n children: ReactNode;\n isNewScore?: boolean;\n}\n\nconst TableCellScoreAdmin: React.FC<TableCellScoreAdminProps> = ({\n record,\n children,\n isNewScore,\n}) => {\n const isAdminOrAnalyst = useIsAdminOrAnalyst();\n\n if (isAdminOrAnalyst) {\n if (isNewScore) {\n return (\n <EditFieldNewOPTX record={record} isFromGrid>\n {children}\n </EditFieldNewOPTX>\n );\n }\n\n return (\n <EditFieldOPTX record={record} isFromGrid>\n {children}\n </EditFieldOPTX>\n );\n }\n\n return <>{children}</>;\n};\n\nexport default React.memo(TableCellScoreAdmin);\n","import React from 'react';\n// redux\nimport Company from '@optx/models/Company';\n// hooks\nimport useIsAdminOrAnalyst from '@optx/common/hooks/useisAdminOrAnalyst';\n// components\nimport {\n EditFieldRadioRationale,\n EditFieldRadio,\n} from '@optx/features/company/edit-fields/components';\nimport { FieldOptions, ServiceType } from '@optx/features/company/edit-fields/state/interfaces';\n\ninterface TableCellRadioAdminProps {\n value: any;\n record: Company;\n fieldName: FieldOptions;\n destroyOnHide?: boolean;\n isFromGrid: boolean;\n service: ServiceType;\n successMessage: string;\n errorMessage: string;\n}\n\nconst TableCellRadioAdmin: React.FC<TableCellRadioAdminProps> = ({\n value,\n record,\n fieldName,\n service,\n successMessage,\n errorMessage,\n destroyOnHide,\n isFromGrid,\n}) =>\n useIsAdminOrAnalyst() ? (\n <EditFieldRadioRationale\n value={value}\n record={record}\n fieldName={fieldName}\n service={service}\n successMessage={successMessage}\n errorMessage={errorMessage}\n destroyOnHide={destroyOnHide}\n isFromGrid={isFromGrid}\n />\n ) : (\n <EditFieldRadio\n value={value}\n record={record}\n fieldName={fieldName}\n service={service}\n successMessage={successMessage}\n errorMessage={errorMessage}\n isFromGrid={isFromGrid}\n />\n );\nexport default React.memo(TableCellRadioAdmin);\n","import React from 'react';\n// redux\nimport Company from '@optx/models/Company';\n// hooks\nimport useIsAdminOrAnalyst from '@optx/common/hooks/useisAdminOrAnalyst';\n// components\nimport {\n EditFieldRadioRationale,\n EditFieldRadio,\n} from '@optx/features/company/edit-fields/components';\nimport { UserService } from '@optx/services/api';\n\ninterface TableCellFitRationaleProps {\n value: any;\n record: Company;\n}\n\nconst TableCellFitRationale: React.FC<TableCellFitRationaleProps> = ({ value, record }) =>\n useIsAdminOrAnalyst() ? (\n <EditFieldRadioRationale\n value={value}\n record={record}\n fieldName=\"PSG Fit\"\n service={UserService.updateFitEvaluation}\n successMessage=\"Company PSG fit updated successfully!\"\n errorMessage=\"Failed to update value!\"\n destroyOnHide\n isFromGrid\n />\n ) : (\n <EditFieldRadio\n value={value}\n record={record}\n fieldName=\"PSG Fit\"\n service={UserService.updateFitEvaluation}\n successMessage=\"Company PSG fit updated successfully!\"\n errorMessage=\"Failed to update value!\"\n isFromGrid\n />\n );\nexport default React.memo(TableCellFitRationale);\n","import React, { useMemo } from 'react';\n// models\nimport Company from '@optx/models/Company';\nimport { Cell } from '@optx/models/table/Cell';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n// utils\nimport { cellIsEqual } from '../../AntTable/cells/memoize';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nconst TableCellInvestors: React.FC<Cell<Company>> = ({ value }) => {\n const formattedValue = useMemo(() => {\n if (!value || !value.length || !Array.isArray(value)) {\n return DEFAULT_CELL_VALUE;\n }\n\n return [...value].sort().join('; ');\n }, [value]);\n\n if (formattedValue === DEFAULT_CELL_VALUE) {\n return <>{formattedValue}</>;\n }\n\n return (\n <TruncateTooltip title={formattedValue} placement=\"topLeft\">\n {formattedValue}\n </TruncateTooltip>\n );\n};\n\nexport default React.memo(TableCellInvestors, cellIsEqual);\n","import React from 'react';\n// models\nimport Company, { Addon } from '@optx/models/Company';\n// services\nimport { CompanyService } from '@optx/services/api';\n// utils\nimport { formatAddon } from '@optx/utils/format';\n// components\nimport { EditFieldCheckBoxSelectAsync } from '@optx/features/company/edit-fields/components';\n\ntype TableCellAddonProps = {\n value: Addon | null;\n record: Company;\n isFromPipelineReportGrid?: boolean;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n};\n\nconst TableCellAddon: React.FC<TableCellAddonProps> = ({\n value,\n record,\n getPopupContainer,\n isFromPipelineReportGrid,\n}) => {\n if (record.source_tag?.includes('et') || isFromPipelineReportGrid) {\n return (\n <EditFieldCheckBoxSelectAsync\n fieldName=\"Add-on\"\n record={record}\n service={CompanyService.updateAddon}\n isFromGrid\n successMessage=\"Add-on updated successfully!\"\n errorMessage=\"\"\n value={value}\n />\n );\n }\n\n return <>{formatAddon(value)}</>;\n};\n\nexport default React.memo(TableCellAddon);\n","import React from 'react';\nimport moment from 'moment';\nimport styled from 'styled-components';\n// models\nimport { Cell } from '@models/table/Cell';\n\nconst NewDateMatchedBox = styled.span`\n display: inline-block;\n border: 1px solid #b7eb8f;\n color: #b7eb8f;\n background-color: #f6ffed;\n padding: 0 7px;\n`;\ninterface CustomCell extends Cell<any> {\n format?: string;\n // if you want to override format pass something in \"defaultValue\" prop\n defaultValue?: string;\n isNewMatched?: boolean;\n}\n\nconst TableCellNewMatched: React.FC<CustomCell> = ({\n value,\n format,\n defaultValue,\n isNewMatched,\n}) => (\n <>\n {defaultValue || moment(value).format(format)}{' '}\n {isNewMatched && <NewDateMatchedBox>NEW</NewDateMatchedBox>}\n </>\n);\n\nexport default React.memo(TableCellNewMatched);\n","import React, { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n// redux\nimport { selectors } from '@redux/user/user-list';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\ninterface TableCellDealTeamsProps {\n fieldType: 'Deal Team' | 'Senior Deal Team Lead';\n value: number[] | null | string;\n}\n\nconst TableCellDealTeams: React.FC<TableCellDealTeamsProps> = ({ fieldType, value }) => {\n const listSelectors = {\n 'Deal Team': selectors.getPsgUsers,\n 'Senior Deal Team Lead': selectors.getSeniorDealTeamLeadOptions,\n };\n\n const list = useSelector(listSelectors[fieldType]);\n\n const handleRenderValue = useMemo(() => {\n if (value === null || value === DEFAULT_CELL_VALUE) {\n return DEFAULT_CELL_VALUE;\n }\n\n if (typeof value === 'string') {\n const listOfIds = value.split(',');\n const listOfNames = list\n .reduce((acc, item) => {\n if (listOfIds.includes(item.value)) {\n acc.push(item.label);\n }\n\n return acc;\n }, [] as string[])\n .join(', ');\n\n return listOfNames;\n }\n\n if (Array.isArray(value)) {\n const listOfIds = value.map(item => item.toString());\n const listOfNames = list\n .reduce((acc, item) => {\n if (listOfIds.includes(item.value)) {\n acc.push(item.label);\n }\n\n return acc;\n }, [] as string[])\n .join(', ');\n\n return listOfNames;\n }\n }, [list, value]);\n\n return (\n <TruncateTooltip placement=\"topLeft\" title={handleRenderValue}>\n {handleRenderValue}\n </TruncateTooltip>\n );\n};\n\nexport default React.memo(TableCellDealTeams);\n","import { takeLatest, select, call, put } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// services\nimport { ListsService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// models\nimport { SourceScrubList } from '@models/SourceScrubList';\nimport { CompanyWatchList } from '@models/WatchList';\n// redux\nimport { selectors as sourceScrubListsSelectors } from '@redux/user/source-scrub-lists';\nimport { getLists } from '@redux/favorite-lists/lists/selectors';\nimport { AxiosResponse } from 'axios';\nimport { Dictionary } from 'lodash';\nimport {\n loadCompanyListDetailsSuccess,\n resetLoadingState,\n loadCompanyListDetailsFailure,\n loadCompanyListDetails,\n} from './actions';\n\nexport function* loadCompanyListDetailsSaga(\n action: PayloadAction<{ id: string; isSourceScrub: boolean }>\n) {\n try {\n const { id: listId, isSourceScrub } = action.payload;\n let list: SourceScrubList | CompanyWatchList;\n\n if (isSourceScrub) {\n const sourceScrubLists: SourceScrubList[] = yield select(\n sourceScrubListsSelectors.getSourceScrubLists\n );\n list = sourceScrubLists.find(({ id }: SourceScrubList) => id === listId) as SourceScrubList;\n\n if (!list) {\n const res: AxiosResponse<any> = yield call(ListsService.getSourceScrubList, Number(listId));\n\n if (res.data) {\n list = res.data.lists[0];\n } else {\n const errorMessage = 'Error fetching list!';\n yield put(loadCompanyListDetailsFailure(errorMessage));\n NotificationService.error(errorMessage);\n }\n }\n } else {\n const savedSearchesLists: Dictionary<CompanyWatchList> = yield select(getLists);\n list = savedSearchesLists[listId];\n\n // TODO: Change this when the API is ready\n // if (!list) {\n // const res = yield call(SavedSearchesService.getFavoriteById, Number(listId));\n\n // if (res.data) {\n // list = res.data.lists[0];\n // } else {\n // const errorMessage = 'Error fetching list!';\n // yield put(actions.loadCompanyListDetailsFailure(errorMessage));\n // NotificationService.error(errorMessage);\n // }\n // }\n }\n\n if (list) yield put(loadCompanyListDetailsSuccess(list));\n if (!list) yield put(resetLoadingState());\n } catch (error: any) {\n const errorMessage = 'Error fetching list!';\n yield put(loadCompanyListDetailsFailure(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* userListsDetailsSaga() {\n yield takeLatest(loadCompanyListDetails, loadCompanyListDetailsSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyImport } from '@optx/models/Company';\nimport { UserInformation } from '@optx/models/user';\nimport { SourceScrubList } from '@models/SourceScrubList';\nimport { CompanyWatchList } from '@models/WatchList';\n// redux\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\nimport { actions as UserInformationActions } from '@redux/user/information';\n\nimport { ListState } from './interfaces';\nimport * as actions from './actions';\n\nconst initialState: ListState = {\n isSourceScrub: false,\n loading: false,\n error: '',\n data: undefined,\n};\n\nconst loadCompanyListSuccessReducer: CaseReducer<\n ListState,\n PayloadAction<{ id: string; isSourceScrub: boolean }>\n> = (draftState, action) => {\n draftState.isSourceScrub = action.payload.isSourceScrub;\n};\n\nconst clearCompanyListReducer: CaseReducer<ListState> = draftState => {\n draftState.isSourceScrub = false;\n};\n\nconst filterCSVCompanyErrorListReducer: CaseReducer<\n ListState,\n PayloadAction<{ data: CompanyImport; title: string }>\n> = (draftState, action) => {\n draftState.CSVImportCompanies = action.payload;\n};\n\nconst fetchUserInformationSuccessReducer: CaseReducer<ListState, PayloadAction<UserInformation>> = (\n draftState,\n action\n) => {\n if (action.payload.settings.session_settings) {\n const { company_filters: companyFilters } = action.payload.settings.session_settings;\n\n if (companyFilters) {\n const isSimpleList = companyFilters.includes('saved_list_id');\n const isSourceScrubList = companyFilters.includes('ss_list_id');\n\n if (isSimpleList || isSourceScrubList) {\n draftState.isSourceScrub = isSourceScrubList;\n }\n }\n }\n};\n\nconst loadCompanyListDetailsSuccessReducer: CaseReducer<\n ListState,\n PayloadAction<SourceScrubList | CompanyWatchList>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.data = action.payload;\n};\n\nconst resetLoadingState: CaseReducer<ListState> = draftState => {\n draftState.loading = false;\n};\n\nconst resetStateReducer: CaseReducer<ListState> = () => {\n return initialState;\n};\n\nexport const reducer = createReducer<ListState>(initialState, builder =>\n builder\n .addCase(actions.loadCompanyList, fetchReducers.fetchReducer)\n .addCase(actions.loadCompanyListSuccess, loadCompanyListSuccessReducer)\n .addCase(actions.clearCompanyList, clearCompanyListReducer)\n .addCase(actions.filterCSVCompanyErrorList, filterCSVCompanyErrorListReducer)\n .addCase(actions.loadCompanyListDetails, fetchReducers.fetchReducer)\n .addCase(actions.loadCompanyListDetailsSuccess, loadCompanyListDetailsSuccessReducer)\n .addCase(actions.loadCompanyListDetailsFailure, fetchReducers.fetchFailReducer)\n .addCase(actions.loadCompanyListDetailsReset, resetStateReducer)\n .addCase(actions.resetLoadingState, resetLoadingState)\n .addCase(UserInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n);\n\nexport default reducer;\n","export default 'company-individual-edit';\n","import { createAction } from '@reduxjs/toolkit';\nimport {\n CompanyWatchList,\n DeleteCompanyFromWatchList,\n FetchFavoriteLists,\n FetchFavoriteListsPopup,\n AddCompanyToWatchListBulk,\n} from '@models/WatchList';\nimport {\n SortingRule,\n CreateListPopupPayload,\n CreateListPopupSuccessPayload,\n CompanyToListPayload,\n DeleteCompanyFromList,\n} from './interfaces';\nimport * as types from './types';\n\n// initial fetch favorite lists\nexport const initialFetchFavoritesListsPopup = createAction(\n types.INITIAL_FETCH_FAVORITE_LISTS_POPUP\n);\n\nexport const initialFetchFavoritesListsPopupSuccess = createAction<FetchFavoriteListsPopup>(\n types.INITIAL_FETCH_FAVORITE_LISTS_POPUP_SUCCESS\n);\n\n// fetch favorite lists\nexport const fetchFavoriteListsPopup = createAction<FetchFavoriteLists | undefined>(\n types.FETCH_FAVORITE_LISTS_POPUP\n);\nexport const fetchFavoriteListsPopupSuccess = createAction<FetchFavoriteListsPopup>(\n types.FETCH_FAVORITE_LISTS_POPUP_SUCCESS\n);\n\nexport const fetchFavoriteListsPopupFail = createAction<string>(types.FETCH_FAVORITE_LISTS_FAIL);\n\n// sort favorite lists\nexport const sortFavoriteListsPopup = createAction<SortingRule>(types.SORT_FAVORITE_LISTS);\n\n// create favorite list\nexport const createFavoriteListPopup = createAction<CreateListPopupPayload>(\n types.CREATE_FAVORITE_LIST\n);\nexport const createFavoriteListPopupSuccess = createAction<CreateListPopupSuccessPayload>(\n types.CREATE_FAVORITE_LIST_SUCCESS\n);\nexport const createFavoriteListPopupFail = createAction<string>(types.CREATE_FAVORITE_LIST_FAIL);\n\nexport const deleteCompanyFromListPopup = createAction<DeleteCompanyFromList>(\n types.DELETE_COMPANY_FROM_LIST\n);\nexport const deleteCompanyFromListPopupSuccess = createAction<DeleteCompanyFromWatchList>(\n types.DELETE_COMPANY_FROM_LIST_SUCCESS\n);\n\nexport const deleteCompanyFromListPopupFail = createAction<string>(\n types.DELETE_COMPANY_FROM_LIST_FAIL\n);\n\n// add company in list\nexport const addCompanyToListPopup = createAction<CompanyToListPayload>(types.ADD_COMPANY_TO_LIST);\nexport const addCompanyToListPopupSuccess = createAction(\n types.ADD_COMPANY_TO_LIST_SUCCESS,\n (companyId: number, watchLists: CompanyWatchList[], ownerName?: string) => ({\n payload: { companyId, watchLists, ownerName },\n })\n);\nexport const addCompanyToListPopupFail = createAction<string>(types.ADD_COMPANY_TO_LIST_FAIL);\n\nexport const resetFetchedAt = createAction(types.resetFetchedAt);\n\nexport const addCompanyToListPopupBulkActionSuccess = createAction<AddCompanyToWatchListBulk>(\n types.ADD_COMPANY_TO_LIST_BULK_SUCCESS\n);\n","// Initial Fetch favorite lists\nexport const INITIAL_FETCH_FAVORITE_LISTS_POPUP =\n 'favorite-lists/listspopup/INITIAL_FETCH_FAVORITE_LISTS_POPUP';\nexport const INITIAL_FETCH_FAVORITE_LISTS_POPUP_SUCCESS =\n 'favorite-lists/listspopup/INITIAL_FETCH_FAVORITE_LISTS_POPUP_SUCCESS';\n\n// Fetch favorite lists\nexport const FETCH_FAVORITE_LISTS_POPUP = 'favorite-lists/listspopup/FETCH_FAVORITE_LISTS_POPUP';\nexport const FETCH_FAVORITE_LISTS_POPUP_SUCCESS =\n 'favorite-lists/listspopup/FETCH_FAVORITE_LISTS_POPUP_SUCCESS';\nexport const FETCH_FAVORITE_LISTS_FAIL =\n 'favorite-lists/listspopup/FETCH_FAVORITE_LISTS_POPUP_FAIL';\n\n// Create favorite list\nexport const CREATE_FAVORITE_LIST = 'favorite-lists/listspopup/CREATE_FAVORITE_LIST';\nexport const CREATE_FAVORITE_LIST_SUCCESS =\n 'favorite-lists/listspopup/CREATE_FAVORITE_LIST_SUCCESS';\nexport const CREATE_FAVORITE_LIST_FAIL = 'favorite-lists/listspopup/CREATE_FAVORITE_LIST_FAIL';\n\n// sort favorite list\nexport const SORT_FAVORITE_LISTS = 'favorite-list/listspopup/SORT_FAVORITE_LISTS_POPUP';\n\n// Delete company from list\nexport const DELETE_COMPANY_FROM_LIST = 'favorite-lists/listspopup/DELETE_COMPANY_FROM_LIST_POPUP';\nexport const DELETE_COMPANY_FROM_LIST_SUCCESS =\n 'favorite-lists/listspopup/DELETE_COMPANY_FROM_LIST_POPUP_SUCCESS';\nexport const DELETE_COMPANY_FROM_LIST_FAIL =\n 'favorite-lists/listspopup/DELETE_COMPANY_FROM_LIST_POPUP_FAIL';\n\n// Add company in list\nexport const ADD_COMPANY_TO_LIST = 'favorite-lists/listspopup/ADD_COMPANY_TO_LIST_LISTS_POPUP';\nexport const ADD_COMPANY_TO_LIST_SUCCESS =\n 'favorite-lists/listspopup/ADD_COMPANY_TO_LIST_LISTS_POPUP_SUCCESS';\nexport const ADD_COMPANY_TO_LIST_FAIL =\n 'favorite-lists/listspopup/ADD_COMPANY_TO_LIST_LISTS_POPUP_FAIL';\nexport const ADD_COMPANY_TO_LIST_BULK_SUCCESS =\n 'favorite-lists/listspopup/ADD_COMPANY_TO_LIST_LISTS_POPUP_BULK_SUCCESS';\n\n// update\nexport const resetFetchedAt = 'favorite-lists/listspopup/RESET_FETCHED_AT_LISTS_POPUP';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const SEARCH_COUNT = createFeatureActionType(featureName, 'SEARCH_COUNT');\nexport const SEARCH_COUNT_SUCCESS = createFeatureActionType(featureName, 'SEARCH_COUNT_SUCCESS');\nexport const SEARCH_COUNT_FAILURE = createFeatureActionType(featureName, 'SEARCH_COUNT_FAILURE');\nexport const DECREMENT_ADDON_COUNT = createFeatureActionType(featureName, 'DECREMENT_ADDON_COUNT');\n","import { createAction } from '@reduxjs/toolkit';\nimport {\n SEARCH_COUNT,\n SEARCH_COUNT_SUCCESS,\n SEARCH_COUNT_FAILURE,\n DECREMENT_ADDON_COUNT,\n} from './types';\nimport { SearchCountPayload } from './interfaces';\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { GridKeys, GridPayload } from '@optx/models/grid';\n\nexport const searchCount = createAction<\n GridPayload<SearchPayloadRequest | string> & {\n companyId?: number;\n }\n>(SEARCH_COUNT);\n\nexport const searchCountSuccess = createAction<SearchCountPayload>(SEARCH_COUNT_SUCCESS);\n\nexport const searchCountFailure = createAction<GridKeys>(SEARCH_COUNT_FAILURE);\n\nexport const decrementAddonCount = createAction(DECREMENT_ADDON_COUNT);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n//models\nimport { SearchCountState, SearchCountPayload } from './interfaces';\nimport { GridKeys, GridPayload } from '@optx/models/grid';\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\n//constants\nimport { GRID_KEYS, SEARCH_COUNT_INITAL_STATE } from '@optx/constants/grid';\n//utils\nimport { generateGridReducerInitialState } from '@optx/utils/grid';\n//redux\nimport * as actions from './actions';\nimport { actions as favoriteListActions } from '@redux/favorites';\n\nconst initialState: SearchCountState = generateGridReducerInitialState(\n GRID_KEYS,\n SEARCH_COUNT_INITAL_STATE\n);\n\nexport const searchCountSuccessReducer: CaseReducer<\n SearchCountState,\n PayloadAction<SearchCountPayload>\n> = (draftState, action) => {\n const { gridName, searchCount } = action.payload;\n draftState[gridName].searchCount = searchCount;\n draftState[gridName].loading = false;\n};\n\nexport const searchCountFailureReducer: CaseReducer<SearchCountState, PayloadAction<GridKeys>> = (\n draftState,\n action\n) => {\n const gridKey = action.payload;\n draftState[gridKey].loading = false;\n};\n\nconst decrementCountReducer: CaseReducer<SearchCountState> = draftState => {\n draftState.lists.searchCount -= 1;\n};\n\nexport const decrementAddonCountReducer: CaseReducer<SearchCountState> = draftState => {\n if (draftState.addons.searchCount !== 0) {\n draftState.addons.searchCount -= 1;\n }\n};\n\nexport const searchCountReducer: CaseReducer<\n SearchCountState,\n PayloadAction<GridPayload<SearchPayloadRequest | string>>\n> = (draftState, action) => {\n const { gridKey } = action.payload;\n draftState[gridKey].loading = true;\n};\n\nconst reducer = createReducer<SearchCountState>(initialState, builder => {\n builder.addCase(actions.searchCount, searchCountReducer);\n builder.addCase(actions.searchCountFailure, searchCountFailureReducer);\n builder.addCase(actions.searchCountSuccess, searchCountSuccessReducer);\n builder.addCase(favoriteListActions.deleteFavoriteSuccess, decrementCountReducer);\n builder.addCase(actions.decrementAddonCount, decrementAddonCountReducer);\n});\n\nexport default reducer;\n","import { call, put, select, takeLeading } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n//models\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { GridPayload } from '@optx/models/grid';\nimport { CustomUIViewIds } from '@optx/models/user';\n//constants\nimport { customUIViewIds } from '@optx/constants/table/columnDisplay/company-search';\n//services\nimport { CompanyService, SearchService } from '@services/api';\nimport NotificationService from '@optx/services/NotificationService';\nimport { AnalystService } from '@optx/services/api/AnalystService';\n//utils\nimport { preProcessSearch } from '@optx/utils/search';\nimport { getErrorMessage } from '@optx/utils/api/errors';\n//redux\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport * as actions from './actions';\n\nexport function* searchCountSaga(\n action: PayloadAction<\n GridPayload<SearchPayloadRequest | string> & {\n companyId?: number;\n }\n >\n) {\n const { data, gridKey, companyId } = action.payload;\n\n switch (gridKey) {\n case 'advancedSearch':\n case 'lists':\n if (typeof data !== 'string') {\n try {\n const searchTitle: string = yield select(\n userInformationSelectors.getAdvancedSearchSearchTitle\n );\n const filter = { ...data.filter, search_title: data.searchTitle || searchTitle || '' };\n\n const res: AxiosResponse<number> = yield call(\n SearchService.searchCompanyCount,\n preProcessSearch(data.searchKey),\n data.searchType,\n filter,\n customUIViewIds.includes(data.fromSavedList as CustomUIViewIds)\n ? undefined\n : data.fromSavedList,\n data.listType,\n data.list_id\n );\n yield put(\n actions.searchCountSuccess({\n gridName: gridKey,\n searchCount: res.data,\n })\n );\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Get count companies fail!');\n\n NotificationService.error(errorMessage);\n yield put(actions.searchCountFailure(gridKey));\n }\n }\n\n break;\n case 'myCompanies':\n if (typeof data !== 'string') {\n try {\n const res: AxiosResponse<number> = yield call(\n SearchService.searchCompanyCount,\n data.searchKey,\n data.searchType,\n data.filter,\n data.fromSavedList,\n data.listType\n );\n yield put(actions.searchCountSuccess({ gridName: gridKey, searchCount: res.data }));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Get count companies fail!');\n\n NotificationService.error(errorMessage);\n yield put(actions.searchCountFailure(gridKey));\n }\n }\n\n break;\n case 'outreachDetails':\n try {\n const res: AxiosResponse<number> = yield call(\n AnalystService.getCompanieListOutReachCount,\n data\n );\n yield put(\n actions.searchCountSuccess({\n gridName: gridKey,\n searchCount: res.data,\n })\n );\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Get count companies fail!');\n\n NotificationService.error(errorMessage);\n yield put(actions.searchCountFailure(gridKey));\n }\n\n break;\n case 'contacts':\n if (typeof data !== 'string') {\n try {\n const res: AxiosResponse<number> = yield call(\n SearchService.searchContactsCounter,\n preProcessSearch(data.searchKey),\n data.searchType,\n data.filter\n );\n\n yield put(actions.searchCountSuccess({ gridName: 'contacts', searchCount: res.data }));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Search contacts count fail, Server error!');\n NotificationService.error(errorMessage);\n yield put(actions.searchCountFailure(gridKey));\n }\n }\n\n break;\n case 'addons':\n if (typeof data !== 'string') {\n try {\n const res: AxiosResponse<number> = yield call(\n CompanyService.fetchCompanyAddonManagementCount,\n {\n companyId: (data.companyId as number) || (companyId as number),\n sortBy: data.sortBy,\n filter: data.filter,\n searchKey: data.searchKey,\n searchType: data.searchType,\n }\n );\n\n yield put(actions.searchCountSuccess({ gridName: 'addons', searchCount: res.data }));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Get count companies fail!');\n\n NotificationService.error(errorMessage);\n yield put(actions.searchCountFailure(gridKey));\n }\n }\n\n break;\n\n case 'checklistResearchInsights':\n if (typeof data === 'string') {\n try {\n const res: AxiosResponse<number> = yield call(\n AnalystService.getCompanyCountChecklistInsight,\n data\n );\n yield put(\n actions.searchCountSuccess({\n gridName: 'checklistResearchInsights',\n searchCount: res.data,\n })\n );\n } catch (error: any) {\n const errorMessage = getErrorMessage(\n error,\n 'Failed to fetch Checklist Research Insights!'\n );\n NotificationService.error(errorMessage);\n yield put(actions.searchCountFailure(gridKey));\n }\n }\n\n break;\n\n default:\n break;\n }\n}\n\nexport default function* fetchSearchCount() {\n yield takeLeading(actions.searchCount, searchCountSaga);\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\ninterface WrapperProps extends React.HTMLAttributes<HTMLDivElement> {\n $showActionOnHover?: boolean;\n $fill?: boolean;\n}\n\nconst Wrapper = styled.div<WrapperProps>`\n display: inline-flex;\n max-width: 100%;\n\n ${props =>\n props.$showActionOnHover &&\n css`\n :hover {\n ${ActionWrapper} {\n display: block;\n }\n }\n `}\n\n ${props =>\n props.$fill &&\n css`\n width: 100%;\n `}\n`;\n\ninterface ChildrenWrapperProps {\n $hideActionOnChildrenHover?: boolean;\n}\n\nconst ChildrenWrapper = styled.div<ChildrenWrapperProps>`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n\n ${props =>\n props.$hideActionOnChildrenHover &&\n css`\n :hover {\n + * {\n visibility: hidden !important;\n }\n }\n `}\n`;\n\nconst ActionWrapper = styled.div`\n visibility: hidden;\n flex: 0 0 auto;\n`;\n\nexport const Styled = {\n Wrapper,\n ChildrenWrapper,\n ActionWrapper,\n};\n\ninterface InlineEditProps {\n action: React.ReactNode;\n showActionOnHover?: boolean;\n fill?: boolean;\n hideActionOnChildrenHover?: boolean;\n}\n\nexport const InlineEdit: React.FC<InlineEditProps> = React.memo(\n ({ children, action, showActionOnHover, fill, hideActionOnChildrenHover }) => {\n return (\n <Wrapper className=\"inline-edit-wrapper\" $showActionOnHover={showActionOnHover} $fill={fill}>\n <ChildrenWrapper\n className=\"children-wrapper\"\n $hideActionOnChildrenHover={hideActionOnChildrenHover}\n >\n {children}\n </ChildrenWrapper>\n <ActionWrapper className=\"action-wrapper\">{action}</ActionWrapper>\n </Wrapper>\n );\n }\n);\n\nInlineEdit.defaultProps = {\n showActionOnHover: true,\n};\n","import { select } from 'redux-saga/effects';\nimport { Dictionary, cloneDeep } from 'lodash';\n// models\nimport {\n BaseFilter,\n FilterGroupDataSection,\n FilterSource,\n PreselectedFilter,\n MultiselectMappedFilter,\n} from '@models/filters';\nimport { FormCheckboxOption, Option } from '@models/Option';\nimport { SingleCheckboxRangeOption } from '@optx/models/RangeOption';\n// constants\nimport { FILTER_TOUCHES } from '@constants/filters';\n// utils\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\n//redux\nimport { selectors as filtersSelectors } from '@redux/company/filters';\n\nexport function* getFiltersQuery(filters: Dictionary<PreselectedFilter>) {\n const normalizedFilters: Dictionary<BaseFilter> = yield select(filtersSelectors.getFiltersMap);\n\n return mapFiltersToURLParams(normalizedFilters, filters);\n}\n\n/**\n * Handle touch filters.\n * When user checks the checkboxes for exclude type or any date in the touches filters,\n * API should also receive all touches except \"None\".\n * @param {Dictionary<PreselectedFilter>} filter - The filter from search saga\n */\nexport function* handleTouchFilters(filter: Dictionary<PreselectedFilter>) {\n const newFilter = cloneDeep(filter);\n\n const touchesExcludeFilters = [\n { data: newFilter.completed_touch_type as FormCheckboxOption[], type: 'completed' },\n { data: newFilter.schedule_touch_type as FormCheckboxOption[], type: 'schedule' },\n ];\n const touchesTypeDateFilters = [\n { data: newFilter.completed_touch_type_date as FormCheckboxOption[], type: 'completed' },\n { data: newFilter.schedule_touch_type_date as FormCheckboxOption[], type: 'schedule' },\n ];\n const touchesDateFilters = [\n { data: newFilter.completed_touch_date as FormCheckboxOption[], type: 'completed' },\n { data: newFilter.schedule_touch_date as FormCheckboxOption[], type: 'schedule' },\n ];\n const touchesFilters = [\n ...touchesExcludeFilters,\n ...touchesTypeDateFilters,\n ...touchesDateFilters,\n ];\n\n let shouldAddAllTouches = {\n completed: false,\n schedule: false,\n };\n\n // fix for psg attendees selecting date witouth any attendees\n const normalizedFilters: Dictionary<BaseFilter> = yield select(filtersSelectors.getFiltersMap);\n\n if (\n !(newFilter.psg_attendees as string[] | undefined)?.length &&\n ((newFilter.psg_attendees_type_date as SingleCheckboxRangeOption<string>[])?.some(\n attendeeFilter => attendeeFilter.checked === true\n ) ||\n (newFilter.psg_attendees_date as MultiselectMappedFilter[])?.some(\n attendeeFilter => attendeeFilter.value !== ''\n ))\n ) {\n const allPsgAttendees: MultiselectMappedFilter[] = normalizedFilters.psg_attendees?.data.reduce(\n (acc: MultiselectMappedFilter[], item: Option<string>) => {\n if (!item.relatedoptions?.length) {\n acc.push({\n disabled: undefined,\n entries: undefined,\n label: item.name ?? '',\n value: item.value,\n });\n }\n\n return acc;\n },\n []\n );\n\n newFilter.psg_attendees = allPsgAttendees;\n }\n\n touchesFilters.forEach(touchesFilter => {\n const { data, type } = touchesFilter;\n\n let isFilterValid = false;\n const newFilterTouch =\n type === 'completed' ? newFilter.completed_touch : newFilter.schedule_touch;\n\n if (!(newFilterTouch as MultiselectMappedFilter[])?.length) {\n isFilterValid = data?.some(touchFilter => {\n const checkboxCondition = touchFilter.checked;\n const dateRangeCondition =\n (touchFilter.label === 'Date Start' || touchFilter.label === 'Date End') &&\n touchFilter.value !== '';\n\n if (checkboxCondition || dateRangeCondition) return true;\n });\n }\n\n if (isFilterValid) {\n if (type === 'completed') shouldAddAllTouches.completed = true;\n else shouldAddAllTouches.schedule = true;\n }\n });\n\n if (shouldAddAllTouches.completed || shouldAddAllTouches.schedule) {\n const filterSources: FilterSource[] = yield select(filtersSelectors.getCompanyFilters);\n\n // completed and scheduled touches both have the same names and values\n const completedTouchesFilter = filterSources[3].data.find(\n filter => filter.column === 'completed_touches_group'\n )?.data[1] as FilterGroupDataSection;\n\n let touches = completedTouchesFilter.data?.filter(obj => obj.value !== 'blank');\n\n if (!touches) {\n touches = FILTER_TOUCHES.map(value => ({\n value: value,\n name: value,\n }));\n }\n\n const mappedTouches: MultiselectMappedFilter[] = touches.map(touch => {\n return {\n disabled: undefined,\n entries: undefined,\n label: touch.name,\n value: touch.value,\n ...(touch.parent && { parent: touch.parent }),\n };\n });\n\n if (shouldAddAllTouches.completed) newFilter.completed_touch = mappedTouches;\n if (shouldAddAllTouches.schedule) newFilter.schedule_touch = mappedTouches;\n }\n\n return newFilter;\n}\n","export const regexCsvMimeType = /(text\\/csv)|(application\\/vnd\\.ms-excel)/;\nexport const regexValidEmail =\n /^\\w+((-\\w+)|(\\.\\w+))*@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$/;\n// eslint-disable-next-line max-len\nexport const regexLinkedinURL =\n /(https?)?:?(\\/\\/)?(([w]{3}||\\w\\w)\\.)?linkedin.com(\\w+:{0,1}\\w*@)?(\\S+)(:([0-9])+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/;\n/**\n * regex for validating an abbreviated value. valid examples: 100k, 123.456K, 1000000\n * -? - optional, user can enter the minus symbol at the start of the string\n * ^[0-9] - string must start with number characters\n * \\.? - optional, user can enter decimal point\n * [0-9]+ - after decimal point at least one number must be entered\n * (K?|M?|B?|T?) - after numbers, string can contain only one of these letters\n * /i - string is case insensitive\n */\nexport const regexFloatAbbreviation = /^[0-9]*\\.?[0-9]+(K?|M?|B?|T?)$/i;\nexport const regexFloatAndNegativeAbbreviation = /^-?[0-9]*\\.?[0-9]+(K?|M?|B?|T?)$/i;\n\n// similar to above regex, except it doesn't accept decimal values\nexport const regexIntegerAbbreviation = /^[0-9]+(K?|M?|B?|T?)$/i;\n\n// for Phone Numbers in validation schema\n// eslint-disable-next-line max-len\nexport const phoneRegExp = /^[0-9.+-]{4,20}$/g;\n\n// for numbers in validation schema\nexport const numberRegExp = /^\\d+([.,]\\d+)?$/;\n\n// check if a value is a number or if it is a number with percentage symbol\nexport const numberPercentageRegex = /^-?\\d+(\\.\\d+)?%?$/;\n\n// for numbers in validation schema also negative numbers\nexport const numberBigRegExp = /^[-0-9\\s]+([.,]\\d+)?$/;\n\n// for numbers in validation schema also negative numbers that can also end in dot\nexport const numberBigRegExpEndingDot = /^[-0-9\\s]+([.,]\\d+)?\\.?$/;\n\n// check if it is a number with percentage symbol\nexport const numberPercentageMatchRegex = /^-?\\d+(\\.\\d+)?%$/;\n\n/**\n * Regular expression for matching abbreviations of numbers with optional negative sign.\n * Matches numbers followed by K (thousand), M (million), B (billion), or T (trillion) in a case-insensitive manner.\n */\nexport const regexAbbreviation = /^[0-9]*\\.?[0-9]+(K|M|B|T)$/i;\nexport const regexNegativeAbbreviation = /^-?[0-9]*\\.?[0-9]+(K|M|B|T)$/i;\n// for urls with or without http/https\nexport const urlRegExp = /^(https?:\\/\\/)?([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}(\\/\\S*)?$/;\n\n// regex used to match date interval filter\nexport const regexDateInterval = /_date_upper|_date_lower/i;\n","import {\n ChartData,\n ChartBars,\n SocialMediaChartData,\n GlassDoorChartData,\n} from '@optx/models/charts/data';\n\nexport const CHART_KEYS = ['3M', '6M', '1Y', '2Y'];\n\nexport const INITIAL_STATE_CHART: ChartData | SocialMediaChartData = {\n '3M': { data: [] },\n '6M': { data: [] },\n '1Y': { data: [] },\n '2Y': { data: [] },\n};\n\nexport const INITIAL_STATE_BAR_CHART: ChartBars = {\n '3M': { data: [] },\n '6M': { data: [] },\n '1Y': { data: [] },\n '2Y': { data: [] },\n ALL: { data: [] },\n};\n\nexport const INITIAL_GlASS_DOOR_CHART: GlassDoorChartData = {\n '3M': {\n date: '',\n overall_stars: 0,\n number_of_reviews: 0,\n percent_recommend_friend: 0,\n percent_recommend_ceo: 0,\n ceo_ratings: 0,\n positive_outlook_percent: 0,\n },\n '6M': {\n date: '',\n overall_stars: 0,\n number_of_reviews: 0,\n percent_recommend_friend: 0,\n percent_recommend_ceo: 0,\n ceo_ratings: 0,\n positive_outlook_percent: 0,\n },\n '1Y': {\n date: '',\n overall_stars: 0,\n number_of_reviews: 0,\n percent_recommend_friend: 0,\n percent_recommend_ceo: 0,\n ceo_ratings: 0,\n positive_outlook_percent: 0,\n },\n '2Y': {\n date: '',\n overall_stars: 0,\n number_of_reviews: 0,\n percent_recommend_friend: 0,\n percent_recommend_ceo: 0,\n ceo_ratings: 0,\n positive_outlook_percent: 0,\n },\n};\n","import React, { useMemo, useCallback, useRef } from 'react';\nimport Select, {\n ActionMeta,\n ValueType,\n Props as SelectProps,\n SelectComponentsConfig,\n} from 'react-select';\n// interface\nimport { SelectOption } from '@optx/models/Option';\n// hooks\nimport useAutoFocusSelect from '@optx/common/hooks/useAutoFocusSelect';\n// components\nimport { ValueContainer, DropdownIndicator } from '../components';\n// styles\nimport './style.scss';\nimport { MenuListWithLoader } from '@optx/shared/view/molecules/Select/components';\n\nconst defaultComponents: Partial<SelectComponentsConfig<any>> = {\n ValueContainer,\n DropdownIndicator,\n};\n\nconst SingleSelect: React.FC<SelectProps<SelectOption>> = ({\n options,\n value,\n components,\n isLoading,\n onChange,\n autoFocus = true,\n maxMenuHeight,\n ...restProps\n}) => {\n const selectRef = useRef<Select<SelectOption> | null>(null);\n\n useAutoFocusSelect(selectRef, autoFocus, 'singleselect-select__input');\n\n const selectedOptions = useMemo(() => {\n if (value) {\n let availableOptions: Array<SelectOption> = [...(options as Array<SelectOption>)];\n\n // this way, only the enabled options are returned and validated\n availableOptions = availableOptions.filter(option => !option.disabled);\n\n if ((value as Array<SelectOption>).length === availableOptions.length) {\n return [...(options as Array<SelectOption>)];\n }\n\n return value;\n }\n\n return [];\n }, [value, options]);\n\n const handleChange = useCallback(\n (value: ValueType<SelectOption>, action: ActionMeta<SelectOption>) => {\n return onChange && onChange(value, action);\n },\n [onChange]\n );\n\n const selectComponents = useMemo(\n () => ({\n ...defaultComponents,\n ...(components || {}),\n MenuList: MenuListWithLoader(isLoading || false),\n }),\n [components, isLoading]\n );\n\n const customFilter = useCallback((option: SelectOption, input: string) => {\n if (input) {\n return option.label.toLowerCase().includes(input.toLowerCase());\n }\n\n return true;\n }, []);\n\n return (\n <Select\n ref={selectRef}\n className=\"singleselect-wrapper\"\n options={options}\n value={selectedOptions}\n onChange={handleChange}\n components={selectComponents}\n {...restProps}\n filterOption={customFilter}\n menuPlacement=\"auto\"\n maxMenuHeight={maxMenuHeight}\n // Leave isMulti at the end to not be overriden.\n isMulti={false}\n />\n );\n};\n\nSingleSelect.defaultProps = {\n placeholder: 'search',\n classNamePrefix: 'singleselect-select',\n isClearable: false,\n hideSelectedOptions: false,\n closeMenuOnSelect: false,\n};\n\nexport default SingleSelect;\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const SET_SEARCH_TYPE = createFeatureActionType(featureName, 'SET_SEARCH_TYPE');\n","import { GridPayload } from '@optx/models/grid';\nimport { createAction } from '@reduxjs/toolkit';\nimport { SET_SEARCH_TYPE } from './types';\n\nexport const setSearchType = createAction<GridPayload<string>>(SET_SEARCH_TYPE);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n//models\nimport { SearchTypeState } from './interfaces';\nimport { GridPayload } from '@optx/models/grid';\nimport { UserInformation } from '@optx/models/user';\nimport { SearchPayload } from '@optx/models/api/contacts';\nimport Company from '@optx/models/Company';\n//constants\nimport { GRID_KEYS_SEARCH_TYPE, SEARCH_TYPE_INITIAL_STATE } from '@optx/constants/grid';\nimport { searchTypeOptions } from './constants';\n//utils\nimport { generateGridReducerInitialState } from '@optx/utils/grid';\n//redux\nimport { actions as userActions } from '@redux/user/information';\nimport { actions as searchActions } from '@features/grid/search';\nimport * as actions from './actions';\n\nconst initialState: SearchTypeState = generateGridReducerInitialState(\n GRID_KEYS_SEARCH_TYPE,\n SEARCH_TYPE_INITIAL_STATE\n);\n\nconst setSearchTypeReducer: CaseReducer<SearchTypeState, PayloadAction<GridPayload<string>>> = (\n draftState,\n action\n) => {\n const { data, gridKey } = action.payload;\n draftState[gridKey].searchType = data;\n};\n\nconst fetchUserInformationSuccessReducer: CaseReducer<\n SearchTypeState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const { settings } = action.payload;\n const sessionSettings = settings.session_settings;\n\n if (sessionSettings.search_type) {\n draftState.advancedSearch.searchType = sessionSettings.search_type;\n }\n\n if (sessionSettings.my_companies_search_type) {\n draftState.myCompanies.searchType = sessionSettings.my_companies_search_type;\n }\n\n if (sessionSettings.lists_search_type) {\n draftState.lists.searchType = sessionSettings.lists_search_type;\n }\n\n if (sessionSettings.sourcing_outreach_detail_search_type) {\n draftState.outreachDetails.searchType = sessionSettings.sourcing_outreach_detail_search_type;\n }\n\n if (\n sessionSettings.addon_filters &&\n /^.*company_name_or_url.*$/.test(sessionSettings.addon_filters as string)\n ) {\n draftState.addons.searchType = searchTypeOptions.companyNameOrUrl;\n }\n};\n\nexport const searchCompaniesSuccessReducer: CaseReducer<\n SearchTypeState,\n PayloadAction<Array<Company>, any, GridPayload<Partial<SearchPayload>>>\n> = (draftState, action) => {\n const { data, gridKey } = action.meta;\n\n if (!gridKey) return;\n\n if (GRID_KEYS_SEARCH_TYPE.includes(gridKey)) {\n draftState[gridKey].searchType = data?.searchType ?? SEARCH_TYPE_INITIAL_STATE.searchType;\n }\n};\n\nconst reducer = createReducer<SearchTypeState>(initialState, builder => {\n builder\n .addCase(actions.setSearchType, setSearchTypeReducer)\n .addCase(userActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n .addCase(searchActions.searchCompaniesSuccess, searchCompaniesSuccessReducer);\n});\n\nexport default reducer;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport uiReducer from '../../../redux/ui';\nimport { saga } from '../../../redux/ui/modals/company-touches';\n\nconst useInjectUI = () => {\n useInjectReducer({\n key: 'ui',\n reducer: uiReducer,\n });\n useInjectSaga({\n key: 'ui',\n saga,\n });\n};\n\nexport default useInjectUI;\n","import { useInjectSaga } from 'redux-injectors';\nimport { saga } from '../../../redux/user/reset-password';\n\nconst key = 'resetPassword';\n\nconst useInjectResetPassword = () => {\n useInjectSaga({ key, saga });\n};\n\nexport default useInjectResetPassword;\n","import { useInjectSaga } from 'redux-injectors';\nimport { saga } from '../../../redux/user/profile-image';\n\nconst key = 'profilePicture';\n\nconst useInjectProfilePicture = () => {\n useInjectSaga({ key, saga });\n};\n\nexport default useInjectProfilePicture;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport savedSearchesReducer, {\n sagas as savedSearchesSagas,\n} from '../../../redux/company/saved-searches';\n\nconst useInjectCompanySavedSearches = () => {\n useInjectReducer({\n key: 'companySavedSearches',\n reducer: savedSearchesReducer,\n });\n useInjectSaga({\n key: 'companySavedSearches',\n saga: savedSearchesSagas,\n });\n};\n\nexport default useInjectCompanySavedSearches;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport savedSearchesReducer, {\n sagas as savedSearchesSagas,\n} from '../../../redux/contacts/saved-searches';\n\nconst useInjectContactsSavedSearches = () => {\n useInjectReducer({\n key: 'contactsSavedSearches',\n reducer: savedSearchesReducer,\n });\n useInjectSaga({\n key: 'contactsSavedSearches',\n saga: savedSearchesSagas,\n });\n};\n\nexport default useInjectContactsSavedSearches;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport filterSourcesReducer, { sagas as filterSourcesSaga } from '../../../redux/contacts/filters';\n\nconst useInjectContactsFilterSources = () => {\n useInjectReducer({\n key: 'contactsFilters',\n reducer: filterSourcesReducer,\n });\n useInjectSaga({\n key: 'contactsFilters',\n saga: filterSourcesSaga,\n });\n};\n\nexport default useInjectContactsFilterSources;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport filterSourcesReducer, { saga as filterSourcesSaga } from '@redux/company/filters';\n\nconst useInjectCompanyFilterSources = () => {\n useInjectReducer({\n key: 'filters',\n reducer: filterSourcesReducer,\n });\n useInjectSaga({\n key: 'filtersSaga',\n saga: filterSourcesSaga,\n });\n};\n\nexport default useInjectCompanyFilterSources;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport suggestedSearchesReducer, {\n sagas as suggestedSearches,\n} from '../../../redux/company/suggested-searches';\n\nconst useInjectSuggestedSearches = () => {\n useInjectReducer({\n key: 'suggestedSearches',\n reducer: suggestedSearchesReducer,\n });\n useInjectSaga({\n key: 'suggestedSearches',\n saga: suggestedSearches,\n });\n};\n\nexport default useInjectSuggestedSearches;\n","import { useInjectSaga, useInjectReducer } from 'redux-injectors';\nimport reducer, { sagas } from '../../../redux/company/opportunity-presentation';\n\nconst useInjectOpportunityPresentation = () => {\n useInjectReducer({\n key: 'opportunityPresentation',\n reducer,\n });\n useInjectSaga({\n key: 'opportunityPresentation',\n saga: sagas,\n });\n};\n\nexport default useInjectOpportunityPresentation;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '../../../redux/user/information';\n\nconst useInjectUserInformation = () => {\n useInjectReducer({\n key: 'user',\n reducer,\n });\n useInjectSaga({\n key: 'user',\n saga,\n });\n};\n\nexport default useInjectUserInformation;\n","import { createReducer, PayloadAction, CaseReducer } from '@reduxjs/toolkit';\n// models\nimport { FilterSource } from '@optx/models/filters';\nimport { UserInformation } from '@optx/models/user';\n// utils\nimport { FilterTag } from '@optx/models/tags';\nimport { injectFilter } from '@optx/utils/filters/injectFilter';\nimport { normalizeFiltersByColumn } from '@optx/utils/filters/normalize';\nimport { parseFilter } from '../../../../utils/filters/parseFilters';\nimport { mapPreselectedFilters } from '../../../../utils/filters/preselectedValues';\n// redux\nimport { SearchContactsPayload, ResetSearchPayload } from '../search/interfaces';\nimport { SearchContactsFilterState } from './interfaces';\nimport { actions as searchActions } from '../search';\nimport { actions as contactsFiltersActions } from '../../filters';\nimport { actions as userInformationActions } from '../../../user/information';\n\nconst initialState: SearchContactsFilterState = {\n data: [],\n filter: {},\n preselected: {},\n normalized: {},\n clear: {},\n};\n\n// external reducers\nconst searchContactsReducer: CaseReducer<\n SearchContactsFilterState,\n PayloadAction<Partial<SearchContactsPayload> | undefined>\n> = (draftState, action) => {\n if (action.payload && action.payload.filter) {\n draftState.filter = action.payload.filter;\n }\n};\n\nconst resetReducer: CaseReducer<SearchContactsFilterState, PayloadAction<ResetSearchPayload>> = (\n draftState,\n action\n) => {\n const { clearFilter, resetTo } = action.payload;\n\n if (clearFilter) {\n draftState.filter = draftState.clear;\n } else {\n draftState.filter = draftState.preselected;\n }\n\n if (resetTo) {\n const { filter } = resetTo;\n\n draftState.filter = filter || {};\n }\n};\n\n// external reducers\nconst fetchFiltersSuccessReducer: CaseReducer<\n SearchContactsFilterState,\n PayloadAction<Array<FilterSource>>\n> = (draftState, action) => {\n draftState.data = action.payload;\n const preselected = mapPreselectedFilters(action.payload);\n draftState.preselected = preselected;\n draftState.clear = mapPreselectedFilters(action.payload, false);\n draftState.normalized = normalizeFiltersByColumn(action.payload);\n\n if (draftState.persistedFilter !== undefined) {\n const [parsedFilters] = parseFilter(draftState.persistedFilter, action.payload);\n draftState.filter = parsedFilters;\n // remove persisted filter, is not needed anymore.\n delete draftState.persistedFilter;\n } else {\n draftState.filter = preselected;\n }\n};\n\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccess: CaseReducer<\n SearchContactsFilterState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const persistedFilter = action.payload.settings.session_settings\n ? action.payload.settings.session_settings.contact_filters\n : undefined;\n\n if (persistedFilter !== undefined) {\n draftState.persistedFilter = persistedFilter;\n }\n};\n\nconst removeFilter: CaseReducer<SearchContactsFilterState, PayloadAction<FilterTag>> = (\n draftState,\n action\n) => {\n const tag = action.payload;\n\n const { normalized, clear, filter } = draftState;\n\n if (tag.filter === 'keyword') {\n tag.filter = 'query';\n }\n\n const newFilters = injectFilter(normalized as any, filter, clear, tag.filter, tag.optionId);\n draftState.filter = newFilters;\n};\n\nconst reducer = createReducer<SearchContactsFilterState>(initialState, builder =>\n builder\n .addCase(searchActions.searchContacts, searchContactsReducer)\n .addCase(searchActions.reset, resetReducer)\n .addCase(searchActions.removeFilter, removeFilter)\n // external reducers\n .addCase(contactsFiltersActions.fetchFiltersSuccess, fetchFiltersSuccessReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccess)\n);\n\nexport default reducer;\n","import { combineReducers } from 'redux';\n// models\nimport { SearchContactsState } from './interfaces';\n// reducers\nimport searchReducer from './search';\nimport filterReducer from './filter';\n\nconst reducer = combineReducers<SearchContactsState>({\n search: searchReducer,\n filter: filterReducer,\n});\n\nexport default reducer;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport searchReducer from '../../../redux/contacts/search/reducer';\nimport { saga as contactsSearchSaga } from '../../../redux/contacts/search/search';\n\nconst useInjectContactsSearch = () => {\n useInjectReducer({\n key: 'contactsSearch',\n reducer: searchReducer,\n });\n useInjectSaga({\n key: 'contactsSearch',\n saga: contactsSearchSaga,\n });\n};\n\nexport default useInjectContactsSearch;\n","import { fork } from 'redux-saga/effects';\n// redux\nimport { saga as searchSaga } from './search';\nimport { saga as viewTransitionSaga } from '@optx/features/grid/view-transition';\n\nexport default function* searchSagas() {\n yield fork(searchSaga);\n yield fork(viewTransitionSaga);\n}\n","import { fork } from 'redux-saga/effects';\nimport { saga as searchSaga } from './search';\nimport { saga as listsDetailsSaga } from './details';\n\nfunction* listsSagas() {\n yield fork(listsDetailsSaga);\n yield fork(searchSaga);\n}\n\nexport default listsSagas;\n","import { combineReducers } from 'redux';\nimport { UserListsState } from './interfaces';\nimport listReducer from './details';\n\nconst reducer = combineReducers<UserListsState>({\n details: listReducer,\n});\n\nexport default reducer;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '@redux/lists';\n\nconst useInjectCompanyLists = () => {\n useInjectReducer({\n key: 'lists',\n reducer,\n });\n useInjectSaga({\n key: 'lists',\n saga,\n });\n};\n\nexport default useInjectCompanyLists;\n","import { useInjectSaga } from 'redux-injectors';\nimport { saga } from '../../../redux/company/portfolio';\n\nconst useInjectPortfolio = () => {\n useInjectSaga({\n key: 'portfolio',\n saga,\n });\n};\n\nexport default useInjectPortfolio;\n","import { useInjectSaga, useInjectReducer } from 'redux-injectors';\nimport { reducer, saga } from '../../../redux/company/equity-touch';\n\nconst useInjectEquityTouch = () => {\n useInjectReducer({\n key: 'companyEquityTouch',\n reducer,\n });\n useInjectSaga({ key: 'equityTouch', saga });\n};\n\nexport default useInjectEquityTouch;\n","import { takeLatest, call, put, select } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyImport, CompanyImportFailedData } from '@optx/models/Company';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { SortByRule } from '@optx/models/table/sorting';\n// utils\nimport { convertPayloadImport } from '@optx/utils/helpers';\nimport {\n constants as importConstants,\n selectors as importSelectors,\n} from '@optx/features/list-import/state';\n// redux\nimport {\n actions as favoriteListsActions,\n selectors as favoriteListsSelectors,\n} from '@redux/favorite-lists/lists';\nimport * as actions from '@optx/features/list-import/state/actions';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { CompanyService } from '@services/api';\nimport { ImportedCompany } from './interfaces';\n\nlet importCompaniesCopy: Array<ImportedCompany> = [];\nlet retryImportCompaniesCopy: Array<ImportedCompany> = [];\nconst listOfCompanies: CompanyImportFailedData[] = [];\n\nfunction* importFavoriteListSaga() {\n const cancelImport: boolean = yield select(importSelectors.cancel);\n const importCompanies: ImportedCompany[] = yield select(importSelectors.getImportCompanies);\n const importCompaniesCount: number = yield select(importSelectors.getImportCompaniesCount);\n const title: string = yield select(importSelectors.getWatchlistTitle);\n\n if (importCompaniesCopy.length === 0) {\n importCompaniesCopy = importCompanies.slice();\n }\n\n const companiesBatch = importCompaniesCopy.slice(\n 0,\n importConstants.BULK_IMPORT_LIMIT\n ) as ImportedCompany[];\n const currentResults: CompanyImportFailedData[] = yield select(importSelectors.getResults);\n const nextResults: CompanyImportFailedData[] = [];\n\n try {\n const { dataString } = convertPayloadImport(companiesBatch);\n const res: AxiosResponse<CompanyImport> = yield call(CompanyService.importFavoriteList, {\n title,\n data: dataString,\n });\n\n if (Object.keys(res.data).length === 0) {\n // If import failed on backend\n yield put(\n actions.updatePercentage({\n result: (importConstants.BULK_IMPORT_LIMIT / importCompaniesCount) * 100,\n })\n );\n yield put(actions.setFailedImportsOnRequest(companiesBatch));\n\n companiesBatch.forEach(company => {\n const { URL, Company, raw_url } = company;\n nextResults.push({\n URL,\n Company,\n Reason: 'Failed to Import',\n possible_matches: [],\n count_possible_matches: 0,\n raw_url,\n });\n });\n\n const finalResults: CompanyImportFailedData[] = currentResults.concat(nextResults);\n\n yield put(actions.saveResults({ data: finalResults, sort: true }));\n importCompaniesCopy.splice(0, importConstants.BULK_IMPORT_LIMIT);\n\n if (!cancelImport) {\n if (importCompaniesCopy.length > 0) {\n yield put(actions.importFavoriteList());\n } else {\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage({ result: 100 }));\n }\n }\n } else if (res.data) {\n yield put(actions.saveListId(res.data.list_id));\n yield put(actions.importFavoriteListSuccess(res.data));\n\n yield put(\n actions.updatePercentage({\n result: (importConstants.BULK_IMPORT_LIMIT / importCompaniesCount) * 100,\n })\n );\n\n const successCompaniesIds = Object.entries(res.data.successful_companies).map(\n ([key, value]) => ({\n companyName: value[0].optx_company_name,\n id: +key,\n URL: value[1],\n raw_url: value[2],\n })\n );\n const successCompaniesMapped = successCompaniesIds.map(company => {\n return {\n URL: company.URL,\n Company: company.companyName,\n Reason: '',\n possible_matches: [],\n count_possible_matches: 0,\n raw_url: company.raw_url,\n };\n });\n\n listOfCompanies.push(...successCompaniesMapped, ...(res.data.failed_company_data || []));\n\n yield put(actions.saveResults({ data: listOfCompanies, sort: true }));\n\n importCompaniesCopy.splice(0, importConstants.BULK_IMPORT_LIMIT);\n\n if (!cancelImport) {\n if (importCompaniesCopy.length > 0) {\n yield put(actions.importFavoriteList());\n } else {\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage({ result: 100 }));\n }\n } else {\n listOfCompanies.length = 0;\n const canceledCompanies: CompanyImportFailedData[] = [];\n const prevResults: CompanyImportFailedData[] = yield select(importSelectors.getResults);\n\n if (importCompaniesCopy.length <= 100) {\n importCompaniesCopy.forEach(company => {\n const { Company, URL, raw_url } = company;\n canceledCompanies.push({\n URL,\n Company,\n Reason: 'Canceled by user',\n possible_matches: [],\n count_possible_matches: 0,\n raw_url,\n });\n });\n yield put(\n actions.saveResults({\n data: prevResults.concat(canceledCompanies as CompanyImportFailedData[]),\n sort: true,\n })\n );\n yield put(actions.updateCanceledImports(canceledCompanies as CompanyImportFailedData[]));\n } else {\n yield put(actions.saveResults({ data: prevResults, sort: true }));\n }\n\n yield put(actions.updateCanceledImportsNumber(importCompaniesCopy.length));\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.cancel(false));\n yield put(actions.updatePercentage({ result: 100 }));\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n\n if (res.data.results) {\n const query: string = yield select(favoriteListsSelectors.getQuery);\n const sorting: SortByRule<any>[] = yield select(favoriteListsSelectors.getSortBy);\n yield put(\n favoriteListsActions.fetchFavoriteLists({ query, sortBy: sorting, fetchAll: true })\n );\n }\n }\n } catch (e: any) {\n // If there is an error cancel the import\n\n if (e.response.data?.failed_company_data) {\n companiesBatch.forEach((company, index) => {\n const { URL, Company, raw_url } = company;\n listOfCompanies.push({\n URL,\n Company,\n Reason: e.response.data?.failed_company_data[index].Reason,\n possible_matches: [],\n count_possible_matches: 0,\n raw_url,\n });\n });\n yield put(actions.saveResults({ data: listOfCompanies, sort: true }));\n }\n\n const prevResults: CompanyImportFailedData[] = yield select(importSelectors.getResults);\n yield put(actions.saveResults({ data: prevResults, sort: true }));\n yield put(actions.setFailedImportsOnRequest(importCompaniesCopy));\n yield put(actions.cancel(false));\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage({ result: 100 }));\n listOfCompanies.length = 0;\n\n NotificationService.error('Import file fail, Server error!');\n }\n\n listOfCompanies.length = 0;\n}\n\nfunction* editCompanySaga(action: PayloadAction<ImportedCompany>) {\n const title: string = yield select(importSelectors.getWatchlistTitle);\n const { dataString } = convertPayloadImport([action.payload]);\n const currentResults: CompanyImportFailedData[] = yield select(importSelectors.getResults);\n const editingCompanyIndex: number = yield select(importSelectors.getEditingCompanyIndex);\n const listsIds: number[] = yield select(favoriteListsSelectors.getAllListIds);\n const previewsCompany = currentResults[editingCompanyIndex].Company;\n const currentListId: number = yield select(importSelectors.getListId);\n const previewsURL = currentResults[editingCompanyIndex].URL;\n\n const isListExists = listsIds.includes(currentListId);\n\n try {\n yield put(actions.setIsEditing(true));\n const res: AxiosResponse<CompanyImport> = yield call(CompanyService.importFavoriteList, {\n title,\n data: dataString,\n });\n\n if (res.data?.results) {\n const failedCompany = res.data.failed_company_data ?? [];\n yield put(actions.setIsEditing(false));\n\n if (!currentListId) {\n yield put(actions.saveListId(res.data.list_id));\n }\n\n if (failedCompany.length === 0) {\n // If no errors update results\n const finalResults = Array.from(currentResults);\n\n if (res.data.list_id) {\n Object.entries(res.data.successful_companies).map(([key, value]) => {\n finalResults[editingCompanyIndex] = {\n Company: value[0]?.optx_company_name || action.payload.Company,\n URL: action.payload.URL,\n Reason: '',\n possible_matches: [],\n count_possible_matches: 0,\n raw_url: action.payload.raw_url,\n };\n });\n }\n\n if (finalResults) {\n yield put(actions.saveResults({ data: finalResults, sort: false }));\n yield put(actions.removeFailedCompamy({ Company: previewsCompany, URL: previewsURL }));\n yield put(actions.removeFailedImportsOnRequest(previewsCompany));\n\n if (currentListId && isListExists) {\n yield put(favoriteListsActions.updateListCount(currentListId || res.data.list_id));\n } else {\n const query: string = yield select(favoriteListsSelectors.getQuery);\n const sorting: SortByRule<any>[] = yield select(favoriteListsSelectors.getSortBy);\n yield put(\n favoriteListsActions.fetchFavoriteLists({ query, sortBy: sorting, fetchAll: true })\n );\n }\n }\n } else {\n const finalResults = Array.from(currentResults);\n finalResults[editingCompanyIndex] = failedCompany[0];\n finalResults[editingCompanyIndex] = {\n ...failedCompany[0],\n };\n yield put(actions.saveResults({ data: finalResults, sort: false }));\n }\n\n const successCompaniesIds = Object.entries(res.data.successful_companies).map(\n ([key, value]) => ({\n companyName: value[0]?.optx_company_name,\n id: +key,\n URL: value[1],\n raw_url: value[2],\n })\n );\n yield put(actions.updateImportCompaniesIds(successCompaniesIds));\n } else {\n // if editing failed\n const failedCompany = res.data.failed_company_data ?? [];\n const finalResults = Array.from(currentResults);\n finalResults[editingCompanyIndex] = failedCompany[0];\n yield put(actions.saveResults({ data: finalResults, sort: false }));\n yield put(actions.setIsEditing(false));\n }\n } catch (e: any) {\n if (Object.keys(e.response.data)) {\n const updatedResults = [...currentResults];\n const failedCompany = e.response.data.failed_company_data[0];\n updatedResults[editingCompanyIndex] = {\n Company: failedCompany?.Company,\n URL: failedCompany?.URL,\n Reason: failedCompany?.Reason,\n possible_matches: failedCompany?.possible_matches,\n count_possible_matches: failedCompany?.count_possible_matches,\n raw_url: failedCompany?.raw_url,\n };\n yield put(actions.saveResults({ data: updatedResults, sort: false }));\n }\n\n NotificationService.error('Edit company fail, Server error!');\n yield put(actions.setIsEditing(false));\n }\n}\n\nfunction* resetProgressSaga() {\n yield (importCompaniesCopy = []);\n yield (retryImportCompaniesCopy = []);\n}\n\nfunction* retryImportSaga() {\n const cancelImport: boolean = yield select(importSelectors.cancel);\n const failedImportsOnRequestCompanies: ImportedCompany[] = yield select(\n importSelectors.getFailedImportsOnRequest\n );\n\n const failedBatches: number = yield select(importSelectors.getFailedBatches);\n const title: string = yield select(importSelectors.getWatchlistTitle);\n\n const importCompaniesCount: number = yield select(importSelectors.getImportCompaniesCount);\n\n if (retryImportCompaniesCopy.length === 0) {\n retryImportCompaniesCopy = failedImportsOnRequestCompanies.slice();\n }\n\n const companiesBatch = retryImportCompaniesCopy.slice(\n failedBatches * importConstants.BULK_RETRY_IMPORT_LIMIT,\n importConstants.BULK_RETRY_IMPORT_LIMIT\n ) as ImportedCompany[];\n const currentResults: CompanyImportFailedData[] = yield select(importSelectors.getResults);\n yield put(actions.updateProgress(true));\n\n yield put(\n actions.updatePercentage({\n result: (currentResults.length / importCompaniesCount) * 100,\n isPrevious: true,\n })\n );\n\n try {\n const { dataString } = convertPayloadImport(companiesBatch);\n const res: AxiosResponse<CompanyImport> = yield call(CompanyService.importFavoriteList, {\n title,\n data: dataString,\n });\n\n if (Object.keys(res.data).length === 0) {\n // If import failed on backend\n yield put(\n actions.updatePercentage({\n result: (importConstants.BULK_RETRY_IMPORT_LIMIT / importCompaniesCount) * 100,\n })\n );\n\n yield put(actions.setFailedBatches(failedBatches + 1));\n\n if (!cancelImport) {\n if (retryImportCompaniesCopy.length > 0 && companiesBatch.length > 0) {\n yield put(actions.retryImport());\n } else {\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage({ result: 100 }));\n yield put(actions.setFailedBatches(0));\n }\n }\n } else if (res.data.results) {\n yield put(actions.saveListId(res.data.list_id));\n yield put(actions.importFavoriteListSuccess(res.data));\n\n yield put(\n actions.updatePercentage({\n result: (importConstants.BULK_RETRY_IMPORT_LIMIT / importCompaniesCount) * 100,\n })\n );\n\n yield put(actions.removeFailedCompamies(companiesBatch.map(batch => batch.Company)));\n\n const successCompaniesIds = Object.entries(res.data.successful_companies).map(\n ([key, value]) => ({\n companyName: value[0]?.optx_company_name,\n id: +key,\n URL: value[1],\n raw_url: value[2],\n })\n );\n\n const successCompaniesMapped = successCompaniesIds.map(company => {\n return {\n URL: company.URL,\n Company: company.companyName,\n Reason: '',\n possible_matches: [],\n count_possible_matches: 0,\n raw_url: company.raw_url,\n };\n });\n\n listOfCompanies.push(...successCompaniesMapped, ...(res.data.failed_company_data || []));\n\n const listUpdated = listOfCompanies.concat(currentResults);\n\n yield put(actions.saveResults({ data: listUpdated, sort: true }));\n yield put(actions.editCompanies(listUpdated));\n retryImportCompaniesCopy.splice(\n failedBatches * importConstants.BULK_RETRY_IMPORT_LIMIT,\n importConstants.BULK_RETRY_IMPORT_LIMIT\n );\n\n if (!cancelImport) {\n if (retryImportCompaniesCopy.length > 0 && companiesBatch.length > 0) {\n yield put(actions.retryImport());\n } else {\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage({ result: 100 }));\n yield put(actions.setFailedBatches(0));\n }\n } else {\n listOfCompanies.length = 0;\n const canceledCompanies: CompanyImportFailedData[] = [];\n const prevResults: CompanyImportFailedData[] = yield select(importSelectors.getResults);\n\n if (retryImportCompaniesCopy.length <= 100) {\n retryImportCompaniesCopy.forEach(company => {\n const { Company, URL, raw_url } = company;\n canceledCompanies.push({\n URL,\n Company,\n Reason: 'Canceled by user',\n possible_matches: [],\n count_possible_matches: 0,\n raw_url,\n });\n });\n yield put(\n actions.saveResults({\n data: prevResults.concat(canceledCompanies as CompanyImportFailedData[]),\n sort: true,\n })\n );\n yield put(actions.updateCanceledImports(canceledCompanies as CompanyImportFailedData[]));\n } else {\n yield put(actions.saveResults({ data: prevResults, sort: true }));\n }\n\n yield put(actions.updateCanceledImportsNumber(retryImportCompaniesCopy.length));\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.cancel(false));\n yield put(actions.updatePercentage({ result: 100 }));\n yield put(actions.setFailedBatches(0));\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n\n if (res.data.results) {\n const query: string = yield select(favoriteListsSelectors.getQuery);\n const sorting: SortByRule<any>[] = yield select(favoriteListsSelectors.getSortBy);\n yield put(\n favoriteListsActions.fetchFavoriteLists({ query, sortBy: sorting, fetchAll: true })\n );\n }\n }\n } catch (e: any) {\n // If there is an error cancel the import\n\n const prevResults: CompanyImportFailedData[] = yield select(importSelectors.getResults);\n yield put(actions.saveResults({ data: prevResults, sort: true }));\n yield put(actions.cancel(false));\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage({ result: 100 }));\n yield put(actions.setFailedBatches(0));\n\n NotificationService.error('Import file fail, Server error!');\n }\n\n listOfCompanies.length = 0;\n}\n\nexport default function* importListsSagas() {\n yield takeLatest(actions.importFavoriteList, importFavoriteListSaga);\n yield takeLatest(actions.editCompany, editCompanySaga);\n yield takeLatest(actions.resetProgress, resetProgressSaga);\n yield takeLatest(actions.retryImport, retryImportSaga);\n}\n","import { combineReducers } from 'redux';\n\n// models\nimport listImportReducer from '@optx/features/list-import/state';\nimport { ListsState } from './interface';\n// reducers\nimport favoriteListsReducer from './lists';\nimport companyListsReducer from './company-lists';\nimport listsPopupReducer from './lists-popup';\n\nconst reducer = combineReducers<ListsState>({\n lists: favoriteListsReducer,\n listImport: listImportReducer,\n companyLists: companyListsReducer,\n listsPopup: listsPopupReducer,\n});\n\nexport default reducer;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport { sagas } from '@redux/favorite-lists/lists';\nimport sagaImport from '@optx/features/list-import/state/sagas';\nimport favoriteListsReducer from '@redux/favorite-lists';\nimport { sagas as sagasPopup } from '@redux/favorite-lists/lists-popup';\n\nconst useInjectFavoriteLists = () => {\n useInjectReducer({\n key: 'favoriteLists',\n reducer: favoriteListsReducer,\n });\n useInjectSaga({\n key: 'favoriteLists',\n saga: sagas,\n });\n useInjectSaga({\n key: 'favoriteListsPopup',\n saga: sagasPopup,\n });\n useInjectSaga({\n key: 'favoriteListsImport',\n saga: sagaImport,\n });\n};\n\nexport default useInjectFavoriteLists;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '../../../redux/user/user-list';\n\nconst useInjectUserList = () => {\n useInjectReducer({\n key: 'userList',\n reducer,\n });\n useInjectSaga({\n key: 'userList',\n saga,\n });\n};\n\nexport default useInjectUserList;\n","import { call, takeLatest, put } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport * as savedSearchesActions from '@redux/company/saved-searches/actions';\nimport { AxiosResponse } from 'axios';\nimport * as actions from './actions';\nimport { ShareList } from './interfaces';\nimport NotificationService from '../../../services/NotificationService';\nimport { UserService } from '../../../services/api';\n\nexport function* shareListSaga(action: PayloadAction<ShareList>) {\n try {\n const res: AxiosResponse<any> = yield call(UserService.shareList, action.payload);\n\n if (res.data) {\n const { share_with: shareWithList, list_id: listId } = action.payload;\n const shareWithListTransformed = shareWithList.map(item => +item);\n const successMessage = 'Succeed to share the list';\n\n yield put(savedSearchesActions.updateSavedSearches(shareWithListTransformed, listId));\n NotificationService.success(successMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to share the list';\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* shareSearchListSaga() {\n yield takeLatest(actions.shareListAction.type, shareListSaga);\n}\n","import { useInjectSaga } from 'redux-injectors';\nimport { saga } from '../../../redux/user/share';\n\nconst useInjectShareList = () => {\n useInjectSaga({ key: 'shareList', saga });\n};\n\nexport default useInjectShareList;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { sagas as saga } from '../../../redux/user/source-scrub-lists';\n\nconst useInjectSourceScrubLists = () => {\n useInjectReducer({\n key: 'sourceScrubLists',\n reducer,\n });\n useInjectSaga({\n key: 'sourceScrubLists',\n saga,\n });\n};\n\nexport default useInjectSourceScrubLists;\n","import { useInjectReducer } from 'redux-injectors';\nimport myPipelineReducer from '../../../redux/my-pipeline';\n\nconst useInjectMyPipeline = () => {\n useInjectReducer({\n key: 'myPipeline',\n reducer: myPipelineReducer,\n });\n};\n\nexport default useInjectMyPipeline;\n","import { combineReducers } from 'redux';\n\nimport cognitoLoginReducer from './cognitoLogin';\nimport cognitoLogoutReducer from './cognitoLogout';\nimport { AuthState } from './interfaces';\n\nexport default combineReducers<AuthState>({\n cognitoLogin: cognitoLoginReducer,\n cognitoLogout: cognitoLogoutReducer,\n});\n","import { fork } from 'redux-saga/effects';\n\nimport { saga as cognitoLoginSagas } from './cognitoLogin';\nimport { saga as cognitoLogoutSagas } from './cognitoLogout';\n\nexport default function* authSaga() {\n yield fork(cognitoLoginSagas);\n yield fork(cognitoLogoutSagas);\n}\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport authReducer, { saga as authSaga } from '../../../redux/auth';\n\n// Inject reducers/sagas\nconst useInjectAuth = () => {\n useInjectReducer({ key: 'auth', reducer: authReducer });\n useInjectSaga({ key: 'auth', saga: authSaga });\n};\n\nexport default useInjectAuth;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '../../../redux/company/files';\n\nconst useInjectFiles = () => {\n useInjectReducer({\n key: 'files',\n reducer,\n });\n useInjectSaga({\n key: 'files',\n saga,\n });\n};\n\nexport default useInjectFiles;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '../../../redux/company/funding-rounds';\n\nconst useInjectCompanyFundingRounds = () => {\n useInjectReducer({\n key: 'companyFundingRounds',\n reducer,\n });\n useInjectSaga({\n key: 'companyFundingRoundsSaga',\n saga,\n });\n};\n\nexport default useInjectCompanyFundingRounds;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '../../../redux/contacts/salesloft';\n\nconst useInjectSalesloft = () => {\n useInjectReducer({ key: 'salesloft', reducer });\n useInjectSaga({ key: 'salesloft', saga });\n};\n\nexport default useInjectSalesloft;\n","// initialization for reminders\nimport { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '../../../redux/company/primary-contacts';\n\nconst useInjectPrimaryContacts = () => {\n useInjectReducer({ key: 'primaryContacts', reducer });\n useInjectSaga({ key: 'primaryContacts', saga });\n};\n\nexport default useInjectPrimaryContacts;\n","import { fork, delay } from 'redux-saga/effects';\n\nconst TIMEOUT_INTERVAL = 60 * 1000;\n\n/**\n * Create pooling saga to be called at specified intervals.\n * @param saga saga generator function to be called when interval ends.\n * @param interval timeout interval in miliseconds. By default is 1 minute.\n */\nexport function createPool(saga: () => Generator, interval = TIMEOUT_INTERVAL) {\n function* poolGenerator() {\n while (true) {\n // Call generator without blocking.\n if (document.visibilityState === 'visible') {\n yield fork(saga);\n }\n\n yield delay(interval);\n }\n }\n\n return poolGenerator;\n}\n","import { fork } from 'redux-saga/effects';\nimport { fetchAlertsInboxSaga } from '@features/alerts/state/sagas';\nimport { createPool } from '../feature/pooling';\n\nfunction* poolingSaga() {\n yield fork(createPool(fetchAlertsInboxSaga));\n}\n\nexport default poolingSaga;\n","import { useInjectSaga } from 'redux-injectors';\n// redux\nimport saga from '../../../redux/pooling/saga';\n\n// Inject saga used to pool data from API at specified intervals.\nconst useInjectPoolingGenerator = () => {\n useInjectSaga({ key: 'pooling', saga });\n};\n\nexport default useInjectPoolingGenerator;\n","import { combineReducers } from 'redux';\n// models\nimport { MyCompaniesState } from './interfaces';\n// reducers\nimport filterCardsReducer from './filters-cards';\n\nconst reducer = combineReducers<MyCompaniesState>({\n filterCards: filterCardsReducer,\n});\n\nexport default reducer;\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport { SearchPayloadRequest } from '@models/api/contacts';\nimport { PreselectedFilter } from '@models/filters';\nimport { SortByRule } from '@models/table/sorting';\nimport { PageInfo } from '@models/table/Pagination';\nimport { SearchViewType } from '@models/user';\nimport { SearchStateData } from '@models/search';\nimport { ChangeCardSubfilterPayload } from '../filters-cards/interfaces';\n// constants\nimport { LONG_CARD_VIEW_DEFAULT_PAGE_SIZE } from '@constants/pagination';\n// utils\nimport { myCompaniesCardsFilters } from '@utils/myCompanies';\n// redux\nimport { getFiltersQuery } from '@redux/company/search/search/sagasReusable';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport {\n selectors as histogramSelectors,\n actions as histogramActions,\n} from '@features/grid/histograms';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport { selectors as filterCardsSelectors, actions as filterCardsActions } from '../filters-cards';\nimport { searchCompanies, searchCompaniesFail } from '@features/grid/search/state/sagasReusable';\nimport { getViewId } from '@optx/features/grid/view/state/selectors';\nimport { getListType } from '@optx/features/grid/search/state/selectors';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\n\nexport function* changeCardSubfilterSaga(action: PayloadAction<ChangeCardSubfilterPayload>) {\n const { cardId } = action.payload;\n const cards: Dictionary<SearchStateData> = yield select(filterCardsSelectors.getMyCompaniesCards);\n const selectedCardId: string = yield select(filterCardsSelectors.getSelectedCardId);\n const filter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter('myCompanies')\n );\n const searchKey: string = yield select(searchSelectors.getSearchKey('myCompanies'));\n const searchType: string = yield select(searchTypeSelectors.getSearchType('myCompanies'));\n const sortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting('myCompanies'));\n const allFiltersWithHistograms: string[] = yield select(\n histogramSelectors.allFiltersWithHistograms('myCompanies')\n );\n let subFilter: string = yield select(filterCardsSelectors.getSubFilter);\n let selectedCard: SearchStateData = yield select(filterCardsSelectors.getSelectedCard);\n const regularPagination: PageInfo = yield select(\n paginationSelectors.getPagination('myCompanies')\n );\n const view: SearchViewType = yield select(viewTypeSelectors.searchView('myCompanies'));\n const id: number = yield select(getViewId('myCompanies'));\n const listType: string = yield select(getListType('myCompanies'));\n const userPageNumber: number = yield select(\n userInformationSelectors.getMyCompaniesResultsPageNumber\n );\n\n const pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n\n if (selectedCardId === cardId && subFilter === action.payload.subFilter) {\n subFilter = '';\n } else if (selectedCardId === cardId && subFilter !== action.payload.subFilter) {\n subFilter = action.payload.subFilter;\n } else if (selectedCardId !== cardId) {\n selectedCard = cards[action.payload.cardId];\n subFilter = action.payload.subFilter;\n }\n\n const customClearedFilter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getCustomClearedFilter('myCompanies')\n );\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(\n getFiltersQuery,\n listType === 'combined' ? customClearedFilter : filter\n );\n const filterPayload = subFilter\n ? {\n ...selectedCard.filter,\n // @ts-ignore\n ...selectedCard.data[subFilter],\n ...filterQuery,\n source_tag_filter: selectedCard.filter.source_tag_filter,\n ...myCompaniesCardsFilters(selectedCard, {\n nextTouchDate: filterQuery.next_touch_date as any,\n lastTouchDateDays: filterQuery.last_touch_date_days as any,\n stage: filterQuery.stage as any,\n }),\n saved_list_id: selectedCard.filter.saved_list_id,\n }\n : {\n ...selectedCard.filter,\n ...filterQuery,\n source_tag_filter: selectedCard.filter.source_tag_filter,\n ...myCompaniesCardsFilters(selectedCard, {\n nextTouchDate: filterQuery.next_touch_date as any,\n lastTouchDateDays: filterQuery.last_touch_date_days as any,\n stage: filterQuery.stage as any,\n }),\n };\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterPayload,\n pagination: {\n ...pagination,\n pageNumber: 1,\n },\n sortBy,\n fromSavedList: id,\n listType,\n };\n\n try {\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield call(searchCompanies, searchData, 'myCompanies', filter, undefined, undefined, {\n my_companies_results_page_number: searchData.pagination.pageNumber,\n });\n } else {\n yield call(searchCompanies, searchData, 'myCompanies', filter, undefined, undefined, {\n my_companies_selected_card_id: cardId,\n });\n }\n\n yield put(filterCardsActions.changeCardSubfilterSuccess({ cardId, subFilter }));\n yield put(\n histogramActions.fetchHistogramFilters('myCompanies', filter, allFiltersWithHistograms)\n );\n\n if (view === 'long-card') {\n yield put(\n paginationActions.changePaginationSuccess({ gridKey: 'myCompanies', data: pagination })\n );\n } else {\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey: 'myCompanies',\n data: { ...pagination, pageNumber: 1 },\n })\n );\n }\n } catch (error: any) {\n yield call(searchCompaniesFail, 'myCompanies', error);\n }\n}\n\nexport default function* companiesSaga() {\n yield takeLatest(filterCardsActions.changeCardSubfilter, changeCardSubfilterSaga);\n}\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\n// redux\nimport myCompaniesReducer from '@redux/my-companies/reducer';\nimport { saga } from '@redux/my-companies/search';\nimport { saga as filtersCardsSaga } from '@optx/redux/my-companies/filters-cards';\n\nconst useInjectMyCompanies = () => {\n useInjectReducer({\n key: 'myCompanies',\n reducer: myCompaniesReducer,\n });\n useInjectSaga({\n key: 'myCompaniesSearchSaga',\n saga,\n });\n useInjectSaga({\n key: 'myCompaniesFiltersCardsSaga',\n saga: filtersCardsSaga,\n });\n};\n\nexport default useInjectMyCompanies;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '../../../redux/company/notes';\n\nconst useInjectNotes = () => {\n useInjectReducer({ key: 'notes', reducer });\n useInjectSaga({ key: 'notes', saga });\n};\n\nexport default useInjectNotes;\n","import { useInjectSaga } from 'redux-injectors';\nimport { saga } from '../../../redux/company/date-presented';\n\nconst useInjectDatePresented = () => {\n useInjectSaga({ key: 'datePresented', saga });\n};\n\nexport default useInjectDatePresented;\n","import { createAction } from '@reduxjs/toolkit';\nimport { ScoreGrowth } from '@optx/models/Company';\nimport * as types from './types';\nimport { ChartSuccess } from '../../../models/charts/data';\n\nexport const fetchScoreGrowth = createAction(\n types.FETCH_SCORE_GROWTH,\n (data: ScoreGrowth, callback: ChartSuccess) => ({\n payload: data,\n meta: callback,\n })\n);\n","export const FETCH_SCORE_GROWTH = 'FETCH_SCORE_GROWTH';\n","import { call, takeLatest, select } from 'redux-saga/effects';\nimport { ChartData, ChartSuccess } from '@optx/models/charts/data';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { ScoreGrowth } from '@optx/models/Company';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { AxiosResponse } from 'axios';\nimport * as actions from './actions';\nimport { CompanyService } from '../../../services/api';\nimport NotificationService from '../../../services/NotificationService';\n\nexport function* fetchCompanyScoreGrowthSaga(\n action: PayloadAction<ScoreGrowth, any, ChartSuccess>\n) {\n const { meta: callback } = action;\n\n const defaultOptxScore: string = yield select(userSelectors.getDefaultScore);\n\n try {\n const res: AxiosResponse<ChartData> = yield call(\n CompanyService.getScoreGrowth,\n action.payload,\n defaultOptxScore\n );\n\n if (res.data) {\n callback && callback(res.data);\n } else {\n const errorMessage = 'Failed to fetch Score Growth!';\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Failed to fetch Score Growth!';\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companyScoreGrowthSaga() {\n yield takeLatest(actions.fetchScoreGrowth, fetchCompanyScoreGrowthSaga);\n}\n","import { useInjectSaga } from 'redux-injectors';\nimport { saga } from '../../../redux/company/score-growth';\n\nconst useInjectScoreGrowth = () => {\n useInjectSaga({\n key: 'scoreGrowth',\n saga,\n });\n};\n\nexport default useInjectScoreGrowth;\n","import { useInjectSaga } from 'redux-injectors';\nimport { saga } from '@redux/company/employee-growth';\n\nconst useInjectEmployeeGrowth = () => {\n useInjectSaga({\n key: 'employeeGrowth',\n saga,\n });\n};\n\nexport default useInjectEmployeeGrowth;\n","import { useInjectSaga } from 'redux-injectors';\nimport { saga } from '../../../redux/company/user-values';\n\nconst useInjectCompanyUserValues = () => {\n useInjectSaga({ key: 'companyUserValues', saga });\n};\n\nexport default useInjectCompanyUserValues;\n","import { useInjectSaga } from 'redux-injectors';\n// redux\nimport { saga } from '../../../redux/geo-range';\n\nconst useGeoRange = () => {\n useInjectSaga({\n key: 'geoRangeSaga',\n saga,\n });\n};\n\nexport default useGeoRange;\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { push } from 'react-router-redux';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { CrossTabsLoginPayload, LoginPayload } from './interface';\n// constants\nimport appRoutes from '@constants/routes';\n// utils\nimport { sendToken } from '@optx/utils/window';\nimport { getCookie } from './utils';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { AuthService } from '@services/api';\n// redux\nimport { actions as loaderActions } from '@redux/global-loader';\nimport * as actions from './actions';\n// storage\nimport { setAxiosAuthorizationHeaders } from '../../modules/axios';\nimport { JWTStorage, MenuStorage } from '@optx/storage/localStorage';\nimport { checkPluginVersion } from '@optx/storage/localStorage/pluginStorage';\n\nexport function* loginSaga(action: PayloadAction<LoginPayload, any, SuccessErrorCallback>) {\n yield put(loaderActions.startConnecting());\n const callback = action.meta;\n\n // check usage in getJWT function\n const isPluginVersion2_3 = checkPluginVersion(2.3);\n\n try {\n const res: AxiosResponse<any> = yield call(AuthService.login, {\n headers: action.payload.headers,\n });\n\n if (res.data && res.data.data && res.data.data.jwt) {\n const token = res.data.data.jwt;\n\n if (!isPluginVersion2_3) {\n document.cookie = `optx_token=${token}; SameSite=None; Secure;`;\n }\n\n yield call(setAxiosAuthorizationHeaders, token);\n\n yield call(JWTStorage.setJWT, token);\n console.log('save 3: ', token);\n\n sendToken('save-data', token);\n\n yield call(MenuStorage.setMenuCollapsed, false);\n\n if (action.payload.isChromeExtension) {\n yield put(push(appRoutes.chromeExtension));\n } else {\n yield put(push(appRoutes.home));\n }\n\n yield put(loaderActions.endConnecting());\n } else {\n yield put(loaderActions.endConnecting());\n NotificationService.error('Login failure!');\n }\n } catch (e: any) {\n yield put(loaderActions.endConnecting());\n\n if (e.response) {\n // handle error when receiving response from server.\n const { errors } = e.response.data;\n const errorMessage = Object.keys(errors)\n .map(error => errors[error])\n .join('\\n');\n yield call(callback, null, errorMessage);\n } else {\n // handle server error (500)\n yield call(callback, null, e.message);\n }\n }\n}\n\nexport function* loginCrossTabsSaga(\n action: PayloadAction<CrossTabsLoginPayload, any, SuccessErrorCallback>\n) {\n yield put(loaderActions.startConnecting());\n\n const isChromeExtension = action.payload.isChromeExtension;\n const token = getCookie('optx_token') || action.payload.token;\n\n if (token) {\n yield call(setAxiosAuthorizationHeaders, token);\n yield call(JWTStorage.setJWT, token);\n yield put(push(isChromeExtension ? appRoutes.chromeExtension : appRoutes.home));\n }\n\n yield put(loaderActions.endConnecting());\n}\n\nexport default function* profileSaga() {\n yield takeLatest(actions.userLogin, loginSaga);\n yield takeLatest(actions.userLoginCrossTabs, loginCrossTabsSaga);\n}\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport AuthReducer, { saga as AuthSaga } from '@redux/auth';\nimport saga from '@redux/login/saga';\n\nconst useInjectLogin = () => {\n useInjectReducer({\n key: 'auth',\n reducer: AuthReducer,\n });\n useInjectSaga({\n key: 'auth',\n saga: AuthSaga,\n });\n useInjectSaga({\n key: 'login',\n saga,\n });\n};\n\nexport default useInjectLogin;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '../../../redux/favorites';\n\nconst useInjectFavorites = () => {\n useInjectReducer({\n key: 'favorites',\n reducer,\n });\n useInjectSaga({ key: 'favorites', saga });\n};\n\nexport default useInjectFavorites;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '@redux/company/lists';\n\nconst useInjectCompanyLists = () => {\n useInjectReducer({\n key: 'companyTabLists',\n reducer,\n });\n useInjectSaga({\n key: 'companyTabLists',\n saga,\n });\n};\n\nexport default useInjectCompanyLists;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '../../../redux/company/in-business';\n\nconst useInjectCompanyInBusinessEvaluation = () => {\n useInjectReducer({\n key: 'companyInBusinessEvaluation',\n reducer,\n });\n useInjectSaga({\n key: 'companyInBusinessEvaluationSaga',\n saga,\n });\n};\n\nexport default useInjectCompanyInBusinessEvaluation;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '@redux/company/active';\n\nconst useInjectCompanyActive = () => {\n useInjectReducer({\n key: 'companyActive',\n reducer,\n });\n useInjectSaga({\n key: 'companyActive',\n saga,\n });\n};\n\nexport default useInjectCompanyActive;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '@redux/scheduled-touches';\nimport featureName from '@optx/redux/scheduled-touches/featureName';\n\nconst useInjectScheduledTouches = () => {\n useInjectReducer({\n key: featureName,\n reducer,\n });\n useInjectSaga({\n key: featureName,\n saga,\n });\n};\n\nexport default useInjectScheduledTouches;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '@redux/company/addon-management';\n\nconst useInjectCompanyAddonManagement = () => {\n useInjectReducer({\n key: 'companyAddonManagement',\n reducer,\n });\n useInjectSaga({\n key: 'companyAddonManagement',\n saga,\n });\n};\n\nexport default useInjectCompanyAddonManagement;\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, takeLatest, put, select } from 'redux-saga/effects';\n// models\n// services\nimport NotificationService from '@services/NotificationService';\nimport { UserService } from '@services/api';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { OptxScoreRationale } from './interfaces';\n// redux\nimport * as actions from './actions';\n\nexport function* sendOptxScoreRationaleSaga(action: PayloadAction<OptxScoreRationale>) {\n const {\n companyId,\n rationale,\n optxScoreVerified,\n optxScoreRationaleReason,\n optxScoreRationaleReasonType,\n scoreType,\n callback,\n } = action.payload;\n const defaultScore: string = yield select(userSelectors.getDefaultScore);\n\n let rationaleReasonLower = '';\n let rationaleReasonUpper = '';\n const rationaleTransformed = !rationale || rationale === DEFAULT_EMPTY_VALUE ? '' : rationale;\n\n if (optxScoreRationaleReasonType === 'lower') {\n rationaleReasonLower = optxScoreRationaleReason || '';\n rationaleReasonUpper = '';\n } else if (optxScoreRationaleReasonType === 'upper') {\n rationaleReasonLower = '';\n rationaleReasonUpper = optxScoreRationaleReason || '';\n }\n\n try {\n yield call(\n UserService.sendOptxScoreRationale,\n companyId,\n rationaleTransformed,\n optxScoreVerified,\n rationaleReasonLower,\n rationaleReasonUpper,\n scoreType\n );\n\n if (scoreType === 'score_v3') {\n yield put(\n actions.sendNewOptxScoreRationaleSuccess({\n companyId,\n rationale,\n defaultScore,\n optxScoreVerified,\n optxScoreRationaleReason,\n optxScoreRationaleReasonType,\n scoreType,\n })\n );\n } else {\n yield put(\n actions.sendOptxScoreRationaleSuccess({\n companyId,\n rationale,\n defaultScore,\n optxScoreVerified,\n optxScoreRationaleReason,\n optxScoreRationaleReasonType,\n scoreType,\n })\n );\n }\n\n const successMessage = 'Company rationale updated successfully';\n NotificationService.success(successMessage);\n callback && callback();\n } catch (e) {\n const errorMsg = 'Failed to updated company rationale';\n NotificationService.error(errorMsg);\n }\n}\n\nexport default function* userSaga() {\n yield takeLatest(actions.sendOptxScoreRationale, sendOptxScoreRationaleSaga);\n yield takeLatest(actions.sendNewOptxScoreRationale, sendOptxScoreRationaleSaga);\n}\n","import { useInjectSaga } from 'redux-injectors';\nimport { saga } from '../../../redux/company/score';\n\nconst useInjectScore = () => {\n useInjectSaga({\n key: 'score',\n saga,\n });\n};\n\nexport default useInjectScore;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '@features/add-research-rationale/state';\n\nconst useInjectAddRationale = () => {\n useInjectReducer({\n key: 'researchRationale',\n reducer,\n });\n useInjectSaga({ key: 'researchRationale', saga });\n};\n\nexport default useInjectAddRationale;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport { reducer, saga } from '@redux/company/extension-profile';\n\nconst useInjectExtensionProfile = () => {\n useInjectReducer({\n key: 'extension',\n reducer,\n });\n useInjectSaga({\n key: 'extension',\n saga,\n });\n};\n\nexport default useInjectExtensionProfile;\n","import { combineReducers } from 'redux';\n// models\nimport { SourcingOutReachState } from './interfaces';\n// reducers\nimport filterReducer from './filters';\n\nconst reducer = combineReducers<SourcingOutReachState>({\n filter: filterReducer,\n});\n\nexport default reducer;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport searchReducer from '@redux/company-outreach/reducer';\nimport { saga } from '@redux/company-outreach/search';\n\nconst useInjectCompanyListSourcingOutReach = () => {\n useInjectReducer({\n key: 'companyOutSourcing',\n reducer: searchReducer,\n });\n useInjectSaga({\n key: 'companiesOutReachSearchSaga',\n saga,\n });\n};\n\nexport default useInjectCompanyListSourcingOutReach;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from '../../../redux/company/relationship-management';\n\nconst useInjectCompanyRelationshipManagement = () => {\n useInjectReducer({\n key: 'companyRelationshipManagement',\n reducer,\n });\n useInjectSaga({\n key: 'companyRelationshipManagement',\n saga,\n });\n};\n\nexport default useInjectCompanyRelationshipManagement;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport uiReducer from '../../../redux/ui';\nimport { saga } from '@redux/ui/modals/add-document-upload-touch';\n\nconst useInjectDocumentUploadModal = () => {\n useInjectReducer({\n key: 'ui',\n reducer: uiReducer,\n });\n useInjectSaga({\n key: 'documentUploadTouchSaga',\n saga,\n });\n};\n\nexport default useInjectDocumentUploadModal;\n","import { useInjectSaga } from 'redux-injectors';\nimport { saga } from '@optx/features/combine-search/state';\n\nconst useInjectCombineSearch = () => {\n useInjectSaga({ key: 'combineSearch', saga });\n};\n\nexport default useInjectCombineSearch;\n","import numeral from 'numeral';\nimport moment from 'moment';\n// models\nimport Format from '@optx/models/Format';\nimport { Addon } from '@optx/models/Company';\n// constants\nimport globalConfig from '@optx/constants/config';\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\nimport { SHORT_MONTH_YEAR_DATE_FORMAT } from '@optx/constants/format/date';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n\nexport const formatMoney = (value: number | null | undefined | string, canBeNegative?: boolean) => {\n if (!value && value !== 0) return value;\n\n return numeral(typeof value === 'string' ? value.toUpperCase() : value)\n .format(canBeNegative ? NUMBER_FORMAT : `$${NUMBER_FORMAT}`)\n .toUpperCase();\n};\n\n/**\n * Format a number to millions as a string.\n * @param value any number or string.\n * @returns the value as a formatted string.\n */\nexport const formatValueToMillions = (value: string | number | null | undefined) => {\n const formattedValue = numeral(value).value();\n\n if (formattedValue) {\n return (formattedValue / 1000000).toString();\n }\n\n return numeral(value).format(NUMBER_FORMAT);\n};\n\nexport type DateFormat = 'monthDayYear' | 'shortDate';\n\nexport const formatDate = (date: moment.MomentInput, format?: DateFormat) => {\n if (!date) return date;\n\n if (format) {\n switch (format) {\n case 'monthDayYear':\n return moment(date).format(globalConfig.grid_date.DATE_FORMAT);\n case 'shortDate':\n return moment(date).format(globalConfig.short_date.DATE_FORMAT);\n default:\n return moment(date).format(SHORT_MONTH_YEAR_DATE_FORMAT);\n }\n }\n\n return moment(date).format(SHORT_MONTH_YEAR_DATE_FORMAT);\n};\n\n/**\n * Formatting based on numeral JS. Value will be modified by library\n * @param value value to be formatted.\n * @param decimalCount decimal count. By default there are no decimals and can be set to maximum three decimals.\n * @returns formatted string if value is valid, value itself otherwise.\n */\nexport const formatPercent = (\n value: number | null | undefined,\n decimalCount: 0 | 1 | 2 | 3 = 0\n) => {\n if (!value && value !== 0) return value;\n\n let decimals = '';\n\n for (let index = 0; index <= decimalCount; index++) {\n if (decimals === '') {\n decimals += '.';\n }\n\n decimals += '0';\n }\n\n return numeral(value).format(`0${decimals}%`);\n};\n\nexport const formatQuarter = (date: moment.MomentInput) => {\n if (!date) return date;\n\n const quarterCount = moment(date).quarter();\n const getYear = moment(date).year();\n\n return `Q${quarterCount} ${getYear}`;\n};\n\n/**\n * Simple percent formatter that just adds percent sign after value.\n * @param value value to be formatted.\n * @param absolute value should be absolute.\n * @returns formatted string if value is valid, value itself otherwise.\n */\nexport const formatPercentDefault = (\n value: number | string | null | undefined,\n absolute = false\n) => {\n if (typeof value !== 'number' || (!value && value !== 0)) return value;\n\n if (absolute) {\n return `${Math.abs(value)}%`;\n }\n\n return `${value}%`;\n};\n\nconst format = (value: any, format?: Format) => {\n switch (format) {\n case 'percent':\n return formatPercentDefault(value, true);\n\n default:\n return value;\n }\n};\n\nexport interface FormatDateIntervalOptions {\n prefix?: string;\n dateFormat?: string;\n dateSeparator?: string;\n labelSeparator?: string;\n}\n\nexport const defaultFormatDateIntervalOptions: FormatDateIntervalOptions = {\n prefix: '',\n dateSeparator: ' - ',\n labelSeparator: ': ',\n dateFormat: globalConfig.short_date.DATE_FORMAT,\n};\n\nexport function formatDateInterval(\n start: string | Date,\n end: string | Date,\n options: FormatDateIntervalOptions = {}\n) {\n const finalOptions = { ...defaultFormatDateIntervalOptions, ...options };\n const formattedStart = moment(start).format(globalConfig.short_date.DATE_FORMAT);\n const formattedEnd = moment(end).format(globalConfig.short_date.DATE_FORMAT);\n const prefix = finalOptions.prefix ? `${finalOptions.prefix}${finalOptions.labelSeparator}` : '';\n\n return `${prefix}${formattedStart}${finalOptions.dateSeparator}${formattedEnd}`;\n}\n\n/**\n * Convert a list of strings to comma separated values.\n * @param list listof values.\n * @param defaultValue default value. By default '-'.\n */\nexport const stringListToView = (list: Array<string> | null = null, defaultValue: string = '-') => {\n if (!list || !Array.isArray(list)) {\n return defaultValue;\n }\n\n return list.join(', ');\n};\n\n/**\n * Format addon object to a string sorted alphabetically.\n * @param addon addon to be formatted.\n * @returns formatted string of addons separated by comma and sorted alphabetically.\n */\nexport const formatAddon = (addon: Addon | null) => {\n if (!addon || !Object.keys(addon).length) {\n return DEFAULT_EMPTY_VALUE;\n }\n\n return Object.keys(addon).join('; ');\n};\n\nexport default format;\n","const featureName = 'request';\n\nexport default featureName;\n","import createCachedSelector from 're-reselect';\nimport featureName from '../../featureName';\nimport { RequestState } from '../interfaces';\nimport * as localErrorSelectors from './error';\nimport * as localLoadingSelectors from './loading';\n\nconst selectRequestState = (state: any) => state[featureName] as RequestState;\n\n// error\nconst selectErrorState = (state: any) => selectRequestState(state).error;\n\nconst selectError = createCachedSelector(\n selectErrorState,\n (state: any, action: string) => action,\n localErrorSelectors.selectError\n)((state: any, action: string) => action);\n\nexport const createErrorSelector = (action: string) => (state: any) => selectError(state, action);\n\n// loading\nconst selectLoadingState = (state: any) => selectRequestState(state).loading;\n\nconst isLoading = createCachedSelector(\n selectLoadingState,\n (state: any, actions: Array<string>) => actions,\n localLoadingSelectors.selectIsLoading\n)((state: any, actions: Array<string>) => actions.join('_'));\n\nexport const createLoadingSelector = (actions: Array<string>) => (state: any) =>\n isLoading(state, actions);\n","import { Dictionary } from 'lodash';\n\nexport const selectError = (state: Dictionary<string | undefined>, action: string) => state[action];\n","import { Dictionary } from 'lodash';\n\nexport const selectIsLoading = (state: Dictionary<boolean>, actions: Array<string>) =>\n actions.some(action => state[action]);\n","import { createFeatureActionType } from '@utils/feature';\nimport featureName from '../featureName';\n\nexport const resetError = createFeatureActionType(featureName, 'RESET_ERROR');\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\n\nexport const resetError = createAction<string>(types.resetError);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\nimport * as typeSuffix from '../../constants';\nimport * as actions from '../actions';\n\nconst initialState: Dictionary<string> = {};\n\nconst regexString = `(.*)_(${typeSuffix.REQUEST}|${typeSuffix.FAILURE})`;\nconst actionTypeRegex = new RegExp(regexString);\n\nconst fetchReducer: CaseReducer<Dictionary<string>> = (draftState, action) => {\n const { type, payload } = action as PayloadAction<string>;\n const matches = actionTypeRegex.exec(type);\n\n // not a *_REQUEST / *_FAILURE actions, so we ignore them\n if (!matches) return;\n\n const [, requestName, requestState] = matches;\n\n // Store errorMessage\n // e.g. stores errorMessage when receiving GET_TODOS_FAILURE\n // else clear errorMessage when receiving GET_TODOS_REQUEST\n draftState[requestName] = requestState === typeSuffix.FAILURE ? payload : '';\n};\n\nconst resetErrorReducer: CaseReducer<Dictionary<string>, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState[action.payload] = '';\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder.addCase(actions.resetError, resetErrorReducer).addDefaultCase(fetchReducer)\n);\n\nexport default reducer;\n","import { createReducer, CaseReducer } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\nimport * as typeSuffix from '../../constants';\n\nconst initialState: Dictionary<boolean> = {};\n\nconst regexString = `(.*)_(${typeSuffix.REQUEST}|${typeSuffix.SUCCESS}|${typeSuffix.FAILURE})`;\nconst actionTypeRegex = new RegExp(regexString);\n\nconst fetchReducer: CaseReducer<Dictionary<boolean>> = (draftState, action) => {\n const { type } = action;\n const matches = actionTypeRegex.exec(type);\n\n // not a *_REQUEST / *_SUCCESS / *_FAILURE actions, so we ignore them\n if (!matches) return;\n\n const [, requestName, requestState] = matches;\n\n // Store whether a request is happening at the moment or not\n // e.g. will be true when receiving GET_TODOS_REQUEST\n // and false when receiving GET_TODOS_SUCCESS / GET_TODOS_FAILURE\n draftState[requestName] = requestState === typeSuffix.REQUEST;\n};\n\nconst reducer = createReducer(initialState, builder => builder.addDefaultCase(fetchReducer));\n\nexport default reducer;\n","import { combineReducers } from 'redux';\nimport error from './error';\nimport loading from './loading';\nimport { RequestState } from '../interfaces';\n\nexport default combineReducers<RequestState>({\n error,\n loading,\n});\n","import { useInjectReducer } from 'redux-injectors';\nimport featureName from './featureName';\nimport reducer from './state';\n\nexport const useInject = () => {\n useInjectReducer({\n key: featureName,\n reducer,\n });\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { OpportunityPresentation, UpdateOpportunity } from '@optx/models/Company';\nimport * as types from './types';\nimport { AddYearPayload } from './interfaces';\n\n// fetch opportunity presentation actions\nexport const fetchOpportunityPresentation = createAction<number>(\n types.FETCH_OPPORTUNITY_PRESENTATION\n);\nexport const fetchOpportunityPresentationSuccess = createAction<OpportunityPresentation | null>(\n types.FETCH_OPPORTUNITY_PRESENTATION_SUCCESS\n);\nexport const fetchOpportunityPresentationFail = createAction<string>(\n types.FETCH_OPPORTUNITY_PRESENTATION_FAIL\n);\n\nexport const setAddYearsOpenModal = createAction(types.SET_ADD_YEARS_OPEN_MODAL);\n\nexport const editAddYearsOpenModal = createAction<{ year: number }>(\n types.EDIT_ADD_YEARS_OPEN_MODAL\n);\n\n// update opportunity presentation actions\nexport const updateOpportunityPresentation = createAction(\n types.UPDATE_OPPORTUNITY_PRESENTATION,\n (dealData: UpdateOpportunity, isFromAuditField: boolean = false) => ({\n payload: dealData,\n meta: isFromAuditField,\n })\n);\nexport const updateOpportunityPresentationSuccess = createAction<OpportunityPresentation>(\n types.UPDATE_OPPORTUNITY_PRESENTATION_SUCCESS\n);\nexport const updateOpportunityPresentationFail = createAction<string>(\n types.UPDATE_OPPORTUNITY_PRESENTATION_FAIL\n);\n\nexport const addFinancialYear = createAction<{\n value: AddYearPayload;\n companyId: number;\n}>(types.ADD_FINANCIAL_YEAR);\nexport const addFinancialYearSuccess = createAction<OpportunityPresentation>(\n types.ADD_FINANCIAL_YEAR_SUCCESS\n);\nexport const addFinancialYearFail = createAction<string>(types.ADD_FINANCIAL_YEAR_FAIL);\n\nexport const deleteFinancialYear = createAction<{ companyId: number; year: number }>(\n types.DELETE_FINANCIAL_YEAR\n);\n\nexport const deleteFinancialYearSuccess = createAction<OpportunityPresentation>(\n types.DELETE_FINANCIAL_YEAR_SUCCESS\n);\nexport const deleteFinancialYearFail = createAction<string>(types.DELETE_FINANCIAL_YEAR_FAIL);\n\nexport const editFinancialYear = createAction<{ value: AddYearPayload; companyId: number }>(\n types.EDIT_FINANCIAL_YEAR\n);\nexport const editFinancialYearSuccess = createAction<OpportunityPresentation>(\n types.EDIT_FINANCIAL_YEAR_SUCCESS\n);\nexport const editFinancialYearFail = createAction<string>(types.EDIT_FINANCIAL_YEAR_FAIL);\n","// fetch opportunity presentation\nexport const FETCH_OPPORTUNITY_PRESENTATION =\n 'company/deal-presentation/FETCH_OPPORTUNITY_PRESENTATION';\nexport const FETCH_OPPORTUNITY_PRESENTATION_SUCCESS =\n 'company/deal-presentation/FETCH_OPPORTUNITY_PRESENTATION_SUCCESS';\nexport const FETCH_OPPORTUNITY_PRESENTATION_FAIL =\n 'company/deal-presentation/FETCH_OPPORTUNITY_PRESENTATION_FAIL';\n// update opportunity presentation\nexport const UPDATE_OPPORTUNITY_PRESENTATION =\n 'company/deal-presentation/UPDATE_OPPORTUNITY_PRESENTATION';\nexport const UPDATE_OPPORTUNITY_PRESENTATION_SUCCESS =\n 'company/deal-presentation/UPDATE_OPPORTUNITY_PRESENTATION_SUCCESS';\nexport const UPDATE_OPPORTUNITY_PRESENTATION_FAIL =\n 'company/deal-presentation/UPDATE_OPPORTUNITY_PRESENTATION_FAIL';\n\nexport const SET_ADD_YEARS_OPEN_MODAL = 'company/deal-presentation/SET_ADD_YEARS_OPEN_MODAL';\n\nexport const EDIT_ADD_YEARS_OPEN_MODAL = 'company/deal-presentation/EDIT_ADD_YEARS_OPEN_MODAL';\n\nexport const ADD_FINANCIAL_YEAR = 'company/deal-presentation/ADD_FINANCIAL_YEAR';\nexport const ADD_FINANCIAL_YEAR_SUCCESS = 'company/deal-presentation/ADD_FINANCIAL_YEAR_SUCCESS';\nexport const ADD_FINANCIAL_YEAR_FAIL = 'company/deal-presentation/ADD_FINANCIAL_YEAR_FAIL';\n\nexport const DELETE_FINANCIAL_YEAR = 'company/deal-presentation/DELETE_FINANCIAL_YEAR';\nexport const DELETE_FINANCIAL_YEAR_SUCCESS =\n 'company/deal-presentation/DELETE_FINANCIAL_YEAR_SUCCESS';\nexport const DELETE_FINANCIAL_YEAR_FAIL = 'company/deal-presentation/DELETE_FINANCIAL_YEAR_FAIL';\n\nexport const EDIT_FINANCIAL_YEAR = 'company/deal-presentation/EDIT_FINANCIAL_YEAR';\nexport const EDIT_FINANCIAL_YEAR_SUCCESS = 'company/deal-presentation/EDIT_FINANCIAL_YEAR_SUCCESS';\nexport const EDIT_FINANCIAL_YEAR_FAIL = 'company/deal-presentation/EDIT_FINANCIAL_YEAR_FAIL';\n","import { createSelector } from 'reselect';\n// utils\nimport { makeUnique } from '@optx/utils/helpers';\nimport { addToUniqueYears } from '@optx/utils/dealPresentation';\n// models\nimport { AppState } from '@optx/redux/interfaces';\nimport { AllFinancialYearsType } from '@optx/models/Financial';\nimport { FinancialFieldRangeValue } from '@optx/models/Company';\n// redux\nimport { selectors as fetchSelectors } from '@redux/feature/fetch';\n\n// specific selectors\nconst selectOpportunityPresentationState = (state: AppState) => state.opportunityPresentation;\n\nexport const isLoading = createSelector(\n selectOpportunityPresentationState,\n fetchSelectors.isLoadingSelector\n);\n\nexport const isAddYearsOpenModal = createSelector(\n selectOpportunityPresentationState,\n state => state.isAddYearsOpenModal\n);\n\nexport const getOpportunityPresentation = createSelector(\n selectOpportunityPresentationState,\n state => state.data\n);\n\nexport const canFetch = createSelector(\n selectOpportunityPresentationState,\n state => !state.loading && !state.fetchedAt\n);\n\nexport const getDealPreparationValue = createSelector(selectOpportunityPresentationState, state => {\n if (state.data?.deal_preparation) {\n const {\n asking_amount: askingAmount,\n deal_type: dealType,\n banker,\n banker_name: bankerName,\n next_steps: nextSteps,\n transaction_notes: transactionNotes,\n next_steps_opinion: nextStepsOpinion,\n } = state.data.deal_preparation;\n\n return {\n asking_amount: askingAmount,\n deal_type: dealType,\n banker,\n transaction_notes: transactionNotes,\n banker_name: bankerName,\n next_steps: nextSteps,\n next_steps_opinion: nextStepsOpinion,\n };\n }\n\n return {};\n});\n\n// temporary selectors as we have filters in 2.8 version\nexport const getDealTypeOptions = createSelector(selectOpportunityPresentationState, state => {\n if (state.data?.deal_preparation?.deal_type) {\n return state.data.deal_preparation.deal_type.data.map(item => ({\n value: item.value,\n label: item.label,\n }));\n }\n\n return [\n { label: 'Majority', value: 'Majority' },\n {\n label: 'Minority',\n value: 'Minority',\n },\n { label: 'Flexible', value: 'Flexible' },\n ];\n});\n\nexport const getFinancialsData = createSelector(selectOpportunityPresentationState, state => {\n return state.data?.financial;\n});\n\nexport const getCustomerKpisData = createSelector(selectOpportunityPresentationState, state => {\n return state.data?.customer_kpis;\n});\n\nexport const getFundingOwnershipData = createSelector(selectOpportunityPresentationState, state => {\n return state.data?.funding;\n});\n\nexport const getTechnologyData = createSelector(selectOpportunityPresentationState, state => {\n return state.data?.technology;\n});\n\nexport const getCurrentEditableYear = createSelector(selectOpportunityPresentationState, state => {\n return state.editableYear;\n});\n\nexport const getAllFinancialYears = createSelector(getFinancialsData, financial => {\n // first element will has lengf elements\n const data: AllFinancialYearsType[] = [];\n\n // Process received data arrays and add them to the initial data\n financial?.revenue?.forEach(item =>\n addToUniqueYears(data, item.year as number, item.estimated as boolean)\n );\n financial?.annual_recurring_revenue?.forEach(item =>\n addToUniqueYears(data, item.year as number, item.estimated as boolean)\n );\n financial?.ebitda?.forEach(item =>\n addToUniqueYears(data, item.year as number, item.estimated as boolean)\n );\n financial?.gm?.forEach(item =>\n addToUniqueYears(data, item.year as number, item.estimated as boolean)\n );\n\n // Get the current year\n const currentYear = new Date().getFullYear();\n\n // Check if there is no data for the current year; if not, add the default current year\n if (\n !financial?.revenue?.some(item => item.year === currentYear) &&\n !financial?.annual_recurring_revenue?.some(item => item.year === currentYear) &&\n !financial?.ebitda?.some(item => item.year === currentYear) &&\n !financial?.gm?.some(item => item.year === currentYear)\n ) {\n addToUniqueYears(data, currentYear, true); // Current year with estimated set to true\n }\n\n // Check if there is no data for the previous year; if not, add the default previous year\n if (\n !financial?.revenue?.some(item => item.year === currentYear - 1) &&\n !financial?.annual_recurring_revenue?.some(item => item.year === currentYear - 1) &&\n !financial?.ebitda?.some(item => item.year === currentYear - 1) &&\n !financial?.gm?.some(item => item.year === currentYear - 1)\n ) {\n addToUniqueYears(data, currentYear - 1, false); // Previous year with estimated set to false\n }\n\n // Check if there is no data for the previous -1 year; if not, add the default previous -1 year\n if (\n !financial?.revenue?.some(item => item.year === currentYear - 2) &&\n !financial?.annual_recurring_revenue?.some(item => item.year === currentYear - 2) &&\n !financial?.ebitda?.some(item => item.year === currentYear - 2) &&\n !financial?.gm?.some(item => item.year === currentYear - 2)\n ) {\n addToUniqueYears(data, currentYear - 2, false); // Previous year with estimated set to false\n }\n\n // Check if there is no data for the future year; if not, add the default future year\n if (\n !financial?.revenue?.some(item => item.year === currentYear + 1) &&\n !financial?.annual_recurring_revenue?.some(item => item.year === currentYear + 1) &&\n !financial?.ebitda?.some(item => item.year === currentYear + 1) &&\n !financial?.gm?.some(item => item.year === currentYear + 1)\n ) {\n addToUniqueYears(data, currentYear + 1, true); // Future year with estimated set to true\n }\n\n return makeUnique(data, ['year', 'estimated']).sort((a: any, b: any) => b.year - a.year);\n});\n\nexport const getCurrentFinancialYearInfo = createSelector(\n getFinancialsData,\n getAllFinancialYears,\n getCurrentEditableYear,\n (state, financialYears, currentEditableYear) => {\n const initialData: {\n year: number | string | null;\n estimated: boolean | null;\n arr: number | string | FinancialFieldRangeValue;\n revenue: number | string | FinancialFieldRangeValue;\n ebitda: number | string | FinancialFieldRangeValue;\n gm: number | string | FinancialFieldRangeValue;\n } = {\n year: currentEditableYear || new Date().getFullYear(),\n estimated: false,\n arr: '',\n revenue: '',\n ebitda: '',\n gm: '',\n };\n\n const currentRevenueValue = state?.revenue?.find(\n revenue => revenue.year === currentEditableYear\n )?.value;\n const currentEbitdaValue = state?.ebitda?.find(\n ebitda => ebitda.year === currentEditableYear\n )?.value;\n const currentGmValue = state?.gm?.find(gm => gm.year === currentEditableYear)?.value;\n const currentArrValue = state?.annual_recurring_revenue?.find(\n arr => arr.year === currentEditableYear\n )?.value;\n const currentEstimatedYear = financialYears?.find(\n (financialYear: { year: number | null }) => financialYear.year === currentEditableYear\n )?.estimated;\n\n if (currentRevenueValue) {\n initialData.revenue = currentRevenueValue;\n }\n\n if (currentEstimatedYear !== undefined) {\n initialData.estimated = currentEstimatedYear;\n }\n\n if (currentGmValue) {\n initialData.gm = currentGmValue;\n }\n\n if (currentArrValue) {\n initialData.arr = currentArrValue;\n }\n\n if (currentEbitdaValue) {\n initialData.ebitda = currentEbitdaValue;\n }\n\n return initialData;\n }\n);\n\nexport const getData = createSelector(getFinancialsData, financial => {\n type InitialData = { [x: string]: number | string | FinancialFieldRangeValue };\n\n const initialData: {\n arr: InitialData;\n revenue: InitialData;\n ebitda: InitialData;\n gm: InitialData;\n } = {\n arr: {},\n revenue: {},\n ebitda: {},\n gm: {},\n };\n\n financial?.revenue?.map(item => {\n initialData.revenue = {\n ...initialData.revenue,\n [`${item.year}_${item.estimated ? 'estimated' : 'actual'}`]: item.value || 0,\n [`${item.year}_source_info`]: item.source_info || '',\n [`${item.year}_date`]: item.date || '',\n };\n\n return true;\n });\n\n financial?.revenue_growth?.map(item => {\n initialData.revenue = {\n ...initialData.revenue,\n [`${item.year}_${item.estimated ? 'estimated' : 'actual'}_growth`]: item.value || 0,\n };\n\n return true;\n });\n\n financial?.ebitda?.map(item => {\n initialData.ebitda = {\n ...initialData.ebitda,\n [`${item.year}_${item.estimated ? 'estimated' : 'actual'}`]: item.value || 0,\n [`${item.year}_source_info`]: item.source_info || '',\n [`${item.year}_date`]: item.date || '',\n };\n\n return true;\n });\n\n financial?.ebitda_margin?.map(item => {\n initialData.ebitda = {\n ...initialData.ebitda,\n [`${item.year}_${item.estimated ? 'estimated' : 'actual'}_growth`]: item.value || 0,\n };\n\n return true;\n });\n\n financial?.annual_recurring_revenue?.map(item => {\n initialData.arr = {\n ...initialData.arr,\n [`${item.year}_${item.estimated ? 'estimated' : 'actual'}`]: item.value || 0,\n [`${item.year}_source_info`]: item.source_info || '',\n [`${item.year}_date`]: item.date || '',\n };\n\n return true;\n });\n\n financial?.annual_recurring_revenue_growth?.map(item => {\n initialData.arr = {\n ...initialData.arr,\n [`${item.year}_${item.estimated ? 'estimated' : 'actual'}_growth`]: item.value || 0,\n };\n\n return true;\n });\n\n financial?.gm?.map(item => {\n initialData.gm = {\n ...initialData.gm,\n [`${item.year}_${item.estimated ? 'estimated' : 'actual'}`]: item.value || 0,\n [`${item.year}_source_info`]: item.source_info || '',\n [`${item.year}_date`]: item.date || '',\n };\n\n return true;\n });\n\n const result = [\n {\n key: '1',\n name: 'ARR',\n ...initialData.arr,\n },\n {\n key: '2',\n name: 'Revenue',\n ...initialData.revenue,\n },\n {\n key: '3',\n name: 'GM %',\n ...initialData.gm,\n },\n {\n key: '4',\n name: 'EBITDA',\n ...initialData.ebitda,\n },\n ];\n\n return result;\n});\n","import { takeLatest, call, put, select } from 'redux-saga/effects';\nimport queryString from 'query-string';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { orderBy } from 'lodash';\n// models\nimport { AxiosResponse } from 'axios';\nimport { SelectOption } from '@optx/models/Option';\nimport {\n OpportunityPresentation,\n FinancialFieldType,\n UpdateOpportunity,\n} from '@optx/models/Company';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { APIBoolean } from '@optx/models/api/generic';\nimport { AddYearPayload, AddYearSuccessPayload } from './interfaces';\n// services\nimport { CompanyService } from '../../../services/api';\nimport NotificationService from '../../../services/NotificationService';\n// utils\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport {\n actions as auditActions,\n selectors as auditSelectors,\n} from '@features/company/audit-trail/state';\nimport * as actions from './actions';\nimport { updateCompanyUserValuesSuccess } from '../user-values/actions';\nimport { actions as updateCompanyInfoActions } from '@redux/ui/modals/company-touches';\nimport { actions as loaderActions } from '@features/custom-global-loader';\nimport { actions as editAllInfoActions } from '@optx/features/edit-all-info/state';\nimport { actions as fundingRoundsActions } from '@redux/company/funding-rounds';\n\nfunction* fetchOpportunityPresentationSaga(action: PayloadAction<number>) {\n const companyId = action.payload;\n\n try {\n // server retunes data or empty string if there is no data.\n const res: AxiosResponse = yield call(CompanyService.getOpportunityPresentation, companyId);\n let presentation = null;\n\n if (res.data) {\n presentation = { ...res.data };\n const sortedRevenues = orderBy(presentation.revenue, 'year', 'desc');\n const sortedEBITDA = orderBy(presentation.ebitda, 'year', 'desc');\n presentation.revenue = sortedRevenues;\n presentation.ebitda = sortedEBITDA;\n }\n\n yield put(actions.fetchOpportunityPresentationSuccess(presentation));\n } catch (e: any) {\n const errorMessage = 'Error company opportunity presentation!';\n yield put(actions.fetchOpportunityPresentationFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* updateOpportunityPresentationSaga(\n action: PayloadAction<UpdateOpportunity, any, boolean>\n) {\n const presentation = { ...action.payload };\n const isFromHistory = action.meta;\n const funding = (presentation as unknown as OpportunityPresentation).funding;\n\n yield put(loaderActions.toggle({ loading: true }));\n\n try {\n const res: AxiosResponse<OpportunityPresentation> = yield call(\n CompanyService.addOpportunityPresentation,\n presentation\n );\n\n if (res.data) {\n yield put(actions.updateOpportunityPresentationSuccess(res.data));\n yield put(fundingRoundsActions.getCompanyFundingRounds(presentation.company_id));\n\n if ((presentation as unknown as OpportunityPresentation).funding?.capital_raised) {\n yield put(\n updateCompanyInfoActions.updateTouchCompanyInfoSuccess({\n company_id: presentation.company_id,\n funding: {\n capital_raised: res.data?.funding?.capital_raised?.toString(),\n },\n })\n );\n\n yield put(\n editAllInfoActions.updateCompanyEditAllInfoSuccess({\n company_id: presentation.company_id,\n funding: {\n capital_raised: res.data?.funding?.capital_raised?.toString(),\n },\n })\n );\n }\n\n if (\n funding?.last_round ||\n funding?.last_round_amount ||\n funding?.last_investors ||\n funding?.last_round_date\n ) {\n const lastRoundValue = res.data?.funding?.last_round.data.find(\n item => item.value === res.data.funding?.last_round.value\n );\n\n yield put(\n updateCompanyInfoActions.updateTouchCompanyInfoSuccess({\n company_id: presentation.company_id,\n funding: {\n capital_raised: res.data?.funding?.capital_raised?.toString(),\n last_round_amount: res.data?.funding?.last_round_amount,\n last_round: lastRoundValue as SelectOption<number>,\n acquiring_company:\n (presentation as unknown as OpportunityPresentation).funding?.acquiring_company ||\n '',\n last_investors: res.data?.funding?.last_investors || [],\n last_round_date: res.data?.funding?.last_round_date || undefined,\n },\n })\n );\n\n yield put(\n editAllInfoActions.updateCompanyEditAllInfoSuccess({\n company_id: presentation.company_id,\n funding: {\n capital_raised: res.data?.funding?.capital_raised?.toString(),\n last_round_amount: res.data?.funding?.last_round_amount,\n last_round: lastRoundValue as SelectOption<number>,\n acquiring_company:\n (presentation as unknown as OpportunityPresentation).funding?.acquiring_company ||\n '',\n last_investors: res.data?.funding?.last_investors || [],\n last_round_date: res.data?.funding?.last_round_date || undefined,\n },\n })\n );\n }\n\n if (res.data && res.data?.financial && res.data?.financial.revenue) {\n const sortedRevenues = orderBy(res.data?.financial.revenue, 'year', 'desc');\n let updatedSortedRevenues: FinancialFieldType[] | undefined;\n\n /*** Check if last revenue is from source so we can update revenue list***/\n if (res.data?.last_revenue?.from_source && res.data?.last_revenue?.value) {\n updatedSortedRevenues = [...sortedRevenues];\n const yearKey = sortedRevenues.findIndex(\n revenue => revenue.year === res.data?.last_revenue?.year\n );\n\n if (yearKey > -1) {\n updatedSortedRevenues[yearKey] = {\n value: res.data?.last_revenue?.value,\n year: sortedRevenues[yearKey].year,\n estimated: sortedRevenues[yearKey].estimated,\n from_source: res.data?.last_revenue?.from_source,\n };\n } else {\n updatedSortedRevenues.unshift({\n value: res.data?.last_revenue?.value,\n year: res.data?.last_revenue.year,\n estimated: res.data?.last_revenue.estimated,\n from_source: res.data?.last_revenue?.from_source,\n });\n }\n }\n\n yield put(\n updateCompanyUserValuesSuccess({\n companyId: presentation.company_id,\n fieldKey: 'revenue_list',\n financialList:\n (updatedSortedRevenues as FinancialFieldType[]) ||\n (sortedRevenues as FinancialFieldType[]),\n year: presentation.revenue?.year\n ? Number.parseInt(presentation.revenue?.year.toString())\n : undefined,\n value: presentation.revenue?.value ? presentation.revenue?.value : null,\n })\n );\n }\n\n if (res.data && res.data?.financial && res.data?.financial.ebitda) {\n const sortedEBITDA = orderBy(res.data?.financial.ebitda, 'year', 'desc');\n let updatedSortedEBITDA: FinancialFieldType[] | undefined;\n\n /*** Check if last ebitda is from source so we can update ebitda list***/\n if (res.data?.last_ebitda?.from_source && res.data?.last_ebitda?.value) {\n updatedSortedEBITDA = [...sortedEBITDA];\n const yearKey = sortedEBITDA.findIndex(\n revenue => revenue.year === res.data?.last_ebitda?.year\n );\n\n if (yearKey > -1) {\n updatedSortedEBITDA[yearKey] = {\n value: res.data?.last_ebitda?.value,\n year: sortedEBITDA[yearKey].year,\n estimated: sortedEBITDA[yearKey].estimated,\n from_source: res.data?.last_ebitda?.from_source,\n };\n } else {\n updatedSortedEBITDA.unshift({\n value: res.data?.last_ebitda?.value,\n year: res.data?.last_ebitda.year,\n estimated: res.data?.last_ebitda.estimated,\n from_source: res.data?.last_ebitda?.from_source,\n });\n }\n }\n\n yield put(\n updateCompanyUserValuesSuccess({\n companyId: presentation.company_id,\n fieldKey: 'ebitda_list',\n financialList:\n (updatedSortedEBITDA as FinancialFieldType[]) ||\n (sortedEBITDA as FinancialFieldType[]),\n year: presentation.ebitda?.year\n ? Number.parseInt(presentation.ebitda?.year.toString())\n : undefined,\n value: presentation.ebitda?.value ? presentation.ebitda?.value : null,\n })\n );\n }\n\n if (isFromHistory) {\n const pagination: PageInfo = yield select(auditSelectors.getPagination);\n const field: string = yield select(auditSelectors.getSearchQuery);\n const optx: APIBoolean = yield select(auditSelectors.getOPTX);\n const internal: APIBoolean = yield select(auditSelectors.getInternal);\n const startDate: string = yield select(auditSelectors.getStartDate);\n const endDate: string = yield select(auditSelectors.getEndDate);\n\n yield put(\n auditActions.fetchChangedCompanyFields({\n companyId: presentation.company_id,\n pagination,\n field,\n internal,\n optx,\n startDate,\n endDate,\n })\n );\n }\n\n NotificationService.success('Success updating company presentation!');\n } else {\n const errorMessage = 'Error updating company presentation!';\n yield put(actions.updateOpportunityPresentationFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Error updating presentation!');\n yield put(actions.updateOpportunityPresentationFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n\n yield put(loaderActions.toggle({ loading: false }));\n}\n\nfunction* addFinancialYearSaga(\n action: PayloadAction<{ companyId: number; value: AddYearPayload }>\n) {\n const { companyId, value } = action.payload;\n const { annual_recurring_revenue, ebitda, gm, revenue } = value;\n\n const payload: AddYearSuccessPayload = {\n company_id: companyId,\n annual_recurring_revenue,\n ebitda,\n gm,\n revenue,\n };\n\n try {\n const res: AxiosResponse = yield call(CompanyService.addYearToOpportunityPresentation, payload);\n\n if (res.data) {\n yield put(actions.addFinancialYearSuccess(res.data));\n NotificationService.success('Success adding a new year!');\n } else {\n const errorMessage = 'Error to add a new year!';\n yield put(actions.addFinancialYearFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Error to add a new year!';\n yield put(actions.addFinancialYearFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* editFinancialYearSaga(\n action: PayloadAction<{ companyId: number; value: AddYearPayload }>\n) {\n const { companyId, value } = action.payload;\n\n const customPayload = {\n company_id: companyId,\n financial: value,\n };\n\n try {\n const res: AxiosResponse = yield call(CompanyService.addOpportunityPresentation, customPayload);\n NotificationService.success('Year successfully edited!');\n yield put(actions.editFinancialYearSuccess(res.data));\n } catch (error) {\n const errorMessage = 'Failed to edit the year!';\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* deleteFinancialYearSaga(action: PayloadAction<{ companyId: number; year: number }>) {\n const { companyId, year } = action.payload;\n\n const payload = {\n company_id: companyId,\n year,\n };\n\n const query = queryString.stringify(payload);\n\n try {\n const res: AxiosResponse = yield call(\n CompanyService.deleteYearToOpportunityPresentation,\n query\n );\n NotificationService.success('Success deleting a year!');\n yield put(actions.deleteFinancialYearSuccess(res.data));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Error deleting a year!');\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* opportunityPresentationSaga() {\n yield takeLatest(actions.fetchOpportunityPresentation.type, fetchOpportunityPresentationSaga);\n yield takeLatest(actions.updateOpportunityPresentation.type, updateOpportunityPresentationSaga);\n yield takeLatest(actions.deleteFinancialYear, deleteFinancialYearSaga);\n yield takeLatest(actions.addFinancialYear, addFinancialYearSaga);\n yield takeLatest(actions.editFinancialYear, editFinancialYearSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { OpportunityPresentationState } from './interfaces';\nimport { TouchesFinancialPayload } from '@models/api/touches';\nimport { CompanyFundingRounds, OpportunityPresentation } from '@optx/models/Company';\nimport {\n CustomValue,\n EditFieldSuccess,\n UpdateFieldsPayload,\n} from '@optx/features/company/edit-fields/state/interfaces';\nimport { EditAllCompanyResponse } from '@optx/models/api/editAllInfo';\n// redux\nimport * as actions from './actions';\nimport { actions as fundingRoundActions } from '@redux/company/funding-rounds';\nimport { actions as updateCompanyInfoActions } from '@redux/ui/modals/company-touches';\nimport { fetchReducer, fetchFailReducer, fetchSuccessReducer } from '../../feature/fetch/reducers';\nimport { actions as editFieldActions } from '@optx/features/company/edit-fields/state';\nimport { actions as editAllInfoActions } from '@optx/features/edit-all-info/state';\n\nconst initialState: OpportunityPresentationState = {\n data: null,\n loading: false,\n editableYear: null,\n isAddYearsOpenModal: false,\n error: '',\n fetchedAt: '',\n};\n\n// fetch opportunity\nconst fetchOpportunityReducer: CaseReducer<OpportunityPresentationState> = draftState => {\n draftState.error = '';\n};\n\nconst setAddYearsOpenModalReducer: CaseReducer<OpportunityPresentationState> = draftState => {\n draftState.isAddYearsOpenModal = !draftState.isAddYearsOpenModal;\n\n if (draftState.editableYear) {\n draftState.editableYear = null;\n }\n};\n\nconst editAddYearsOpenModalReducer: CaseReducer<\n OpportunityPresentationState,\n PayloadAction<{ year: number }>\n> = (draftState, { payload }) => {\n draftState.editableYear = payload.year;\n draftState.isAddYearsOpenModal = true;\n};\n\nconst fetchOpportunitySuccessReducer: CaseReducer<\n OpportunityPresentationState,\n PayloadAction<OpportunityPresentation | null>\n> = (draftState, action) => {\n fetchSuccessReducer(draftState, action);\n draftState.fetchedAt = new Date().toISOString();\n};\n\nconst addFinancialYearReducer: CaseReducer<OpportunityPresentationState> = draftState => {\n draftState.loading = true;\n draftState.error = '';\n};\n\nconst updateCompanyInfoSuccessReducer: CaseReducer<\n OpportunityPresentationState,\n PayloadAction<Partial<TouchesFinancialPayload>>\n> = (draftState, { payload }) => {\n if (draftState.data && draftState.data.company_id === payload.company_id) {\n if (payload.financials && draftState.data.financial) {\n if (payload.financials.revenue) {\n draftState.data.financial.revenue = payload.financials.revenue;\n }\n\n if (payload.financials.ebitda) {\n draftState.data.financial.ebitda = payload.financials.ebitda;\n }\n\n if (payload.financials.gm) {\n draftState.data.financial.gm = payload.financials.gm;\n }\n\n if (payload.financials.annual_recurring_revenue) {\n draftState.data.financial.annual_recurring_revenue =\n payload.financials.annual_recurring_revenue;\n }\n\n if (payload.financials.revenue_by_country) {\n draftState.data.financial.revenue_by_country = payload.financials.revenue_by_country;\n }\n\n if (payload.financials.financial_notes) {\n draftState.data.financial.financial_notes = payload.financials.financial_notes;\n }\n\n if (payload.financials.cashflow) {\n draftState.data.financial.cashflow.value = payload.financials.cashflow;\n }\n\n if (payload.financials.revenue_model) {\n draftState.data.financial.revenue_model.value = payload.financials.revenue_model;\n }\n }\n\n if (payload.funding) {\n if (draftState.data.deal_preparation) {\n if (typeof payload.funding.banker === 'boolean') {\n draftState.data.deal_preparation.banker.value = payload.funding.banker;\n }\n\n if ('banker_name' in payload.funding) {\n draftState.data.deal_preparation.banker_name =\n payload.funding.banker_name && payload.funding.banker_name !== ''\n ? payload.funding.banker_name\n : null;\n }\n\n if (payload.funding.equity_check) {\n draftState.data.deal_preparation.asking_amount = payload.funding.equity_check;\n }\n\n if (payload.funding.deal_type) {\n draftState.data.deal_preparation.deal_type.value = payload.funding.deal_type;\n }\n\n if (payload.funding.transaction_notes) {\n draftState.data.deal_preparation.transaction_notes = payload.funding.transaction_notes;\n }\n\n if (payload.funding.next_steps) {\n draftState.data.deal_preparation.next_steps.value = payload.funding.next_steps;\n }\n }\n\n if (draftState.data.funding) {\n if (payload.funding.last_round_date) {\n draftState.data.funding.last_round_date = payload.funding.last_round_date;\n }\n\n if (payload.funding.cap_table) {\n draftState.data.funding.cap_table = payload.funding.cap_table;\n }\n\n draftState.data.funding.last_investors = payload.funding.last_investors || null;\n }\n\n if (payload.customer_kpis && draftState.data.customer_kpis) {\n if (payload.customer_kpis.customers_number) {\n draftState.data.customer_kpis.customers_number = payload.customer_kpis.customers_number;\n }\n\n if (\n typeof payload.customer_kpis.customer_other_rationale === 'string' &&\n draftState.data.customer_kpis.customer_type.extra_data\n ) {\n draftState.data.customer_kpis.customer_type.extra_data.customer_other_rationale =\n payload.customer_kpis.customer_other_rationale;\n }\n\n if (payload.customer_kpis.customer_type) {\n draftState.data.customer_kpis.customer_type.value = payload.customer_kpis.customer_type;\n }\n\n if (payload.customer_kpis.sales_and_marketing) {\n draftState.data.customer_kpis.sales_and_marketing.value =\n payload.customer_kpis.sales_and_marketing;\n }\n\n if (payload.customer_kpis.sales_cycle) {\n draftState.data.customer_kpis.sales_cycle.value = payload.customer_kpis.sales_cycle;\n }\n\n if (payload.customer_kpis.acv) {\n draftState.data.customer_kpis.acv = payload.customer_kpis.acv;\n }\n\n if (payload.customer_kpis.nps) {\n draftState.data.customer_kpis.nps = payload.customer_kpis.nps;\n }\n\n if (payload.customer_kpis.clt) {\n draftState.data.customer_kpis.clt = payload.customer_kpis.clt;\n }\n\n if (payload.customer_kpis.gross_retention) {\n draftState.data.customer_kpis.gross_retention = payload.customer_kpis.gross_retention;\n }\n\n if (payload.customer_kpis.net_retention) {\n draftState.data.customer_kpis.net_retention = payload.customer_kpis.net_retention;\n }\n\n if (payload.customer_kpis.customer_churn) {\n draftState.data.customer_kpis.customer_churn = payload.customer_kpis.customer_churn;\n }\n\n if (payload.customer_kpis.customer_concentration) {\n draftState.data.customer_kpis.customer_concentration =\n payload.customer_kpis.customer_concentration;\n }\n\n if (payload.customer_kpis.cac) {\n draftState.data.customer_kpis.cac = payload.customer_kpis.cac;\n }\n\n if (payload.customer_kpis.ltv_cac) {\n draftState.data.customer_kpis.ltv_cac = payload.customer_kpis.ltv_cac;\n }\n }\n\n if (payload.technology && draftState.data.technology) {\n if (payload.technology.delivery_model) {\n draftState.data.technology.delivery_model.value = payload.technology.delivery_model;\n }\n\n if (payload.technology.cloud_provider) {\n draftState.data.technology.cloud_provider.value = payload.technology.cloud_provider;\n }\n\n if (payload.technology.architecture) {\n draftState.data.technology.architecture.value = payload.technology.architecture;\n }\n\n if (payload.technology.technology_notes) {\n draftState.data.technology.technology_notes = payload.technology.technology_notes;\n }\n }\n }\n\n if (payload.general_info) {\n if (payload.general_info.other_notes && draftState.data.financial) {\n draftState.data.financial.other_notes = payload.general_info.other_notes;\n }\n }\n }\n};\n\nconst updateFieldsSuccessReducer: CaseReducer<\n OpportunityPresentationState,\n PayloadAction<EditFieldSuccess>\n> = (draftState, action) => {\n const { fieldName, companyId, value } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n const fieldKeyValue = (value as UpdateFieldsPayload).value;\n const extraKeys = (value as UpdateFieldsPayload).extraKeys;\n const extraValues = (value as UpdateFieldsPayload).extraValues;\n\n if (!Array.isArray(fieldName)) {\n const funding = draftState.data.funding;\n\n if (fieldName === 'Capital Raised' && funding) {\n funding.capital_raised = fieldKeyValue as number;\n }\n\n if (fieldName === 'Last Round' && funding) {\n const lastRoundData = (value as UpdateFieldsPayload).lastRoundData;\n\n if (fieldKeyValue === 0) {\n funding.last_round_amount = 'Unknown';\n } else {\n funding.last_round_amount = fieldKeyValue as number;\n }\n\n funding.last_round.value = lastRoundData?.last_round as string;\n funding.last_investors = lastRoundData?.last_investors || [];\n funding.last_round_date = lastRoundData?.raise_date as string;\n\n if (!lastRoundData?.parentcompany || lastRoundData?.parentcompany === 'blank') {\n funding.acquiring_company = '';\n } else {\n funding.acquiring_company = lastRoundData?.parentcompany as string;\n }\n }\n\n if (fieldName === 'Next Steps' && draftState.data.deal_preparation) {\n draftState.data.deal_preparation.next_steps.value = (fieldKeyValue as CustomValue)\n .value as string;\n\n if (extraKeys?.[0] === 'next_steps_opinion' && extraValues?.[0] !== undefined) {\n draftState.data.deal_preparation.next_steps_opinion = extraValues?.[0] as string;\n }\n }\n\n if (fieldName === 'Last Funding Date' && funding) {\n funding.last_round_date = fieldKeyValue as string;\n }\n\n if (fieldName === 'Investor Name' && funding) {\n funding.last_investors = fieldKeyValue as string[];\n }\n }\n }\n};\n\nconst companyFundingRoundsSuccessReducer: CaseReducer<\n OpportunityPresentationState,\n PayloadAction<CompanyFundingRounds>\n> = (draftState, action) => {\n if (draftState.data) {\n const { total_raised, last_round } = action.payload;\n\n if (draftState.data.funding) {\n // @ts-ignore\n draftState.data.funding.capital_raised = total_raised;\n\n if (last_round?.amount === 'Unknown') {\n draftState.data.funding.last_round_amount = last_round?.amount;\n } else if (last_round?.amount) {\n draftState.data.funding.last_round_amount = Number(\n last_round?.amount?.split(',').join('').replace('$', '')\n );\n }\n\n // for last_round?.round === '(N/A)' Last Round is Unknown\n // for last_round?.round === 'N/A' Last Round is null\n if (last_round?.round === '(N/A)') {\n draftState.data.funding.last_round.value = 'Unknown';\n } else if (last_round?.round && last_round?.round !== 'N/A') {\n draftState.data.funding.last_round.value = last_round?.round;\n }\n }\n }\n};\n\nconst updateAllCompanyEditAllInfoSuccessReducer: CaseReducer<\n OpportunityPresentationState,\n PayloadAction<Partial<EditAllCompanyResponse>>\n> = (draftState, { payload }) => {\n if (draftState.data?.financial) {\n if (payload.annual_recurring_revenue_growth) {\n draftState.data.financial.annual_recurring_revenue_growth =\n payload.annual_recurring_revenue_growth;\n }\n\n if (payload.revenue_growth) {\n draftState.data.financial.revenue_growth = payload.revenue_growth;\n }\n\n if (payload.ebitda_margin) {\n draftState.data.financial.ebitda_margin = payload.ebitda_margin;\n }\n\n if (draftState.data.funding) {\n if (payload.last_raised_amount === 'Unknown') {\n draftState.data.funding.last_round_amount = payload.last_raised_amount;\n }\n\n if (payload.capital_raised !== undefined) {\n draftState.data.funding.capital_raised = payload.capital_raised;\n }\n }\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // fetch opportunity presentation\n .addCase(actions.fetchOpportunityPresentation, fetchOpportunityReducer)\n .addCase(actions.fetchOpportunityPresentationSuccess, fetchOpportunitySuccessReducer)\n .addCase(actions.fetchOpportunityPresentationFail, fetchFailReducer)\n .addCase(actions.setAddYearsOpenModal, setAddYearsOpenModalReducer)\n .addCase(actions.editAddYearsOpenModal, editAddYearsOpenModalReducer)\n // update opportunity presentation\n .addCase(actions.updateOpportunityPresentation, fetchReducer)\n .addCase(actions.updateOpportunityPresentationSuccess, fetchOpportunitySuccessReducer)\n .addCase(actions.updateOpportunityPresentationFail, fetchFailReducer)\n // add years\n .addCase(actions.addFinancialYear, addFinancialYearReducer)\n .addCase(actions.addFinancialYearSuccess, fetchOpportunitySuccessReducer)\n .addCase(actions.addFinancialYearFail, fetchFailReducer)\n // edit years\n .addCase(actions.editFinancialYearSuccess, fetchOpportunitySuccessReducer)\n .addCase(actions.editFinancialYearFail, fetchFailReducer)\n // delete years\n .addCase(actions.deleteFinancialYearSuccess, fetchOpportunitySuccessReducer)\n .addCase(actions.deleteFinancialYearFail, fetchFailReducer)\n // update Company Info\n .addCase(\n updateCompanyInfoActions.updateTouchCompanyInfoSuccess,\n updateCompanyInfoSuccessReducer\n )\n .addCase(editAllInfoActions.updateCompanyEditAllInfoSuccess, updateCompanyInfoSuccessReducer)\n .addCase(\n editAllInfoActions.updateAllCompanyEditAllInfoSuccess,\n updateAllCompanyEditAllInfoSuccessReducer\n )\n .addCase(editFieldActions.updateFieldsSuccess, updateFieldsSuccessReducer)\n .addCase(fundingRoundActions.getCompanyFundingRoundsSuccess, companyFundingRoundsSuccessReducer)\n);\n\nexport default reducer;\n","import { defaultSearchType } from '@optx/features/grid/search-type/state/constants';\nimport { ColumnFeatureState } from '@optx/features/grid/columns/state/interfaces';\nimport { GridKeys } from '@optx/models/grid';\n\nexport const GRID_KEYS: GridKeys[] = [\n 'advancedSearch',\n 'lists',\n 'myCompanies',\n 'addons',\n 'outreachDetails',\n 'contacts',\n 'checklistResearchInsights',\n 'pipelineReport',\n];\n\nexport const GRID_VIEW_KEYS: GridKeys[] = [\n 'advancedSearch',\n 'lists',\n 'myCompanies',\n 'outreachDetails',\n];\n\nexport const GRID_FETCHED_COUNT_KEYS: GridKeys[] = [\n 'advancedSearch',\n 'lists',\n 'myCompanies',\n 'outreachDetails',\n 'addons',\n];\n\nexport const GRID_KEYS_SEARCH: GridKeys[] = [\n 'advancedSearch',\n 'lists',\n 'myCompanies',\n 'addons',\n 'outreachDetails',\n];\n\nexport const GRID_KEYS_FILTER_MODALS: GridKeys[] = [\n 'advancedSearch',\n 'lists',\n 'myCompanies',\n 'addons',\n 'outreach',\n 'outreachDetails',\n 'contacts',\n 'checklistResearchInsights',\n 'pipelineReport',\n];\n\nexport const GRID_KEYS_COLUMNS: GridKeys[] = [\n 'advancedSearch',\n 'lists',\n 'myCompanies',\n 'outreachDetails',\n 'addons',\n 'contacts',\n 'checklistResearchInsights',\n 'pipelineReport',\n];\n\nexport const GRID_FILTER_KEYS: GridKeys[] = ['advancedSearch', 'lists', 'myCompanies', 'addons'];\n\nexport const GRID_SORT_KEYS: GridKeys[] = ['advancedSearch', 'lists', 'myCompanies'];\n\nexport const HISTOGRAM_KEYS: GridKeys[] = ['advancedSearch', 'lists', 'myCompanies', 'addons'];\n\nexport const GRID_KEYS_SEARCH_TYPE: GridKeys[] = [\n 'advancedSearch',\n 'lists',\n 'myCompanies',\n 'addons',\n 'outreachDetails',\n 'checklistResearchInsights',\n];\n\nexport const PAGINATION_INITIAL_STATE = {\n pageNumber: 1,\n pageSize: 50,\n};\n\nexport const LONGCARD_PAGINATION_INITIAL_STATE = {\n pageNumber: 1,\n pageSize: 50,\n};\n\nexport const SEARCH_COUNT_INITAL_STATE = {\n searchCount: 0,\n loading: false,\n error: '',\n};\nexport const VIEW_INITIAL_STATE = {\n id: '',\n label: '',\n};\n\nexport const FILTERS_INITIAL_STATE = {\n filter: {},\n preselected: {},\n clear: {},\n customClearedFilter: {},\n fetchedAt: null,\n};\n\nexport const SEARCH_INITIAL_STATE = {\n byId: {},\n allIds: [],\n loading: false,\n error: '',\n fetchedAt: '',\n trending: '1Y',\n cancelled: false,\n hideCancelSearch: false,\n shouldUpdateSourcingOutReachAnalystInfo: true,\n searchTitle: '',\n searchKey: '',\n companyId: 0,\n};\n\nexport const COLUMNS_INITIAL_STATE: ColumnFeatureState = {\n columnDisplay: null,\n columnDisplayInitialState: null,\n columnOrderInitialState: [],\n columnOrder: [],\n isColumnFetched: false,\n};\n\nexport const VIEW_TYPE_INITIAL_STATE = {\n searchView: 'table',\n changedCompanyCard: false,\n};\n\nexport const GRID_MODALS_INITIAL_STATE = {\n isModalOpen: false,\n};\n\nexport const VIEW_TRANSITION_INITIAL_STATE = {\n isViewTransition: false,\n};\n\nexport const HISTOGRAM_INITIAL_STATE = {\n data: {},\n allFilters: [],\n lastChangedFilter: undefined,\n changedFilters: [],\n edit: null,\n searchCount: undefined,\n defaultHistograms: null,\n enabled: false,\n // fetch\n error: '',\n loading: false,\n fetchedAt: null,\n};\n\nexport const SEARCH_TYPE_INITIAL_STATE = {\n searchType: defaultSearchType,\n};\n","import { createFeatureAction } from '@optx/utils/feature';\nimport featureName from '../../featureName';\nimport * as types from './actionTypes';\nimport { EditDealTeam } from './interfaces';\n\nexport const addDealTeamMember = createFeatureAction<EditDealTeam>(\n featureName,\n types.ADD_COMPANY_DEAL_TEAM_MEMBER\n);\n\nexport const addDealTeamMemberSuccess = createFeatureAction<EditDealTeam>(\n featureName,\n types.ADD_COMPANY_DEAL_TEAM_MEMBER_SUCCESS\n);\n\nexport const addDealTeamMemberFail = createFeatureAction<string>(\n featureName,\n types.ADD_COMPANY_DEAL_TEAM_MEMBER_FAIL\n);\n","export const ADD_COMPANY_DEAL_TEAM_MEMBER = 'ADD_COMPANY_DEAL_TEAM_MEMBER';\nexport const ADD_COMPANY_DEAL_TEAM_MEMBER_SUCCESS = 'ADD_COMPANY_DEAL_TEAM_MEMBER_SUCCESS';\nexport const ADD_COMPANY_DEAL_TEAM_MEMBER_FAIL = 'ADD_COMPANY_DEAL_TEAM_MEMBER_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\nimport { DealTeamState, EditDealTeam } from './interfaces';\nimport * as actions from './actions';\n\nexport const initialState: DealTeamState = {\n companyId: null,\n error: null,\n loading: false,\n};\n\nconst addDealTeamMember: CaseReducer<DealTeamState, PayloadAction<EditDealTeam>> = (\n draftState,\n action\n) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n draftState.loading = true;\n};\n\nconst addDealTeamMemberSuccess: CaseReducer<DealTeamState, PayloadAction<EditDealTeam>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addDealTeamMember, addDealTeamMember)\n .addCase(actions.addDealTeamMemberSuccess, addDealTeamMemberSuccess)\n .addCase(actions.addDealTeamMemberFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as actionTypes from './actionTypes';\nimport { EditSeniorDealTeamLead } from './interfaces';\n\nexport const addSeniorDealTeamLead = createFeatureAction<EditSeniorDealTeamLead>(\n featureName,\n actionTypes.ADD_SENIOR_DEAL_TEAM_LEAD\n);\n\nexport const addSeniorDealTeamLeadSuccess = createFeatureAction<EditSeniorDealTeamLead>(\n featureName,\n actionTypes.ADD_SENIOR_DEAL_TEAM_LEAD_SUCCESS\n);\n\nexport const addSeniorDealTeamLeadFail = createFeatureAction<string>(\n featureName,\n actionTypes.ADD_SENIOR_DEAL_TEAM_LEAD_FAIL\n);\n","// fetch options lists for stage, rank and company owner\nexport const ADD_SENIOR_DEAL_TEAM_LEAD = 'ADD_SENIOR_DEAL_TEAM_LEAD';\nexport const ADD_SENIOR_DEAL_TEAM_LEAD_SUCCESS = 'ADD_SENIOR_DEAL_TEAM_LEAD_SUCCESS';\nexport const ADD_SENIOR_DEAL_TEAM_LEAD_FAIL = 'ADD_SENIOR_DEAL_TEAM_LEAD_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n\nimport * as actions from './actions';\nimport { EditSeniorDealTeamLead, SeniorDealTeamLeadState } from './interfaces';\n\nexport const initialState: SeniorDealTeamLeadState = {\n companyId: null,\n error: null,\n loading: false,\n};\n\nconst addSeniorDealTeamLead: CaseReducer<\n SeniorDealTeamLeadState,\n PayloadAction<EditSeniorDealTeamLead>\n> = (draftState, action) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n draftState.loading = true;\n};\n\nconst addSeniorDealTeamLeadSuccess: CaseReducer<SeniorDealTeamLeadState> = draftState => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addSeniorDealTeamLead, addSeniorDealTeamLead)\n .addCase(actions.addSeniorDealTeamLeadSuccess, addSeniorDealTeamLeadSuccess)\n .addCase(actions.addSeniorDealTeamLeadFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as actionTypes from './actionTypes';\nimport { Callback, EditDateFields } from './interfaces';\n\nexport const addDateFields = createFeatureAction<EditDateFields | Callback>(\n featureName,\n actionTypes.ADD_DATE_FIELDS\n);\n\nexport const addDateFieldsSuccess = createFeatureAction<EditDateFields>(\n featureName,\n actionTypes.ADD_DATE_FIELDS_SUCCESS\n);\n","// fetch options lists for stage, rank and company owner\nexport const ADD_DATE_FIELDS = 'ADD_DATE_FIELDS';\nexport const ADD_DATE_FIELDS_SUCCESS = 'ADD_DATE_FIELDS_SUCCESS';\n","/* eslint-disable max-len */\nimport { CaseReducer, createReducer, current, PayloadAction } from '@reduxjs/toolkit';\nimport moment from 'moment';\n// models\nimport {\n CompanyProfile,\n CompanyUserValue,\n Company,\n FinancialFieldType,\n OpportunityPresentation,\n ProductCategory,\n CompanyUserValuesKeys,\n CompanyFundingRounds,\n Addon,\n} from '@models/Company';\nimport { UpdateCompanyET } from '@models/equityTouch';\nimport { CompanyUserContact, ContactPhone } from '@models/api/contacts';\nimport {\n AddCompanyToWatchList,\n DeleteCompanyFromWatchList,\n CompanyWatchList,\n} from '@models/WatchList';\nimport { TouchesFinancialPayload } from '@models/api/touches';\nimport { CompanyTouchSuccessResponse } from '@optx/models/company/CompanyTouch';\n// constants\nimport {\n DEFAULT_COMPANY_OWNER_VALUE,\n DEFAULT_SENIOR_ADVISOR_VALUE,\n DEFAULT_OPPORTUNITY_TYPE,\n} from '@constants/table/company';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\nimport { ADD_TOUCH_LOCALSTORAGE_KEY_PREFIX } from '@optx/constants/autosave';\n// utils\nimport { updateRevenueList } from '@optx/utils/company';\nimport { showRationaleForStage } from '@optx/utils/helpers';\nimport { mapDescriptionOptions } from '@optx/utils/utils';\nimport { deleteSavedValues } from '@optx/storage/localStorage/autoSaveStorage';\n// redux\nimport { submitResearchRationaleSuccessReducer } from '@optx/redux/common/rationales/reducer';\nimport { fetchReducer } from '@redux/feature/fetch/reducers';\nimport { actions as searchActions } from '@features/grid/search';\nimport { actions as suggestedSearchActions } from '@redux/company/suggested-searches';\nimport { actions as favoritesActions } from '@redux/favorites';\nimport { actions as bulkSalesloftActions } from '@optx/features/bulk-actions/salesloft';\nimport { actions as equityTouchActions } from '@redux/company/equity-touch';\nimport { actions as researchRationaleActions } from '@features/add-research-rationale/state';\nimport { actions as companyOportunityTypeActions } from '@components/feature/company-individual-edit/state/oportunityType';\nimport { actions as DealTeamActions } from '@components/feature/company-individual-edit/state/dealTeam';\nimport { actions as activeActions } from '@redux/company/active';\nimport { actions as fundActions } from '@components/feature/company-individual-edit/state/fund';\nimport * as favoriteListsActions from '@optx/redux/favorite-lists/lists/actions';\nimport * as favoriteListsPopupActions from '@optx/redux/favorite-lists/lists-popup/actions';\nimport { actions as opportunityPresentationActions } from '@redux/company/opportunity-presentation';\nimport {\n createCompanyToListSuccess,\n deleteCompanyToListSuccess,\n} from '@optx/redux/common/list/reducers';\nimport { actions as seniorDealTeamLeadActions } from '@components/feature/company-individual-edit/state/seniorDealTeamLead';\nimport { actions as dateFieldsActions } from '@components/feature/company-individual-edit/state/date-fields';\nimport { EditSeniorDealTeamLead } from '@components/feature/company-individual-edit/state/seniorDealTeamLead/interfaces';\nimport { EditDateFields } from '@components/feature/company-individual-edit/state/date-fields/interfaces';\nimport { EditDealTeam } from '@optx/components/feature/company-individual-edit/state/dealTeam/interfaces';\nimport { EditCompanyFund } from '@optx/components/feature/company-individual-edit/state/fund/interfaces';\nimport { EditOpportunityType } from '@optx/components/feature/company-individual-edit/state/oportunityType/interfaces';\nimport {\n CustomValue,\n EditFieldSuccess,\n UpdateFieldsPayload,\n UpdateVerifyCompanyPayload,\n MultipleFieldsValue,\n} from '@optx/features/company/edit-fields/state/interfaces';\nimport { AddCompanyReviewSuccess } from '@optx/features/company-review/state/interfaces';\nimport {\n USER_VALUES_FIELDS,\n MONTH_DATE_YEAR_FORMAT_FIELDS,\n} from '@optx/features/company/edit-fields/constants';\nimport { SelectOption } from '@optx/models/Option';\nimport { actions as inBusinessActions } from '@redux/company/in-business';\nimport { updateFinancialValues } from '@optx/utils/editFields';\nimport { actions as companyReviewActions } from '@optx/features/company-review/state/index';\nimport { DeleteTagPayload, SuccessCompanyTag } from '../tags/interfaces';\nimport { TrendingLinesUpdate, EmployeeGrowthPercentage } from '../user-values/interfaces';\nimport { actions as fundingRoundActions } from '../funding-rounds';\nimport {\n AiDescriptionResponse,\n AiRelationshipSummaryResponse,\n CompanyProfileState,\n} from './interfaces';\nimport { actions as editFieldsActions } from '../../../features/company/edit-fields/state';\nimport { actions as portfolioActions } from '../portfolio';\nimport { actions as datePresentedActions } from '../date-presented';\nimport { actions as userValuesActions } from '../user-values';\nimport { actions as tagsActions } from '../tags';\nimport { actions as primaryContactsActions } from '../primary-contacts';\nimport * as actions from './actions';\nimport { actions as updateCompanyInfoActions } from '@redux/ui/modals/company-touches';\nimport { actions as editAllInfoActions } from '@optx/features/edit-all-info/state';\nimport { UPDATE_COMPANY_OPTX_SCORE } from '../user-values/types';\nimport { CompanyActivePayload } from '../active/interfaces';\nimport { sendNewOptxScoreRationaleSuccess, sendOptxScoreRationaleSuccess } from '../score/actions';\nimport { OptxScoreRationale } from '../score/interfaces';\n\nconst initialState: CompanyProfileState = {\n data: null,\n loading: false,\n error: '',\n fetchedAt: null,\n};\n\nconst fetchProfileReducer: CaseReducer<CompanyProfileState> = draftState => {\n draftState.data = null;\n draftState.loading = true;\n draftState.error = '';\n};\n\nconst fetchProfileSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<CompanyProfile>\n> = (draftState, action) => {\n const { payload } = action;\n draftState.loading = false;\n draftState.fetchedAt = new Date().toISOString();\n\n const defaultSelectedDescription = mapDescriptionOptions(payload.descriptions);\n\n const selectedDescription = defaultSelectedDescription[0]?.value;\n\n draftState.data = { ...payload, ...{ selectedDescription: selectedDescription } };\n\n updateRevenueList(draftState.data);\n};\n\nconst setSelectedDescriptionReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<string | number>\n> = (draftState, action) => {\n const { payload } = action;\n\n if (draftState.data) {\n draftState.data.selectedDescription = payload;\n }\n};\n\nconst fetchProfileFailReducer: CaseReducer<CompanyProfileState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n draftState.error = action.payload;\n};\n\nconst addCompanyInBusinessEvaluationSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<\n {\n score: number;\n score_v3: number;\n il_score: number;\n il_score_growth: number;\n scoreGrowth: number;\n newScoreGrowth: number;\n companyId: number;\n isInBusiness: boolean;\n },\n any\n >\n> = (draftState, action) => {\n const {\n companyId,\n isInBusiness,\n score,\n score_v3,\n scoreGrowth,\n newScoreGrowth,\n il_score: IlScore,\n il_score_growth: IlScoreGrowth,\n } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n draftState.data.is_in_business = isInBusiness;\n draftState.data.score = score;\n draftState.data.score_v3 = score_v3;\n draftState.data.il_optx_score = IlScore;\n draftState.data.il_score_growth = IlScoreGrowth;\n draftState.data.optx_score_growth = scoreGrowth;\n draftState.data.score_v3_growth = newScoreGrowth?.toString() || null;\n draftState.data.score_growth = scoreGrowth?.toString() || null;\n }\n};\n\nconst updateCompanyOptxScoreSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<\n {\n score: number;\n companyId: number;\n scoreGrowth: number;\n il_score: number;\n il_score_growth: number;\n },\n any\n >\n> = (draftState, action) => {\n const { score, scoreGrowth, il_score: IlScore, il_score_growth: IlScoreGrowth } = action.payload;\n\n if (draftState.data) {\n draftState.data.score = score;\n draftState.data.il_optx_score = IlScore;\n draftState.data.il_score_growth = IlScoreGrowth;\n draftState.data.optx_score_growth = scoreGrowth;\n draftState.data.score_growth = scoreGrowth?.toString() || null;\n }\n};\n\nconst updateCompanyTrendLinesReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<TrendingLinesUpdate, any>\n> = (draftState, action) => {\n const { employeeCountTrends, optxScoreTrends } = action.payload;\n\n if (draftState.data) {\n if (employeeCountTrends) draftState.data.employee_count_trends = employeeCountTrends;\n if (optxScoreTrends) draftState.data.optx_score_trends = optxScoreTrends;\n }\n};\n\nconst updateCompanyEmployeeGrowthPercentageReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<EmployeeGrowthPercentage, any>\n> = (draftState, action) => {\n const { empGrowthPercent } = action.payload;\n\n if (draftState.data) {\n draftState.data.emp_growth_percent = empGrowthPercent;\n }\n};\n\nconst updateVerifiedSoftwareSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<UpdateVerifyCompanyPayload>\n> = (draftState, action) => {\n const { companyId, value: isVerified } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n draftState.data.is_software_verified = isVerified || false;\n }\n};\n\nconst addDealTeamSuccessReducer: CaseReducer<CompanyProfileState, PayloadAction<EditDealTeam>> = (\n draftState,\n action\n) => {\n const { companyId, membersName } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n draftState.data.deal_team = membersName === null ? [] : membersName;\n }\n};\n\nconst addSeniorDealTeamLeadSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<EditSeniorDealTeamLead>\n> = (draftState, action) => {\n const { companyId, seniorDealTeamLeadList } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n draftState.data.senior_deal_team_lead =\n seniorDealTeamLeadList === null ? [] : seniorDealTeamLeadList;\n }\n};\n\nconst addCompanyPortfolioSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<{ company_id: number; is_portfolio?: boolean }>\n> = (draftState, action) => {\n const { company_id: companyId, is_portfolio: isPortfolio } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n draftState.data.is_portfolio = isPortfolio ?? false;\n draftState.data.is_platform = isPortfolio ?? false;\n // its for tags. is_portfolio and is_platform used for the same thing.\n }\n};\n\nconst addCompanyEditFieldsSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<EditFieldSuccess>\n> = (draftState, action) => {\n const {\n fieldName,\n companyId,\n value,\n score,\n scoreGrowth,\n newScore,\n newScoreGrowth,\n isPartner,\n companyOwnerData,\n ilScore,\n ilScoreGrowth,\n defaultOptxScore,\n isPsgCompany,\n location,\n } = action.payload;\n const optionSelected = (value as UpdateFieldsPayload).value as SelectOption;\n const fieldKeyValue = (value as UpdateFieldsPayload).value;\n const fieldKey = (value as UpdateFieldsPayload).fieldKey as CompanyUserValuesKeys;\n const rationale = (value as UpdateFieldsPayload).rationale;\n const useParentCompany = (value as UpdateFieldsPayload).value as CustomValue;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n if (defaultOptxScore === 'il') {\n if (ilScore !== undefined) {\n draftState.data.il_optx_score = ilScore;\n }\n\n if (ilScoreGrowth !== undefined) {\n draftState.data.il_score_growth = ilScoreGrowth as number;\n }\n }\n\n if (typeof fieldName === 'string' && fieldName !== 'PSG Platform' && fieldName !== 'Add-on') {\n draftState.data.score = typeof score === 'number' ? score : draftState.data.score;\n draftState.data.score_v3 = typeof newScore === 'number' ? newScore : draftState.data.score_v3;\n\n if (scoreGrowth !== undefined) {\n draftState.data.optx_score_growth = scoreGrowth;\n }\n\n if (newScoreGrowth !== undefined) {\n draftState.data.score_v3_growth = newScoreGrowth?.toString() || null;\n }\n } else if (Array.isArray(fieldName)) {\n draftState.data.score = typeof score === 'number' ? score : draftState.data.score;\n draftState.data.score_v3 = typeof newScore === 'number' ? newScore : draftState.data.score_v3;\n\n if (scoreGrowth !== undefined) {\n draftState.data.optx_score_growth = scoreGrowth;\n }\n\n if (newScoreGrowth !== undefined) {\n draftState.data.score_v3_growth = newScoreGrowth?.toString() || null;\n }\n }\n\n if (!Array.isArray(fieldName)) {\n if (fieldName === 'Software Company') {\n draftState.data.is_software =\n ((value as UpdateFieldsPayload).value as unknown as boolean) || false;\n\n draftState.data.is_software_rationale = rationale as string;\n\n if (isPartner) {\n draftState.data.is_software_verified = false;\n } else {\n draftState.data.is_software_verified = true;\n }\n\n draftState.data.score = score || draftState.data.score;\n draftState.data.score_v3 = newScore || draftState.data.score_v3;\n\n if (scoreGrowth !== undefined) {\n draftState.data.optx_score_growth = scoreGrowth;\n }\n\n if (newScoreGrowth !== undefined) {\n draftState.data.score_v3_growth = newScoreGrowth?.toString() || null;\n }\n }\n\n if (fieldName === 'PSG Platform') {\n draftState.data.is_portfolio =\n ((value as UpdateFieldsPayload).value as unknown as boolean) ?? false;\n draftState.data.is_platform =\n ((value as UpdateFieldsPayload).value as unknown as boolean) ?? false;\n // its for tags. is_portfolio and is_platform used for the same thing.\n }\n\n if (fieldName === 'Next Steps') {\n draftState.data.next_steps =\n optionSelected.label === 'None' ? DEFAULT_EMPTY_VALUE : optionSelected.label;\n draftState.data.next_steps_opinion = (value as UpdateFieldsPayload).extraValues\n ? ((value as UpdateFieldsPayload).extraValues as string[])[0]\n : null;\n }\n\n if (fieldName === 'PSG Fit') {\n const payloadValue = (value as UpdateFieldsPayload).value as unknown as boolean;\n\n draftState.data.is_interesting = payloadValue;\n draftState.data.interesting_rationale = payloadValue ? null : (rationale as string);\n\n draftState.data.score = score || draftState.data.score;\n draftState.data.score_v3 = newScore || draftState.data.score_v3;\n\n if (scoreGrowth !== undefined) {\n draftState.data.optx_score_growth = scoreGrowth;\n }\n\n if (newScoreGrowth !== undefined) {\n draftState.data.score_v3_growth = newScoreGrowth?.toString() || null;\n }\n }\n\n if (fieldName === 'Active on Pipeline') {\n draftState.data.active = (value as UpdateFieldsPayload).value as unknown as boolean;\n }\n\n if (fieldName === 'OPS Team') {\n const opsMembersName = ((value as UpdateFieldsPayload).value as SelectOption<string>[]).map(\n members => members.label\n );\n draftState.data.ops_team = opsMembersName;\n }\n\n if (fieldName === 'Deal Team') {\n const dealTeamMembersName = (\n (value as UpdateFieldsPayload).value as SelectOption<string>[]\n ).map(members => members.label);\n draftState.data.deal_team = dealTeamMembersName;\n }\n\n if (MONTH_DATE_YEAR_FORMAT_FIELDS.includes(fieldName)) {\n draftState.data[fieldKey as 'ic_status_date' | 'expected_close_date'] =\n (fieldKeyValue as string) === null\n ? DEFAULT_SENIOR_ADVISOR_VALUE\n : moment(fieldKeyValue as string).format(ISO_DATE_FORMAT);\n }\n\n if (fieldName === 'In Business') {\n draftState.data.is_in_business = (value as UpdateFieldsPayload).value as unknown as boolean;\n }\n\n if (fieldName === 'Company Owner') {\n if (companyOwnerData) {\n draftState.data.company_owner =\n companyOwnerData.company_owner_name === null\n ? DEFAULT_COMPANY_OWNER_VALUE\n : companyOwnerData.company_owner_name;\n draftState.data.company_owner_id =\n companyOwnerData.company_owner_id !== null ? +companyOwnerData.company_owner_id : null;\n draftState.data.owner_img = companyOwnerData.company_owner_img;\n } else {\n draftState.data.company_owner = DEFAULT_COMPANY_OWNER_VALUE;\n draftState.data.company_owner_id = null;\n draftState.data.owner_img = null;\n }\n }\n\n if (fieldName === 'Sub-Sector') {\n draftState.data.sub_sector = optionSelected.label;\n }\n\n if (fieldName === 'Sector') {\n draftState.data.sector = optionSelected.label;\n }\n\n if (fieldName === 'Company Type') {\n draftState.data.company_type = optionSelected.label;\n }\n\n if (fieldName === 'Pipeline Rank') {\n draftState.data.pipeline_rank = Number(optionSelected.label);\n }\n\n if (fieldName === 'Senior Advisor Thesis') {\n draftState.data.senior_advisor_thesis = optionSelected.label;\n }\n\n if (fieldName === 'Senior Deal Team Lead') {\n const seniorDealTeamList = (\n (value as UpdateFieldsPayload).value as SelectOption<string>[]\n ).map(members => members.label);\n draftState.data.senior_deal_team_lead = seniorDealTeamList;\n }\n\n if (fieldName === 'Lead Source') {\n draftState.data.lead_source = optionSelected.label;\n }\n\n if (fieldName === 'Stage') {\n draftState.data.stage = optionSelected.label;\n draftState.data.is_psg_company = isPsgCompany as boolean;\n\n if (showRationaleForStage(optionSelected.label)) {\n draftState.data.stage_rationale = rationale as string;\n } else {\n draftState.data.stage_rationale = null;\n }\n }\n\n if (fieldName === 'Fund') {\n draftState.data.fund = optionSelected.label;\n draftState.data.is_psg_company = isPsgCompany as boolean;\n }\n\n if (fieldName === 'Opportunity Type') {\n draftState.data.opportunity_type = optionSelected.label;\n }\n\n if (fieldName === 'Use Parent Company') {\n draftState.data.use_parent_company = useParentCompany as unknown as boolean;\n }\n\n if (fieldName === 'AI / ML') {\n draftState.data.is_ai_ml = fieldKeyValue as boolean | '-';\n }\n\n if (fieldKey === 'num_employees') {\n draftState.data.score = score as number;\n draftState.data.score_v3 = newScore as number;\n draftState.data[fieldKey] = fieldKeyValue as number;\n }\n\n if (USER_VALUES_FIELDS.includes(fieldName) && fieldKey) {\n if (fieldKey === 'capital_raised' && fieldKeyValue === null) {\n draftState.data.capital_raised = DEFAULT_EMPTY_VALUE as string;\n } else if (fieldKey !== 'ebitda_list' && fieldKey !== 'revenue_list') {\n draftState.data[fieldKey] = fieldKeyValue as never;\n }\n\n if (fieldKey === 'last_raised_amount') {\n draftState.data.last_round = (value as UpdateFieldsPayload).lastRoundData\n ?.last_round as string;\n draftState.data.last_round_id = (value as UpdateFieldsPayload).lastRoundData\n ?.last_round_id as number;\n draftState.data.last_investors = (value as UpdateFieldsPayload).lastRoundData\n ?.last_investors as string[];\n draftState.data.raise_date = (value as UpdateFieldsPayload).lastRoundData\n ?.raise_date as string;\n\n if ((value as UpdateFieldsPayload).lastRoundData?.parentcompany) {\n let data: string;\n if ((value as UpdateFieldsPayload).lastRoundData?.parentcompany === 'blank') data = '';\n else data = (value as UpdateFieldsPayload).lastRoundData?.parentcompany as string;\n\n draftState.data.parentcompany = data;\n } else draftState.data.parentcompany = '';\n }\n\n if (fieldKey === 'ebitda_list' || fieldKey === 'revenue_list') {\n updateFinancialValues(draftState.data, fieldKey, fieldKeyValue as CustomValue);\n }\n }\n\n if (fieldName === 'Product Category') {\n const newCategories = ((value as UpdateFieldsPayload).value as string)\n .split(',')\n .map(item => ({\n category: item,\n is_valid: true,\n }));\n\n const previousCategories = [\n ...(draftState.data.product_category || []),\n ] as ProductCategory[];\n\n const combinedArray = newCategories.map(value => {\n const duplicateValue = previousCategories.find(item => item.category === value.category);\n\n return duplicateValue !== undefined ? duplicateValue : value;\n });\n\n draftState.data.product_category = ['blank'].includes(\n (value as UpdateFieldsPayload).value as string\n )\n ? null\n : combinedArray;\n }\n\n if (fieldName === 'Sub Vertical') {\n draftState.data.sub_vertical = (value as UpdateFieldsPayload).value as string[];\n }\n\n if (fieldName === 'Date Presented') {\n draftState.data.date_presented = fieldKeyValue as string[];\n }\n\n if (fieldName === 'Add-on') {\n const addon = ((value as UpdateFieldsPayload).value as CustomValue).optionalValue as Addon;\n\n draftState.data.addon = addon;\n draftState.data.addon_bool = ((value as UpdateFieldsPayload).value as CustomValue)\n .value as boolean;\n }\n\n if (fieldName === 'Linkedin Profile') {\n draftState.data.linkedin = fieldKeyValue as string;\n }\n\n if (fieldName === 'Website Status') {\n draftState.data.url_status = fieldKeyValue ? 'active' : 'not active';\n }\n\n if (fieldName === 'Location') {\n draftState.data.location = location?.toString() as string;\n }\n\n if (fieldName === 'Rationale') {\n draftState.data.rationale = fieldKeyValue !== 'blank' ? (fieldKeyValue as string) : '';\n }\n } else {\n if (fieldName.includes('Stage')) {\n const optionSelected = (value as MultipleFieldsValue).value.Stage;\n draftState.data.stage = optionSelected.label;\n draftState.data.is_psg_company = isPsgCompany as boolean;\n\n if (showRationaleForStage(optionSelected.label)) {\n draftState.data.stage_rationale = rationale as string;\n } else {\n draftState.data.stage_rationale = null;\n }\n }\n\n if (fieldName.includes('Company Owner')) {\n if (companyOwnerData) {\n draftState.data.company_owner =\n companyOwnerData.company_owner_name === null\n ? DEFAULT_COMPANY_OWNER_VALUE\n : companyOwnerData.company_owner_name;\n draftState.data.company_owner_id =\n companyOwnerData.company_owner_id !== null ? +companyOwnerData.company_owner_id : null;\n draftState.data.owner_img = companyOwnerData.company_owner_img;\n } else {\n draftState.data.company_owner = DEFAULT_COMPANY_OWNER_VALUE;\n draftState.data.company_owner_id = null;\n draftState.data.owner_img = null;\n }\n }\n\n if (fieldName.includes('Pipeline Rank')) {\n const optionSelected = (value as MultipleFieldsValue).value['Pipeline Rank'];\n\n draftState.data.pipeline_rank = Number(optionSelected.label);\n }\n }\n }\n\n if (draftState.data) {\n if (score !== undefined) {\n draftState.data.score = score as number;\n }\n\n if (newScore !== undefined) {\n draftState.data.score_v3 = newScore as number;\n }\n\n if (scoreGrowth !== undefined) {\n if (scoreGrowth === null) {\n draftState.data.score_growth = null;\n draftState.data.optx_score_growth = null;\n } else {\n draftState.data.score_growth = scoreGrowth?.toString() as string;\n draftState.data.optx_score_growth = scoreGrowth;\n }\n }\n\n if (newScoreGrowth !== undefined) {\n if (newScoreGrowth === null) {\n draftState.data.score_v3_growth = null;\n } else {\n draftState.data.score_v3_growth = newScoreGrowth?.toString() as string;\n }\n }\n }\n\n if (draftState.data && draftState.data.company_id === companyId) {\n if (fieldName === 'Location') {\n draftState.data.location = location?.toString() as string;\n }\n\n if (fieldName === 'Year Founded') {\n draftState.data.year_founded = optionSelected.label;\n }\n }\n};\n\nconst addCompanyTagSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<SuccessCompanyTag>\n> = (draftState, action) => {\n const { companyId, ...tag } = action.payload;\n\n if (draftState.data) {\n // Add empty list if is null.\n if (!draftState.data.specialties) {\n draftState.data.specialties = [];\n }\n\n draftState.data.specialties.push(tag);\n }\n};\n\nconst deleteCompanyTagSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<DeleteTagPayload>\n> = (draftState, action) => {\n const { id } = action.payload;\n\n if (draftState.data && draftState.data.specialties) {\n const index = draftState.data.specialties.findIndex(item => item.tag_id === id);\n const removedTagName: string | undefined = draftState.data.specialties.find(\n item => item.tag_id === id\n )?.tag;\n\n if (index !== -1) {\n draftState.data.specialties.splice(index, 1);\n const companyTags = draftState.data.cs_tags ? draftState.data.cs_tags.split('|') : [];\n\n if (removedTagName && companyTags.includes(removedTagName)) {\n const tagNameIndex = companyTags.indexOf(removedTagName);\n companyTags.splice(tagNameIndex, 1);\n draftState.data.cs_tags = companyTags.join('|');\n }\n }\n }\n};\n\nexport const addCompanyToListSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<AddCompanyToWatchList>\n> = (draftState, action) => {\n const { watchLists, companyId } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n let companyData = { ...draftState.data };\n\n if (draftState.data) {\n watchLists.forEach(list => {\n if (list.owner_name === action.payload.ownerName || list.origin === 'Equity Touch') {\n companyData = createCompanyToListSuccess(\n companyData as CompanyProfile,\n list\n ) as CompanyProfile;\n }\n });\n }\n\n draftState.data = companyData as CompanyProfile;\n }\n};\n\nexport const deleteCompanyToListSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<DeleteCompanyFromWatchList>\n> = (draftState, action) => {\n const { listId } = action.payload;\n\n const companyData = deleteCompanyToListSuccess(draftState.data as Company, listId);\n draftState.data = companyData as CompanyProfile;\n};\n\nexport const createCompanyToListSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<{\n companyId: number;\n list: CompanyWatchList;\n }>\n> = (draftState, action) => {\n const { list } = action.payload;\n\n const companyData = createCompanyToListSuccess(draftState.data as Company, list);\n draftState.data = companyData as CompanyProfile;\n};\n\nconst updateCompanyDatePresentedSuccessReducer: CaseReducer<CompanyProfileState> = (\n draftState,\n action\n) => {\n if (draftState.data) {\n draftState.data.date_presented = action.payload;\n }\n};\n\nconst updateCompanyUserValuesSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<CompanyUserValue>\n> = (draftState, action) => {\n if (draftState.data) {\n let financialListUpdated: FinancialFieldType[] = [];\n const { fieldKey, value, lastRoundData, financialList, year } = action.payload;\n\n if (financialList) {\n financialListUpdated = financialList?.filter((item: FinancialFieldType) => {\n return item.value !== DEFAULT_EMPTY_VALUE;\n });\n (draftState.data[fieldKey] as FinancialFieldType[]) = financialListUpdated;\n } else if (fieldKey === 'last_raised_amount') {\n draftState.data[fieldKey] = Number(value);\n draftState.data.last_round = lastRoundData?.last_round as string;\n draftState.data.last_round_id = lastRoundData?.last_round_id as number;\n\n if (lastRoundData?.parentcompany) {\n let data: string;\n if (lastRoundData?.parentcompany === 'blank') data = '';\n else data = lastRoundData.parentcompany;\n\n draftState.data.parentcompany = data;\n } else draftState.data.parentcompany = '';\n } else if (value === null) {\n (draftState.data[fieldKey] as null) = null;\n } else if (typeof value === 'number') {\n (draftState.data[fieldKey] as number) = Number(value);\n } else {\n (draftState.data[fieldKey] as string) = value.toString();\n }\n\n if (financialList && year) {\n if (fieldKey === 'ebitda_list') {\n draftState.data.ebitda_source_db = financialListUpdated.length === 0 ? '' : 'pi';\n } else if (fieldKey === 'revenue_list') {\n draftState.data.last_rev_source_db = financialListUpdated.length === 0 ? '' : 'pi';\n }\n }\n }\n};\n\nconst editUserContactSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n if (draftState.data) {\n const contacts = draftState.data!.contacts;\n const contactDetails = action.payload;\n const index = contacts.findIndex(contact => contact.person_id === contactDetails.person_id);\n const primaryContact = contacts.find(contact => contact.primary_contact);\n\n // check for existing primary contact and reset it,\n // if new contact is set as primary\n if (\n primaryContact &&\n contactDetails.primary_contact &&\n primaryContact.person_id !== contactDetails.person_id\n ) {\n primaryContact.primary_contact = false;\n }\n\n if (index !== -1) {\n contacts[index] = {\n ...contacts[index],\n ...contactDetails,\n is_edited: true,\n additional_phones: contactDetails.phones || null,\n // There is an issue with name.\n // If initially there is no first_name or last_name they are computed from full_name.\n // On edit only first_name and last name are updated, but no full_name so we recreate it based on new values.\n full_name: `${contactDetails.first_name} ${contactDetails.last_name}`,\n };\n }\n }\n};\n\nconst addContactSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n if (draftState.data) {\n const companyContacts = draftState.data?.contacts;\n const newContact = {\n ...(action.payload as CompanyUserContact),\n additional_phones: action.payload.phones as ContactPhone[],\n primary_contact: !!action.payload.primary_contact,\n };\n const mappedContacts = action.payload.primary_contact\n ? companyContacts?.map(contact => ({ ...contact, primary_contact: false }))\n : companyContacts;\n\n if (draftState.data && mappedContacts) {\n draftState.data.contacts = [...mappedContacts, ...[newContact]];\n }\n\n draftState.data.has_contacts = true;\n }\n};\n\nconst updateCompanyETDataReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<UpdateCompanyET>\n> = (draftState, action) => {\n // reset data to force endpoint call for updating profile page\n draftState.data = null;\n};\n\nconst addFavoriteSuccessReducer: CaseReducer<CompanyProfileState> = draftState => {\n if (window.location.pathname.includes('profile') && draftState.data) {\n draftState.data.is_in_fav_list = true;\n }\n};\n\nconst deleteFavoriteSuccessReducer: CaseReducer<CompanyProfileState> = draftState => {\n if (window.location.pathname.includes('profile') && draftState.data) {\n draftState.data.is_in_fav_list = false;\n }\n};\n\nconst loadingCompletedReducer: CaseReducer<CompanyProfileState> = draftState => {\n draftState.loading = false;\n};\n\nconst resetCompanyProfileReducer: CaseReducer<CompanyProfileState> = draftState => {\n if (draftState.data) {\n draftState.data = null;\n }\n};\n\nconst addDateFieldsSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<EditDateFields>\n> = (draftState, action) => {\n const { companyId, ...rest } = action.payload;\n const fieldKey = Object.keys(rest)[0];\n const value = Object.values(rest)[0];\n\n if (fieldKey && draftState.data && draftState.data.company_id === companyId) {\n draftState.data[fieldKey as 'ic_status_date' | 'expected_close_date'] =\n value === null\n ? DEFAULT_SENIOR_ADVISOR_VALUE\n : moment(value as string, 'DD.MM.YYYY').format(ISO_DATE_FORMAT);\n }\n};\n\nconst addCompanyActiveSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<CompanyActivePayload>\n> = (draftState, action) => {\n const { companyId, active } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n draftState.data.active = active || false;\n }\n};\n\nconst addCompanyFundSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<EditCompanyFund>\n> = (draftState, action) => {\n const { companyId, fundName } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n draftState.data.fund = fundName;\n }\n};\n\nconst addOpportunityTypeSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<EditOpportunityType>\n> = (draftState, action) => {\n const { companyId, opportunityTypeName, scoreValues } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n if (scoreValues) {\n draftState.data.score = scoreValues.optx_score;\n draftState.data.score_growth = scoreValues.optx_score_growth?.toString() || null;\n draftState.data.score_v3 = scoreValues.score_v3;\n draftState.data.score_v3_growth = scoreValues.score_v3_growth?.toString() || null;\n draftState.data.il_score_growth = scoreValues.il_optx_score_growth;\n draftState.data.il_optx_score = scoreValues.il_optx_score;\n }\n\n draftState.data.opportunity_type =\n opportunityTypeName === null ? DEFAULT_OPPORTUNITY_TYPE : opportunityTypeName;\n }\n};\n\nconst sendOptxScoreRationaleSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<OptxScoreRationale>\n> = (draftState, action) => {\n const {\n companyId,\n rationale,\n defaultScore,\n optxScoreVerified,\n optxScoreRationaleReason,\n optxScoreRationaleReasonType,\n scoreType,\n } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n if (defaultScore === 'us') {\n if (scoreType === 'score_v3') {\n draftState.data.optx_score_v3_rationale = rationale;\n draftState.data.optx_score_v3_verified = optxScoreVerified;\n draftState.data.optx_score_v3_rationale_reason = optxScoreRationaleReason;\n draftState.data.optx_score_v3_rationale_reason_type = optxScoreRationaleReasonType;\n } else {\n draftState.data.optx_score_rationale = rationale;\n draftState.data.optx_score_verified = optxScoreVerified;\n draftState.data.optx_score_rationale_reason = optxScoreRationaleReason;\n draftState.data.optx_score_rationale_reason_type = optxScoreRationaleReasonType;\n }\n }\n\n if (defaultScore === 'il') {\n draftState.data.il_optx_score_rationale = rationale;\n draftState.data.il_optx_score_verified = optxScoreVerified;\n draftState.data.il_optx_score_rationale_reason = optxScoreRationaleReason;\n draftState.data.il_optx_score_rationale_reason_type = optxScoreRationaleReasonType;\n }\n }\n};\n\nexport const addCompanyReviewSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<AddCompanyReviewSuccess>\n> = (draftState, action) => {\n const { reviewed, reviewedBy, reviewedDate, companyId } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n draftState.data.company_reviewed_by = reviewedBy;\n draftState.data.company_reviewed_date = reviewedDate;\n draftState.data.is_company_reviewed = reviewed;\n }\n};\n\nconst updateOpportunityPresentationSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<OpportunityPresentation>\n> = (draftState, { payload }) => {\n if (draftState.data) {\n if ('score' in payload) {\n draftState.data.score = payload.score as number;\n }\n\n if ('score_v3' in payload) {\n draftState.data.score_v3 = payload.score_v3 as number;\n }\n\n if ('il_optx_score' in payload) {\n draftState.data.il_optx_score = payload.il_optx_score as number;\n }\n\n if (payload.score_growth) {\n draftState.data.score_growth = (payload.score_growth as number).toString();\n draftState.data.optx_score_growth = payload.score_growth as number;\n }\n\n if (payload.score_v3_growth) {\n draftState.data.score_v3_growth = (payload.score_v3_growth as number).toString();\n }\n\n if (payload.il_score_growth) {\n draftState.data.il_score_growth = payload.il_score_growth as number;\n draftState.data.il_optx_score_growth = payload.il_score_growth as number;\n }\n\n if (payload.financial) {\n if (payload.financial.revenue) {\n draftState.data.revenue_list = payload.financial.revenue\n .map(item => ({\n estimated: item.estimated,\n value: item.value,\n year: item.year,\n }))\n .sort((a, b) => (b.year as number) - (a.year as number));\n }\n\n if (payload.financial.ebitda) {\n draftState.data.ebitda_list = payload.financial.ebitda\n .map(item => ({\n estimated: item.estimated,\n value: item.value,\n year: item.year,\n }))\n .sort((a, b) => (b.year as number) - (a.year as number));\n }\n\n if (payload.financial.gm) {\n draftState.data.gross_margin_list = payload.financial.gm\n .map(item => ({\n estimated: item.estimated,\n value: item.value,\n year: item.year,\n }))\n .sort((a, b) => (b.year as number) - (a.year as number));\n }\n }\n\n if (\n payload.deal_preparation &&\n typeof payload.deal_preparation.next_steps.value !== 'boolean' &&\n !Array.isArray(payload.deal_preparation.next_steps.value)\n ) {\n draftState.data.next_steps = payload.deal_preparation.next_steps.value;\n }\n\n if (payload.deal_preparation) {\n draftState.data.next_steps_opinion = payload.deal_preparation.next_steps_opinion ?? null;\n draftState.data.asking_amount = payload.deal_preparation.asking_amount;\n }\n\n if (payload.funding) {\n draftState.data.raise_date = payload.funding.last_round_date as string;\n\n draftState.data.last_raised_amount = payload.funding.last_round_amount;\n\n draftState.data.last_round = payload.funding.last_round.value as string;\n\n draftState.data.capital_raised = payload.funding.capital_raised;\n\n draftState.data.parentcompany = payload.funding.acquiring_company;\n\n if (payload.funding.last_investors) {\n draftState.data.last_investors = payload.funding.last_investors || [];\n }\n }\n }\n};\n\nconst updateCompanyInfoSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<Partial<TouchesFinancialPayload>>\n> = (draftState, { payload }) => {\n if (draftState.data && draftState.data.company_id === payload.company_id) {\n if (payload.general_info) {\n if (payload.general_info.primary_contact) {\n const contacts = draftState.data.contacts.map(contact => {\n if (contact.person_id === payload.general_info?.primary_contact) {\n return { ...contact, primary_contact: true };\n } else {\n return { ...contact, primary_contact: false };\n }\n });\n draftState.data.contacts = contacts;\n }\n\n if (payload.general_info.num_employees !== undefined) {\n draftState.data.num_employees = payload.general_info.num_employees;\n }\n\n if (payload.general_info.sub_sector) {\n draftState.data.sub_sector = payload.general_info.sub_sector.name;\n }\n\n if (payload.general_info.product_category) {\n const updatedProdCat = payload.general_info.product_category.map(\n (prodCat: SelectOption) => {\n return {\n category: prodCat.label,\n // @ts-ignore\n is_valid: 'isValid' in prodCat ? prodCat.isValid : prodCat.is_valid,\n };\n }\n );\n draftState.data.product_category = updatedProdCat;\n }\n }\n\n if (payload.funding) {\n if (payload.funding.capital_raised) {\n draftState.data.capital_raised = payload.funding.capital_raised;\n }\n\n if (payload.funding.last_round) {\n draftState.data.last_round =\n payload.funding.last_round.label &&\n payload.funding.last_round.label !== DEFAULT_EMPTY_VALUE\n ? payload.funding.last_round.label\n : null;\n draftState.data.last_round_id =\n payload.funding.last_round.value &&\n payload.funding.last_round.value.toString() !== DEFAULT_EMPTY_VALUE\n ? payload.funding.last_round.value\n : null;\n }\n\n if (payload.funding.next_steps) {\n draftState.data.next_steps = payload.funding.next_steps;\n }\n\n if (payload.funding.acquiring_company) {\n draftState.data.parentcompany = payload.funding.acquiring_company;\n }\n\n if (payload.funding.last_round_date) {\n draftState.data.raise_date = payload.funding.last_round_date;\n }\n\n if (payload.funding.last_round_amount) {\n draftState.data.last_raised_amount = payload.funding.last_round_amount;\n }\n\n if (payload.funding.last_investors) {\n draftState.data.last_investors = payload.funding.last_investors || [];\n }\n }\n\n if (payload.financials) {\n if (payload.financials.ebitda) {\n draftState.data.ebitda_list = payload.financials.ebitda;\n }\n\n if (payload.financials.revenue) {\n draftState.data.revenue_list = payload.financials.revenue;\n }\n }\n }\n};\n\nconst addTouchToCompanySuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<CompanyTouchSuccessResponse>\n> = (draftState, { payload }) => {\n const {\n companyid: companyId,\n next_touch_date: nextTouchDate,\n last_touch_date: lastTouchDate,\n iscomplete: isComplete,\n } = payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n if (isComplete) {\n draftState.data.last_touch_date = lastTouchDate;\n } else {\n draftState.data.next_touch_date = nextTouchDate;\n }\n }\n\n deleteSavedValues(ADD_TOUCH_LOCALSTORAGE_KEY_PREFIX, companyId);\n};\n\nconst updateAllCompanyEditAllInfoSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<Partial<TouchesFinancialPayload>>\n> = (draftState, { payload }) => {\n if (draftState.data && draftState.data.company_id === payload.company_id) {\n draftState.data = {\n ...draftState.data,\n ...payload,\n };\n }\n};\n\nconst companyFundingRoundsSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<CompanyFundingRounds>\n> = (draftState, action) => {\n if (draftState.data) {\n const { total_raised, last_round } = action.payload;\n\n // @ts-ignore\n draftState.data.capital_raised = total_raised;\n\n if (total_raised !== null) {\n draftState.data.is_capital_raise_has_unknown = total_raised.includes('(plus Unknown)');\n }\n\n if (last_round?.amount !== null) {\n draftState.data.last_raised_amount = last_round?.amount as unknown as number;\n }\n }\n};\n\nconst loadingStartedReducer: CaseReducer<CompanyProfileState> = draftState => {\n draftState.loading = true;\n};\n\nconst aiDescriptionSuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<AiDescriptionResponse>\n> = (draftState, action) => {\n const { description } = action.payload;\n\n if (draftState.data) {\n const stateDescriptions = current(draftState.data?.descriptions);\n draftState.data.company_description = description;\n\n if (stateDescriptions && 'AI' in stateDescriptions) {\n draftState.data.descriptions.AI = description;\n } else {\n draftState.data.descriptions = { AI: description, ...stateDescriptions };\n }\n }\n\n draftState.loading = false;\n};\n\nconst aiRelationshipSummarySuccessReducer: CaseReducer<\n CompanyProfileState,\n PayloadAction<AiRelationshipSummaryResponse>\n> = (draftState, action) => {\n if (draftState.data) {\n draftState.data.highlights = action.payload.highlights;\n draftState.data.is_ai_highlights_approved = action.payload.is_ai_highlights_approved;\n }\n\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchCompanyProfile, fetchProfileReducer)\n .addCase(actions.fetchCompanyProfileSuccess, fetchProfileSuccessReducer)\n .addCase(actions.setSelectedDescription, setSelectedDescriptionReducer)\n .addCase(actions.fetchCompanyProfileFail, fetchProfileFailReducer)\n .addCase(actions.resetCompanyProfile, resetCompanyProfileReducer)\n .addCase(searchActions.loadCompaniesByFilter, fetchReducer)\n .addCase(searchActions.loadCompaniesByFilterCompleted, loadingCompletedReducer)\n .addCase(searchActions.loadSuggestedSearch, fetchReducer)\n .addCase(suggestedSearchActions.fetchSuggestedSearchesSuccess, loadingCompletedReducer)\n .addCase(equityTouchActions.updateCompanyETData, updateCompanyETDataReducer)\n .addCase(\n inBusinessActions.addCompanyInBusinessEvaluationSuccess,\n addCompanyInBusinessEvaluationSuccessReducer\n )\n .addCase(editFieldsActions.updateFieldsSuccess, addCompanyEditFieldsSuccessReducer)\n .addCase(editAllInfoActions.updateCompanyEditAllInfoSuccess, updateCompanyInfoSuccessReducer)\n .addCase(\n editAllInfoActions.updateAllCompanyEditAllInfoSuccess,\n updateAllCompanyEditAllInfoSuccessReducer\n )\n .addCase(\n updateCompanyInfoActions.updateTouchCompanyInfoSuccess,\n updateCompanyInfoSuccessReducer\n )\n .addCase(updateCompanyInfoActions.addTouchToCompanySuccess, addTouchToCompanySuccessReducer)\n .addCase(editFieldsActions.updateVerifyCompanySoftware, updateVerifiedSoftwareSuccessReducer)\n .addCase(UPDATE_COMPANY_OPTX_SCORE, updateCompanyOptxScoreSuccessReducer)\n .addCase(portfolioActions.updateCompanyPortfolioSuccess, addCompanyPortfolioSuccessReducer)\n .addCase(\n seniorDealTeamLeadActions.addSeniorDealTeamLeadSuccess,\n addSeniorDealTeamLeadSuccessReducer\n )\n .addCase(DealTeamActions.addDealTeamMember, addDealTeamSuccessReducer)\n .addCase(tagsActions.addCompanyTagSuccess, addCompanyTagSuccessReducer)\n .addCase(tagsActions.deleteCompanyTagSuccess, deleteCompanyTagSuccessReducer)\n .addCase(\n datePresentedActions.updateCompanyDatePresentedSuccess,\n updateCompanyDatePresentedSuccessReducer\n )\n .addCase(\n userValuesActions.updateCompanyUserValuesSuccess,\n updateCompanyUserValuesSuccessReducer\n )\n .addCase(userValuesActions.updateCompanyTrendingLines, updateCompanyTrendLinesReducer)\n .addCase(\n userValuesActions.updateCompanyEmployeeGrowthPercentage,\n updateCompanyEmployeeGrowthPercentageReducer\n )\n .addCase(primaryContactsActions.editPrimaryContactSuccess, editUserContactSuccessReducer)\n .addCase(bulkSalesloftActions.addContactSuccess, addContactSuccessReducer)\n .addCase(favoritesActions.addFavoriteSuccess, addFavoriteSuccessReducer)\n .addCase(favoritesActions.deleteFavoriteSuccess, deleteFavoriteSuccessReducer)\n // Company Profile\n .addCase(favoriteListsActions.addCompanyToListSuccess, addCompanyToListSuccessReducer)\n .addCase(favoriteListsActions.deleteCompanyFromListSuccess, deleteCompanyToListSuccessReducer)\n .addCase(favoriteListsActions.createFavoriteListSuccess, createCompanyToListSuccessReducer)\n .addCase(favoriteListsPopupActions.addCompanyToListPopupSuccess, addCompanyToListSuccessReducer)\n .addCase(\n favoriteListsPopupActions.deleteCompanyFromListPopupSuccess,\n deleteCompanyToListSuccessReducer\n )\n .addCase(\n favoriteListsPopupActions.createFavoriteListPopupSuccess,\n createCompanyToListSuccessReducer\n )\n .addCase(activeActions.addCompanyActiveSuccess, addCompanyActiveSuccessReducer)\n .addCase(dateFieldsActions.addDateFieldsSuccess, addDateFieldsSuccessReducer)\n .addCase(fundActions.addFundSuccess, addCompanyFundSuccessReducer)\n .addCase(\n companyOportunityTypeActions.addOpportunityTypeSuccess,\n addOpportunityTypeSuccessReducer\n )\n .addCase(\n researchRationaleActions.submitResearchRationaleSuccess,\n submitResearchRationaleSuccessReducer\n )\n .addCase(sendOptxScoreRationaleSuccess, sendOptxScoreRationaleSuccessReducer)\n .addCase(sendNewOptxScoreRationaleSuccess, sendOptxScoreRationaleSuccessReducer)\n .addCase(companyReviewActions.addCompanyReviewSuccess, addCompanyReviewSuccessReducer)\n .addCase(\n opportunityPresentationActions.addFinancialYearSuccess,\n updateOpportunityPresentationSuccessReducer\n )\n .addCase(\n opportunityPresentationActions.updateOpportunityPresentationSuccess,\n updateOpportunityPresentationSuccessReducer\n )\n .addCase(fundingRoundActions.getCompanyFundingRoundsSuccess, companyFundingRoundsSuccessReducer)\n .addCase(actions.opinionAiDescription, loadingStartedReducer)\n .addCase(actions.opinionAiDescriptionSuccess, aiDescriptionSuccessReducer)\n .addCase(actions.opinionAiDescriptionFail, loadingCompletedReducer)\n .addCase(actions.regenerateAiDescription, loadingStartedReducer)\n .addCase(actions.regenerateAiDescriptionFail, loadingCompletedReducer)\n .addCase(actions.regenerateAiDescriptionSuccess, aiDescriptionSuccessReducer)\n .addCase(actions.aiRelationshipSummary, loadingStartedReducer)\n .addCase(actions.aiRelationshipSummarySuccess, aiRelationshipSummarySuccessReducer)\n .addCase(actions.aiRelationshipSummaryFail, loadingCompletedReducer)\n);\n\nexport default reducer;\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { push } from 'react-router-redux';\nimport { Dictionary } from 'lodash';\nimport queryString from 'query-string';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyProfile } from '@optx/models/Company';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { SearchPayload } from '@optx/models/api/contacts';\nimport { APIBoolean } from '@optx/models/api/generic';\nimport {\n OpinionAiDescription,\n RegenerateAiDescription,\n AiDescriptionResponse,\n ViewSimilarCompaniesOnGrid,\n AiRelationshipSummary,\n AiRelationshipSummaryResponse,\n} from './interfaces';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { ChangedCompanyFieldsPayload } from '@optx/features/company/audit-trail/state/interfaces';\n// constants\nimport { CompanyProfileTabs } from '@optx/constants/routes';\n// services\nimport { CompanyService, UserService, FilterService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport { selectors as longCardSelectors } from '@features/long-card/company-card/state';\nimport { actions as userActions, selectors as userSelectors } from '@redux/user/information';\nimport { actions as filterActions } from '@redux/company/filters';\nimport { selectors as gridFilterSelectors } from '@features/grid/filter';\nimport { actions as searchActions } from '@features/grid/search';\nimport { UserInformation } from '@optx/models/user';\nimport {\n actions as auditActions,\n selectors as auditSelectors,\n} from '@features/company/audit-trail/state';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\nimport { getErrorMessage } from '@optx/utils/api/errors';\n\nexport function* fetchCompanyProfileSaga(action: PayloadAction<number>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<false | CompanyProfile> = yield call(\n CompanyService.getProfile,\n companyId\n );\n\n if (res.data && res.data.source_tag) {\n yield put(actions.fetchCompanyProfileSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch company Profile!';\n yield put(actions.fetchCompanyProfileFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Failed to fetch company Profile!';\n yield put(actions.fetchCompanyProfileFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* backToSearchResultsSaga(action: PayloadAction<string>) {\n const referrer = action.payload;\n const isAnalyst: boolean = yield select(userSelectors.getIsAnalyst);\n const isAdmin: boolean = yield select(userSelectors.getIsAdmin);\n\n try {\n yield put(push(referrer));\n\n const user: AxiosResponse<UserInformation> = yield call(UserService.getUserInfo);\n // @ts-ignore\n const filters = yield call(FilterService.getOptions);\n\n if (user.data && filters.data) {\n yield put(userActions.fetchUserInformationSuccess(user.data));\n yield put(\n filterActions.fetchCompanyFiltersSuccess(filters.data.filters, {\n defaultViews: filters.data.default_views,\n searchOrigin: filters.data.search_origin,\n settings: user.data.settings,\n isAnalystOrIsAdmin: isAnalyst || isAdmin,\n })\n );\n } else {\n const errorMessage = 'Failed to fetch User Information!!!';\n yield put(userActions.fetchUserInformationFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch User Information!!!';\n yield put(userActions.fetchUserInformationFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* regenerateAiDescriptionSaga(action: PayloadAction<(value: string) => void>) {\n const callback = action.payload;\n const { tab } = queryString.parse(window.location.search);\n\n try {\n let profile: CompanyProfile;\n\n const profileState: CompanyProfile = yield select(selectors.getProfile);\n const longCardState: CompanyProfile = yield select(longCardSelectors.getProfile);\n\n if (profileState?.company_id) {\n profile = profileState;\n } else {\n profile = longCardState;\n }\n\n const searchPayload: RegenerateAiDescription = {\n companyId: profile.company_id,\n companyUrl: profile.company_url,\n companyName: profile.company_name,\n };\n\n const res: AxiosResponse<AiDescriptionResponse> = yield call(\n CompanyService.fetchRegenerateAiDescription,\n searchPayload\n );\n\n if (res.data && res.data.status) {\n yield put(\n actions.regenerateAiDescriptionSuccess({ ...res.data, companyId: profile.company_id })\n );\n\n callback(res.data.description);\n\n const { pageSize } = yield select(auditSelectors.getPagination);\n\n if (tab === CompanyProfileTabs.HISTORY) {\n const field: string = yield select(auditSelectors.getSearchQuery);\n const optx: APIBoolean = yield select(auditSelectors.getOPTX);\n const internal: APIBoolean = yield select(auditSelectors.getInternal);\n const startDate: string = yield select(auditSelectors.getStartDate);\n const endDate: string = yield select(auditSelectors.getEndDate);\n\n const fetchPayload: ChangedCompanyFieldsPayload = {\n companyId: profile.company_id,\n pagination: { pageNumber: 1, pageSize },\n field,\n internal,\n optx,\n startDate,\n endDate,\n };\n\n yield put(auditActions.fetchChangedCompanyFields(fetchPayload));\n }\n } else {\n const errorMessage = res.data.message;\n yield put(actions.regenerateAiDescriptionFail());\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to regenerate AI Description!');\n yield put(actions.regenerateAiDescriptionFail());\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* opinionAiDescriptionSaga(\n action: PayloadAction<boolean, any, SuccessErrorCallback>\n) {\n const { tab } = queryString.parse(window.location.search);\n\n try {\n const opinion: boolean = action.payload;\n const callback = action.meta;\n\n let profile: CompanyProfile;\n\n const profileState: CompanyProfile = yield select(selectors.getProfile);\n const longCardState: CompanyProfile = yield select(longCardSelectors.getProfile);\n\n if (profileState?.company_id) {\n profile = profileState;\n } else {\n profile = longCardState;\n }\n\n const searchPayload: OpinionAiDescription = {\n companyId: profile.company_id,\n companyUrl: profile.company_url,\n companyName: profile.company_name,\n opinion,\n };\n\n const res: AxiosResponse<AiDescriptionResponse> = yield call(\n CompanyService.fetchOpinionAiDescription,\n searchPayload\n );\n\n if (res.data && res.data.status) {\n yield put(\n actions.opinionAiDescriptionSuccess({ ...res.data, companyId: profile.company_id })\n );\n callback(res.data.description);\n\n const { pageSize } = yield select(auditSelectors.getPagination);\n\n if (tab === CompanyProfileTabs.HISTORY) {\n const field: string = yield select(auditSelectors.getSearchQuery);\n const optx: APIBoolean = yield select(auditSelectors.getOPTX);\n const internal: APIBoolean = yield select(auditSelectors.getInternal);\n const startDate: string = yield select(auditSelectors.getStartDate);\n const endDate: string = yield select(auditSelectors.getEndDate);\n\n const fetchPayload: ChangedCompanyFieldsPayload = {\n companyId: profile.company_id,\n pagination: { pageNumber: 1, pageSize },\n field,\n internal,\n optx,\n startDate,\n endDate,\n };\n\n yield put(auditActions.fetchChangedCompanyFields(fetchPayload));\n }\n } else {\n const errorMessage = res.data.message;\n yield put(actions.opinionAiDescriptionFail());\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to set Opinion for AI Description!');\n yield put(actions.opinionAiDescriptionFail());\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* viewSimilarCompaniesOnGridSaga(action: PayloadAction<ViewSimilarCompaniesOnGrid>) {\n const { pathname } = action.payload;\n const profileInfo: CompanyProfile = yield select(selectors.getProfile);\n const customClearedFilter: Dictionary<PreselectedFilter> = yield select(\n gridFilterSelectors.getCustomClearedFilter('advancedSearch')\n );\n\n const listOfCompetitorsIds = profileInfo.competitors.map(competitor => competitor.company_id);\n\n listOfCompetitorsIds.push(profileInfo.company_id);\n\n const customFilter = {\n ...customClearedFilter,\n similarCompanies: {\n label: profileInfo.company_name,\n value: listOfCompetitorsIds.toString(),\n },\n };\n\n const payloadData: Partial<SearchPayload> = {\n filter: customFilter,\n isSimilarCompaniesSearch: true,\n shouldResetPageNumber: true,\n };\n\n yield put(searchActions.searchCompanies({ gridKey: 'advancedSearch', data: payloadData }));\n yield put(push(pathname));\n}\n\nexport function* aiRelationshipSummarySaga(\n action: PayloadAction<boolean, any, SuccessErrorCallback>\n) {\n try {\n const opinion: boolean = action.payload;\n const callback = action.meta;\n\n let profile: CompanyProfile;\n\n const profileState: CompanyProfile = yield select(selectors.getProfile);\n const longCardState: CompanyProfile = yield select(longCardSelectors.getProfile);\n\n if (profileState?.company_id) {\n profile = profileState;\n } else {\n profile = longCardState;\n }\n\n const searchPayload: AiRelationshipSummary = {\n companyId: profile.company_id,\n companyName: profile.company_name,\n companyOwner: profile.company_owner,\n companyUrl: profile.company_url,\n opinion,\n };\n\n const res: AxiosResponse<AiRelationshipSummaryResponse> = yield call(\n CompanyService.fetchAiRelationshipSummary,\n searchPayload\n );\n\n if (res.data && res.data.status) {\n const updatedRes = {\n ...res.data,\n is_ai_highlights_approved: opinion,\n };\n yield put(actions.aiRelationshipSummarySuccess(updatedRes));\n\n if (callback) {\n callback();\n }\n } else {\n const errorMessage = res.data.message;\n yield put(actions.aiRelationshipSummaryFail());\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to set Relationship Summary Highlights!');\n yield put(actions.aiRelationshipSummaryFail());\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companyProfileSaga() {\n yield takeLatest(actions.fetchCompanyProfile, fetchCompanyProfileSaga);\n yield takeLatest(actions.backToSearchResults, backToSearchResultsSaga);\n yield takeLatest(actions.regenerateAiDescription, regenerateAiDescriptionSaga);\n yield takeLatest(actions.opinionAiDescription, opinionAiDescriptionSaga);\n yield takeLatest(actions.viewSimilarCompaniesOnGrid, viewSimilarCompaniesOnGridSaga);\n yield takeLatest(actions.aiRelationshipSummary, aiRelationshipSummarySaga);\n}\n","export const addonManagementQuickFilters = ['stage', 'active', 'next_steps'];\n","import { Dictionary } from 'lodash';\nimport { createSelector } from 'reselect';\nimport { GroupedOptionsType } from 'react-select';\nimport createCachedSelector from 're-reselect';\nimport { AppState } from '@optx/redux/interfaces';\n// models\nimport {\n CompanyFilterColumn,\n FilterOptions,\n BaseFilter,\n CompanyFormRationale,\n} from '@optx/models/filters';\nimport { FinancialFields } from '@optx/models/Financial';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { addonManagementQuickFilters } from '@redux/company/filters/constants';\n// utils\nimport { preProcessSearch } from '@optx/utils/search';\nimport { getFilterSourceData } from '@optx/utils/filters/filterHelpers';\n// redux\nimport { selectors as userInformationSelectors } from '@redux/user/information';\n\nconst selectCompanyFilters = (state: AppState) => state.filters;\n\nexport const isLoading = createSelector(selectCompanyFilters, state => state.loading);\nexport const shouldNotFetch = createSelector(selectCompanyFilters, state => state.shouldNotFetch);\n\nexport const shouldFetchCompanyFilters = createSelector(\n selectCompanyFilters,\n shouldNotFetch,\n userInformationSelectors.loaded,\n (state, shouldNotFetch, loadedUserInformation) => {\n return loadedUserInformation && !state.fetchedAt && !state.loading && !shouldNotFetch;\n }\n);\n\nexport const filtersLoaded = createSelector(selectCompanyFilters, state => !!state.fetchedAt);\n\nexport const getCompanyFilters = createSelector(selectCompanyFilters, state => state.data || []);\n\nexport const getDefaultViews = createSelector(selectCompanyFilters, state => state.defaultViews);\n\nexport const getDefaultViewData = createSelector(\n selectCompanyFilters,\n state => state.defaultViews.data\n);\n\nexport const getDefaultFilters = createSelector(\n selectCompanyFilters,\n state => state.defaultViews.filters\n);\n\nexport const getDefaultSearchkey = createSelector(selectCompanyFilters, state =>\n preProcessSearch(state.defaultViews.searchKey)\n);\n\nexport const getDefaultSorting = createSelector(\n selectCompanyFilters,\n state => state.defaultViews.sortBy\n);\n\nexport const getDefaultColumns = createSelector(\n selectCompanyFilters,\n state => state.defaultViews.columns\n);\n\nexport const getDefaultColumnOrder = createSelector(\n selectCompanyFilters,\n state => state.defaultViews.columnOrder\n);\n\nexport const getDefaultPinnedColumns = createSelector(\n selectCompanyFilters,\n state => state.defaultViews.pinnedColumns\n);\n\nexport const getFilterData = createCachedSelector(\n selectCompanyFilters,\n (state: AppState, column: CompanyFilterColumn) => column,\n (state, column) => {\n const filter = state.filters[column];\n const filterData = filter ? filter.data! : [];\n\n return filterData;\n }\n)((state, column) => column);\n\nexport const getFormRationales = createCachedSelector(\n selectCompanyFilters,\n (state: AppState, column: CompanyFormRationale) => column,\n (state, column) => {\n const rationale = state.formRationale[column];\n\n return rationale;\n }\n)((state, column) => column);\n\nexport const getAlertSettings = createSelector(selectCompanyFilters, state => state.alertSettings);\n\nexport const getFilterLocations = createSelector(selectCompanyFilters, state => {\n const column: CompanyFilterColumn = 'location';\n const filter = state.filters[column];\n const filterData = filter ? filter.data! : [];\n\n return filterData;\n});\n\nexport const getLocationName = createCachedSelector(\n selectCompanyFilters,\n (state: AppState, shortName: string) => shortName,\n (state, shortName) => {\n const locations = state.normalizedFilters.location;\n\n return locations[shortName] || '';\n }\n)((state, shortName) => shortName);\n\nexport const getPreselectedFilters = createSelector(\n selectCompanyFilters,\n state => state.preselected\n);\n\nfunction getSecondaryQuickFilters(filters: Dictionary<BaseFilter<any>>) {\n return Object.fromEntries(\n Object.entries(filters).filter(([column, filterOptions]) => filterOptions.is_quick_filter)\n );\n}\n\nexport const getFiltersMap = createSelector(selectCompanyFilters, state => state.filters);\nexport const getSecondaryQuickFiltersMap = createSelector(selectCompanyFilters, state =>\n getSecondaryQuickFilters(state.filters)\n);\nexport const selectOptions = createSelector(selectCompanyFilters, state => state.options);\nexport const filterSearchOrigin = createSelector(selectCompanyFilters, state => state.searchOrigin);\n\nfunction getFilterOptions(column: string, filtersOptions: Dictionary<FilterOptions | undefined>) {\n return filtersOptions[column];\n}\n\n// Multi select filters\nexport const getSelectOptions = createCachedSelector(\n selectOptions,\n (state: AppState, filterKey: string) => filterKey,\n (filtersOptions, filterKey) => {\n const options = getFilterOptions(filterKey, filtersOptions) as\n | Array<SelectOption>\n | GroupedOptionsType<SelectOption>\n | undefined;\n\n return options || [];\n }\n)((state, filterKey) => filterKey);\n\nexport const getFilterSearchOrigin = createCachedSelector(\n filterSearchOrigin,\n (state: AppState, searchOriginKey: string) => searchOriginKey,\n (filterSearchOrigin, searchOriginKey) => {\n const searchOrigin = filterSearchOrigin?.find(\n searchOriginItem => searchOriginItem.name === searchOriginKey\n );\n\n return searchOrigin?.value;\n }\n)((state, searchOriginKey) => searchOriginKey);\n\nexport const getSecondaryQuickFiltersMapAddonManagement = createSelector(\n selectCompanyFilters,\n state => {\n return Object.fromEntries(\n Object.entries(state.filters).filter(([column, filterOptions]) =>\n addonManagementQuickFilters.includes(filterOptions.column)\n )\n );\n }\n);\n\nexport const getNextSteps = createSelector(selectCompanyFilters, state => state.nextSteps);\n\nexport const getFinancialFilterOptions = (filterName: FinancialFields) =>\n createSelector(getCompanyFilters, filters => {\n const filterData = getFilterSourceData(filters, filterName);\n\n let options: SelectOption[] = [];\n\n if (filterData) {\n if (filterName === 'ebitda_numeric') {\n const ebitdaOptions: SelectOption[] = (options = filterData.data[1].filter(\n (option: SelectOption) => option.value !== 'blank' && option.value !== 'not_blank'\n ));\n\n options = [...ebitdaOptions];\n }\n\n if (filterData.range_values) {\n options = [...options, ...filterData.range_values];\n }\n }\n\n return options;\n });\n\nexport const companyTypeOptions = createSelector(selectOptions, state => {\n const options = getFilterOptions('company_type', state) as\n | Array<SelectOption>\n | GroupedOptionsType<SelectOption>\n | undefined;\n\n if (options && options.length !== 0) {\n const filterData = (options as SelectOption<string>[]).map(item => ({\n value: item.value,\n label: item.label,\n }));\n\n return filterData;\n }\n\n return [];\n});\n\nexport const getRevenueModelOptions = createSelector(selectOptions, state => {\n const options = getFilterOptions('revenue_model', state);\n\n if (options && options.length !== 0) {\n const filterData = (options as SelectOption<string>[]).filter(item => {\n if (item.value !== 'blank') {\n return {\n value: item.value,\n label: item.label,\n };\n }\n });\n\n return filterData;\n }\n\n return [];\n});\nexport const getTouches = createSelector(getFiltersMap, state => {\n const scheduleTouches = state.schedule_touch;\n\n if (scheduleTouches) {\n const options = scheduleTouches.data;\n\n if (options?.length === 0) return [];\n\n return [{ value: 'All', name: 'All', label: 'All' }, ...options];\n }\n\n return [];\n});\n\nexport const getDeliveryModelOptions = createSelector(selectOptions, state => {\n const options = getFilterOptions('delivery_model', state);\n\n if (options && options.length !== 0) {\n const filterData = (options as SelectOption<string>[]).filter(item => {\n if (item.value !== 'blank') {\n return {\n value: item.value,\n label: item.label,\n };\n }\n });\n\n return filterData;\n }\n\n return [];\n});\n\nexport const getCashflowOptions = createSelector(selectOptions, state => {\n const options = getFilterOptions('cashflow', state);\n\n if (options && options.length !== 0) {\n const filterData = (options as SelectOption<string>[]).map(item => ({\n value: item.value,\n label: item.label,\n }));\n\n return filterData;\n }\n\n return [];\n});\n\nexport const getDealTypeOptions = createSelector(selectOptions, state => {\n const options = (getFilterOptions('deal_type', state) ?? []) as SelectOption[];\n\n if (options && options.length !== 0) {\n const filterData = (options as SelectOption<string>[]).filter(item => {\n if (item.value !== 'blank') {\n return {\n value: item.value,\n label: item.label,\n };\n }\n });\n\n return filterData;\n }\n\n return [];\n});\n\nexport const getCustomerTypeOptions = createSelector(selectOptions, state => {\n const options = (getFilterOptions('customer_type', state) ?? []) as SelectOption[];\n\n if (options && options.length !== 0) {\n const filterData = (options as SelectOption<string>[]).filter(item => {\n if (item.value !== 'blank') {\n return {\n value: item.value,\n label: item.label,\n };\n }\n });\n\n return filterData;\n }\n\n return [];\n});\n\nexport const getSalesAndMarketingOptions = createSelector(selectOptions, state => {\n const options = (getFilterOptions('sales_and_marketing', state) ?? []) as SelectOption[];\n\n if (options && options.length !== 0) {\n const filterData = (options as SelectOption<string>[]).filter(item => {\n if (item.value !== 'blank') {\n return {\n value: item.value,\n label: item.label,\n };\n }\n });\n\n return filterData;\n }\n\n return [];\n});\n\nexport const getSalesCycleOptions = createSelector(selectOptions, state => {\n const options = getFilterOptions('sales_cycle', state);\n\n if (options && options.length !== 0) {\n const filterData = (options as SelectOption<string>[]).filter(item => {\n if (item.value !== 'blank') {\n return {\n value: item.value,\n label: item.label,\n };\n }\n });\n\n return filterData;\n }\n\n return [];\n});\n\nexport const getArchitectureOptions = createSelector(selectOptions, state => {\n const options = getFilterOptions('architecture', state);\n\n if (options && options.length !== 0) {\n const filterData = (options as SelectOption<string>[]).filter(item => {\n if (item.value !== 'blank') {\n return {\n value: item.value,\n label: item.label,\n };\n }\n });\n\n return filterData;\n }\n\n return [];\n});\n\nexport const getCloudProviderOptions = createSelector(selectOptions, state => {\n const options = getFilterOptions('cloud_provider', state);\n\n if (options && options.length !== 0) {\n const filterData = (options as SelectOption<string>[]).filter(item => {\n if (item.value !== 'blank') {\n return {\n value: item.value,\n label: item.label,\n };\n }\n });\n\n return filterData;\n }\n\n return [];\n});\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\nimport { Dictionary, isEqual } from 'lodash';\n// models\nimport Company from '@optx/models/Company';\nimport {\n TouchesCreateForm,\n AddTouchToCompanyPayload,\n TouchesFinancialPayload,\n} from '@models/api/touches';\nimport {\n CompanyTouchResponse,\n CompanyTouchSuccessResponse,\n ErrorCompanyTouchResponse,\n} from '@models/company/CompanyTouch';\nimport { BaseFilter, FilterGroup } from '@optx/models/filters';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { EditCompanyTouches, FiltersResponse, validationErrorsTypes } from './interfaces';\nimport { CompanyFieldsGroup } from '@optx/models/companyFields';\nimport { PsgParticipant } from '@models/api/user';\nimport { FinancialYearsChangeLog } from '@optx/features/edit-all-info/state/interfaces';\n//constants\nimport { TOUCHES_PER_PAGE } from '@features/long-card/company-card';\n// services\nimport { FilterService, CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\nimport { formatFinalValues } from '@utils/touches';\nimport { getRouteAlias } from '@optx/utils/routes';\n// redux\nimport { actions as relationshipManagementActions } from '@redux/company/relationship-management';\nimport {\n actions as touchesActions,\n selectors as touchesSelectors,\n} from '@features/company-touches/';\nimport { actions as presentationActions } from '@redux/company/opportunity-presentation/index';\nimport { selectors as cardSelectors } from '@features/long-card/company-card';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { actions as editFieldActions } from '@optx/features/company/edit-fields/state';\nimport { selectors as editAllInfoSelectors } from '@optx/features/edit-all-info/state';\nimport * as actions from './actions';\nimport { selectors as touchSelectors } from '../company-touches';\nimport { actions as fundingRoundsActions } from '@redux/company/funding-rounds';\n\nlet addTouchCompanyCallback: (() => void) | undefined;\n\nfunction* initCompanyTouchesDialogSaga(action: PayloadAction<number | undefined>) {\n const psgParticipants: string[] = yield select(touchSelectors.getPsgParticipants);\n const contacts: Partial<CompanyUserContact>[] = yield select(\n touchSelectors.getTouchCompanyContacts\n );\n\n if (!psgParticipants.length) {\n yield put(actions.getPsgParticipants());\n }\n\n if (!contacts.length && action.payload) {\n yield put(actions.getTouchCompanyContacts(action.payload));\n }\n\n yield put(actions.getTouchesFilters());\n}\n\nfunction* toggleCompanyTouchesSaga(action: PayloadAction<EditCompanyTouches>) {\n const isOpen: boolean = yield select(touchSelectors.isOpen);\n const psgParticipants: string[] = yield select(touchSelectors.getPsgParticipants);\n const touchFilters: Dictionary<BaseFilter> | null = yield select(touchSelectors.getTouchFilters);\n const { callback } = action.payload;\n\n addTouchCompanyCallback = callback;\n\n if (action.payload.companyId && isOpen) {\n if (!psgParticipants.length) {\n yield put(actions.getPsgParticipants());\n }\n\n if (!touchFilters) {\n yield put(actions.getTouchesFilters());\n }\n\n yield put(actions.getTouchFinancialFilters(action.payload.companyId));\n\n if (!action.payload.company?.contacts?.length) {\n yield put(actions.getTouchCompanyContacts(action.payload.companyId));\n }\n }\n}\n\nfunction* addTouchToCompanySaga(action: PayloadAction<AddTouchToCompanyPayload>) {\n const { touchInfo: touchForm, additionalCompanyInfo } = action.payload;\n\n yield put(customGlobalLoaderActions.toggle({ loading: true }));\n\n let validAction = true;\n\n try {\n let errorMessage = touchForm.touchId\n ? 'Failed to edit Touch!'\n : 'Failed to create a new Touch!';\n\n // throw an error if initiatorId is 0, meaning that\n // the selected initiator should not be able to interact with touches\n if (touchForm.initiatorId === 0 || touchForm.initiatorId === null) {\n yield put(actions.addTouchToCompanyFail(errorMessage));\n NotificationService.error(errorMessage);\n\n return;\n }\n\n const res: AxiosResponse<CompanyTouchResponse> = yield call(\n CompanyService.addTouches,\n touchForm as TouchesCreateForm\n );\n let resSchedule: AxiosResponse<CompanyTouchResponse>;\n\n if (res.data && res.data.success) {\n if (additionalCompanyInfo) {\n yield put(editFieldActions.updateFields(additionalCompanyInfo));\n } else {\n yield put(actions.addTouchToCompanyErrorValidation('noEditFieldErrors'));\n }\n\n yield put(actions.addTouchToCompanySuccess(res.data.payload as CompanyTouchSuccessResponse));\n addTouchCompanyCallback && addTouchCompanyCallback();\n\n const successMessage = touchForm.touchId\n ? 'Touch edited successfully!'\n : 'New Touch added successfully!';\n\n if (touchForm.scheduleFollow) {\n const touchSchedule = {\n ...touchForm,\n touchDate: touchForm.scheduleTouchDate,\n touchId: null,\n touchType: 'schedule',\n type: touchForm.scheduleType,\n typeId: touchForm.scheduleTypeId,\n subject: touchForm.scheduleSubject,\n textarea: '',\n scheduleFollow: false,\n };\n\n resSchedule = yield call(CompanyService.addTouches, touchSchedule as TouchesCreateForm);\n\n if (resSchedule.data && resSchedule.data.success) {\n yield put(\n actions.addTouchToCompanySuccess(\n resSchedule.data.payload as CompanyTouchSuccessResponse\n )\n );\n const successScheduleMessage = 'New Touch added successfully!';\n NotificationService.success(successScheduleMessage);\n } else {\n let errorMessageSchedule = 'Failed to create a new schedule Touch!';\n yield put(actions.addTouchToCompanyFail(errorMessageSchedule));\n NotificationService.error(errorMessageSchedule);\n validAction = false;\n }\n } else {\n NotificationService.success(successMessage);\n }\n\n yield put(actions.addTouchToCompanyErrorValidation('noTouchErrors'));\n\n const route = getRouteAlias();\n\n if (route === 'companyProfile') {\n // @ts-ignore\n const companyId: number | null = yield select(touchesSelectors.search.companyId);\n const pagination: PageInfo = {\n pageNumber: 1,\n pageSize: 25,\n };\n\n const initiator: string | undefined = yield select(\n // @ts-ignore\n touchesSelectors.filters.getCurrentInitiator\n );\n const currentType: string | undefined = yield select(\n // @ts-ignore\n touchesSelectors.filters.getTouchTabFilter\n );\n\n if (companyId && companyId.toString() === touchForm.companyId) {\n const filtersPayload = {\n companyId,\n currentInitiator: initiator,\n currentType,\n };\n yield put(touchesActions.filters.fetchTouchesFilters(filtersPayload));\n yield put(\n touchesActions.search.fetchTouches({\n companyId,\n pagination: pagination,\n initiatorId: initiator,\n touchType: currentType,\n })\n );\n\n yield put(relationshipManagementActions.fetchRelationshipManagement(companyId));\n }\n } else {\n const hasCompanyCard: boolean = yield select(touchSelectors.hasCompanyCard);\n\n if (hasCompanyCard) {\n const selectedCompanyCard: Company = yield select(cardSelectors.getProfile);\n\n if (selectedCompanyCard?.company_id) {\n yield put(\n touchesActions.search.fetchTouches({\n companyId: selectedCompanyCard.company_id,\n pagination: { pageSize: TOUCHES_PER_PAGE, pageNumber: 1 },\n })\n );\n }\n }\n }\n } else {\n if ((res.data?.payload as ErrorCompanyTouchResponse).errorMsg) {\n errorMessage = (res.data?.payload as ErrorCompanyTouchResponse).errorMsg;\n }\n\n yield put(actions.addTouchToCompanyFail(errorMessage));\n NotificationService.error(errorMessage);\n validAction = false;\n }\n } catch (e: any) {\n validAction = false;\n\n const errorMessage = touchForm.touchId\n ? getErrorMessage(e, 'Failed to edit Touch, Server error!')\n : getErrorMessage(e, 'Create new touch failed, Server error!');\n\n NotificationService.error(errorMessage);\n yield put(actions.addTouchToCompanyFail(errorMessage));\n }\n\n const initialFinancialState: Partial<TouchesCreateForm> | null = yield select(\n touchSelectors.getInitialFinancialState\n );\n const financialTouch: Array<CompanyFieldsGroup> = yield select(touchSelectors.getTouchFinancials);\n const financialYearsChangeLog: FinancialYearsChangeLog = yield select(\n editAllInfoSelectors.getFinancialYearsChangeLog\n );\n\n const initialFinancialData = formatFinalValues(\n { companyId: touchForm.companyId },\n initialFinancialState,\n financialTouch\n );\n\n const financialData = formatFinalValues(\n touchForm,\n initialFinancialState,\n financialTouch,\n financialYearsChangeLog\n );\n\n if (validAction) {\n try {\n if (financialData && !isEqual(initialFinancialData, financialData)) {\n const normalizedFinancialData = {\n ...financialData,\n funding: {\n ...financialData.funding,\n capital_raised:\n initialFinancialData?.funding?.capital_raised !== null &&\n financialData?.funding?.capital_raised === null\n ? 0\n : financialData?.funding?.capital_raised,\n },\n };\n const resFinancialInfo: AxiosResponse<TouchesFinancialPayload> = yield call(\n CompanyService.updateCompanyInfo,\n normalizedFinancialData as Partial<TouchesFinancialPayload>\n );\n\n if (resFinancialInfo.data) {\n const financialSuccessMessage = 'Company Info updated successfully!';\n NotificationService.success(financialSuccessMessage);\n\n const finacialResponse = {\n ...financialData,\n financials: resFinancialInfo.data.financials,\n funding: resFinancialInfo.data.funding,\n };\n\n yield put(actions.updateTouchCompanyInfoSuccess(finacialResponse));\n\n yield put(actions.addTouchToCompanyErrorValidation('noFinancialErrors'));\n\n if (touchForm.companyId) {\n yield put(fundingRoundsActions.getCompanyFundingRounds(Number(touchForm.companyId)));\n yield put(\n presentationActions.fetchOpportunityPresentation(Number(touchForm.companyId))\n );\n }\n } else {\n const financialErrorMessage = 'Failed to update Company Info!';\n NotificationService.error(financialErrorMessage);\n yield put(actions.addTouchToCompanyFail(financialErrorMessage));\n }\n } else {\n yield put(actions.addTouchToCompanyErrorValidation('noFinancialErrors'));\n }\n } catch (e: any) {\n const errorMessageCatch = getErrorMessage(e, 'Failed to update Company Info!');\n NotificationService.error(errorMessageCatch);\n yield put(actions.addTouchToCompanyFail(errorMessageCatch));\n }\n } else {\n yield put(actions.addTouchToCompanyErrorValidation('noFinancialErrors'));\n }\n}\n\nfunction* getPsgParticipantsSaga() {\n try {\n const res: AxiosResponse<PsgParticipant[]> = yield call(CompanyService.getPsgContacts);\n\n if (res.data) {\n yield put(actions.getPsgParticipantsSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch PSG user list!';\n yield put(actions.getPsgParticipantsFail(errorMessage));\n\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch PSG user list!');\n yield put(actions.getPsgParticipantsFail(errorMessage));\n\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* getTouchesFiltersSaga() {\n try {\n const res: AxiosResponse<FiltersResponse> = yield call(\n FilterService.getOptions,\n FilterGroup.Touches\n );\n\n if (res.data) {\n yield put(actions.getTouchesFiltersSuccess(res.data.filters));\n } else {\n let errorMessage = 'Failed to load filters!';\n\n yield put(actions.getTouchesFiltersFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to load filters!');\n NotificationService.error(errorMessage);\n yield put(actions.getTouchesFiltersFail(errorMessage));\n }\n}\n\nfunction* getTouchCompanyContactsSaga(action: PayloadAction<number>) {\n try {\n const res: AxiosResponse<Array<CompanyUserContact>> = yield call(\n CompanyService.getPrimaryContacts,\n action.payload\n );\n\n if (res.data) {\n yield put(actions.getTouchCompanyContactsSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch contacts!';\n yield put(actions.getTouchCompanyContactsFail(errorMessage));\n NotificationService.error(errorMessage);\n yield put(customGlobalLoaderActions.toggle({ loading: false }));\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch contacts!');\n yield put(actions.getTouchCompanyContactsFail(errorMessage));\n NotificationService.error(errorMessage);\n yield put(customGlobalLoaderActions.toggle({ loading: false }));\n }\n}\n\nfunction* editTouchSaga(action: PayloadAction<AddTouchToCompanyPayload>) {\n const { touchInfo: touchForm, additionalCompanyInfo } = action.payload;\n\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n\n try {\n const res: AxiosResponse<CompanyTouchResponse> = yield call(\n CompanyService.addTouches,\n touchForm as TouchesCreateForm\n );\n\n if (res.data && res.data.success) {\n if (additionalCompanyInfo) {\n yield put(editFieldActions.updateFields(additionalCompanyInfo));\n }\n\n yield put(actions.addTouchToCompanySuccess(res.data.payload as CompanyTouchSuccessResponse));\n\n const successMessage = 'Touch was edited successfully!';\n\n NotificationService.success(successMessage);\n\n // @ts-ignore\n const companyId: number | null = yield select(touchesSelectors.search.companyId);\n const pagination: PageInfo = {\n pageNumber: 1,\n pageSize: 25,\n };\n const currentInitiator: string | undefined = yield select(\n // @ts-ignore\n touchesSelectors.filters.getCurrentInitiator\n );\n const currentType: string | undefined = yield select(\n // @ts-ignore\n touchesSelectors.filters.getTouchTabFilter\n );\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n\n if (companyId) {\n const filtersPayload = {\n companyId,\n currentInitiator: currentInitiator,\n currentType,\n };\n yield put(touchesActions.filters.fetchTouchesFilters(filtersPayload));\n\n yield put(\n touchesActions.search.fetchTouches({\n companyId,\n pagination: pagination,\n initiatorId: currentInitiator,\n touchType: currentType,\n })\n );\n }\n\n const hasCompanyCard: boolean = yield select(touchSelectors.hasCompanyCard);\n\n if (hasCompanyCard) {\n const selectedCompanyCard: Company = yield select(cardSelectors.getProfile);\n\n if (selectedCompanyCard?.company_id) {\n yield put(\n touchesActions.search.fetchTouches({\n companyId: selectedCompanyCard.company_id,\n pagination: { pageSize: TOUCHES_PER_PAGE, pageNumber: 1 },\n })\n );\n }\n }\n } else {\n let errorMessage = 'Failed to edit Touch!';\n\n if ((res.data?.payload as ErrorCompanyTouchResponse).errorMsg) {\n errorMessage = (res.data?.payload as ErrorCompanyTouchResponse).errorMsg;\n }\n\n yield put(actions.editTouchFail(errorMessage));\n NotificationService.error(errorMessage);\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Edit touch failed, Server error!');\n NotificationService.error(errorMessage);\n yield put(actions.editTouchFail(errorMessage));\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n}\n\nfunction* getTouchFinancialFiltersSaga(action: PayloadAction<string>) {\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n\n try {\n const res: AxiosResponse<CompanyFieldsGroup[]> = yield call(\n CompanyService.getCompanyInfo,\n action.payload\n );\n\n if (res.data) {\n yield put(actions.getTouchFinancialFiltersSuccess(res.data));\n } else {\n const errorMessage = 'Failed to load financials!';\n yield put(actions.getTouchFinancialFiltersFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to load financials!');\n NotificationService.error(errorMessage);\n yield put(actions.getTouchFinancialFiltersFail(errorMessage));\n }\n\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n}\n\nfunction* addTouchToCompanySuccessSaga(action: PayloadAction<validationErrorsTypes>) {\n const noErrorsOnSubmitState: boolean = yield select(touchSelectors.getNoErrorsOnSubmitState);\n\n if (noErrorsOnSubmitState) {\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n}\n\nfunction* addTouchToCompanyFailSaga(action: PayloadAction<string>) {\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n}\n\nexport default function* touchSaga() {\n yield takeLatest(actions.initCompanyTouchesDialog, initCompanyTouchesDialogSaga);\n yield takeLatest(actions.toggleCompanyTouchesDialog, toggleCompanyTouchesSaga);\n yield takeLatest(actions.getTouchCompanyContacts, getTouchCompanyContactsSaga);\n yield takeLatest(actions.getPsgParticipants, getPsgParticipantsSaga);\n yield takeLatest(actions.getTouchesFilters, getTouchesFiltersSaga);\n yield takeLatest(actions.getTouchFinancialFilters, getTouchFinancialFiltersSaga);\n yield takeLatest(actions.addTouchToCompany, addTouchToCompanySaga);\n yield takeLatest(actions.addTouchToCompanyErrorValidation, addTouchToCompanySuccessSaga);\n yield takeLatest(actions.addTouchToCompanyFail, addTouchToCompanyFailSaga);\n yield takeLatest(actions.editTouch, editTouchSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { AddTouchToCompanyPayload, TouchesFinancialPayload } from '@models/api/touches';\nimport { FilterSource } from '@models/filters';\nimport { CompanyFieldsGroup } from '@optx/models/companyFields';\nimport { PsgParticipant } from '@models/api/user';\nimport { SelectOption } from '@optx/models/Option';\nimport { CompanyTouchSuccessResponse } from '@optx/models/company/CompanyTouch';\nimport {\n INIT_COMPANY_TOUCHES_DIALOG,\n TOGGLE_COMPANY_TOUCHES_DIALOG,\n ADD_COMPANY_TOUCHES,\n ADD_COMPANY_TOUCHES_SUCCESS,\n ADD_COMPANY_TOUCHES_FAIL,\n ADD_COMPANY_TOUCHES_ERROR_VALIDATION,\n GET_PSG_PARTICIPANTS,\n GET_PSG_PARTICIPANTS_SUCCESS,\n GET_PSG_PARTICIPANTS_FAIL,\n GET_TOUCHES_COMPANY_CONTACTS,\n GET_TOUCHES_COMPANY_CONTACTS_SUCCESS,\n GET_TOUCHES_COMPANY_CONTACTS_FAIL,\n GET_TOUCHES_FILTERS,\n GET_TOUCHES_FILTERS_SUCCESS,\n GET_TOUCHES_FILTERS_FAIL,\n CHANGE_MODAL_TITLE,\n CHANGE_SAVE_BTN_STATUS,\n EDIT_TOUCH,\n EDIT_TOUCH_FAIL,\n GET_TOUCHES_FINANCIAL_FILTERS,\n GET_TOUCHES_FINANCIAL_FILTERS_SUCCESS,\n GET_TOUCHES_FINANCIAL_FILTERS_FAIL,\n UPDATE_TOUCH_COMPANY_INFO_SUCCESS,\n UPDATE_TOUCH_COMPANY_INFO_FAIL,\n CLEAR_ADDITIONAL_FIELDS_ERROR,\n SET_ADDITIONAL_FIELDS_ERROR,\n CHANGE_ADDITIONAL_FIELDS_ERROR_TEXT,\n CHANGE_SAVE_BTN_STATUS_BY_ADDITIONAL_FIELDS,\n} from './actionTypes';\nimport { EditCompanyTouches, ChangeErrorText, validationErrorsTypes } from './interfaces';\n\nexport const initCompanyTouchesDialog = createAction<number | undefined>(\n INIT_COMPANY_TOUCHES_DIALOG\n);\n\nexport const toggleCompanyTouchesDialog = createAction<EditCompanyTouches>(\n TOGGLE_COMPANY_TOUCHES_DIALOG\n);\n\nexport const getPsgParticipants = createAction(GET_PSG_PARTICIPANTS);\nexport const getPsgParticipantsSuccess = createAction<PsgParticipant[]>(\n GET_PSG_PARTICIPANTS_SUCCESS\n);\nexport const getPsgParticipantsFail = createAction<string>(GET_PSG_PARTICIPANTS_FAIL);\n\nexport const getTouchesFilters = createAction(GET_TOUCHES_FILTERS);\nexport const getTouchesFiltersSuccess = createAction<Array<FilterSource>>(\n GET_TOUCHES_FILTERS_SUCCESS\n);\nexport const getTouchesFiltersFail = createAction<string>(GET_TOUCHES_FILTERS_FAIL);\n\nexport const getTouchCompanyContacts = createAction<number>(GET_TOUCHES_COMPANY_CONTACTS);\nexport const getTouchCompanyContactsSuccess = createAction<Array<CompanyUserContact>>(\n GET_TOUCHES_COMPANY_CONTACTS_SUCCESS\n);\nexport const getTouchCompanyContactsFail = createAction<string>(GET_TOUCHES_COMPANY_CONTACTS_FAIL);\n\nexport const addTouchToCompany = createAction<AddTouchToCompanyPayload>(ADD_COMPANY_TOUCHES);\nexport const addTouchToCompanySuccess = createAction<CompanyTouchSuccessResponse>(\n ADD_COMPANY_TOUCHES_SUCCESS\n);\nexport const addTouchToCompanyErrorValidation = createAction<validationErrorsTypes>(\n ADD_COMPANY_TOUCHES_ERROR_VALIDATION\n);\nexport const addTouchToCompanyFail = createAction<string>(ADD_COMPANY_TOUCHES_FAIL);\n\nexport const changeModalTitle = createAction<string>(CHANGE_MODAL_TITLE);\n\nexport const changeSaveBtnStatus = createAction<string | null>(CHANGE_SAVE_BTN_STATUS);\n\nexport const changeSaveBtnStatusByAdditionalFields = createAction<boolean>(\n CHANGE_SAVE_BTN_STATUS_BY_ADDITIONAL_FIELDS\n);\n\nexport const editTouch = createAction<AddTouchToCompanyPayload>(EDIT_TOUCH);\nexport const editTouchFail = createAction<string>(EDIT_TOUCH_FAIL);\n\nexport const getTouchFinancialFilters = createAction<string | number>(\n GET_TOUCHES_FINANCIAL_FILTERS\n);\nexport const getTouchFinancialFiltersSuccess = createAction<Array<CompanyFieldsGroup>>(\n GET_TOUCHES_FINANCIAL_FILTERS_SUCCESS\n);\nexport const getTouchFinancialFiltersFail = createAction<string>(\n GET_TOUCHES_FINANCIAL_FILTERS_FAIL\n);\n\nexport const updateTouchCompanyInfoSuccess = createAction<Partial<TouchesFinancialPayload>>(\n UPDATE_TOUCH_COMPANY_INFO_SUCCESS\n);\nexport const updateTouchCompanyInfoFail = createAction<string>(UPDATE_TOUCH_COMPANY_INFO_FAIL);\n\nexport const clearAdditionalFieldsError = createAction(CLEAR_ADDITIONAL_FIELDS_ERROR);\nexport const setAdditionalFieldsError = createAction(\n SET_ADDITIONAL_FIELDS_ERROR,\n (error: string, errorReasonValue: Dictionary<SelectOption>) => ({\n payload: error,\n meta: errorReasonValue,\n })\n);\nexport const changeAdditionalFieldsErrorText = createAction<ChangeErrorText>(\n CHANGE_ADDITIONAL_FIELDS_ERROR_TEXT\n);\n","export const INIT_COMPANY_TOUCHES_DIALOG = 'INIT_COMPANY_TOUCHES_DIALOG';\nexport const TOGGLE_COMPANY_TOUCHES_DIALOG = 'TOGGLE_COMPANY_TOUCHES_DIALOG';\n\nexport const GET_TOUCHES_COMPANY_CONTACTS = 'GET_TOUCHES_COMPANY_CONTACTS';\nexport const GET_TOUCHES_COMPANY_CONTACTS_SUCCESS = 'GET_TOUCHES_COMPANY_CONTACTS_SUCCESS';\nexport const GET_TOUCHES_COMPANY_CONTACTS_FAIL = 'GET_TOUCHES_COMPANY_CONTACTS_FAIL';\n\nexport const GET_PSG_PARTICIPANTS = 'GET_PSG_PARTICIPANTS';\nexport const GET_PSG_PARTICIPANTS_SUCCESS = 'GET_PSG_PARTICIPANTS_SUCCESS';\nexport const GET_PSG_PARTICIPANTS_FAIL = 'GET_PSG_PARTICIPANTS_FAIL';\n\nexport const GET_TOUCHES_FILTERS = 'GET_TOUCHES_FILTERS';\nexport const GET_TOUCHES_FILTERS_SUCCESS = 'GET_TOUCHES_FILTERS_SUCCESS';\nexport const GET_TOUCHES_FILTERS_FAIL = 'GET_TOUCHES_FILTERS_FAIL';\n\nexport const ADD_COMPANY_TOUCHES = 'ADD_COMPANY_TOUCHES';\nexport const ADD_COMPANY_TOUCHES_SUCCESS = 'ADD_COMPANY_TOUCHES_SUCCESS';\nexport const ADD_COMPANY_TOUCHES_ERROR_VALIDATION = 'ADD_COMPANY_TOUCHES_ERROR_VALIDATION';\nexport const ADD_COMPANY_TOUCHES_FAIL = 'ADD_COMPANY_TOUCHES_FAIL';\n\nexport const CHANGE_MODAL_TITLE = 'CHANGE_MODAL_TITLE';\n\nexport const CHANGE_SAVE_BTN_STATUS = 'CHANGE_SAVE_BTN_STATUS';\nexport const CHANGE_SAVE_BTN_STATUS_BY_ADDITIONAL_FIELDS =\n 'CHANGE_SAVE_BTN_STATUS_BY_ADDITIONAL_FIELDS';\n\nexport const EDIT_TOUCH = 'EDIT_TOUCH';\nexport const EDIT_TOUCH_FAIL = 'EDIT_TOUCH_FAIL';\n\nexport const GET_TOUCHES_FINANCIAL_FILTERS = 'GET_TOUCHES_FINANCIAL_FILTERS';\nexport const GET_TOUCHES_FINANCIAL_FILTERS_SUCCESS = 'GET_TOUCHES_FINANCIAL_FILTERS_SUCCESS';\nexport const GET_TOUCHES_FINANCIAL_FILTERS_FAIL = 'GET_TOUCHES_FINANCIAL_FILTERS_FAIL';\n\nexport const UPDATE_TOUCH_COMPANY_INFO_SUCCESS = 'UPDATE_TOUCH_COMPANY_INFO_SUCCESS';\nexport const UPDATE_TOUCH_COMPANY_INFO_FAIL = 'UPDATE_TOUCH_COMPANY_INFO_FAIL';\nexport const CLEAR_ADDITIONAL_FIELDS_ERROR = 'CLEAR_ADDITIONAL_FIELDS_ERROR';\nexport const SET_ADDITIONAL_FIELDS_ERROR = 'SET_ADDITIONAL_FIELDS_ERROR';\nexport const CHANGE_ADDITIONAL_FIELDS_ERROR_TEXT = 'CHANGE_ADDITIONAL_FIELDS_ERROR_TEXT';\n","import { createSelector } from 'reselect';\n// models\nimport { AppState } from '@optx/redux/interfaces';\nimport { BaseField } from '@optx/models/companyFields';\n// redux\nimport { getIsAdminOrAnalyst } from '@optx/redux/user/information/selectors';\n\nconst getTouchState = (state: AppState) => state.ui.modals.companyTouches;\n\nexport const shouldInitialFetch = createSelector(getTouchState, state => state.shouldInitialFetch);\n\nexport const isOpen = createSelector(getTouchState, state => state.open);\n\nexport const getPsgParticipants = createSelector(getTouchState, state => {\n return state.psgParticipants;\n});\n\nexport const getTouchCompany = createSelector(getTouchState, state => state.company);\n\nexport const getTouchFilters = createSelector(\n getTouchState,\n getIsAdminOrAnalyst,\n (state, getIsAdminOrAnalyst) => {\n const filters = state.filters;\n\n if (filters !== null) {\n const touchesTypesData = filters!.touches_types.data;\n\n const mappedData = touchesTypesData.filter((item: any) => {\n if (!getIsAdminOrAnalyst && item.name === 'Document Upload') {\n return false;\n }\n\n return item;\n });\n\n return { ...filters, touches_types: { ...filters!.touches_types, data: mappedData } };\n }\n\n return {};\n }\n);\n\nexport const getTouchFinancials = createSelector(getTouchState, state => state.financials);\n\nexport const editTouch = createSelector(getTouchState, state => state.editTouch);\n\nexport const getModalTitle = createSelector(getTouchState, state => state.modalTitle);\n\nexport const getDisableSaveBtnFor = createSelector(getTouchState, state => state.disableSaveBtnFor);\n\nexport const getDisableSaveBtnByAdditionalFields = createSelector(\n getTouchState,\n state => state.disableSaveBtnByAdditionalFields\n);\n\nexport const getAdditionalFieldsError = createSelector(\n getTouchState,\n state => state.additionalFieldsError\n);\n\nexport const getTouchCompanyRank = createSelector(\n getTouchState,\n state => state.company.pipeline_rank\n);\n\nexport const getTouchCompanyStage = createSelector(getTouchState, state => state.company.stage);\nexport const getTouchCompanyStageRationale = createSelector(\n getTouchState,\n state => state.company.stage_rationale\n);\n\nexport const getTouchCompanyOwner = createSelector(\n getTouchState,\n state => state.company.company_owner\n);\n\nexport const getTouchCompanyContacts = createSelector(\n getTouchState,\n state => state.company.contacts\n);\n\nexport const hasCompanyCard = (state: AppState) => {\n // @ts-ignore\n if (state['company-card']) {\n return true;\n } else {\n return false;\n }\n};\n\nexport const hasFinancialsLoaded = createSelector(\n getTouchState,\n state => state.hasFinancialsLoaded\n);\nexport const getInitialFinancialState = createSelector(\n getTouchState,\n state => state.initialFinancialState\n);\n\nexport const getNoErrorsOnSubmitState = createSelector(getTouchState, state => {\n return (\n state.validationErrors.noTouchErrors &&\n state.validationErrors.noEditFieldErrors &&\n state.validationErrors.noFinancialErrors\n );\n});\n\nexport const getHasAllFormDataLoaded = createSelector(getTouchState, state => {\n if (!state.filters || !state.psgParticipants || !state.psgParticipants.length || !state.company) {\n return false;\n }\n\n const allFinancialsFields = state.financials.reduce((acc, curr) => {\n if (curr.data) {\n return [...acc, ...curr.data];\n }\n\n return acc;\n }, [] as BaseField<any>[]);\n\n const isSomeDataMissing = allFinancialsFields.some(field => {\n if (\n field.id !== 'sub_sector' && // sub-sector options comes from redux state\n field.id !== 'primary_contact' &&\n (field.type === 'multi-input' ||\n field.type === 'multi-select' ||\n field.type === 'single-select') &&\n (!field.data || !field.data.length)\n ) {\n return true;\n }\n\n return false;\n });\n\n return !isSomeDataMissing;\n});\n","import { Dictionary } from 'lodash';\nimport { BaseFilter } from '@models/filters';\nimport { FilterSource } from '@models/filters';\nimport { CompanyFieldsGroup } from '@optx/models/companyFields';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport { PsgParticipant } from '@models/api/user';\nimport { SelectOption } from '@optx/models/Option';\nimport Company, { CompanySourceTag } from '@optx/models/Company';\nimport CompanyTouch from '@optx/models/company/CompanyTouch';\nimport { TouchesCreateForm } from '@models/api/touches';\nimport { FieldOptions } from '@optx/features/company/edit-fields/state/interfaces';\n\nexport interface FiltersResponse {\n filters: FilterSource[];\n}\n\nexport interface TouchCompany {\n company_id: number;\n company_owner: string | null;\n owner_img: string | null;\n company_name: string;\n company_url: string | null;\n logo_url: string | null;\n is_in_et: boolean;\n location: string | null;\n year_founded: string | number | null;\n company_owner_id: number | null;\n stage: string | null;\n contacts: Partial<CompanyUserContact>[];\n pipeline_rank: number | string | null;\n source_tag: Array<CompanySourceTag>;\n stage_rationale: string | null;\n}\nexport type TouchCompanyKeys = keyof TouchCompany;\n\nexport const companyTouchesInfo: TouchCompanyKeys[] = [\n 'company_id',\n 'company_owner',\n 'owner_img',\n 'company_name',\n 'company_url',\n 'logo_url',\n 'is_in_et',\n 'location',\n 'year_founded',\n 'company_owner_id',\n 'stage',\n 'contacts',\n 'pipeline_rank',\n 'source_tag',\n 'stage_rationale',\n];\n\nexport interface AdditionalFieldsError {\n error_initial_text: string;\n error_text: string;\n error_value: Dictionary<SelectOption> | null;\n error_field: string;\n}\n\nexport interface CompanyTouchesDialogState {\n shouldInitialFetch: boolean;\n open: boolean;\n companyId: number;\n companyName: string;\n company: TouchCompany;\n filters: Dictionary<BaseFilter> | null;\n editTouch: CompanyTouch | null;\n error: string;\n additionalFieldsError: AdditionalFieldsError;\n modalTitle: string;\n disableSaveBtnFor: string | null;\n disableSaveBtnByAdditionalFields: boolean;\n psgParticipants: PsgParticipant[];\n financials: CompanyFieldsGroup[];\n initialFinancialState: Partial<TouchesCreateForm> | null;\n hasFinancialsLoaded: boolean;\n validationErrors: Record<validationErrorsTypes, boolean>;\n}\n\nexport type validationErrorsTypes = 'noTouchErrors' | 'noEditFieldErrors' | 'noFinancialErrors';\n\nexport interface EditCompanyTouches {\n companyId: number;\n companyName: string;\n company: Company | TouchCompany;\n touch?: CompanyTouch;\n isFromGrid?: boolean;\n callback?: () => void;\n}\nexport interface GetTouchesFilters {\n companyId: number | null;\n}\n\nexport interface ChangeErrorText {\n value: SelectOption<string>;\n fieldName: FieldOptions;\n}\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { pick, Dictionary } from 'lodash';\n// models\nimport { FilterSource } from '@models/filters';\nimport { CompanyFieldsGroup } from '@optx/models/companyFields';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport { PsgParticipant } from '@models/api/user';\n// utils\nimport { formatInitialValues } from '@utils/touches';\nimport { SelectOption } from '@optx/models/Option';\nimport { FieldOptions } from '@optx/features/company/edit-fields/state/interfaces';\n// utils\nimport { normalizeFiltersByColumn } from '@utils/filters/normalize';\n// redux\nimport { actions as contactAction } from '@optx/features/bulk-actions/salesloft';\nimport * as actions from './actions';\nimport {\n CompanyTouchesDialogState,\n EditCompanyTouches,\n companyTouchesInfo,\n ChangeErrorText,\n validationErrorsTypes,\n} from './interfaces';\n\nconst initialState: CompanyTouchesDialogState = {\n shouldInitialFetch: true,\n open: false,\n companyId: -1,\n companyName: '',\n filters: null,\n financials: [],\n initialFinancialState: null,\n hasFinancialsLoaded: false,\n company: {\n company_id: -1,\n company_owner: '',\n owner_img: '',\n company_name: '',\n company_url: '',\n logo_url: '',\n is_in_et: false,\n location: '',\n year_founded: -1,\n company_owner_id: -1,\n stage: '',\n contacts: [],\n pipeline_rank: '',\n source_tag: [],\n stage_rationale: null,\n },\n psgParticipants: [],\n editTouch: null,\n error: '',\n modalTitle: 'Log Complete Touch',\n disableSaveBtnFor: null,\n disableSaveBtnByAdditionalFields: false,\n additionalFieldsError: {\n error_initial_text: '',\n error_text: '',\n error_value: null,\n error_field: '',\n },\n validationErrors: {\n noTouchErrors: false,\n noEditFieldErrors: false,\n noFinancialErrors: false,\n },\n};\n\nconst initCompanyTouchesDialogReducer: CaseReducer<CompanyTouchesDialogState> = draftState => {\n draftState.shouldInitialFetch = false;\n};\n\nconst toggleCompanyTouchesDialogReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<EditCompanyTouches>\n> = (draftState, action) => {\n const { companyId, companyName, company, touch } = action.payload;\n draftState.hasFinancialsLoaded = false;\n\n draftState.open = !draftState.open;\n draftState.companyId = companyId;\n draftState.companyName = companyName;\n draftState.company = pick(company, companyTouchesInfo);\n\n const modifiedTouch = touch || null;\n\n if (modifiedTouch?.psgParticipants?.length) {\n const psgParticipants: number[] = [];\n\n modifiedTouch.psgParticipants.forEach(touchUser => {\n // in order for preselected values to work, API sends a list of optx_id and\n // UI is supposed to handle it (searching in the list of contacts) so that\n // the final list of psgParticipants contains the contact value where it exists,\n // or optx_id otherwise.\n const psgParticipant = draftState.psgParticipants.find(user => user.optx_id === touchUser);\n\n if (psgParticipant) {\n const { value, optx_id } = psgParticipant;\n\n if (optx_id) {\n psgParticipants.push(value ?? optx_id);\n }\n }\n });\n\n modifiedTouch.psgParticipants = psgParticipants;\n }\n\n draftState.editTouch = modifiedTouch;\n draftState.disableSaveBtnFor = null;\n\n if (draftState.open) {\n actions.getTouchesFilters();\n }\n};\n\nconst getTouchCompanyContactsSuccessReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<Partial<CompanyUserContact>[]>\n> = (draftState, action) => {\n draftState.company.contacts = [...action.payload];\n};\n\nconst getTouchesFiltersSuccessReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<Array<FilterSource>>\n> = (draftState, action) => {\n const normalizedByColumn = normalizeFiltersByColumn(action.payload);\n // @ts-ignore\n draftState.filters = normalizedByColumn;\n};\n\nconst getPsgParticipantsSuccessReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<PsgParticipant[]>\n> = (draftState, action) => {\n draftState.psgParticipants = action.payload.filter(user => user.has_psg_email || user.is_et_user);\n};\n\nconst getTouchesFiltersSuccessFail: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<string>\n> = (draftState, action) => {\n draftState.error = action.payload;\n};\n\nconst addContactSuccessReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n const contact = action.payload;\n\n if (draftState.open && draftState.companyId === contact.company_id) {\n if (contact.primary_contact) {\n const newContacts = draftState.company.contacts.map(contact => {\n return contact.primary_contact === true ? { ...contact, primary_contact: false } : contact;\n });\n newContacts.push(contact);\n draftState.company.contacts = newContacts;\n } else {\n draftState.company.contacts.push(contact);\n }\n }\n};\n\nconst addTouchToCompanyReducer: CaseReducer<CompanyTouchesDialogState> = draftState => {\n draftState.validationErrors = {\n noTouchErrors: false,\n noEditFieldErrors: false,\n noFinancialErrors: false,\n };\n};\n\nconst addTouchToCompanySuccessReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<validationErrorsTypes>\n> = (draftState, action) => {\n draftState.validationErrors[action.payload] = true;\n\n if (draftState.validationErrors.noEditFieldErrors) {\n draftState.additionalFieldsError = {\n error_initial_text: '',\n error_text: '',\n error_value: null,\n error_field: '',\n };\n }\n\n if (\n draftState.validationErrors.noTouchErrors &&\n draftState.validationErrors.noEditFieldErrors &&\n draftState.validationErrors.noFinancialErrors\n ) {\n draftState.open = false;\n }\n};\n\nconst changeModalTitleReducer: CaseReducer<CompanyTouchesDialogState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.modalTitle = action.payload;\n};\n\nconst changeSaveBtnStatusReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<string | null>\n> = (draftState, action) => {\n draftState.disableSaveBtnFor = action.payload;\n};\n\nconst changeSaveBtnStatusByAdditionalFieldsReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<boolean>\n> = (draftState, action) => {\n draftState.disableSaveBtnByAdditionalFields = action.payload;\n};\n\nconst getTouchFinancialFiltersSuccessReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<Array<CompanyFieldsGroup>>\n> = (draftState, action) => {\n draftState.financials = action.payload;\n draftState.initialFinancialState = formatInitialValues(action.payload);\n draftState.hasFinancialsLoaded = true;\n};\n\nconst clearAdditionalFieldsErrorReducer: CaseReducer<CompanyTouchesDialogState> = draftState => {\n draftState.additionalFieldsError = {\n error_initial_text: '',\n error_text: '',\n error_value: null,\n error_field: '',\n };\n};\n\nconst setAdditionalFieldsErrorReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<string, any, Dictionary<SelectOption>>\n> = (draftState, action) => {\n const normalizedError = action.payload.toLowerCase();\n const errorReasonValue = action.meta;\n\n let errorFieldType = 'Company Owner';\n\n if (normalizedError.includes('rank')) {\n errorFieldType = 'Pipeline Rank';\n } else if (normalizedError.includes('stage')) {\n errorFieldType = 'Stage';\n }\n\n draftState.additionalFieldsError = {\n error_initial_text: action.payload,\n error_text: action.payload,\n error_value: errorReasonValue,\n error_field: errorFieldType,\n };\n};\n\nconst changeAdditionalFieldsErrorTextReducer: CaseReducer<\n CompanyTouchesDialogState,\n PayloadAction<ChangeErrorText>\n> = (draftState, action) => {\n const { value, fieldName } = action.payload;\n\n if (draftState.additionalFieldsError.error_value !== null) {\n const errorValue = draftState.additionalFieldsError.error_value;\n\n if (\n errorValue &&\n fieldName in errorValue &&\n value.value === errorValue[fieldName as FieldOptions]?.value\n ) {\n draftState.additionalFieldsError.error_text =\n draftState.additionalFieldsError.error_initial_text;\n } else {\n draftState.additionalFieldsError.error_text = '';\n }\n }\n};\n\nexport default createReducer(initialState, builder =>\n builder\n .addCase(actions.initCompanyTouchesDialog, initCompanyTouchesDialogReducer)\n .addCase(actions.toggleCompanyTouchesDialog, toggleCompanyTouchesDialogReducer)\n .addCase(actions.getTouchCompanyContactsSuccess, getTouchCompanyContactsSuccessReducer)\n .addCase(actions.getPsgParticipantsSuccess, getPsgParticipantsSuccessReducer)\n .addCase(actions.getTouchesFiltersSuccess, getTouchesFiltersSuccessReducer)\n .addCase(actions.getTouchesFiltersFail, getTouchesFiltersSuccessFail)\n .addCase(contactAction.addContactSuccess, addContactSuccessReducer)\n .addCase(actions.addTouchToCompany, addTouchToCompanyReducer)\n .addCase(actions.addTouchToCompanyErrorValidation, addTouchToCompanySuccessReducer)\n .addCase(actions.getTouchFinancialFiltersSuccess, getTouchFinancialFiltersSuccessReducer)\n .addCase(actions.changeModalTitle, changeModalTitleReducer)\n .addCase(actions.changeSaveBtnStatus, changeSaveBtnStatusReducer)\n .addCase(\n actions.changeSaveBtnStatusByAdditionalFields,\n changeSaveBtnStatusByAdditionalFieldsReducer\n )\n .addCase(actions.clearAdditionalFieldsError, clearAdditionalFieldsErrorReducer)\n .addCase(actions.setAdditionalFieldsError, setAdditionalFieldsErrorReducer)\n .addCase(actions.changeAdditionalFieldsErrorText, changeAdditionalFieldsErrorTextReducer)\n);\n","import { createFeatureActionType } from '@utils/feature';\r\nimport { featureName } from '@features/grid/featureName';\r\n\r\nexport const CHANGE_LONG_CARD_PAGINATION = createFeatureActionType(\r\n featureName,\r\n 'CHANGE_LONG_CARD_PAGINATION'\r\n);\r\n\r\nexport const CHANGE_LONG_CARD_PAGINATION_SUCCESS = createFeatureActionType(\r\n featureName,\r\n 'CHANGE_LONG_CARD_PAGINATION_SUCCESS'\r\n);\r\n","import { createAction } from '@reduxjs/toolkit';\r\nimport { PageInfo } from '@optx/models/table/Pagination';\r\nimport { GridPayload } from '@models/grid';\r\nimport { CHANGE_LONG_CARD_PAGINATION, CHANGE_LONG_CARD_PAGINATION_SUCCESS } from './types';\r\n\r\nexport const changeLongCardPagination = createAction<GridPayload<PageInfo>>(\r\n CHANGE_LONG_CARD_PAGINATION\r\n);\r\nexport const changeLongCardPaginationSuccess = createAction<GridPayload<PageInfo>>(\r\n CHANGE_LONG_CARD_PAGINATION_SUCCESS\r\n);\r\n","import { createSelector } from 'reselect';\nimport { GridKeys } from '@models/grid';\nimport { selectFeatureState } from '../selectFeature';\n\nexport const getLongCardPagination = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.paginationLongCard[gridKey]);\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport { isEqual } from 'lodash';\r\nimport { PayloadAction } from '@reduxjs/toolkit';\r\n// models\r\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\r\nimport { PageInfo } from '@optx/models/table/Pagination';\r\nimport { SelectOption } from '@optx/models/Option';\r\nimport { GetGridSearchData, GridPayload } from '@models/grid';\r\n// redux\r\nimport { selectors as searchSelectors } from '@features/grid/search';\r\nimport { actions as longCardPaginationActions } from '../pagination-long-card';\r\nimport { searchCompanies, searchCompaniesFail } from '@features/grid/search/state/sagasReusable';\r\nimport { getGridSearchDataSaga, userInfoUpdateSaga } from '@features/grid/state/sagasReusable';\r\nimport { selectors as companyOutreachFilterSelectors } from '@redux/company-outreach/filters';\r\nimport { getViewId } from '@optx/features/grid/view/state/selectors';\r\nimport { getListType } from '@optx/features/grid/search/state/selectors';\r\n\r\nfunction* changeLongCardPaginationSaga(action: PayloadAction<GridPayload<PageInfo>>) {\r\n const { gridKey, data: pagination } = action.payload;\r\n\r\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, gridKey, pagination);\r\n const { searchKey, searchType, filter, originalFilter, sortBy } = gridSearchData;\r\n const id: number = yield select(getViewId(gridKey));\r\n const listType: string = yield select(getListType(gridKey));\r\n\r\n const searchData: SearchPayloadRequest = {\r\n searchKey,\r\n searchType,\r\n filter,\r\n pagination,\r\n sortBy,\r\n fromSavedList: id,\r\n listType,\r\n };\r\n const searchName: string = yield select(searchSelectors.getSearchName(gridKey));\r\n\r\n if (gridKey === 'outreachDetails') {\r\n const tableGridQuery: string = yield select(\r\n searchSelectors.getTableGridQuery('outreachDetails')\r\n );\r\n\r\n const analystIdFilter: [string | null, string | null] | SelectOption<string> | undefined =\r\n yield select(companyOutreachFilterSelectors.getSourcingOptitonsFilterValues('analyst_id'));\r\n const columnNameSourcingOutReachFilter:\r\n | [string | null, string | null]\r\n | SelectOption<string>\r\n | undefined = yield select(\r\n companyOutreachFilterSelectors.getSourcingOptitonsFilterValues('column_name')\r\n );\r\n\r\n // @ts-ignore\r\n const listOfAnalystIds: number[] = analystIdFilter?.map(\r\n (list: { label: string; value: number }) => list.value\r\n );\r\n\r\n const sourcingOutReachColumnName = (columnNameSourcingOutReachFilter as SelectOption)?.value;\r\n\r\n const searchDataOutreach = {\r\n ...searchData,\r\n analystId: listOfAnalystIds?.toString(),\r\n tableGridQuery,\r\n sourcingOutReachColumnName,\r\n };\r\n\r\n try {\r\n const userSettings: { [key: string]: number } = yield call(\r\n userInfoUpdateSaga,\r\n gridKey,\r\n pagination,\r\n true\r\n );\r\n\r\n // fetch companies and update user pagination settings on server if page size or page number has changed\r\n yield call(\r\n searchCompanies,\r\n searchDataOutreach,\r\n gridKey,\r\n originalFilter,\r\n undefined,\r\n undefined,\r\n isEqual(userSettings, {}) ? false : userSettings\r\n );\r\n\r\n yield put(longCardPaginationActions.changeLongCardPaginationSuccess(action.payload));\r\n } catch (error) {\r\n yield call(searchCompaniesFail, gridKey, error);\r\n }\r\n } else {\r\n if (gridKey !== 'lists') {\r\n try {\r\n yield call(\r\n searchCompanies,\r\n searchData,\r\n gridKey,\r\n originalFilter,\r\n undefined,\r\n searchName,\r\n false\r\n );\r\n yield put(longCardPaginationActions.changeLongCardPaginationSuccess(action.payload));\r\n } catch (error: any) {\r\n yield call(searchCompaniesFail, gridKey, error);\r\n }\r\n } else {\r\n try {\r\n yield call(searchCompanies, searchData, 'lists', originalFilter);\r\n yield put(\r\n longCardPaginationActions.changeLongCardPaginationSuccess({\r\n gridKey: 'lists',\r\n data: action.payload.data,\r\n })\r\n );\r\n } catch (error: any) {\r\n yield call(searchCompaniesFail, 'lists', error);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default function* companiesSaga() {\r\n yield takeLatest(\r\n longCardPaginationActions.changeLongCardPagination,\r\n changeLongCardPaginationSaga\r\n );\r\n}\r\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\r\n// models\r\nimport { GridPayload } from '@models/grid';\r\nimport { PageInfo } from '@optx/models/table/Pagination';\r\nimport { PaginationLongCardState } from './interfaces';\r\n//constants\r\nimport { GRID_KEYS, LONGCARD_PAGINATION_INITIAL_STATE } from '@constants/grid';\r\n// utils\r\nimport { generateGridReducerInitialState } from '@utils/grid';\r\n// redux\r\nimport * as actions from './actions';\r\n\r\nconst initialState: PaginationLongCardState = generateGridReducerInitialState(\r\n GRID_KEYS,\r\n LONGCARD_PAGINATION_INITIAL_STATE\r\n);\r\n\r\nconst changeLongCardPaginationSuccessReducer: CaseReducer<\r\n PaginationLongCardState,\r\n PayloadAction<GridPayload<PageInfo>>\r\n> = (draftState, action) => {\r\n const { gridKey, data } = action.payload;\r\n\r\n draftState[gridKey] = data;\r\n};\r\n\r\nconst reducer = createReducer<PaginationLongCardState>(initialState, builder =>\r\n builder.addCase(actions.changeLongCardPaginationSuccess, changeLongCardPaginationSuccessReducer)\r\n);\r\n\r\nexport default reducer;\r\n","/* eslint-disable max-len */\nimport { Dictionary } from 'lodash';\n// models\nimport { SearchSave } from '@optx/models/search';\nimport { CustomUIViewIds } from '@optx/models/user';\nimport { ColumnKeys } from '@optx/models/table/Columns';\n// constants\nimport {\n generateArrCurrentColumnKey,\n generateEbitdaCurrentColumnKey,\n generateGrowthCurrentColumnKey,\n} from '@optx/constants/search';\n\n// if only a few columns are made visible and their total width is\n// smaller than the total available width of the table, then choose one\n// of the columns and increase it's width, to keep the rest of the\n// columns' widths from proportionally increasing. this array serves as a priority list\n// for finding the right column to resize\nexport const changeColumnWidthPriority: ColumnKeys[] = [\n 'company_name',\n 'company_description',\n 'parentcompany',\n 'diversity',\n 'company_owner',\n 'psg_attendees',\n 'next_touch_initiator_name',\n 'last_touch_initiator_name',\n 'current_ceo',\n 'senior_advisor_thesis',\n 'lead_source',\n 'source_tag',\n 'addon_bool',\n 'addon',\n 'date_presented',\n 'product_category',\n 'sector',\n 'sub_sector',\n 'num_employees',\n 'stage',\n 'opportunity_type',\n 'company_type',\n 'score',\n 'score_v3',\n 'il_optx_score',\n 'city',\n 'state',\n 'country',\n 'raise_date',\n 'sub_vertical',\n 'last_round',\n 'last_raised_amount',\n 'active_investors',\n 'last_ebitda_margin',\n 'revenue_model',\n 'cashflow',\n 'deal_type',\n 'banker_name',\n 'asking_amount',\n 'customer_type',\n 'sales_and_marketing',\n 'sales_cycle',\n 'delivery_model',\n 'cloud_provider',\n 'architecture',\n 'ebitda_amount',\n 'last_arr_value',\n 'capital_raised',\n 'last_rev_growth',\n 'last_rev_update_amount',\n 'last_gross_margin',\n 'last_valuation',\n 'last_touch_date',\n 'next_touch_date',\n 'sw_website_rank',\n 'sw_website_rank_per_country',\n 'emp_growth_percent',\n 'job_openings',\n 'job_openings_percent',\n 'ceo_approval',\n 'year_founded',\n 'g2_rating',\n 'g2_review_count',\n 'ct_rating',\n 'ct_review_count',\n 'cb_rank',\n 'size_multiple',\n 'pipeline_rank',\n 'is_interesting',\n 'is_in_et',\n 'is_software',\n 'linkedin',\n 'company_url',\n 'is_in_business',\n 'active',\n 'url_status',\n 'next_steps',\n 'created_on_optx',\n 'transaction_notes',\n 'date_matched',\n 'prev_stage',\n 'is_ai_ml',\n];\n\n// use this object to add custom hardcoded views\n// the only property that can be changed is \"is_default\"\nexport const customUIViews: Dictionary<SearchSave> = {\n sourcingOrder: {\n columns: `company_url,company_name,is_in_et,company_owner,stage,last_touch_date,next_touch_date,num_employees,emp_growth_percent,capital_raised,last_arr_value,${generateArrCurrentColumnKey},city,state,country,score,score_v3,year_founded,is_software,is_interesting,addon,pipeline_rank,job_openings,job_openings_percent,sw_website_rank,sw_website_rank_per_country,raise_date,last_raised_amount,last_rev_growth,${generateGrowthCurrentColumnKey},last_rev_update_amount,last_valuation,cb_rank,source_tag,is_ai_ml`,\n column_order: `company_url,company_name,is_in_et,company_owner,psg_attendees,stage,last_touch_date,next_touch_date,num_employees,emp_growth_percent,capital_raised,last_arr_value,${generateArrCurrentColumnKey},city,state,country,score,score_v3,il_optx_score,parentcompany,company_description,year_founded,is_software,is_interesting,diversity,addon_bool,addon,date_presented,senior_advisor_thesis,lead_source,pipeline_rank,fund,job_openings,job_openings_percent,sw_website_rank,sw_website_rank_per_country,opportunity_type,company_type,sector,sub_sector,product_category,sub_vertical,raise_date,last_round,last_raised_amount,active_investors,last_rev_growth,${generateGrowthCurrentColumnKey},last_rev_update_amount,last_gross_margin,ebitda_amount,${generateEbitdaCurrentColumnKey},last_ebitda_margin,revenue_model,cashflow,deal_type,banker_name,asking_amount,customer_type,sales_and_marketing,sales_cycle,delivery_model,cloud_provider,architecture,last_valuation,next_touch_initiator_name,last_touch_initiator_name,current_ceo,ceo_approval,g2_rating,g2_review_count,ct_rating,ct_review_count,cb_rank,size_multiple,source_tag,linkedin,is_in_business,active,url_status,created_on_optx,next_steps,transaction_notes,senior_deal_team_lead,deal_team,prev_stage,is_ai_ml`,\n pinned_columns: 'company_url,company_name',\n count: 0,\n created_at: '',\n is_default: false,\n filters: {},\n search_criteria: '',\n title: 'Sourcing Order',\n unique_id: 'sourcingOrder',\n updated_at: null,\n search_info: {\n filters: [],\n keyword: '',\n type: '',\n },\n },\n};\n\n// list of custom hardcoded view ids\nexport const customUIViewIds: CustomUIViewIds[] = ['sourcingOrder'];\n","export default 'bulk-edit-fields';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const bulkEditField = createFeatureActionType(featureName, 'BULK_EDIT_FIELD');\nexport const bulkEditFieldSuccess = createFeatureActionType(featureName, 'BULK_EDIT_FIELD_SUCCESS');\n\nexport const updateProgress = createFeatureActionType(featureName, 'UPDATE_PROGRESS');\n\nexport const updateCompleted = createFeatureActionType(featureName, 'UPDATE_COMPLETED');\n\nexport const updatePercentage = createFeatureActionType(featureName, 'UPDATE_PERCENTAGE');\n\nexport const saveResults = createFeatureActionType(featureName, 'SAVE_RESULTS');\n\nexport const resetProgress = createFeatureActionType(featureName, 'RESET_PROGRESS');\n\nexport const cancel = createFeatureActionType(featureName, 'CANCEL');\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyBulkEditingResults } from '@optx/models/bulkActions';\nimport * as types from './types';\nimport { BulkEditFields, BulkEditFieldsSuccess } from './interfaces';\n\nexport const bulkEditField = createAction<BulkEditFields>(types.bulkEditField);\n\nexport const bulkEditFieldSuccess = createAction<BulkEditFieldsSuccess>(types.bulkEditFieldSuccess);\n\nexport const updateProgress = createAction<boolean>(types.updateProgress);\n\nexport const updateCompleted = createAction<boolean>(types.updateCompleted);\n\nexport const updatePercentage = createAction<number>(types.updatePercentage);\n\nexport const saveResults = createAction<CompanyBulkEditingResults[]>(types.saveResults);\n\nexport const resetProgress = createAction(types.resetProgress);\n\nexport const cancel = createAction<boolean>(types.cancel);\n","import { GridState } from '@optx/models/grid';\nimport { featureName } from './featureName';\n\nexport type StateSlice = Record<typeof featureName, GridState>;\n\nexport const selectFeatureState = (state: StateSlice) => state[featureName];\n","import { createSelector } from 'reselect';\nimport { Dictionary } from '@reduxjs/toolkit';\n// models\nimport { UserInformationState } from './interfaces';\nimport { GridKeys } from '@optx/models/grid';\nimport { UserSessionSettings } from '@optx/models/user';\n// constants\nimport { defaultAvatarImage } from '@constants/images';\n// utils\nimport { getIdFromFilters } from '@optx/utils/combineSearch';\n\nconst selectUserInformation = (state: any) => state.user as UserInformationState;\n\nexport const shouldFetch = createSelector(\n selectUserInformation,\n state => !state.loading && !state.fetchedAt\n);\n\nexport const isLoading = createSelector(selectUserInformation, state => state.loading);\n\nexport const loaded = createSelector(\n selectUserInformation,\n state => !!state.fetchedAt || !!state.error\n);\n\nexport const authorizedComponents = createSelector(\n selectUserInformation,\n state => state.authorizedComponents\n);\n\n// get user role\nconst checkRole = (components: Dictionary<boolean>, role: string) => {\n return Object.keys(components).includes(role);\n};\n\nexport const getIsAdminOrAnalyst = createSelector(selectUserInformation, state => {\n const components = state.authorizedComponents;\n\n return checkRole(components, 'admin_portal_link') || checkRole(components, 'analyst_general');\n});\n\nexport const getIsAdmin = createSelector(selectUserInformation, state => {\n const components = state.authorizedComponents;\n\n return checkRole(components, 'admin_portal_link');\n});\n\nexport const getIsAnalyst = createSelector(selectUserInformation, state => {\n const components = state.authorizedComponents;\n\n return (\n checkRole(components, 'analyst_general') &&\n !checkRole(components, 'admin_portal_link') &&\n !checkRole(components, 'partner_user')\n );\n});\n\nexport const getHasAccessToPipelineReport = createSelector(selectUserInformation, state => {\n const components = state.authorizedComponents;\n\n return checkRole(components, 'pipeline_report');\n});\n\nexport const getHasAccessToSourcingOutreachSummary = createSelector(\n selectUserInformation,\n state => {\n const components = state.authorizedComponents;\n\n return checkRole(components, 'sourcing_outreach');\n }\n);\n\nexport const getHasAccessToChecklistResearchInsightsReport = createSelector(\n selectUserInformation,\n state => {\n const components = state.authorizedComponents;\n\n return checkRole(components, 'checklist_research_insights');\n }\n);\n\nexport const getHasAccessToReviewCompany = createSelector(selectUserInformation, state => {\n const components = state.authorizedComponents;\n\n return checkRole(components, 'review_access');\n});\n\nexport const getHasAccessToTouches = createSelector(selectUserInformation, state => {\n const components = state.authorizedComponents;\n\n return checkRole(components, 'touch_access');\n});\n\nexport const getIsPartner = createSelector(selectUserInformation, state => {\n const components = state.authorizedComponents;\n\n return (\n checkRole(components, 'partner_user') &&\n !checkRole(components, 'analyst_general') &&\n !checkRole(components, 'admin_portal_link')\n );\n});\n\nexport const getIsPartnerOnly = createSelector(selectUserInformation, state => {\n const components = state.authorizedComponents;\n\n return checkRole(components, 'partner_user') && !checkRole(components, 'admin_portal_link');\n});\n\nexport const getResultsPerPage = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.search_results_per_page : 50\n);\n\nexport const getResultsPageNumber = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.session_settings.search_results_page_number : undefined\n);\n\nexport const getContactResultsPerPage = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.contact_results_per_page : 50\n);\n\nexport const getContactResultsPageNumber = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.session_settings.contact_results_page_number : undefined\n);\n\nexport const getMyCompaniesResultsPerPage = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.my_companies_results_per_page : 50\n);\n\nexport const getDefaultViewId = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.default_view_id : null\n);\n\nexport const getSourcingOutReachPerPage = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.session_settings.sourcing_outreach_results_per_page : 50\n);\n\nexport const getMyCompaniesResultsPageNumber = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.session_settings.my_companies_results_page_number : undefined\n);\n\nexport const getSourcingOutReachResultsPageNumber = createSelector(selectUserInformation, state =>\n state.data\n ? state.data.settings?.session_settings.sourcing_outreach_results_page_number\n : undefined\n);\n\nexport const getAdvancedSearchSearchTitle = createSelector(selectUserInformation, state => {\n return state.data\n ? decodeURIComponent(\n state.data.settings?.session_settings.company_filters\n ?.split('&')\n .filter(item => !item.search('search_title='))[0]\n ?.split('=')[1] || ''\n )\n : '';\n});\n\nexport const getCombinedSearchId = (gridKey: GridKeys) =>\n createSelector([selectUserInformation], (state: UserInformationState) => {\n switch (gridKey) {\n case 'advancedSearch':\n return getIdFromFilters(state.data?.settings?.session_settings.company_filters);\n case 'myCompanies':\n return getIdFromFilters(state.data?.settings?.session_settings.my_companies_filters);\n case 'lists':\n return getIdFromFilters(state.data?.settings?.session_settings.user_list_filters);\n case 'outreach':\n return getIdFromFilters(\n state.data?.settings?.session_settings.sourcing_outreach_detail_filters\n );\n default:\n return 0;\n }\n });\n\nexport const getUserName = createSelector(\n selectUserInformation,\n state => (state.data && state.data.profile.login_name) || 'default'\n);\n\nexport const getFullName = createSelector(selectUserInformation, state =>\n state.data ? state.data.profile.display_name : ''\n);\n\nexport const getFirstName = createSelector(selectUserInformation, state =>\n state.data ? state.data.profile.display_name.split(' ')[0] : ''\n);\n\nexport const getLastName = createSelector(selectUserInformation, state =>\n state.data ? state.data.profile.display_name.split(' ')[1] : ''\n);\n\nexport const getEmail = createSelector(selectUserInformation, state =>\n state.data ? state.data.profile.email : ''\n);\n\nexport const getPicture = createSelector(\n selectUserInformation,\n state => state.picture || defaultAvatarImage\n);\n\nexport const getAnalyticsId = createSelector(\n selectUserInformation,\n state => (state.data && state.data.settings?.ga) || ''\n);\n\nexport const getUserId = createSelector(\n selectUserInformation,\n state => state.data && state.data.profile.user_id\n);\n\nexport const getUserEtId = createSelector(\n selectUserInformation,\n state => state.data && state.data.profile.et_user_id\n);\n\n// region options\nexport const getRegionOptions = createSelector(selectUserInformation, state => state.regionOptions);\n\nexport const shouldFetchRegionOptions = createSelector(\n selectUserInformation,\n state => !state.regionOptions.loading && !state.regionOptions.fetchedAt\n);\n\n// user region settings\nexport const getRegionSettingsInitialValues = createSelector(selectUserInformation, state => {\n if (!state.data?.settings.region_settings) {\n return {\n short_date: '',\n grid_date: '',\n };\n }\n\n const data = {\n short_date: state.data.settings.region_settings.short_date.id,\n grid_date: state.data.settings.region_settings.grid_date.id,\n };\n\n return data;\n});\n\nexport const getUserRegion = createSelector(\n selectUserInformation,\n state => state.data?.profile.user_region || ''\n);\n\nexport const getUserRegionSettings = createSelector(\n selectUserInformation,\n state => state.data?.settings.region_settings\n);\n\nexport const showQuickFilters = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.session_settings.show_quick_filters\n);\n\nexport const showMyCompaniesCards = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.show_my_companies_cards\n);\n\nexport const filtersRefresh = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.filters_refresh\n);\n\nexport const myCompaniesFiltersRefresh = createSelector(\n selectUserInformation,\n state => !!state.data && (state.data.settings?.my_companies_filters_refresh || false)\n);\n\nexport const menuCollapsed = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.menu_collapsed\n);\n\nexport const getUserSettings = createSelector(selectUserInformation, state => state.data);\n\nexport const getSettings = createSelector(selectUserInformation, state => state.data?.settings);\n\nexport const getSessionSettings = createSelector(\n selectUserInformation,\n state => state.data?.settings?.session_settings || ({} as UserSessionSettings)\n);\n\n// User list\nexport const showUserListQuickFilters = createSelector(\n selectUserInformation,\n state => !!state.data && !!state.data.settings?.session_settings.user_list_show_quick_filters\n);\n\nexport const getUserListResultsPerPage = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.user_list_search_results_per_page : 50\n);\n\nexport const getFavoritesListResultsPageNumber = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.session_settings.favorites_list_page_number : undefined\n);\n\nexport const getSourceScrubListResultsPageNumber = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.session_settings.source_scrub_list_page_number : undefined\n);\n\nexport const getSavedCompanySearchesResultsPageNumber = createSelector(\n selectUserInformation,\n state =>\n state.data ? state.data.settings?.session_settings.saved_company_serches_page_number : undefined\n);\n\nexport const getSavedContactSearchesResultsPageNumber = createSelector(\n selectUserInformation,\n state =>\n state.data ? state.data.settings?.session_settings.saved_contact_serches_page_number : undefined\n);\n\nexport const getUserListSearchesResultsPageNumber = createSelector(selectUserInformation, state =>\n state.data\n ? state.data.settings?.session_settings.user_list_search_results_page_number\n : undefined\n);\n\nexport const getETCompaniesListPageNumber = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.session_settings.new_et_companies_page_number : undefined\n);\n\nexport const getAddonPageNumber = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.session_settings.addon_results_page_number : undefined\n);\n\nexport const getAddonPerPage = createSelector(selectUserInformation, state =>\n state.data ? state.data.settings?.session_settings.addon_results_per_page : undefined\n);\n\nexport const columnWidthsAddon = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.column_widths_addon_mgmt\n);\n\nexport const columnWidthsChecklist = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.column_widths_key_check_list\n);\n\nexport const columnWidthsContacts = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.column_widths_all_contacts\n);\n\nexport const userListfiltersRefresh = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.user_list_filters_refresh\n);\n\nexport const columnWidthsAdvancedSearch = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.column_widths_advanced_search\n);\n\nexport const columnWidthsLists = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.column_widths_lists\n);\n\nexport const columnWidthsMyCompanies = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.column_widths_my_companies\n);\n\nexport const getDefaultRecommendedOptxNotifications = createSelector(\n selectUserInformation,\n state => !!state.data && state.data.settings?.alert_settings\n);\n\nexport const getDefaultScore = createSelector(\n selectUserInformation,\n state => (!!state?.data && state.data.settings?.profile_settings?.optx_score_settings) || 'us'\n);\n\nexport const getDefaultCustomUIView = createSelector(\n selectUserInformation,\n state => state.data?.settings.default_view\n);\n\nexport const getProfileInformation = createSelector(selectUserInformation, state => {\n if (state.data) {\n const name = state.data.profile.display_name || '';\n const email = state.data.profile.email || '';\n const picture = state.picture || defaultAvatarImage;\n const role = state.data.profile.user_role || '';\n const title = state.data.profile.user_title || '';\n const permissionGroups = state.data.profile.permission_groups || [];\n\n return {\n name,\n email,\n picture,\n role,\n permissionGroups,\n title,\n };\n }\n\n return {};\n});\n\nexport const getSourcingOutReachDefaultAnalyst = createSelector(selectUserInformation, state => {\n if (\n !state.data?.profile.permission_groups.includes('Sourcing Outreach') &&\n state.data?.profile.user_role === 'Analyst'\n ) {\n return state.data?.profile.display_name;\n }\n\n return null;\n});\n\nexport const getPipelineReportQuery = createSelector(\n selectUserInformation,\n state => state.data?.settings.session_settings.pipeline_report || ''\n);\n","import { isEqual } from 'lodash';\n// models\nimport { FilterFormat } from '@models/filters';\nimport Option, { APIMultiSelectOption, SelectOption } from '@models/Option';\nimport { FinancialFieldRangeValue, FinancialFieldType } from '@optx/models/Company';\nimport { FinancialField } from '@optx/features/field-factory';\n\n/**\n * Map lists of Option (from API) or string to SelectOption.\n * @param option\n * @param format\n */\nexport const mapToSelectOption = (option: string | Option<string>, format?: FilterFormat) => {\n const value = typeof option === 'string' ? option : option.value?.toString();\n let label = '';\n let parent = undefined;\n\n if (typeof option === 'string') {\n label = option;\n } else {\n label = option.name || option.value;\n\n if (option.parent) {\n parent = option.parent;\n }\n }\n\n return {\n value,\n label,\n parent,\n disabled: (option as Option<string>).disabled,\n entries: (option as APIMultiSelectOption).entries,\n ...(typeof option !== 'string' && typeof option.count === 'number' && { count: option.count }),\n };\n};\n\n/**\n * function to get a dropdown option's text, by searching through using it's value\n * @param {string | number} value the value we use to identify the option\n * @param {SelectOption[]} options list of options to look through\n */\nexport const getOptionLabel = (value: string | number | undefined, options: SelectOption[]) => {\n let label = value;\n const index = options.findIndex(option => option.value === value);\n\n if (index !== -1) {\n label = options[index].label;\n }\n\n return label;\n};\n\n/**\n * Returns an array of labels or values from a given array of SelectOption objects\n * @param {'label' | 'value'} key - The key to be used to get the labels or values\n * @param {SelectOption[]} options - The array of SelectOption objects\n */\nexport const getArrayLabels = (key: 'label' | 'value', options: SelectOption[]) => {\n const listArray = options.map(option => option[key]);\n\n return listArray;\n};\n\n/**\n * function to check if a value is part of a set of options\n * @param {string | number | null} value value to check against\n * @param {SelectOption[] | undefined} options set of options\n */\nexport const isOptionChecked = (\n value: string | number | null | FinancialFieldRangeValue,\n options?: SelectOption[]\n) =>\n options?.some(option =>\n isEqual(typeof value !== 'object' ? option.value : option.rangeValue, value)\n );\n\n/**\n * find the most recent year that has an amount associated and return that value\n * @param {FinancialFieldType[] | null} options list of options\n * @param {number} [year] - An optional year to filter the financial options.\n */\n\nexport const getMostRecentAmount = (options: FinancialFieldType[] | null, year?: number) => {\n if (options && options.length) {\n if (year) {\n return options.find(option => option.year === year)?.value ?? '';\n }\n\n return options[0].value;\n }\n\n return undefined;\n};\n\n/**\n * get the most recent year available from the list\n * @param {FinancialFieldType[] | null} options list of options\n */\nexport const getMostRecentYear = (options: FinancialFieldType[] | null) => {\n if (options && options.length) {\n return options[0].year;\n }\n\n return undefined;\n};\n\n/**\n * get the most recent source available from the list\n * @param {FinancialFieldType[] | null} options list of options\n */\nexport const getMostRecentSource = (options: FinancialFieldType[] | null) => {\n if (options && options.length) {\n return !options.some(option => option.from_source === undefined);\n }\n\n return false;\n};\n\n/**\n/* Generates an array of years for use in a select dropdown.\n* @param extraYear - Optional extra year to be included in the list.\n* @param listOfFinancialYears - Optional list of financial years to check against.\n* @param isEstimatedYear - Optional flag to indicate if the year is estimated.\n* @param isFinancialTable - Optional flag to indicate if the list is for a financial table.\n* @returns {Array<SelectOption>} An array of objects containing the year values and labels\n*/\nexport const generateYears = (\n extraYear?: number,\n listOfFinancialYears?: FinancialField[],\n isEstimatedYear?: boolean,\n isFinancialTable?: boolean\n): SelectOption[] => {\n const MAX_YEAR_RANGE = 5;\n const yearRegex = /^(19|20)\\d{2}$/;\n const maxYear = new Date().getFullYear() + 2;\n const minYear = new Date().getFullYear() - 2;\n\n const years: SelectOption[] = [];\n\n for (let i = 0; i < MAX_YEAR_RANGE; i++) {\n const value = maxYear - i;\n const listOfYears = listOfFinancialYears?.reduce((acc: number[], list: FinancialField) => {\n const isYearInList = isFinancialTable\n ? list.year === value\n : list.estimated === isEstimatedYear;\n\n if (isYearInList) {\n acc.push(list.year);\n }\n\n return acc;\n }, []);\n\n const isValueInList = listOfYears && listOfYears.find(year => year === value);\n\n if (isValueInList) {\n years.push({ value: value.toString(), label: value.toString(), disabled: true });\n } else {\n years.push({ value: value.toString(), label: value.toString(), disabled: false });\n }\n }\n\n if (\n extraYear &&\n extraYear <= maxYear + 3 &&\n extraYear >= minYear - 18 &&\n yearRegex.test(extraYear.toString())\n ) {\n const isExtraYearDataDisabled =\n isFinancialTable && listOfFinancialYears?.some(year => year.year === extraYear);\n\n const extraYearData = {\n value: extraYear!.toString(),\n label: extraYear!.toString(),\n disabled: isExtraYearDataDisabled,\n };\n\n if (extraYear > maxYear) {\n return [extraYearData, ...years];\n }\n\n if (extraYear < minYear && extraYear < maxYear) {\n return [...years, extraYearData];\n }\n }\n\n return years;\n};\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst selectCompanyEditFields = (state: AppState) => state.companyEditFields;\n\nexport const getCurrentCompany = createSelector(selectCompanyEditFields, state => state.companyId);\n\nexport const loading = createSelector(selectCompanyEditFields, state => state.loading);\n","import { UserService } from '@optx/services/api';\nimport NotificationService from '@optx/services/NotificationService';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\nimport { call, put, takeLatest, takeEvery, select } from 'redux-saga/effects';\nimport { Dictionary, isEqual } from 'lodash';\nimport moment from 'moment';\n// models\nimport { EditFieldRadioProps } from '@optx/models/feature/edit-field/EditFieldRadioProps';\nimport { SelectOption } from '@optx/models/Option';\nimport Company, { Addon } from '@optx/models/Company';\nimport { APIBoolean } from '@optx/models/api/generic';\nimport {\n EditField,\n UpdateFieldsPayload,\n UpdateVerifyCompanyPayload,\n CustomValue,\n} from './interfaces';\n// constants\nimport { CompanyProfileTabs } from '@optx/constants/routes';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\nimport { COMPANY_VALUES_FIELDS, USER_VALUES_FIELDS } from '../constants';\n// utils\nimport { mapCompanyPropName } from '@optx/utils/mapCompanyPropName';\nimport { getErrorMessage } from '@utils/api/errors';\nimport { mapCompanyInfoData } from '@optx/utils/company';\nimport { getLocationMainGridKey } from '@optx/utils/grid';\n// redux\nimport { actions as fundingRoundsActions } from '@redux/company/funding-rounds';\nimport { actions as userValuesActions } from '@redux/company/user-values';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { actions as presentationActions } from '@redux/company/opportunity-presentation/index';\nimport { selectors as addonManagementSelectors } from '@redux/company/addon-management';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { actions as searchCountActions } from '@features/grid/search-count';\nimport { actions as modalActions } from '@redux/ui/modals/company-touches';\nimport { actions as scoreGrowthActions } from '@features/company/graphs/score';\nimport {\n actions as auditActions,\n selectors as auditSelectors,\n} from '@features/company/audit-trail/state';\nimport { actions as checklistResearchActions } from '@features/checklist-research-insights/state/actions';\nimport { selectors as routerSelectors } from '@redux/router';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport * as actions from './actions';\n\nexport function* updateVerifiedSoftwareSaga(action: PayloadAction<UpdateVerifyCompanyPayload>) {\n const { companyId, value: isVerified } = action.payload;\n\n const payload: UpdateFieldsPayload = {\n companyId,\n value: isVerified,\n };\n\n const customPayload = mapCompanyInfoData({\n data: payload,\n fieldName: 'Use Parent Company',\n });\n\n try {\n yield call(\n UserService.updateCompanyUserValues,\n customPayload as unknown as UpdateFieldsPayload\n );\n yield put(\n actions.updateVerifyCompanySoftwareSuccess({\n companyId,\n value: isVerified,\n })\n );\n NotificationService.success(`Software company is ${isVerified ? 'verified' : 'unverified'}!`);\n } catch (e: any) {\n const message = 'Failed to update verify!';\n yield put(actions.updateVerifyCompanySoftwareFail(message));\n NotificationService.error(message);\n }\n}\n\nexport function* updateEditFields(action: PayloadAction<EditField>) {\n const {\n companyId,\n companyUrl,\n fieldName,\n value,\n service,\n callback,\n isPartner,\n isFromHistory,\n canBeDuplicatedLoader,\n isFromTouch,\n } = action.payload;\n\n let payload = value;\n\n const updatingTrendingLinesFields = [\n 'PSG FIT',\n ...USER_VALUES_FIELDS,\n 'Use Parent Company',\n 'Software Company',\n 'Number of Employees',\n ];\n\n const defaultOptxScore: string = yield select(userSelectors.getDefaultScore);\n const gridKey = getLocationMainGridKey();\n const financialKeys = fieldName === 'ARR' || fieldName === 'GM %';\n let company: Company | undefined;\n\n if (gridKey) {\n company = yield select(searchSelectors.getCompanyById(gridKey, companyId));\n }\n\n if (!canBeDuplicatedLoader) {\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n }\n\n if (typeof fieldName === 'string' && fieldName === 'Use Parent Company') {\n payload = { companyId, use_parent_company: (value as EditFieldRadioProps).value };\n } else if ((value as UpdateFieldsPayload).fieldKey === 'deal_team_leader') {\n const option = (value as UpdateFieldsPayload).value as SelectOption;\n payload = {\n ...(value as UpdateFieldsPayload),\n customData: {\n deal_team_leader: option.value,\n deal_team_leader_name: option.label,\n },\n };\n } else if ((value as UpdateFieldsPayload).fieldKey === 'stage') {\n const option = (value as UpdateFieldsPayload).value as SelectOption;\n\n payload = {\n ...(value as UpdateFieldsPayload),\n customData: {\n stage: option.value,\n ...((value as UpdateFieldsPayload).hasOwnProperty('rationale') && {\n stage_rationale: (value as UpdateFieldsPayload).rationale,\n }),\n },\n };\n }\n\n const isLinkedin = fieldName === 'Linkedin Profile';\n\n if (typeof fieldName === 'string' && COMPANY_VALUES_FIELDS.includes(fieldName)) {\n const lastFundingDate =\n company?.raise_date && company?.raise_date !== DEFAULT_EMPTY_VALUE\n ? company?.raise_date\n : moment().format(ISO_DATE_FORMAT);\n\n payload = mapCompanyInfoData({\n data: value as UpdateFieldsPayload,\n fieldName: fieldName,\n lastFundingDate,\n gridKey,\n });\n }\n\n if (fieldName === 'Commentary') {\n const value = (payload as UpdateFieldsPayload).value;\n payload = {\n company_id: companyId,\n deal_preparation: {\n transaction_notes: value,\n },\n };\n }\n\n try {\n const res: AxiosResponse<any> = yield call(service, payload);\n\n const customValue = {\n value: res.data?.linkedin_url,\n companyId: (value as UpdateFieldsPayload).companyId,\n fieldKey: (value as UpdateFieldsPayload).fieldKey,\n entityType: (value as UpdateFieldsPayload).entityType,\n };\n\n const raiseDate =\n company?.raise_date && company?.raise_date !== DEFAULT_EMPTY_VALUE\n ? company?.raise_date\n : moment().format(ISO_DATE_FORMAT);\n\n if (!financialKeys && fieldName !== 'Add-on') {\n yield put(\n actions.updateFieldsSuccess({\n fieldName,\n companyId,\n value: isLinkedin ? customValue : (value as UpdateFieldsPayload),\n score: res.data?.optx_score,\n scoreGrowth: res.data?.optx_score_growth,\n newScore: res.data?.score_v3,\n newScoreGrowth: res.data?.score_v3_growth,\n ilScore: res.data?.il_optx_score,\n ilScoreGrowth: res.data?.il_optx_score_growth,\n companyOwnerData: res.data?.extra_data,\n checklist_reviewed_by: res.data.checklist_reviewed_by,\n checklist_reviewed_date: res.data.checklist_reviewed_date,\n location: res.data?.location,\n psg_date: res.data?.psg_date,\n city: res.data?.city,\n state: res.data?.state,\n country: res.data?.country,\n isPsgCompany: res.data?.is_psg_company,\n isPartner,\n defaultOptxScore,\n raiseDate: fieldName === 'Last Raised Amount' ? raiseDate : undefined,\n lastRevenueGrowth: res.data?.last_rev_growth ?? '',\n })\n );\n }\n\n if (fieldName === 'ARR') {\n const customValue = {\n value: res.data?.financial.annual_recurring_revenue,\n companyId: (value as UpdateFieldsPayload).companyId,\n fieldKey: (value as UpdateFieldsPayload).fieldKey,\n };\n\n yield put(\n actions.updateFieldsSuccess({\n fieldName,\n companyId,\n value: customValue,\n companyOwnerData: null,\n })\n );\n }\n\n if (fieldName === 'Last Raised Amount' || fieldName === 'Capital Raised') {\n yield put(fundingRoundsActions.getCompanyFundingRounds(companyId));\n }\n\n if (fieldName === 'Add-on') {\n const updateFieldPayload = value as UpdateFieldsPayload;\n const payloadValue = updateFieldPayload.value as CustomValue;\n\n const newValue = {\n ...updateFieldPayload,\n value: { ...payloadValue, optionalValue: res.data.addon_company },\n };\n\n yield put(\n actions.updateFieldsSuccess({\n fieldName,\n companyId,\n value: newValue,\n score: res.data?.optx_score,\n scoreGrowth: res.data?.optx_score_growth,\n newScore: res.data?.score_v3,\n newScoreGrowth: res.data?.score_v3_growth,\n ilScore: res.data?.il_optx_score,\n ilScoreGrowth: res.data?.il_optx_score_growth,\n companyOwnerData: res.data?.extra_data,\n location: res.data?.location,\n city: res.data?.city,\n state: res.data?.state,\n country: res.data?.country,\n isPartner,\n defaultOptxScore,\n })\n );\n\n const companyAddon: Addon = yield select(\n addonManagementSelectors.getCurrentCompanyAddon(companyId)\n );\n const newAddon = payloadValue.optionalValue as Addon;\n\n if (!isEqual(companyAddon, newAddon)) {\n yield put(searchCountActions.decrementAddonCount());\n }\n }\n\n if (fieldName === 'GM %') {\n const customValue = {\n value: res.data?.financial.gm,\n companyId: (value as UpdateFieldsPayload).companyId,\n fieldKey: (value as UpdateFieldsPayload).fieldKey,\n };\n\n yield put(\n actions.updateFieldsSuccess({\n fieldName,\n companyId,\n value: customValue,\n companyOwnerData: null,\n })\n );\n }\n\n /**\n * Check if last revenu is from source since we need to send a\n * second action to add the last value from source\n * so we can update both changed value and add value from source\n * - this only applies on empty value updates\n */\n if (\n typeof fieldName === 'string' &&\n fieldName === 'Revenue' &&\n ((value as UpdateFieldsPayload)?.value as CustomValue)?.value === DEFAULT_EMPTY_VALUE &&\n res.data &&\n res.data.last_revenue?.from_source &&\n res.data.last_revenue?.value\n ) {\n const secondValue = { ...(value as UpdateFieldsPayload) };\n (secondValue.value as CustomValue) = {\n value: res.data.last_revenue.value,\n from_source: res.data.last_revenue.from_source,\n optionalValue: res.data.last_revenue.year,\n };\n\n yield put(\n actions.updateFieldsSuccess({\n fieldName,\n companyId,\n value: secondValue,\n score: res.data?.optx_score,\n scoreGrowth: res.data?.optx_score_growth,\n newScore: res.data?.score_v3,\n newScoreGrowth: res.data?.score_v3_growth,\n ilScore: res.data?.il_optx_score,\n ilScoreGrowth: res.data?.il_optx_score_growth,\n companyOwnerData: res.data?.extra_data,\n location: res.data?.location,\n city: res.data?.city,\n state: res.data?.state,\n country: res.data?.country,\n isPartner,\n defaultOptxScore,\n lastRevenueGrowth: res.data?.last_rev_growth ?? '',\n })\n );\n }\n\n /**\n * Check if last EBITDA is from source since we need to send a\n * second action to add the last value from source\n * so we can update both changed value and add value from source\n * - this only applies on empty value updates\n */\n if (\n typeof fieldName === 'string' &&\n fieldName === 'EBITDA' &&\n ((value as UpdateFieldsPayload)?.value as CustomValue)?.value === DEFAULT_EMPTY_VALUE &&\n res.data &&\n res.data.last_ebitda?.from_source &&\n res.data.last_ebitda?.value\n ) {\n const secondValue = { ...(value as UpdateFieldsPayload) };\n (secondValue.value as CustomValue) = {\n value: res.data.last_ebitda.value,\n from_source: res.data.last_ebitda.from_source,\n optionalValue: res.data.last_ebitda.year,\n };\n\n yield put(\n actions.updateFieldsSuccess({\n fieldName,\n companyId,\n value: secondValue,\n score: res.data?.optx_score,\n scoreGrowth: res.data?.optx_score_growth,\n newScore: res.data?.score_v3,\n newScoreGrowth: res.data?.score_v3_growth,\n ilScore: res.data?.il_optx_score,\n ilScoreGrowth: res.data?.il_optx_score_growth,\n companyOwnerData: res.data?.extra_data,\n location: res.data?.location,\n city: res.data?.city,\n state: res.data?.state,\n country: res.data?.country,\n isPartner,\n defaultOptxScore,\n })\n );\n }\n\n if (typeof fieldName === 'string' && updatingTrendingLinesFields.includes(fieldName)) {\n yield put(\n userValuesActions.updateCompanyTrendingLines({\n employeeCountTrends: res.data?.employee_count_trends,\n optxScoreTrends: res.data?.optx_score_trends,\n newOptxScoreTrends: res.data?.optx_score_v3_trends,\n companyId: action.payload.companyId,\n })\n );\n }\n\n if (typeof fieldName === 'string' && fieldName === 'Number of Employees') {\n yield put(\n userValuesActions.updateCompanyEmployeeGrowthPercentage({\n companyId: action.payload.companyId,\n empGrowthPercent: res.data.emp_growth_percent,\n })\n );\n }\n\n if (\n (typeof fieldName === 'string' &&\n companyUrl &&\n ['Stage', 'Fund', 'PSG Fit'].includes(fieldName)) ||\n (Array.isArray(fieldName) && fieldName.includes('Stage'))\n ) {\n yield put(\n scoreGrowthActions.fetchScoreGrowth({\n company_id: companyId,\n company_url: companyUrl as string | null,\n })\n );\n }\n\n if (\n typeof fieldName === 'string' &&\n ['PSG Fit', 'Software Company'].includes(fieldName) &&\n window.location.pathname.includes('checklist-research-insights')\n ) {\n yield put(checklistResearchActions.card.fetchCard());\n }\n\n if ((value as UpdateFieldsPayload).fieldKey === 'date_presented') {\n yield put(presentationActions.fetchOpportunityPresentation(action.payload.companyId));\n }\n\n if (\n (value as UpdateFieldsPayload).fieldKey === 'ebitda_list' ||\n (value as UpdateFieldsPayload).fieldKey === 'revenue_list' ||\n (value as UpdateFieldsPayload).fieldKey === 'annual_recurring_revenue' ||\n (value as UpdateFieldsPayload).fieldKey === 'gross_margin_list'\n ) {\n // To update the score growth, we need to fetch the opportunities again\n yield put(presentationActions.fetchOpportunityPresentation(action.payload.companyId));\n }\n\n NotificationService.success(\n (value as UpdateFieldsPayload).successMessage! ||\n `Company ${mapCompanyPropName(\n (value as UpdateFieldsPayload).fieldKey!\n )} updated successfully!`\n );\n\n callback && callback(true, res.data.show_on_history ?? true);\n\n // getting the current tab from Company Profile\n // @ts-ignore\n const tabNumber = yield select(routerSelectors.getLocation);\n\n if (isFromHistory || tabNumber.query.tab === CompanyProfileTabs.HISTORY) {\n const { pageSize } = yield select(auditSelectors.getPagination);\n const field: string = yield select(auditSelectors.getSearchQuery);\n const optx: APIBoolean = yield select(auditSelectors.getOPTX);\n const internal: APIBoolean = yield select(auditSelectors.getInternal);\n const startDate: string = yield select(auditSelectors.getStartDate);\n const endDate: string = yield select(auditSelectors.getEndDate);\n\n yield put(\n auditActions.fetchChangedCompanyFields({\n companyId,\n pagination: {\n pageNumber: 1,\n pageSize,\n },\n field,\n internal,\n optx,\n startDate,\n endDate,\n })\n );\n }\n\n if (!canBeDuplicatedLoader) {\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n\n if (isFromTouch) {\n yield put(modalActions.addTouchToCompanyErrorValidation('noEditFieldErrors'));\n }\n } catch (error: any) {\n yield put(\n actions.updateFieldsFail({\n fieldName,\n })\n );\n\n if (isFromTouch) {\n yield put(\n modalActions.setAdditionalFieldsError(\n getErrorMessage(error, ''),\n (value as UpdateFieldsPayload).value as unknown as Dictionary<SelectOption>\n )\n );\n }\n\n if (!(value as UpdateFieldsPayload)?.errorMessage) {\n NotificationService.error(getErrorMessage(error, 'Failed to update value!'));\n } else {\n NotificationService.error(\n (value as UpdateFieldsPayload).errorMessage! || 'Failed to update value!'\n );\n }\n\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n}\n\nexport default function* companyChangedFieldsSaga() {\n yield takeEvery(actions.updateFields, updateEditFields);\n yield takeLatest(actions.updateVerifyCompanySoftware, updateVerifiedSoftwareSaga);\n}\n","import { CaseReducer, createReducer, PayloadAction, isAnyOf } from '@reduxjs/toolkit';\nimport * as actions from './actions';\nimport { EditField, EditFieldState } from './interfaces';\n\nconst initialState: EditFieldState = {\n companyId: null,\n error: '',\n loading: false,\n};\n\nconst updatedEditFieldsReducer: CaseReducer<EditFieldState, PayloadAction<EditField>> = (\n draftState,\n action\n) => {\n const { companyId } = action.payload;\n\n draftState.companyId = companyId;\n draftState.loading = true;\n};\n\nconst updatedEditFieldsSuccessFailReducer: CaseReducer<EditFieldState> = draftState => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addMatcher(isAnyOf(actions.updateFields), updatedEditFieldsReducer)\n .addMatcher(isAnyOf(actions.updateFieldsSuccess), updatedEditFieldsSuccessFailReducer)\n .addMatcher(isAnyOf(actions.updateFieldsFail), updatedEditFieldsSuccessFailReducer)\n);\n\nexport default reducer;\n","import { TouchType } from '@models/company/CompanyTouch';\n\n/**\n * Range filter unknown value.\n */\nexport const RANGE_FILTER_UNKNOWN_VALUE = 'not_blank';\nexport const RANGE_FILTER_UNKNOWN_ONLY_VALUE = 'blank';\nexport const RANGE_FILTER_PSG_VALUE = 'exclude_psg';\nexport const RANGE_FILTER_PSG_ONLY_VALUE = 'is_psg_only';\nexport const RANGE_FILTER_INCLUDE_BELOW_VALUE = 'include_below';\n\nexport const DEFAULT_SORTING_USER_SETTINGS = 'sort_fields=company_name&sort_orders=asc';\n\nexport const FILTER_TOUCHES: TouchType[] = [\n 'Call',\n 'Contact Import',\n 'CrunchBase',\n 'Document Upload',\n 'E-mail',\n 'Internal Note',\n 'Meeting',\n 'Introduction',\n 'Follow-up',\n 'Mgmt Call',\n 'Expert Call',\n 'Product Demo',\n 'Pre-analysis',\n 'VC Meeting',\n 'IB Meeting',\n 'Other',\n 'NDA Signed',\n 'Stage Modified',\n 'Transferred',\n 'Voice Mail',\n];\n\nexport const FILTER_ORIGIN_VALUES = {\n addonManagement: 'addon_management',\n};\n\nexport const FILTERS_WITH_CHECKBOX_AS_RADIO = ['completed_touch_option'];\n\nexport const FILTER_CARDS = [\n 'Without a Recent Touch',\n 'With a Scheduled Touch',\n 'My Favorites Scheduled Touches',\n 'Scheduled Touches in the Next 30 Days',\n];\n\nexport const FILTER_WITH_LABEL_ONLY = ['My assigned Companies'];\n\nexport const SAVED_SEARCH_FILTER_WITH_LABEL_ONLY = ['Company Name or URL', 'All Company Info'];\n","export const searchTypeKey: Record<string, string> = {\n 'All company info': 'query',\n 'Company name + URL': 'company_name_or_url',\n};\n\nexport const defaultSearchType = 'All company info';\n\nexport const companyNameOrUrl = 'Company name + URL';\n\nexport const searchTypeOptions = { defaultSearchType, companyNameOrUrl };\n","import { each, cloneDeep } from 'lodash';\nimport { ColumnType } from 'antd/lib/table';\n// models\nimport {\n ColumnKeys,\n ColumnDisplay,\n CompanyColumnDisplay,\n ColumnPinnedDisplay,\n} from '@optx/models/table/Columns';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport Company from '@optx/models/Company';\nimport { CompanyColumnType } from '@components/common/table/Companies/columns/virtual-column-config';\nimport { YEARS_LABELS } from '@optx/constants/search';\n\n/**\n * return a string list of visible columns\n * @param columns columns object\n */\nexport const getVisibleColumns = (payload: ColumnDisplay) => {\n const { columnDisplay, columnOrder } = payload;\n\n return columnOrder.filter(columnId => columnDisplay[columnId].visible).join(',');\n};\n\n/**\n * get pinned columns, based on column data object and return them as string\n * @param {CompanyColumnDisplay} columns object with column data\n */\nexport const getPinnedColumns = (columns: CompanyColumnDisplay) =>\n Object.keys(columns)\n .filter(columnId => columns[columnId as ColumnKeys].pinned)\n .join(',');\n\n/**\n * Retrieves a comma-separated string of column IDs that are pinned, ordered according to the specified column order.\n *\n * @param {ColumnPinnedDisplay} payload - An object containing the display and order information of columns.\n * @param {Record<string, { pinned: boolean }>} payload.columnDisplay - An object mapping column IDs to their\n * display properties, including whether they are pinned.\n * @param {string[]} payload.columnOrder - An array of column IDs representing the desired order of columns.\n * @returns {string} A comma-separated string of column IDs that are pinned, ordered according to the `columnOrder`.\n */\nexport const getPinnedColumnsOrdered = (payload: ColumnPinnedDisplay) => {\n const { columnDisplay, columnOrder } = payload;\n\n return columnOrder.filter(columnId => columnDisplay[columnId].pinned).join(',');\n};\n\n/**\n * return the unpinned columns as an array of column ids\n * @param {CompanyColumnDisplay} columnDisplay object with column data\n * @param {ColumnKeys[]} columnOrder array with the order of the columns\n */\nexport const mapSortableColumns = (\n columnDisplay: CompanyColumnDisplay<any>,\n columnOrder: string[],\n defaultOptxScore: string\n) =>\n columnOrder\n .filter(columnId => {\n if (columnId === 'score' || columnId === 'score_v3') {\n if (defaultOptxScore === 'il') {\n return null;\n }\n\n return !columnDisplay[columnId].pinned;\n }\n\n if (columnId === 'il_optx_score') {\n if (defaultOptxScore === 'il') {\n return !columnDisplay[columnId].pinned;\n }\n\n return null;\n }\n\n return !columnDisplay[columnId].pinned;\n })\n .map(columnId => ({ ...columnDisplay[columnId] }));\n\n/**\n * return the pinned columns as an array of column ids\n * @param {CompanyColumnDisplay} columnDisplay object with column data\n * @param {ColumnKeys[]} columnOrder array with the order of the columns\n */\nexport const mapPinnedColumns = (\n columnDisplay: CompanyColumnDisplay,\n columnOrder: ColumnKeys[],\n defaultOptxScore: string\n) =>\n columnOrder\n .filter(columnId => {\n if (columnId === 'score' || columnId === 'score_v3') {\n if (defaultOptxScore === 'il') {\n return null;\n }\n\n return columnDisplay[columnId].pinned;\n }\n\n if (columnId === 'il_optx_score') {\n if (defaultOptxScore === 'il') {\n return columnDisplay[columnId].pinned;\n }\n\n return null;\n }\n\n return columnDisplay[columnId].pinned;\n })\n .map(columnId => ({ ...columnDisplay[columnId] }));\n\n/**\n * create new column data object based on a string with the new visible columns\n * @param {CompanyColumnDisplay} columnDisplay initial column data\n * @param {string} columnVisibility string with visible columns\n * @param {string} pinnedColumns optional string with pinned columns\n */\nexport const getNewColumnDisplay = (\n columnDisplay: CompanyColumnDisplay,\n columnVisibility: string,\n pinnedColumns?: string\n) => {\n const newColumnDisplay: CompanyColumnDisplay | {} = {};\n Object.keys(columnDisplay).forEach(columnId => {\n // @ts-ignore\n newColumnDisplay[columnId as ColumnKeys] = {\n ...columnDisplay[columnId as ColumnKeys],\n // set property visible to true if column is saved as visible or\n // if pinned columns weren't saved, but the column is currently pinned\n visible:\n columnVisibility?.split(',').includes(columnId) ||\n (pinnedColumns === undefined && columnDisplay[columnId as ColumnKeys].pinned) ||\n false,\n ...(typeof pinnedColumns === 'string' && {\n pinned: pinnedColumns.includes(columnId) || false,\n }),\n };\n });\n\n return newColumnDisplay as CompanyColumnDisplay;\n};\n\n/**\n * Generates a dynamic column key based on the specified column type and year type.\n *\n * This function constructs a string key that combines the column type with a year value\n * derived from the current date. The year value can represent the current year, the next year,\n * or one of the past two years.\n *\n * @param {('growth' | 'arr' | 'ebitda')} columnType - The type of column for which the key is being generated.\n * @param {('current' | 'future' | 'past 1 year' | 'past 2 years')} yearType - The year type indicating the time frame\n * relative to the current year.\n * @returns {string} A string representing the dynamic column key in the format `${columnType}_${year}_value`.\n *\n * @example\n * // Returns \"growth_2023_value\" if the current year is 2023\n * generateDynamicColumnKeys('growth', 'current');\n *\n * @example\n * // Returns \"arr_2024_value\" if the current year is 2023\n * generateDynamicColumnKeys('arr', 'future');\n *\n * @example\n * // Returns \"ebitda_2022_value\" if the current year is 2023\n * generateDynamicColumnKeys('ebitda', 'past 1 year');\n */\nexport const generateDynamicColumnKeys = (\n columnType: 'growth' | 'arr' | 'ebitda',\n yearType: 'current' | 'future' | 'past 1 year' | 'past 2 years'\n) => {\n const year = YEARS_LABELS[yearType];\n\n return `${columnType}_${year}_value`;\n};\n\n/**\n * Generates a dynamic visibility configuration for columns based on the provided initial state.\n *\n * This function takes an initial state of column display settings and returns a new configuration\n * where specific columns ('arr', 'ebitda', 'growth') are set to be visible. The keys for these\n * columns are dynamically generated using the `generateDynamicColumnKeys` function.\n *\n * @param {CompanyColumnDisplay} clonedColumnDisplayInitialState - The initial state of the column display settings.\n * @returns {object} A new column display configuration with updated visibility settings.\n */\nexport const generateDynamicVisiblityColumns = (\n clonedColumnDisplayInitialState: CompanyColumnDisplay\n) => {\n return {\n [`${generateDynamicColumnKeys('arr', 'current')}`]: {\n ...clonedColumnDisplayInitialState[\n `${generateDynamicColumnKeys('arr', 'current')}` as keyof CompanyColumnDisplay\n ],\n visible: true,\n },\n [`${generateDynamicColumnKeys('ebitda', 'current')}`]: {\n ...clonedColumnDisplayInitialState[\n `${generateDynamicColumnKeys('ebitda', 'current')}` as keyof CompanyColumnDisplay\n ],\n visible: true,\n },\n [`${generateDynamicColumnKeys('growth', 'current')}`]: {\n ...clonedColumnDisplayInitialState[\n `${generateDynamicColumnKeys('growth', 'current')}` as keyof CompanyColumnDisplay\n ],\n visible: true,\n },\n };\n};\n\n/**\n * if a column's width has been changed return it's id\n * @param {ColumnType<any>[]} columns current column array data\n * @param {ColumnType<any>[]} defaultColumns initial column array data\n */\nexport const getResizedColumn = (columns: ColumnType<any>[], defaultColumns: ColumnType<any>[]) => {\n let resizedColumnId: undefined | ColumnKeys;\n\n each(columns, column => {\n const defaultColumn = defaultColumns.find(\n defaultColumn => defaultColumn.dataIndex === column.dataIndex\n );\n\n if (defaultColumn && column.width !== defaultColumn.width) {\n resizedColumnId = column.dataIndex as ColumnKeys;\n\n return false;\n }\n\n return true;\n });\n\n return resizedColumnId;\n};\n\nexport const getNewSorting = (\n sorting: SortByRule<Company>[],\n columnData: ColumnDisplay,\n columns: CompanyColumnType[]\n) => {\n const { columnDisplay, columnOrder } = columnData;\n\n let newSort: SortByRule<Company> | undefined;\n\n if (sorting.length === 1 && !columnDisplay[sorting[0].id as ColumnKeys].visible) {\n if (sorting[0].id !== 'company_name' && columnDisplay.company_name.visible) {\n newSort = {\n id: 'company_name',\n desc: false,\n };\n } else {\n const sortableColumns = columns\n .filter(column => column.sorter)\n .map(column => column.dataIndex);\n const firstOrderableColumnId = columnOrder.find(\n columnId => columnDisplay[columnId].visible && sortableColumns.includes(columnId)\n );\n\n if (firstOrderableColumnId) {\n newSort = {\n id: firstOrderableColumnId,\n desc: false,\n };\n }\n }\n }\n\n return newSort;\n};\n\n/**\n * restore columns to initial state, but keep modified column widths\n * @param columns current column state\n * @param initialState initial column state\n */\nexport const restoreColumns = (\n columns: CompanyColumnDisplay<any>,\n initialState: CompanyColumnDisplay<any>\n) => {\n const newColumns = cloneDeep(initialState);\n\n Object.entries(newColumns)\n .filter(([columnId, columnData]) => columnData.width !== columns[columnId as ColumnKeys].width)\n .forEach(([columnId]) => {\n newColumns[columnId as ColumnKeys].width = columns[columnId as ColumnKeys].width;\n });\n\n return newColumns;\n};\n\n/**\n * Removes a specified column from a comma-separated string of columns.\n *\n * @param {string} columns - A comma-separated string representing the list of columns.\n * @param {string} columnToRemove - The column name to be removed from the list.\n * @returns {string} A new comma-separated string with the specified column removed.\n *\n * @example\n * // Returns 'name,age'\n * removeColumnFromString('name,age,gender', 'gender');\n *\n * @example\n * // Returns 'name,gender'\n * removeColumnFromString('name,age,gender', 'age');\n */\nexport const removeColumnFromString = (columns: string, columnToRemove: string) => {\n const columnsArr = columns.split(',').filter(column => column !== columnToRemove);\n const newColumns = columnsArr.join(',');\n\n return newColumns;\n};\n","import { NotificationPayload } from '@optx/models/notifications';\nimport { createAction } from '@reduxjs/toolkit';\nimport {\n TouchType,\n NotificationError,\n NotificationsResponse,\n SortTouchesNotificationsPayload,\n TouchesNotificationResponse,\n} from './interfaces';\nimport * as types from './types';\n\nexport const fetchAlertsInbox = createAction<NotificationPayload>(types.FETCH_ALERTS_INBOX);\nexport const fetchAlertsHistory = createAction<NotificationPayload>(types.FETCH_ALERTS_HISTORY);\nexport const fetchAlertsSuccess = createAction<NotificationsResponse>(types.FETCH_ALERTS_SUCCESS);\nexport const fetchAlertsFail = createAction<NotificationError>(types.FETCH_ALERTS_FAIL);\nexport const fetchTouches = createAction<NotificationPayload>(types.FETCH_TOUCHES);\nexport const updateTouches = createAction<Array<number>>(types.UPDATE_TOUCHES);\nexport const fetchTouchesSuccess = createAction<TouchesNotificationResponse>(\n types.FETCH_TOUCHES_SUCCESS\n);\nexport const fetchTouchesFail = createAction<NotificationError>(types.FETCH_TOUCHES_FAIL);\nexport const loadMoreAlerts = createAction<NotificationPayload>(types.LOAD_MORE_ALERTS);\nexport const sortAlerts = createAction<NotificationPayload>(types.SORT_ALERTS);\nexport const sortUpcomingPastDueTouches = createAction<SortTouchesNotificationsPayload>(\n types.SORT_UPCOMING_PAST_DUE_TOUCHES\n);\n\nexport const updateAlerts = createAction<Array<number>>(types.UPDATE_ALERTS);\nexport const dismissAlert = createAction<number>(types.DISMISS_ALERT);\nexport const dismissAlertSuccess = createAction<number>(types.DISMISS_ALERT_SUCCESS);\nexport const dismissAllAlerts = createAction(types.DISMISS_ALL_ALERTS);\nexport const dismissAllAlertSuccess = createAction(types.DISMISS_ALL_ALERTS_SUCCESS);\nexport const deleteUpcomingTouch = createAction<number>(types.DELETE_UPCOMING_TOUCH);\nexport const deleteUpcomingTouchSuccess = createAction<number>(types.DELETE_UPCOMING_TOUCH_SUCCESS);\nexport const deleteUpcomingTouchFail = createAction<NotificationError>(\n types.DELETE_UPCOMING_TOUCH_FAIL\n);\nexport const deletePastDueTouch = createAction<number>(types.DELETE_PAST_DUE_TOUCH);\nexport const deletePastDueTouchSuccess = createAction<number>(types.DELETE_PAST_DUE_TOUCH_SUCCESS);\nexport const deletePastDueTouchFail = createAction<NotificationError>(\n types.DELETE_PAST_DUE_TOUCH_FAIL\n);\nexport const deleteAllPastUpcomingTouches = createAction<TouchType>(\n types.DELETE_ALL_PAST_UPCOMING_TOUCHES\n);\nexport const deleteAllPastUpcomingTouchesSuccess = createAction<TouchType>(\n types.DELETE_ALL_PAST_UPCOMING_TOUCHES_SUCCESS\n);\nexport const deleteAllPastUpcomingTouchesFail = createAction<NotificationError>(\n types.DELETE_ALL_PAST_UPCOMING_TOUCHES_FAIL\n);\nexport const loadMorePastDueTouches = createAction<NotificationPayload>(\n types.LOAD_MORE_PAST_DUE_TOUCHES\n);\n","export const FETCH_ALERTS_INBOX = 'FETCH_ALERTS_INBOX';\nexport const FETCH_ALERTS_HISTORY = 'FETCH_ALERTS_HISTORY';\nexport const FETCH_ALERTS_SUCCESS = 'FETCH_ALERTS_SUCCESS';\nexport const FETCH_ALERTS_FAIL = 'FETCH_ALERTS_FAIL';\nexport const FETCH_TOUCHES = 'FETCH_TOUCHES';\nexport const UPDATE_TOUCHES = 'UPDATE_TOUCHES';\nexport const FETCH_TOUCHES_SUCCESS = 'FETCH_TOUCHES_SUCCESS';\nexport const FETCH_TOUCHES_FAIL = 'FETCH_TOUCHES_FAIL';\nexport const LOAD_MORE_ALERTS = 'LOAD_MORE_ALERTS';\nexport const SORT_ALERTS = 'SORT_ALERTS';\nexport const SORT_UPCOMING_PAST_DUE_TOUCHES = 'SORT_UPCOMING_PAST_DUE_TOUCHES';\n\nexport const UPDATE_ALERTS = 'UPDATE_ALERTS';\nexport const DISMISS_ALERT = 'DISMISS_ALERT';\nexport const DISMISS_ALERT_SUCCESS = 'DISMISS_ALERT_SUCCESS';\nexport const DISMISS_ALL_ALERTS = 'DISMISS_ALL_ALERTS';\nexport const DISMISS_ALL_ALERTS_SUCCESS = 'DISMISS_ALL_ALERTS_SUCCESS';\nexport const DELETE_UPCOMING_TOUCH = 'DELETE_UPCOMING_TOUCH';\nexport const DELETE_UPCOMING_TOUCH_SUCCESS = 'DELETE_UPCOMING_TOUCH_SUCCESS';\nexport const DELETE_UPCOMING_TOUCH_FAIL = 'DELETE_UPCOMING_TOUCH_FAIL';\n\nexport const DELETE_PAST_DUE_TOUCH = 'DELETE_PAST_DUE_TOUCH';\nexport const DELETE_PAST_DUE_TOUCH_SUCCESS = 'DELETE_PAST_DUE_TOUCH_SUCCESS';\nexport const DELETE_PAST_DUE_TOUCH_FAIL = 'DELETE_PAST_DUE_TOUCH_FAIL';\nexport const DELETE_ALL_PAST_UPCOMING_TOUCHES = 'DELETE_ALL_PAST_UPCOMING_TOUCHES';\nexport const DELETE_ALL_PAST_UPCOMING_TOUCHES_SUCCESS = 'DELETE_ALL_PAST_UPCOMING_TOUCHES_SUCCESS';\nexport const DELETE_ALL_PAST_UPCOMING_TOUCHES_FAIL = 'DELETE_ALL_PAST_UPCOMING_TOUCHES_FAIL';\nexport const LOAD_MORE_PAST_DUE_TOUCHES = 'LOAD_MORE_PAST_DUE_TOUCHES';\n","export const NUMBER_FORMAT = '0,0.[0]a';\n","import { call, select, put } from 'redux-saga/effects';\nimport { Dictionary, isEqual } from 'lodash';\nimport queryString from 'query-string';\n// models\nimport { PreselectedFilter } from '@models/filters';\nimport { SortByRule } from '@models/table/sorting';\nimport { GridKeys, GetGridSearchData } from '@models/grid';\nimport { PageInfo } from '@models/table/Pagination';\nimport { SearchViewType } from '@models/user';\n// constants\nimport { PAGINATION_INITIAL_STATE } from '@constants/grid';\nimport { COMPANY_DEFAULT_SORT } from '@constants/table/sort/defaultSort';\nimport { DEFAULT_PAGINATION } from '@optx/constants/pagination';\n// utils\nimport { mapSortQuery } from '@optx/utils/search';\n// redux\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport { getFiltersQuery } from '@redux/company/search/search';\nimport { selectors as filterSelectors } from '../filter';\nimport { selectors as searchKeySelectors } from '@features/grid/searchkey';\nimport { selectors as myCompaniesFilterCardsSelectors } from '@optx/redux/my-companies/filters-cards';\nimport { selectors as companyOutreachFilterSelectors } from '@redux/company-outreach/filters';\nimport {\n selectors as userInformationSelectors,\n actions as userInformationActions,\n} from '@redux/user/information';\nimport { selectors as paginationSelectors } from '@features/grid/pagination';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\nimport { selectors as longCardPaginationSelectors } from '@features/grid/pagination-long-card';\n\n/**\n * Get the search data of the grid based on the grid key and pagination.\n *\n * @param gridKey The grid key used to determine the search data.\n * @param pagination The pagination info to be used for the search.\n *\n * @returns The grid search data object containing the search key,\n * filter (new Filter), original filter, sort by and pagination info.\n */\nexport function* getGridSearchDataSaga(gridKey: GridKeys, pagination?: PageInfo) {\n let searchKey: string = '';\n let searchType: string = 'All company info';\n let filter: Dictionary<PreselectedFilter> = {};\n let clearedFilters: Dictionary<PreselectedFilter> = {};\n let defaultFilters: Dictionary<PreselectedFilter> = {};\n let subFilter: string = '';\n let filterQuery: Dictionary<string | (string | number)[]> = {};\n let sortBy: SortByRule<any>[] = [];\n let view: SearchViewType = 'table';\n let paginationData: PageInfo = DEFAULT_PAGINATION;\n\n switch (gridKey) {\n case 'advancedSearch':\n searchKey = yield select(searchKeySelectors.getSearchKey('advancedSearch'));\n searchType = yield select(searchTypeSelectors.getSearchType('advancedSearch'));\n filter = yield select(filterSelectors.getFilter('advancedSearch'));\n clearedFilters = yield select(filterSelectors.getClearedFilter('advancedSearch'));\n defaultFilters = yield select(filterSelectors.getDefaultFilter('advancedSearch'));\n sortBy = yield select(sortSelectors.getSorting('advancedSearch'));\n view = yield select(viewTypeSelectors.searchView('advancedSearch'));\n\n const companyGridPagination: PageInfo = yield select(\n paginationSelectors.getPagination(gridKey)\n );\n const companyLongCardPagination: PageInfo = yield select(\n longCardPaginationSelectors.getLongCardPagination('advancedSearch')\n );\n paginationData = view === 'long-card' ? companyLongCardPagination : companyGridPagination;\n break;\n\n case 'myCompanies':\n searchKey = yield select(searchKeySelectors.getSearchKey('myCompanies'));\n searchType = yield select(searchTypeSelectors.getSearchType('myCompanies'));\n filter = yield select(filterSelectors.getFilter('myCompanies'));\n clearedFilters = yield select(filterSelectors.getClearedFilter('myCompanies'));\n defaultFilters = yield select(filterSelectors.getDefaultFilter('myCompanies'));\n subFilter = yield select(myCompaniesFilterCardsSelectors.getSubFilter);\n sortBy = yield select(sortSelectors.getSorting('myCompanies'));\n view = yield select(viewTypeSelectors.searchView('myCompanies'));\n\n const myCompaniesGridPagination: PageInfo = yield select(\n paginationSelectors.getPagination(gridKey)\n );\n const myCompaniesLongCardPagination: PageInfo = yield select(\n longCardPaginationSelectors.getLongCardPagination('myCompanies')\n );\n paginationData =\n view === 'long-card' ? myCompaniesLongCardPagination : myCompaniesGridPagination;\n break;\n\n case 'lists':\n searchKey = yield select(searchKeySelectors.getSearchKey('lists'));\n searchType = yield select(searchTypeSelectors.getSearchType('lists'));\n filter = yield select(filterSelectors.getFilter('lists'));\n clearedFilters = yield select(filterSelectors.getClearedFilter('lists'));\n defaultFilters = yield select(filterSelectors.getDefaultFilter('lists'));\n sortBy = yield select(sortSelectors.getSorting('lists'));\n view = yield select(viewTypeSelectors.searchView('lists'));\n\n const listGridPagination: PageInfo = yield select(paginationSelectors.getPagination('lists'));\n const listLongCardPagination: PageInfo = yield select(\n longCardPaginationSelectors.getLongCardPagination('lists')\n );\n paginationData = view === 'long-card' ? listLongCardPagination : listGridPagination;\n break;\n\n case 'outreachDetails':\n searchKey = yield select(searchKeySelectors.getSearchKey('outreachDetails'));\n searchType = yield select(searchTypeSelectors.getSearchType('outreachDetails'));\n filter = yield select(companyOutreachFilterSelectors.getFilter);\n clearedFilters = yield select(companyOutreachFilterSelectors.getClearedFilter);\n subFilter = yield select(companyOutreachFilterSelectors.getSubFilter);\n sortBy = yield select(sortSelectors.getSorting('outreachDetails'));\n view = yield select(viewTypeSelectors.searchView('outreachDetails'));\n\n const outreachGridPagination: PageInfo = yield select(\n paginationSelectors.getPagination(gridKey)\n );\n const outreachLongCardPagination: PageInfo = yield select(\n longCardPaginationSelectors.getLongCardPagination('outreachDetails')\n );\n paginationData = view === 'long-card' ? outreachLongCardPagination : outreachGridPagination;\n break;\n\n case 'addons':\n sortBy = yield select(sortSelectors.getSorting('addons'));\n filter = yield select(filterSelectors.getFilter('addons'));\n searchKey = yield select(searchKeySelectors.getSearchKey('addons'));\n clearedFilters = yield select(filterSelectors.getClearedFilter('addons'));\n searchType = yield select(searchTypeSelectors.getSearchType('addons'));\n\n view = yield select(viewTypeSelectors.searchView('addons'));\n const addonGridPagination: PageInfo = yield select(\n paginationSelectors.getPagination(gridKey)\n );\n const addonLongCardPagination: PageInfo = yield select(\n longCardPaginationSelectors.getLongCardPagination('addons')\n );\n paginationData = view === 'long-card' ? addonLongCardPagination : addonGridPagination;\n\n break;\n\n default:\n break;\n }\n\n if (pagination) paginationData = pagination;\n\n filterQuery = yield call(getFiltersQuery, filter);\n\n const gridSearchData: GetGridSearchData = {\n searchKey,\n searchType,\n filter: filterQuery,\n subFilter,\n defaultFilters,\n originalFilter: filter,\n clearedFilters,\n sortBy,\n view,\n pagination: paginationData,\n };\n\n return gridSearchData;\n}\n\n/**\n * Update user's info based on the gridKey and pagination.\n *\n * @param {GridKeys} gridKey - The grid key to be used to update the user settings.\n * @param {PageInfo} pagination - The pagination information to be used to update the user settings.\n * @param {boolean} isReturnUserSettings - A boolean flag to indicate if\n * the user settings should be returned instead of being dispatched. Defaults to false.\n *\n * @returns {Object} - If isReturnUserSettings is true, the user settings object is returned.\n */\nexport function* userInfoUpdateSaga(\n gridKey: GridKeys,\n pagination: PageInfo,\n isReturnUserSettings: boolean = false,\n isSorting: boolean = false,\n sortBy?: SortByRule<any>[]\n) {\n let userPageSize: number = PAGINATION_INITIAL_STATE.pageSize;\n let userPageNumber: number = PAGINATION_INITIAL_STATE.pageNumber;\n\n let results_per_page = '';\n let results_page_number = '';\n let results_sorting = '';\n\n switch (gridKey) {\n case 'advancedSearch':\n userPageSize = yield select(userInformationSelectors.getResultsPerPage);\n userPageNumber = yield select(userInformationSelectors.getResultsPageNumber);\n results_per_page = 'search';\n results_page_number = 'search';\n results_sorting = 'company';\n break;\n\n case 'myCompanies':\n userPageSize = yield select(userInformationSelectors.getMyCompaniesResultsPerPage);\n userPageNumber = yield select(userInformationSelectors.getMyCompaniesResultsPageNumber);\n results_per_page = 'my_companies';\n results_page_number = 'my_companies';\n break;\n\n case 'contacts':\n userPageSize = yield select(userInformationSelectors.getContactResultsPerPage);\n userPageNumber = yield select(userInformationSelectors.getContactResultsPageNumber);\n results_per_page = 'contact';\n results_page_number = 'contact';\n break;\n\n case 'lists':\n userPageSize = yield select(userInformationSelectors.getUserListResultsPerPage);\n userPageNumber = yield select(userInformationSelectors.getUserListSearchesResultsPageNumber);\n\n results_per_page = 'user_list_search';\n results_page_number = 'user_list_search';\n results_sorting = 'user_list';\n\n break;\n\n case 'outreachDetails':\n userPageSize = yield select(userInformationSelectors.getSourcingOutReachPerPage);\n const outreachPagination: PageInfo = yield select(\n paginationSelectors.getPagination('outreachDetails')\n );\n userPageNumber = outreachPagination.pageNumber;\n results_per_page = 'sourcing_outreach';\n results_page_number = 'sourcing_outreach';\n break;\n\n case 'addons':\n userPageSize = yield select(userInformationSelectors.getAddonPerPage);\n userPageNumber = yield select(userInformationSelectors.getAddonPageNumber);\n results_per_page = 'addon';\n results_page_number = 'addon';\n break;\n\n default:\n break;\n }\n\n results_per_page += '_results_per_page';\n results_page_number += '_results_page_number';\n results_sorting += '_sorting';\n\n let userSettings: { [key: string]: number | string } = {};\n\n if (userPageSize !== pagination.pageSize) userSettings[results_per_page] = pagination.pageSize;\n if (userPageNumber !== pagination.pageNumber)\n userSettings[results_page_number] = pagination.pageNumber;\n\n if (isSorting) {\n const sorting = sortBy ? sortBy : COMPANY_DEFAULT_SORT;\n\n const sortQuery = queryString.stringify(mapSortQuery(sorting), {\n arrayFormat: 'comma',\n });\n\n userSettings[results_sorting] = sortQuery;\n }\n\n if (!isReturnUserSettings && !isEqual(userSettings, {}))\n yield put(userInformationActions.updateUserSettings(userSettings));\n else return userSettings;\n}\n","export const GET_COMPANY_FUNDING_ROUNDS = 'GET_COMPANY_FUNDING_ROUNDS';\nexport const GET_COMPANY_FUNDING_ROUNDS_SUCCESS = 'GET_COMPANY_FUNDING_ROUNDS_SUCCESS';\nexport const GET_COMPANY_FUNDING_ROUNDS_FAIL = 'GET_COMPANY_FUNDING_ROUNDS_FAIL';\n","import { createAction } from '@reduxjs/toolkit';\nimport { CompanyFundingRounds } from '@optx/models/Company';\nimport * as types from './types';\n\nexport const getCompanyFundingRounds = createAction(\n types.GET_COMPANY_FUNDING_ROUNDS,\n (companyId: number) => ({\n payload: companyId,\n })\n);\n\nexport const getCompanyFundingRoundsSuccess = createAction(\n types.GET_COMPANY_FUNDING_ROUNDS_SUCCESS,\n (content: CompanyFundingRounds, companyId: number) => ({\n payload: content,\n meta: companyId,\n })\n);\n\nexport const getCompanyFundingRoundsFail = createAction(\n types.GET_COMPANY_FUNDING_ROUNDS_FAIL,\n (error: string) => ({\n payload: error,\n })\n);\n\nexport default {\n getCompanyFundingRounds,\n getCompanyFundingRoundsSuccess,\n getCompanyFundingRoundsFail,\n};\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\nimport { parseBarData } from '@optx/utils/charts';\n\nconst selectCompanyFundingRounds = (state: AppState) => state.companyFundingRounds;\n\nexport const getTotalRaised = createSelector(selectCompanyFundingRounds, state =>\n state.data.total_raised === null ? 'Unknown' : state.data.total_raised\n);\n\nexport const getNumberOfRounds = createSelector(\n selectCompanyFundingRounds,\n state => state.data.number_of_rounds\n);\n\nexport const getTotalInvestors = createSelector(\n selectCompanyFundingRounds,\n state => state.data.total_investors\n);\n\nexport const getLastRound = createSelector(\n selectCompanyFundingRounds,\n state => state.data.last_round\n);\n\nexport const getSecondToLastRoundDate = createSelector(selectCompanyFundingRounds, state => {\n if (state.data.investment_history.length < 2) {\n return null;\n }\n\n return [...state.data.investment_history.map(round => round.date)].sort((a, b) =>\n b.localeCompare(a)\n )[1];\n});\n\nexport const getInvestmentHistory = createSelector(\n selectCompanyFundingRounds,\n state => state.data.investment_history\n);\n\nexport const getFundingRoundsGraph = createSelector(selectCompanyFundingRounds, state =>\n parseBarData(state.data.funding_rounds_graph)\n);\n\nexport const isLoading = createSelector(selectCompanyFundingRounds, state => state.loading);\n\nexport const getFundingTypes = createSelector(\n selectCompanyFundingRounds,\n state => state.data.funding_types\n);\n\nexport const getFundingGraphMessage = createSelector(\n selectCompanyFundingRounds,\n state => state.data.graph_message\n);\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyFundingRounds } from '@optx/models/Company';\nimport { CompanyFundingRoundsState } from './interfaces';\nimport { EditFieldSuccess } from '@optx/features/company/edit-fields/state/interfaces';\n// constants\nimport { INITIAL_STATE_BAR_CHART } from '@constants/charts';\n// redux\nimport { fetchReducer, fetchSuccessReducer, fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport * as actions from './actions';\nimport { actions as editFieldsActions } from '@features/company/edit-fields/state';\n\nconst initialState: CompanyFundingRoundsState = {\n error: '',\n loading: false,\n data: {\n total_raised: '0',\n number_of_rounds: 0,\n total_investors: 0,\n last_round: null,\n investment_history: [],\n funding_rounds_graph: INITIAL_STATE_BAR_CHART,\n funding_types: [],\n graph_message: '',\n },\n};\n\nconst companyFundingRoundsSuccessReducer: CaseReducer<\n CompanyFundingRoundsState,\n PayloadAction<CompanyFundingRounds>\n> = (draftState, action) => {\n fetchSuccessReducer(draftState, action);\n draftState.data = action.payload;\n};\n\nconst updateFieldsSuccessReducer: CaseReducer<\n CompanyFundingRoundsState,\n PayloadAction<EditFieldSuccess>\n> = (draftState, action) => {\n const { fieldName, value } = action.payload;\n\n if (fieldName === 'Capital Raised') {\n draftState.data.total_raised = value as string;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.getCompanyFundingRounds, fetchReducer)\n .addCase(actions.getCompanyFundingRoundsSuccess, companyFundingRoundsSuccessReducer)\n .addCase(actions.getCompanyFundingRoundsFail, fetchFailReducer)\n .addCase(editFieldsActions.updateFieldsSuccess, updateFieldsSuccessReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\nimport { CompanyFundingRounds } from '@optx/models/Company';\n// api\nimport CompanyService from '../../../services/api/CompanyService';\n// action types\nimport { GET_COMPANY_FUNDING_ROUNDS } from './types';\n// actions\nimport { getCompanyFundingRoundsSuccess, getCompanyFundingRoundsFail } from './actions';\n\nexport function* getCompanyFundingRoundsSaga(action: PayloadAction<number>) {\n try {\n const res: AxiosResponse<CompanyFundingRounds> = yield call(\n CompanyService.getCompanyFundingRounds,\n action.payload\n );\n\n if (res.data) {\n yield put(getCompanyFundingRoundsSuccess(res.data, action.payload));\n } else {\n yield put(getCompanyFundingRoundsFail('Error for company funding rounds!'));\n }\n } catch (e: any) {\n yield put(getCompanyFundingRoundsFail('Error for company funding rounds!'));\n }\n}\n\nexport default function* companyFundingRoundsSaga() {\n yield takeLatest(GET_COMPANY_FUNDING_ROUNDS, getCompanyFundingRoundsSaga);\n}\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../featureName';\n\nexport const TOGGLE_COMPANY_EDIT_ALL_FORM_DIALOG = createFeatureActionType(\n featureName,\n 'TOGGLE_COMPANY_EDIT_ALL_FORM_DIALOG'\n);\n\nexport const GET_EDIT_ALL_COMPANY_CONTACTS = createFeatureActionType(\n featureName,\n 'GET_EDIT_ALL_COMPANY_CONTACTS'\n);\nexport const GET_EDIT_ALL_COMPANY_CONTACTS_SUCCESS = createFeatureActionType(\n featureName,\n 'GET_EDIT_ALL_COMPANY_CONTACTS_SUCCESS'\n);\nexport const GET_EDIT_ALL_COMPANY_CONTACTS_FAIL = createFeatureActionType(\n featureName,\n 'GET_EDIT_ALL_COMPANY_CONTACTS_FAIL'\n);\n\nexport const GET_EDIT_ALL_INFO = createFeatureActionType(featureName, 'GET_EDIT_ALL_INFO');\nexport const GET_EDIT_ALL_INFO_SUCCESS = createFeatureActionType(\n featureName,\n 'GET_EDIT_ALL_INFO_SUCCESS'\n);\nexport const GET_EDIT_ALL_INFO_FAIL = createFeatureActionType(\n featureName,\n 'GET_EDIT_ALL_INFO_FAIL'\n);\n\nexport const UPDATE_COMPANY_EDIT_ALL_INFO = createFeatureActionType(\n featureName,\n 'UPDATE_COMPANY_EDIT_ALL_INFO'\n);\n\nexport const UPDATE_COMPANY_EDIT_ALL_INFO_SUCCESS = createFeatureActionType(\n featureName,\n 'UPDATE_COMPANY_EDIT_ALL_INFO_SUCCESS'\n);\nexport const UPDATE_ALL_COMPANY_EDIT_ALL_INFO_SUCCESS = createFeatureActionType(\n featureName,\n 'UPDATE_ALL_COMPANY_EDIT_ALL_INFO_SUCCESS'\n);\n\nexport const UPDATE_COMPANY_EDIT_ALL_INFO_FAIL = createFeatureActionType(\n featureName,\n 'UPDATE_COMPANY_EDIT_ALL_INFO_FAIL'\n);\n\nexport const CHANGE_SAVE_BTN_STATUS = createFeatureActionType(\n featureName,\n 'CHANGE_SAVE_BTN_STATUS'\n);\n\nexport const SET_EDIT_COMPANY_ACTIVE_TAB_NAME = createFeatureActionType(\n featureName,\n 'SET_EDIT_COMPANY_ACTIVE_TAB_NAME'\n);\n\nexport const UPDATE_FAVORITE_COMPANY_EDIT_INFO = createFeatureActionType(\n featureName,\n 'UPDATE_FAVORITE_COMPANY_EDIT_INFO'\n);\nexport const ADD_YEAR_CHANGE_LOG = createFeatureActionType(featureName, 'ADD_YEAR_CHANGE_LOG');\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport {\n EditAllInfo,\n EditAllFieldsGroup,\n TabNamesKeys,\n FavoritesCompaniesEditableNames,\n} from './interfaces';\nimport { CompanyEditAllDataPayload, UpdateEditAllFields } from '@models/api/editAllInfo';\nimport { CompanyFieldsGroup } from '@optx/models/companyFields';\nimport { TouchesFinancialPayload } from '@optx/models/api/touches';\nimport { AllFinancialYearsType } from '@optx/models/Financial';\n// constants\nimport {\n GET_EDIT_ALL_INFO,\n GET_EDIT_ALL_INFO_FAIL,\n GET_EDIT_ALL_INFO_SUCCESS,\n TOGGLE_COMPANY_EDIT_ALL_FORM_DIALOG,\n UPDATE_COMPANY_EDIT_ALL_INFO,\n UPDATE_COMPANY_EDIT_ALL_INFO_SUCCESS,\n UPDATE_ALL_COMPANY_EDIT_ALL_INFO_SUCCESS,\n UPDATE_COMPANY_EDIT_ALL_INFO_FAIL,\n CHANGE_SAVE_BTN_STATUS,\n SET_EDIT_COMPANY_ACTIVE_TAB_NAME,\n UPDATE_FAVORITE_COMPANY_EDIT_INFO,\n ADD_YEAR_CHANGE_LOG,\n} from './types';\n\nexport const toggleCompanyEditAllFormDialog = createAction<EditAllInfo>(\n TOGGLE_COMPANY_EDIT_ALL_FORM_DIALOG\n);\n\nexport const setEditCompanyActiveTabName = createAction<TabNamesKeys>(\n SET_EDIT_COMPANY_ACTIVE_TAB_NAME\n);\n\nexport const updateFavoriteCompanyEditInfo = createAction<{\n fieldName: FavoritesCompaniesEditableNames;\n value?: number | null;\n}>(UPDATE_FAVORITE_COMPANY_EDIT_INFO);\n\nexport const getEditAllInfo = createAction<string | number>(GET_EDIT_ALL_INFO);\nexport const getEditAllInfoSuccess =\n createAction<Record<EditAllFieldsGroup, CompanyFieldsGroup[]>>(GET_EDIT_ALL_INFO_SUCCESS);\nexport const getEditAllInfoFail = createAction<string>(GET_EDIT_ALL_INFO_FAIL);\n\nexport const updateCompanyEditAllInfo = createAction<UpdateEditAllFields>(\n UPDATE_COMPANY_EDIT_ALL_INFO\n);\nexport const updateCompanyEditAllInfoSuccess = createAction<Partial<CompanyEditAllDataPayload>>(\n UPDATE_COMPANY_EDIT_ALL_INFO_SUCCESS\n);\nexport const updateAllCompanyEditAllInfoSuccess = createAction<Partial<TouchesFinancialPayload>>(\n UPDATE_ALL_COMPANY_EDIT_ALL_INFO_SUCCESS\n);\nexport const updateCompanyEditAllInfoFail = createAction<string>(UPDATE_COMPANY_EDIT_ALL_INFO_FAIL);\n\nexport const changeSaveBtnStatus = createAction<string | null>(CHANGE_SAVE_BTN_STATUS);\n\nexport const addYearChangeLog = createAction<AllFinancialYearsType>(ADD_YEAR_CHANGE_LOG);\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { pick } from 'lodash';\n// models\nimport {\n EditAllCompanyInfoState,\n EditAllInfo,\n EditAllFieldsGroup,\n TabNamesKeys,\n FavoritesCompaniesEditableNames,\n} from './interfaces';\nimport { CompanyFieldsGroup } from '@optx/models/companyFields';\nimport { AllFinancialYearsType } from '@optx/models/Financial';\n// constants\nimport { COMPANY_ALL_INFO_KEYS } from '../constants/editAllCompany';\nimport { EDIT_ALL_LOCALSTORAGE_KEY_PREFIX } from '@optx/constants/autosave';\n// utils\nimport { formatInitialValues } from '@utils/touches';\n// redux\nimport * as actions from './actions';\nimport { deleteSavedValues } from '@optx/storage/localStorage/autoSaveStorage';\n\nconst initialState: EditAllCompanyInfoState = {\n shouldInitialFetch: true,\n open: false,\n activeTabName: 'editAllFieldsTab',\n currentFavoriteCompanyEditableName: null,\n lastRevenueUpdateAmountYear: null,\n companyId: -1,\n companyName: '',\n allFields: [],\n propInfo: [],\n eqtView: [],\n gridOrder: [],\n idInfo: [],\n favorites: [],\n initialState: null,\n financialYearsChangeLog: [],\n isFinancialsLoaded: false,\n company: {\n company_id: -1,\n company_owner: '',\n owner_img: '',\n company_name: '',\n company_url: '',\n logo_url: '',\n is_in_et: false,\n location: '',\n year_founded: -1,\n company_owner_id: -1,\n stage: '',\n contacts: [],\n pipeline_rank: '',\n source_tag: [],\n },\n error: '',\n disableSaveBtnFor: null,\n};\n\nconst toggleCompanyEditAllFormDialogReducer: CaseReducer<\n EditAllCompanyInfoState,\n PayloadAction<EditAllInfo>\n> = (draftState, action) => {\n const { companyId, companyName, company, currentFavoriteCompanyEditableName } = action.payload;\n draftState.isFinancialsLoaded = false;\n\n draftState.open = !draftState.open;\n draftState.companyId = companyId;\n draftState.companyName = companyName;\n draftState.company = pick(company, COMPANY_ALL_INFO_KEYS);\n draftState.disableSaveBtnFor = null;\n\n if (currentFavoriteCompanyEditableName === null) {\n draftState.currentFavoriteCompanyEditableName = currentFavoriteCompanyEditableName;\n }\n\n draftState.initialState = null;\n};\n\nconst getEditAllInfoSuccessReducer: CaseReducer<\n EditAllCompanyInfoState,\n PayloadAction<Record<EditAllFieldsGroup, CompanyFieldsGroup[]>>\n> = (draftState, action) => {\n draftState.allFields = action.payload.all_fields;\n draftState.propInfo = action.payload.prop_info;\n draftState.eqtView = action.payload.eqt_view;\n draftState.gridOrder = action.payload.grid_order;\n draftState.idInfo = action.payload.id_info;\n draftState.favorites = action.payload.favorites;\n\n const initialState = {\n ...formatInitialValues(action.payload.all_fields),\n ...formatInitialValues(action.payload.prop_info),\n ...formatInitialValues(action.payload.eqt_view),\n ...formatInitialValues(action.payload.grid_order),\n ...formatInitialValues(action.payload.id_info),\n ...formatInitialValues(action.payload.favorites),\n };\n\n draftState.initialState = initialState;\n draftState.isFinancialsLoaded = true;\n};\n\nconst updateCompanyEditAllInfoSuccessReducer: CaseReducer<EditAllCompanyInfoState> = draftState => {\n draftState.open = false;\n draftState.initialState = null;\n\n deleteSavedValues(EDIT_ALL_LOCALSTORAGE_KEY_PREFIX, draftState.companyId);\n};\n\nconst updateCompanyEditAllInfoReducer: CaseReducer<EditAllCompanyInfoState> = draftState => {\n draftState.currentFavoriteCompanyEditableName = null;\n};\n\nconst changeSaveBtnStatusReducer: CaseReducer<\n EditAllCompanyInfoState,\n PayloadAction<string | null>\n> = (draftState, action) => {\n draftState.disableSaveBtnFor = action.payload;\n};\n\nconst setEditCompanyActiveTabNameReducer: CaseReducer<\n EditAllCompanyInfoState,\n PayloadAction<TabNamesKeys>\n> = (draftState, action) => {\n draftState.activeTabName = action.payload;\n\n if (draftState.currentFavoriteCompanyEditableName) {\n draftState.currentFavoriteCompanyEditableName = null;\n }\n};\n\nconst updateFavoriteCompanyEditInfoReducer: CaseReducer<\n EditAllCompanyInfoState,\n PayloadAction<{\n fieldName: FavoritesCompaniesEditableNames;\n value?: number | null;\n }>\n> = (draftState, action) => {\n if (action.payload.fieldName === 'sub_sector') {\n draftState.activeTabName = 'proprietaryFieldsTab';\n } else {\n draftState.activeTabName = 'favoritesTab';\n }\n\n draftState.currentFavoriteCompanyEditableName = action.payload.fieldName;\n\n if (action.payload.value) {\n draftState.lastRevenueUpdateAmountYear = action.payload.value;\n }\n};\n\nconst addYearChangeLogReducer: CaseReducer<\n EditAllCompanyInfoState,\n PayloadAction<AllFinancialYearsType>\n> = (draftState, action) => {\n draftState.financialYearsChangeLog = {\n ...draftState.financialYearsChangeLog,\n [action.payload.year]: action.payload,\n };\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.toggleCompanyEditAllFormDialog, toggleCompanyEditAllFormDialogReducer)\n .addCase(actions.getEditAllInfoSuccess, getEditAllInfoSuccessReducer)\n .addCase(actions.setEditCompanyActiveTabName, setEditCompanyActiveTabNameReducer)\n .addCase(actions.updateFavoriteCompanyEditInfo, updateFavoriteCompanyEditInfoReducer)\n .addCase(actions.updateCompanyEditAllInfoSuccess, updateCompanyEditAllInfoSuccessReducer)\n .addCase(actions.updateCompanyEditAllInfo, updateCompanyEditAllInfoReducer)\n .addCase(actions.changeSaveBtnStatus, changeSaveBtnStatusReducer)\n .addCase(actions.addYearChangeLog, addYearChangeLogReducer)\n);\n\nexport default reducer;\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\nimport { isEqual } from 'lodash';\n// models\nimport { CompanyFieldsGroup } from '@optx/models/companyFields';\nimport { EditAllInfo, EditAllFieldsGroup, FinancialYearsChangeLog } from './interfaces';\nimport {\n UpdateEditAllFields,\n EditAllInfoForm,\n CompanyEditAllDataPayload,\n EditAllCompanyResponse,\n} from '@models/api/editAllInfo';\nimport { TouchesFinancialPayload } from '@models/api/touches';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { RouteAliases } from '@optx/models/routes';\nimport { APIBoolean } from '@optx/models/api/generic';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getRouteAlias } from '@optx/utils/routes';\nimport { getErrorMessage } from '@utils/api/errors';\nimport { formatFinalValues } from '@utils/touches';\n// redux\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { actions as fundingRoundsActions } from '@redux/company/funding-rounds';\nimport {\n actions as auditFieldsActions,\n selectors as auditFieldsSelectors,\n} from '@features/company/audit-trail/state';\nimport { actions as scoreGrowthActions } from '@features/company/graphs/score';\nimport { actions as actionEmployeeGrowthActions } from '@features/company/graphs/employee';\nimport * as actions from './actions';\nimport { selectors as editAllInfoSelectors } from './index';\nimport { actions as opportunityActions } from '@redux/company/opportunity-presentation';\n\nfunction* toggleCompanyEditAllFormSaga(action: PayloadAction<EditAllInfo>) {\n const isModalOpen: boolean = yield select(editAllInfoSelectors.isOpen);\n\n if (isModalOpen) {\n yield put(actions.getEditAllInfo(action.payload.companyId));\n }\n}\n\nfunction* updateEditAllFormSaga(action: PayloadAction<UpdateEditAllFields>) {\n const { editAllFields: touchForm } = action.payload;\n\n const pageAlias: RouteAliases | null = getRouteAlias();\n\n yield put(customGlobalLoaderActions.toggle({ loading: true }));\n const initialFinancialState: Partial<EditAllInfoForm> | null = yield select(\n editAllInfoSelectors.getInitialEditAllState\n );\n\n const financialInfo: Array<CompanyFieldsGroup> = yield select(\n editAllInfoSelectors.getEditAllTabs\n );\n const financialYearsChangeLog: FinancialYearsChangeLog = yield select(\n editAllInfoSelectors.getFinancialYearsChangeLog\n );\n\n const initialFinancialData = formatFinalValues(\n { companyId: touchForm.companyId },\n initialFinancialState,\n financialInfo\n );\n\n const financialData = formatFinalValues(\n touchForm,\n initialFinancialState,\n financialInfo,\n financialYearsChangeLog\n );\n\n try {\n if (financialData && !isEqual(initialFinancialData, financialData)) {\n const normalizedFinancialData = {\n ...financialData,\n funding: {\n ...financialData.funding,\n capital_raised:\n initialFinancialData?.funding?.capital_raised !== null &&\n financialData?.funding?.capital_raised === null\n ? 0\n : financialData?.funding?.capital_raised,\n },\n };\n\n const resFinancialInfo: AxiosResponse<Partial<EditAllCompanyResponse>> = yield call(\n CompanyService.updateEditAllCompanyInfo,\n normalizedFinancialData\n );\n\n if (resFinancialInfo.data) {\n const financialSuccessMessage = 'Company Info updated successfully!';\n NotificationService.success(financialSuccessMessage);\n const updatedFinancialData = {\n ...financialData,\n financials: {\n gm: resFinancialInfo.data.gross_margin_list || [],\n annual_recurring_revenue: resFinancialInfo.data.annual_recurring_revenue || [],\n ebitda: resFinancialInfo.data.ebitda_list || [],\n revenue: resFinancialInfo.data.revenue_list || [],\n cashflow: financialData.financials?.cashflow,\n revenue_by_country: financialData.financials?.revenue_by_country,\n revenue_model: financialData.financials?.revenue_model,\n financial_notes: financialData.financials?.financial_notes,\n },\n };\n\n if (touchForm.companyId) {\n yield put(opportunityActions.fetchOpportunityPresentation(Number(touchForm.companyId)));\n }\n\n yield put(actions.updateCompanyEditAllInfoSuccess(updatedFinancialData));\n yield put(actions.updateAllCompanyEditAllInfoSuccess(resFinancialInfo.data));\n\n const {\n acquiring_company: fundingDataAcquiringCompany,\n ...fundingData\n }: TouchesFinancialPayload['funding'] = financialData.funding || {};\n\n const {\n acquiring_company: resFundingDataAcquiringCompany,\n ...resFundingData\n }: TouchesFinancialPayload['funding'] = financialData.funding || {};\n\n const fundingHasDiff =\n fundingData !== undefined &&\n resFundingData !== undefined &&\n !isEqual(fundingData, resFundingData);\n\n const acquiringCompanyHasDiff =\n fundingDataAcquiringCompany !== resFundingDataAcquiringCompany &&\n !!fundingDataAcquiringCompany !== !!resFundingDataAcquiringCompany;\n\n if (fundingHasDiff || acquiringCompanyHasDiff) {\n yield put(\n fundingRoundsActions.getCompanyFundingRounds(parseInt(touchForm.companyId || '0'))\n );\n }\n\n if (pageAlias === 'companyHistory') {\n const historyPagination: PageInfo = yield select(auditFieldsSelectors.getPagination);\n const field: string = yield select(auditFieldsSelectors.getSearchQuery);\n const optx: APIBoolean = yield select(auditFieldsSelectors.getOPTX);\n const internal: APIBoolean = yield select(auditFieldsSelectors.getInternal);\n const startDate: string = yield select(auditFieldsSelectors.getStartDate);\n const endDate: string = yield select(auditFieldsSelectors.getEndDate);\n\n yield put(\n auditFieldsActions.fetchChangedCompanyFields({\n companyId: parseInt(touchForm.companyId || '0'),\n pagination: historyPagination,\n field,\n internal,\n optx,\n startDate,\n endDate,\n })\n );\n }\n } else {\n const financialErrorMessage = 'Failed to update Company Info!';\n NotificationService.error(financialErrorMessage);\n yield put(actions.updateCompanyEditAllInfoFail(financialErrorMessage));\n }\n }\n } catch (e: any) {\n const errorMessageCatch = getErrorMessage(e, 'Failed to update Company Info!');\n NotificationService.error(errorMessageCatch);\n yield put(actions.updateCompanyEditAllInfoFail(errorMessageCatch));\n } finally {\n yield put(customGlobalLoaderActions.toggle({ loading: false }));\n }\n}\n\nfunction* getEditAllInfoSaga(action: PayloadAction<string>) {\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n\n try {\n const res: AxiosResponse<Record<EditAllFieldsGroup, CompanyFieldsGroup[]>> = yield call(\n CompanyService.getEditAllCompanyInfo,\n action.payload\n );\n\n if (res.data) {\n yield put(actions.getEditAllInfoSuccess(res.data));\n } else {\n const errorMessage = 'Failed to load financials!';\n yield put(actions.getEditAllInfoFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to load financials!');\n NotificationService.error(errorMessage);\n yield put(actions.getEditAllInfoFail(errorMessage));\n }\n\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n}\n\nfunction* updateCompanyEditAllInfoSuccessSaga(\n action: PayloadAction<Partial<CompanyEditAllDataPayload>>\n) {\n const companyId: number | undefined = yield select(profileSelectors.getCompanyId);\n\n if (companyId && companyId === action.payload.company_id) {\n const companyUrl: string | null = yield select(profileSelectors.getCompanyUrl);\n const company = {\n company_id: companyId,\n company_url: companyUrl,\n };\n\n yield put(scoreGrowthActions.fetchScoreGrowth(company));\n yield put(actionEmployeeGrowthActions.fetchEmployeeGrowth(companyId));\n yield put(fundingRoundsActions.getCompanyFundingRounds(companyId));\n }\n}\n\nexport default function* editAllSaga() {\n yield takeLatest(actions.toggleCompanyEditAllFormDialog, toggleCompanyEditAllFormSaga);\n yield takeLatest(actions.getEditAllInfo, getEditAllInfoSaga);\n yield takeLatest(actions.updateCompanyEditAllInfo, updateEditAllFormSaga);\n yield takeLatest(actions.updateCompanyEditAllInfoSuccess, updateCompanyEditAllInfoSuccessSaga);\n}\n","import axios, { AxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios';\nimport { CANCEL } from 'redux-saga';\n\nexport const API_URL = process.env.REACT_APP_API_ROOT || 'http://localhost:8000';\n\nconst CancelToken = axios.CancelToken;\n\nclass ApiClient {\n private client: AxiosInstance;\n\n private baseURL: string = '';\n\n constructor(baseUrl: string = API_URL) {\n this.baseURL = baseUrl;\n this.client = axios;\n }\n\n private createURL(url: string) {\n return `${this.baseURL}${url}`;\n }\n\n // original Axios methods\n get<Response>(url: string, conf: AxiosRequestConfig = {}) {\n const source = CancelToken.source();\n const request = this.client.get<Response>(this.createURL(url), {\n cancelToken: source.token,\n ...conf,\n });\n // Cancel saga task.Usefull when using takeLatest and in the application the same task is called twice,\n // only the second task will continue running and the first task will be canceled.\n // @ts-ignore\n request[CANCEL] = source.cancel;\n\n return request;\n }\n\n delete<Response>(url: string, conf: AxiosRequestConfig = {}) {\n const source = CancelToken.source();\n const request = this.client.delete<Response>(this.createURL(url), {\n cancelToken: source.token,\n ...conf,\n });\n // Cancel saga task.Usefull when using takeLatest and in the application the same task is called twice,\n // only the second task will continue running and the first task will be canceled.\n // @ts-ignore\n request[CANCEL] = source.cancel;\n\n return request;\n }\n\n head<Response>(url: string, conf: AxiosRequestConfig = {}) {\n const source = CancelToken.source();\n const request = this.client.head<Response>(this.createURL(url), {\n cancelToken: source.token,\n ...conf,\n });\n // Cancel saga task.Usefull when using takeLatest and in the application the same task is called twice,\n // only the second task will continue running and the first task will be canceled.\n // @ts-ignore\n request[CANCEL] = source.cancel;\n\n return request;\n }\n\n post<Response>(url: string, data?: any, conf: AxiosRequestConfig = {}) {\n const source = CancelToken.source();\n const request = this.client.post<Response>(this.createURL(url), data, {\n cancelToken: source.token,\n ...conf,\n });\n // Cancel saga task.Usefull when using takeLatest and in the application the same task is called twice,\n // only the second task will continue running and the first task will be canceled.\n // @ts-ignore\n request[CANCEL] = source.cancel;\n\n return request;\n }\n\n put<Response>(url: string, data?: any, conf: AxiosRequestConfig = {}) {\n const source = CancelToken.source();\n const request = this.client.put<Request, AxiosResponse<Response>>(this.createURL(url), data, {\n cancelToken: source.token,\n ...conf,\n });\n // Cancel saga task.Usefull when using takeLatest and in the application the same task is called twice,\n // only the second task will continue running and the first task will be canceled.\n // @ts-ignore\n request[CANCEL] = source.cancel;\n\n return request;\n }\n\n patch<Response>(url: string, data?: any, conf: AxiosRequestConfig = {}) {\n const source = CancelToken.source();\n const request = this.client.patch<Response>(this.createURL(url), data, {\n cancelToken: source.token,\n ...conf,\n });\n // Cancel saga task.Usefull when using takeLatest and in the application the same task is called twice,\n // only the second task will continue running and the first task will be canceled.\n // @ts-ignore\n request[CANCEL] = source.cancel;\n\n return request;\n }\n}\n\nexport default ApiClient;\n","import { put, takeLatest, select, call } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { RouteAliases } from '@optx/models/routes';\nimport { AppState } from '@optx/redux/interfaces';\nimport Company, { CompanyProfile } from '@optx/models/Company';\nimport { APIBoolean } from '@optx/models/api/generic';\n// constants\nimport { CompanyProfileTabs } from '@optx/constants/routes';\n// services\nimport { UserService } from '@optx/services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getRouteAlias } from '@optx/utils/routes';\n// redux\nimport * as scoreGrowthActions from '@features/company/graphs/score/state/actions';\nimport * as cardSelectors from '@features/long-card/company-card/state/selectors';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { selectors as routerSelectors } from '@redux/router';\nimport {\n actions as auditActions,\n selectors as auditSelectors,\n} from '@features/company/audit-trail/state';\nimport { actions as checklistResearchActions } from '@features/checklist-research-insights/state/actions';\nimport { getCompanyById as checklistGetCompany } from '@features/checklist-research-insights/state/selectors';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\nimport {\n AddResearchRationale,\n AddResearchRationaleCompany,\n FieldType,\n SaveResearchRationaleResponse,\n SubmitRationaleResponse,\n SaveResearchRationalePayload,\n SaveResearchRationalePayloadFields,\n} from './interfaces';\nimport { getCompanyById as getSearchCompanyById } from '@features/grid/search/state/selectors';\n\nlet rationaleCallBack: void | (() => void);\n\nexport function* toggleAddResearchRationaleSaga(action: PayloadAction<AddResearchRationale>) {\n const companyId = action.payload?.companyId;\n const callback = action.payload?.callback;\n const pageAlias: RouteAliases | null = getRouteAlias(companyId);\n let company: Company | CompanyProfile | null;\n const defaultScore: string = yield select(userSelectors.getDefaultScore);\n const isOpen: boolean = yield select(selectors.isOpen);\n\n if (!companyId) return;\n\n if (isOpen) {\n switch (pageAlias) {\n case 'userLists':\n case 'watchList':\n case 'sourceScrubLists':\n company = yield select(getSearchCompanyById('lists', companyId));\n break;\n\n case 'chromeExtension':\n company = yield select(cardSelectors.getProfile);\n break;\n\n case 'myCompanies':\n company = yield select(getSearchCompanyById('myCompanies', companyId));\n break;\n\n case 'advancedSearch':\n company = yield select(getSearchCompanyById('advancedSearch', companyId));\n break;\n\n case 'companyOutReach':\n company = yield select(getSearchCompanyById('outreachDetails', companyId));\n break;\n\n case 'checklistResearchInsights':\n company = yield select(checklistGetCompany(companyId));\n break;\n\n case 'companyAddonManagement':\n company = yield select(getSearchCompanyById('addons', companyId));\n break;\n case 'companyProfile':\n default:\n company = yield select((state: AppState) => state.companyProfile.data);\n break;\n }\n\n yield put(actions.toggleAddResearchRationaleSuccess({ company, defaultScore }));\n rationaleCallBack = callback;\n }\n}\n\nexport function* submitResearchRationaleSaga() {\n const defaultScore: string = yield select(userSelectors.getDefaultScore);\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n\n try {\n const company: AddResearchRationaleCompany = yield select(selectors.getCompanyInfo);\n const fields: FieldType = yield select(selectors.getFields);\n const rationale: FieldType = yield select(selectors.getRationale);\n const initialFields: FieldType = yield select(selectors.getInitialFields);\n const initialRationale: FieldType = yield select(selectors.getInitialRationale);\n\n const fieldsPayload: SaveResearchRationalePayloadFields = {};\n\n if (\n fields.is_software !== initialFields.is_software ||\n rationale.is_software_rationales !== initialRationale.is_software_rationales ||\n fields.is_software === true\n ) {\n fieldsPayload.software_company = {\n value: fields.is_software,\n rationale: rationale.is_software_rationales,\n };\n }\n\n if (\n fields.is_interesting !== initialFields.is_interesting ||\n rationale.psg_fit_rationales !== initialRationale.psg_fit_rationales ||\n fields.is_interesting === true\n ) {\n fieldsPayload.psg_fit = {\n value: fields.is_interesting,\n rationale: rationale.psg_fit_rationales,\n };\n }\n\n if (\n fields.is_software &&\n fields.is_interesting &&\n (fields.optx_score_verified !== initialFields.optx_score_verified ||\n rationale.optx_score_rationales !== initialRationale.optx_score_rationales ||\n rationale.optx_score_lower_rationales !== initialRationale.optx_score_lower_rationales ||\n rationale.optx_score_upper_rationales !== initialRationale.optx_score_upper_rationales)\n ) {\n fieldsPayload.optx_score = {\n optx_score_verified: fields.optx_score_verified,\n rationale: rationale.optx_score_rationales,\n rationale_reason_lower: rationale.optx_score_lower_rationales,\n rationale_reason_upper: rationale.optx_score_upper_rationales,\n };\n }\n\n if (\n fields.optx_score_v3_verified !== initialFields.optx_score_v3_verified ||\n rationale.optx_score_v3_rationales !== initialRationale.optx_score_v3_rationales ||\n rationale.optx_score_v3_lower_rationales !==\n initialRationale.optx_score_v3_lower_rationales ||\n rationale.optx_score_v3_upper_rationales !== initialRationale.optx_score_v3_upper_rationales\n ) {\n fieldsPayload.score_v3 = {\n optx_score_verified: fields.optx_score_v3_verified,\n rationale: rationale.optx_score_v3_rationales,\n rationale_reason_lower: rationale.optx_score_v3_lower_rationales,\n rationale_reason_upper: rationale.optx_score_v3_upper_rationales,\n };\n }\n\n const payload: SaveResearchRationalePayload = {\n company_id: company.company_id,\n fields: { ...fieldsPayload },\n };\n\n // api requires sending \"-\" instead of null for optx score thumbs up\n const res: AxiosResponse<SubmitRationaleResponse> = yield call(\n UserService.sendResearchRationale,\n payload\n );\n\n const customPayload: SaveResearchRationaleResponse = {\n ...payload,\n defaultScore,\n scoreRationale: res.data.optx_score_rl,\n newScoreRationale: res.data.optx_score_v3_rl || false,\n scoreValues: {\n // default score values changed by fit data\n fitScore: res.data.optx_score,\n fitScoreGrowth: res.data.optx_score_growth,\n fitNewScore: res.data.score_v3,\n fitNewScoreGrowth: res.data.score_v3_growth,\n // israel score values changed by fit data\n fitIsraelScore: res.data.il_optx_score,\n fitIsraelScoreGrowth: res.data.il_optx_score_growth,\n // default score values changed by software data\n softwareScore: res.data.optx_score,\n softwareScoreGrowth: res.data.optx_score_growth,\n // new score values changed by software data\n softwareNewScore: res.data.score_v3,\n softwareNewScoreGrowth: res.data.score_v3_growth,\n // israel score values changed by software data\n softwareIsraelScore: res.data.il_optx_score,\n softwareIsraelScoreGrowth: res.data.il_optx_score_growth,\n checklistReviewedBy: res.data.checklist_reviewed_by,\n checklistReviewedDate: res.data.checklist_reviewed_date,\n },\n };\n yield put(actions.submitResearchRationaleSuccess(customPayload));\n rationaleCallBack && rationaleCallBack();\n\n if (window.location.pathname.includes('checklist-research-insights')) {\n yield put(checklistResearchActions.card.fetchCard());\n }\n\n yield put(\n scoreGrowthActions.fetchScoreGrowth({\n company_id: company.company_id,\n company_url: company?.company_url as string,\n })\n );\n\n // getting the current tab from Company Profile\n // @ts-ignore\n // @ts-ignore\n const tabNumber = yield select(routerSelectors.getLocation);\n\n if (tabNumber && tabNumber.query.tab === CompanyProfileTabs.HISTORY) {\n const { pageSize } = yield select(auditSelectors.getPagination);\n const field: string = yield select(auditSelectors.getSearchQuery);\n const optx: APIBoolean = yield select(auditSelectors.getOPTX);\n const internal: APIBoolean = yield select(auditSelectors.getInternal);\n const startDate: string = yield select(auditSelectors.getStartDate);\n const endDate: string = yield select(auditSelectors.getEndDate);\n\n yield put(\n auditActions.fetchChangedCompanyFields({\n companyId: company.company_id,\n pagination: {\n pageNumber: 1,\n pageSize,\n },\n field,\n internal,\n optx,\n startDate,\n endDate,\n })\n );\n }\n\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n NotificationService.success('Success to add research rationale');\n } catch (error: any) {\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n const errorMessage = 'Failed to save research rationale!';\n\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* addResearchRationaleSaga() {\n yield takeLatest(actions.toggleAddResearchRationale, toggleAddResearchRationaleSaga);\n yield takeLatest(actions.submitResearchRationale, submitResearchRationaleSaga);\n}\n","import { AppState } from '@optx/redux/interfaces';\nimport { createSelector } from 'reselect';\n\nconst getModalState = (state: AppState) => state.researchRationale;\n\nexport const isOpen = createSelector(getModalState, state => state.open);\n\nexport const getCompanyInfo = createSelector(getModalState, state => {\n return state.company;\n});\n\nexport const getFields = createSelector(getModalState, state => {\n return state.fields;\n});\n\nexport const getRationale = createSelector(getModalState, state => {\n return state.rationale;\n});\n\nexport const getInitialFields = createSelector(getModalState, state => {\n return state.initialFieldsValues;\n});\n\nexport const getInitialRationale = createSelector(getModalState, state => {\n return state.initialRationaleValues;\n});\n\nexport const getActiveRationaleReasonType = createSelector(getModalState, state => {\n return state.activeScoreRationaleReasonType;\n});\n\nexport const getNewActiveRationaleReasonType = createSelector(getModalState, state => {\n return state.activeNewScoreRationaleReasonType;\n});\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\n// utils\nimport { getRangeValues, getValuesRalation } from '@optx/utils/researchRationale';\n// constants\nimport {\n SOFTWARE_CARD_NAME,\n FIT_CARD_NAME,\n OPTX_SCORE_RATIONALE_KEY,\n OPTX_SCORE_LOWER_RATIONALE_KEY,\n OPTX_SCORE_UPPER_RATIONALE_KEY,\n SOFTWARE_RATIONALE_KEY,\n NEW_OPTX_SCORE_RATIONALE_KEY,\n NEW_OPTX_SCORE_LOWER_RATIONALE_KEY,\n NEW_OPTX_SCORE_UPPER_RATIONALE_KEY,\n} from '@features/add-research-rationale/constants';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport * as actions from './actions';\nimport {\n AddResearchRationaleSuccess,\n AddResearchRationaleState,\n ChangeFieldsPayload,\n AddResearchRationale,\n} from './interfaces';\n\nconst initialState: AddResearchRationaleState = {\n open: false,\n company: null,\n fields: {},\n rationale: {},\n initialFieldsValues: {},\n initialRationaleValues: {},\n activeScoreRationaleReasonType: null,\n activeNewScoreRationaleReasonType: null,\n};\n\nconst toggleAddResearchRationaleReducer: CaseReducer<\n AddResearchRationale & AddResearchRationaleState\n> = (draftState, action) => {\n draftState.open = !draftState?.open!;\n};\n\nconst toggleAddResearchRationaleSuccessReducer: CaseReducer<\n AddResearchRationaleState,\n PayloadAction<AddResearchRationaleSuccess>\n> = (draftState, action) => {\n const { company, defaultScore } = action.payload;\n const scoreRationale =\n defaultScore === 'il' ? company?.il_optx_score_rationale : company?.optx_score_rationale;\n\n const newScoreRationale =\n defaultScore === 'il' ? company?.il_optx_score_rationale : company?.optx_score_v3_rationale;\n\n const scoreRationaleReason =\n defaultScore === 'il'\n ? company?.il_optx_score_rationale_reason\n : company?.optx_score_rationale_reason;\n\n const newScoreRationaleReason =\n defaultScore === 'il'\n ? company?.il_optx_score_rationale_reason\n : company?.optx_score_v3_rationale_reason;\n\n const scoreRationaleReasonType =\n defaultScore === 'il'\n ? company?.il_optx_score_rationale_reason_type\n : company?.optx_score_rationale_reason_type;\n\n const newScoreRationaleReasonType =\n defaultScore === 'il'\n ? company?.il_optx_score_rationale_reason_type\n : company?.optx_score_v3_rationale_reason_type;\n\n const scoreLowerRationaleReason =\n scoreRationaleReasonType === 'lower' ? (scoreRationaleReason as string | null) : null;\n const scoreUpperRationaleReason =\n scoreRationaleReasonType === 'upper' ? (scoreRationaleReason as string | null) : null;\n\n const newScoreLowerRationaleReason =\n newScoreRationaleReasonType === 'lower' ? (newScoreRationaleReason as string | null) : null;\n const newScoreUpperRationaleReason =\n newScoreRationaleReasonType === 'upper' ? (newScoreRationaleReason as string | null) : null;\n\n const scoreVerified =\n defaultScore === 'il' ? company?.il_optx_score_verified : company?.optx_score_verified;\n\n const newScoreVerified = company?.optx_score_v3_verified;\n\n draftState.company = company;\n\n if (scoreLowerRationaleReason !== null) {\n draftState.activeScoreRationaleReasonType = 'Score Lower';\n } else if (scoreUpperRationaleReason !== null) {\n draftState.activeScoreRationaleReasonType = 'Score Upper';\n } else if (scoreRationale && scoreRationale !== DEFAULT_EMPTY_VALUE) {\n const rangeValues = getRangeValues(scoreRationale);\n let score;\n\n if (draftState.company) {\n score = draftState.company[defaultScore === 'us' ? 'score' : 'il_optx_score'];\n }\n\n if (typeof score !== 'number') {\n score = 'N/A';\n }\n\n const scoreValuesRelation =\n typeof score !== 'string' ? getValuesRalation(rangeValues, score as number) : 'upper';\n\n draftState.activeScoreRationaleReasonType =\n // eslint-disable-next-line no-nested-ternary\n scoreValuesRelation === 'lower'\n ? 'Score Lower'\n : scoreValuesRelation === 'upper'\n ? 'Score Upper'\n : null;\n } else {\n draftState.activeScoreRationaleReasonType = null;\n }\n\n if (newScoreLowerRationaleReason !== null) {\n draftState.activeNewScoreRationaleReasonType = 'Score Lower';\n } else if (newScoreUpperRationaleReason !== null) {\n draftState.activeNewScoreRationaleReasonType = 'Score Upper';\n } else if (newScoreRationale && newScoreRationale !== DEFAULT_EMPTY_VALUE) {\n const rangeValues = getRangeValues(newScoreRationale);\n let newScore;\n\n if (draftState.company) {\n newScore = draftState.company.score_v3;\n }\n\n if (typeof newScore !== 'number') {\n newScore = 'N/A';\n }\n\n const scoreValuesRelation =\n typeof newScore !== 'string' ? getValuesRalation(rangeValues, newScore as number) : 'upper';\n\n draftState.activeNewScoreRationaleReasonType =\n // eslint-disable-next-line no-nested-ternary\n scoreValuesRelation === 'lower'\n ? 'Score Lower'\n : scoreValuesRelation === 'upper'\n ? 'Score Upper'\n : null;\n } else {\n draftState.activeNewScoreRationaleReasonType = null;\n }\n\n draftState.fields = {\n is_software: company?.is_software as boolean | null,\n is_interesting: company?.is_interesting as boolean | null,\n optx_score_verified: scoreVerified as boolean | null,\n optx_score_v3_verified: newScoreVerified as boolean | null,\n };\n\n draftState.rationale = {\n is_software_rationales: company?.is_software_rationale as string | null,\n psg_fit_rationales: company?.interesting_rationale as string | null,\n optx_score_rationales: scoreRationale as string | null,\n optx_score_upper_rationales: scoreUpperRationaleReason,\n optx_score_lower_rationales: scoreLowerRationaleReason,\n optx_score_v3_rationales: newScoreRationale as string | null,\n optx_score_v3_upper_rationales: newScoreUpperRationaleReason,\n optx_score_v3_lower_rationales: newScoreLowerRationaleReason,\n };\n\n draftState.initialFieldsValues = {\n is_software: company?.is_software as boolean | null,\n is_interesting: company?.is_interesting as boolean | null,\n optx_score_verified: scoreVerified as boolean | null,\n optx_score_v3_verified: newScoreVerified as boolean | null,\n };\n\n draftState.initialRationaleValues = {\n is_software_rationales: company?.is_software_rationale as string | null,\n psg_fit_rationales: company?.interesting_rationale as string | null,\n optx_score_rationales: scoreRationale as string | null,\n optx_score_upper_rationales: scoreUpperRationaleReason,\n optx_score_lower_rationales: scoreLowerRationaleReason,\n optx_score_v3_rationales: newScoreRationale as string | null,\n optx_score_v3_upper_rationales: newScoreUpperRationaleReason,\n optx_score_v3_lower_rationales: newScoreLowerRationaleReason,\n };\n};\n\nconst changeFieldsReducer: CaseReducer<\n AddResearchRationaleState,\n PayloadAction<ChangeFieldsPayload>\n> = (draftState, action) => {\n const { key, value } = action.payload;\n\n if (key === 'optx_score_verified' || key === 'il_optx_score_verified') {\n draftState.fields.optx_score_verified = value;\n } else if (key === 'optx_score_v3_verified') {\n draftState.fields.optx_score_v3_verified = value;\n } else {\n draftState.fields[key] = value;\n }\n\n // @ts-ignore\n draftState.company[key] = value;\n};\n\nconst changeRationaleReducer: CaseReducer<\n AddResearchRationaleState,\n PayloadAction<ChangeFieldsPayload>\n> = (draftState, action) => {\n const { key, value, defaultScore } = action.payload;\n\n if (key === SOFTWARE_RATIONALE_KEY && value === null) {\n draftState.rationale[SOFTWARE_RATIONALE_KEY] = DEFAULT_EMPTY_VALUE;\n } else if (key === OPTX_SCORE_RATIONALE_KEY && value !== null) {\n draftState.rationale[OPTX_SCORE_RATIONALE_KEY] = value;\n draftState.rationale[OPTX_SCORE_LOWER_RATIONALE_KEY] = null;\n draftState.rationale[OPTX_SCORE_UPPER_RATIONALE_KEY] = null;\n\n const rangeValues = getRangeValues(value as string);\n let score;\n\n if (draftState.company) {\n score = draftState.company[defaultScore === 'us' ? 'score' : 'il_optx_score'];\n }\n\n if (typeof score !== 'number') {\n score = 'N/A';\n }\n\n const scoreValuesRelation =\n typeof score !== 'string' ? getValuesRalation(rangeValues, score as number) : 'upper';\n\n draftState.activeScoreRationaleReasonType =\n // eslint-disable-next-line no-nested-ternary\n scoreValuesRelation === 'lower'\n ? 'Score Lower'\n : scoreValuesRelation === 'upper'\n ? 'Score Upper'\n : null;\n } else if (key === NEW_OPTX_SCORE_RATIONALE_KEY && value !== null) {\n draftState.rationale[NEW_OPTX_SCORE_RATIONALE_KEY] = value;\n draftState.rationale[NEW_OPTX_SCORE_LOWER_RATIONALE_KEY] = null;\n draftState.rationale[NEW_OPTX_SCORE_UPPER_RATIONALE_KEY] = null;\n\n const rangeValues = getRangeValues(value as string);\n let score;\n\n if (draftState.company) {\n score = draftState.company.score_v3;\n }\n\n if (typeof score !== 'number') {\n score = 'N/A';\n }\n\n const scoreValuesRelation =\n typeof score !== 'string' ? getValuesRalation(rangeValues, score as number) : 'upper';\n\n draftState.activeNewScoreRationaleReasonType =\n // eslint-disable-next-line no-nested-ternary\n scoreValuesRelation === 'lower'\n ? 'Score Lower'\n : scoreValuesRelation === 'upper'\n ? 'Score Upper'\n : null;\n } else if (\n key === OPTX_SCORE_RATIONALE_KEY &&\n (value === null || value === DEFAULT_EMPTY_VALUE)\n ) {\n draftState.rationale[OPTX_SCORE_RATIONALE_KEY] = value;\n draftState.rationale[OPTX_SCORE_LOWER_RATIONALE_KEY] = null;\n draftState.rationale[OPTX_SCORE_UPPER_RATIONALE_KEY] = null;\n draftState.activeScoreRationaleReasonType = null;\n } else if (\n key === NEW_OPTX_SCORE_RATIONALE_KEY &&\n (value === null || value === DEFAULT_EMPTY_VALUE)\n ) {\n draftState.rationale[NEW_OPTX_SCORE_RATIONALE_KEY] = value;\n draftState.rationale[NEW_OPTX_SCORE_LOWER_RATIONALE_KEY] = null;\n draftState.rationale[NEW_OPTX_SCORE_UPPER_RATIONALE_KEY] = null;\n draftState.activeNewScoreRationaleReasonType = null;\n } else if (key === OPTX_SCORE_LOWER_RATIONALE_KEY) {\n draftState.rationale[OPTX_SCORE_LOWER_RATIONALE_KEY] = value;\n draftState.rationale[OPTX_SCORE_UPPER_RATIONALE_KEY] = null;\n } else if (key === NEW_OPTX_SCORE_LOWER_RATIONALE_KEY) {\n draftState.rationale[NEW_OPTX_SCORE_LOWER_RATIONALE_KEY] = value;\n draftState.rationale[NEW_OPTX_SCORE_UPPER_RATIONALE_KEY] = null;\n } else if (key === OPTX_SCORE_UPPER_RATIONALE_KEY) {\n draftState.rationale[OPTX_SCORE_UPPER_RATIONALE_KEY] = value;\n draftState.rationale[OPTX_SCORE_LOWER_RATIONALE_KEY] = null;\n } else if (key === NEW_OPTX_SCORE_UPPER_RATIONALE_KEY) {\n draftState.rationale[NEW_OPTX_SCORE_UPPER_RATIONALE_KEY] = value;\n draftState.rationale[NEW_OPTX_SCORE_LOWER_RATIONALE_KEY] = null;\n } else {\n draftState.rationale[key] = value;\n }\n};\n\nconst revertFieldsChangesReducer: CaseReducer<\n AddResearchRationaleState,\n PayloadAction<ChangeFieldsPayload>\n> = (draftState, action) => {\n const { key, value } = action.payload;\n\n if (key === SOFTWARE_CARD_NAME) {\n draftState.fields.is_interesting = draftState.initialFieldsValues.is_interesting;\n draftState.rationale.psg_fit_rationales = draftState.initialRationaleValues.psg_fit_rationales;\n draftState.rationale.optx_score_rationales =\n draftState.initialRationaleValues.optx_score_rationales;\n draftState.rationale.optx_score_lower_rationales =\n draftState.initialRationaleValues.optx_score_lower_rationales;\n draftState.rationale.optx_score_upper_rationales =\n draftState.initialRationaleValues.optx_score_upper_rationales;\n draftState.rationale.optx_score_v3_rationales =\n draftState.initialRationaleValues.optx_score_v3_rationales;\n draftState.rationale.optx_score_v3_lower_rationales =\n draftState.initialRationaleValues.optx_score_v3_lower_rationales;\n draftState.rationale.optx_score_v3_upper_rationales =\n draftState.initialRationaleValues.optx_score_v3_upper_rationales;\n\n if (draftState.company) {\n draftState.company.is_interesting = draftState.initialFieldsValues.is_interesting as\n | boolean\n | null;\n }\n\n if (value === null) {\n draftState.rationale.is_software_rationales = DEFAULT_EMPTY_VALUE;\n }\n }\n\n if (key === FIT_CARD_NAME) {\n draftState.rationale.optx_score_rationales =\n draftState.initialRationaleValues.optx_score_rationales;\n draftState.rationale.optx_score_lower_rationales =\n draftState.initialRationaleValues.optx_score_lower_rationales;\n draftState.rationale.optx_score_upper_rationales =\n draftState.initialRationaleValues.optx_score_upper_rationales;\n draftState.rationale.optx_score_v3_rationales =\n draftState.initialRationaleValues.optx_score_v3_rationales;\n draftState.rationale.optx_score_v3_lower_rationales =\n draftState.initialRationaleValues.optx_score_v3_lower_rationales;\n draftState.rationale.optx_score_v3_upper_rationales =\n draftState.initialRationaleValues.optx_score_v3_upper_rationales;\n\n if (value === null) {\n draftState.rationale.psg_fit_rationales = null;\n }\n }\n};\n\nexport default createReducer(initialState, builder =>\n builder\n .addCase(actions.toggleAddResearchRationale, toggleAddResearchRationaleReducer)\n .addCase(actions.toggleAddResearchRationaleSuccess, toggleAddResearchRationaleSuccessReducer)\n .addCase(actions.changeFields, changeFieldsReducer)\n .addCase(actions.changeRationale, changeRationaleReducer)\n .addCase(actions.revertFieldsChanges, revertFieldsChangesReducer)\n);\n","import { forEach } from 'lodash';\nimport { createSelector } from 'reselect';\n// models\nimport { HistogramSlider } from '@optx/models/filters';\nimport { selectFeatureState, StateSlice } from '@features/grid/selectFeature';\nimport { GridKeys } from '@optx/models/grid';\n\nconst selectHistogramFeatureState = (state: StateSlice) => selectFeatureState(state).histograms;\n\nexport const selectEditHistograms = (gridKey: GridKeys) =>\n createSelector(selectHistogramFeatureState, state => {\n if (state[gridKey]?.edit) {\n return state[gridKey].edit?.data;\n }\n\n return state[gridKey]?.data;\n });\n\nexport const histograms = (gridKey: GridKeys) =>\n createSelector(selectHistogramFeatureState, state => state[gridKey].data);\n\nexport const allFiltersWithHistograms = (gridKey: GridKeys) =>\n createSelector(selectHistogramFeatureState, state => state[gridKey].allFilters);\n\nexport const searchCount = (gridKey: GridKeys) =>\n createSelector(selectHistogramFeatureState, state => state[gridKey].searchCount);\n\nexport const changedFilters = (gridKey: GridKeys) => {\n return createSelector(selectHistogramFeatureState, state =>\n state[gridKey].edit ? state[gridKey].edit?.changedFilters : state[gridKey].changedFilters\n );\n};\n\nexport const loading = (gridKey: GridKeys) =>\n createSelector(selectHistogramFeatureState, state => state[gridKey].loading);\n\nexport const isInitialized = (gridKey: GridKeys) =>\n createSelector(selectHistogramFeatureState, state => !!state[gridKey].fetchedAt);\n\nexport const histogramRequestFilters = (gridKey: GridKeys) =>\n createSelector(selectHistogramFeatureState, state => {\n const { lastChangedFilter, allFilters } = state[gridKey];\n\n // Should return all filters except the last changed filter if the filter contains histogram.\n return allFilters.filter(filter => filter !== lastChangedFilter);\n });\n\nexport const defaultHistograms = (gridKey: GridKeys) =>\n createSelector(selectHistogramFeatureState, state => state[gridKey].defaultHistograms);\n\nexport const isEnabled = (gridKey: GridKeys) =>\n createSelector(selectHistogramFeatureState, state => state[gridKey]?.enabled);\n\nexport const histogramsAreEmpty = (gridKey: GridKeys) =>\n createSelector(selectHistogramFeatureState, state => {\n const { data, enabled } = state[gridKey];\n\n if (!enabled) {\n return true;\n }\n\n let histogramsAreEmpty = true;\n\n forEach(data, histogram => {\n const { data: histogramInfo } = histogram as HistogramSlider;\n\n if (histogramInfo) {\n histogramsAreEmpty = false;\n\n return false;\n }\n\n return undefined;\n });\n\n return histogramsAreEmpty;\n });\n","import { utils as requestUtils } from '@features/request';\nimport { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '@features/grid/featureName';\n\nexport const fetchHistograms = requestUtils.createActionTypes(featureName, 'FETCH');\n\nexport const TOGGLE_REFRESH = createFeatureActionType(featureName, 'TOGGLE_REFRESH');\nexport const FILTER_CHANGED = createFeatureActionType(featureName, 'FILTER_CHANGED');\nexport const EDIT = createFeatureActionType(featureName, 'EDIT');\nexport const APPLY_EDIT = createFeatureActionType(featureName, 'APPLY_EDIT');\nexport const RESET_TO_DEFAULT = createFeatureActionType(featureName, 'RESET_TO_DEFAULT');\nexport const CLEAR = createFeatureActionType(featureName, 'CLEAR');\n\nexport const INIT = createFeatureActionType(featureName, 'INIT');\n","import { Dictionary } from 'lodash';\nimport { createAction, PrepareAction } from '@reduxjs/toolkit';\n// models\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { GridKeys, GridPayloadMain } from '@optx/models/grid';\n// redux\nimport * as types from './types';\nimport {\n ApplyEditPayload,\n EditPayload,\n FetchHistogramsActionPayload,\n FetchHistogramsSuccessActionPayload,\n FilterChangedPayload,\n ResetPayload,\n ToggleRefreshPayload,\n} from './interfaces';\n\nexport const fetchHistogramFilters = createAction<PrepareAction<FetchHistogramsActionPayload>>(\n types.fetchHistograms.REQUEST,\n (gridKey: GridKeys, filter: Dictionary<PreselectedFilter>, histogramList: Array<string>) => ({\n payload: { gridKey, filter, histogramList },\n })\n);\n\nexport const fetchHistogramFiltersSuccess = createAction<FetchHistogramsSuccessActionPayload>(\n types.fetchHistograms.SUCCESS\n);\n\nexport const fetchHistogramFiltersFail = createAction<GridPayloadMain<string>>(\n types.fetchHistograms.FAILURE\n);\n\nexport const toggleRefresh = createAction<PrepareAction<ToggleRefreshPayload>>(\n types.TOGGLE_REFRESH,\n (gridKey: GridKeys, enabled: boolean, filterValues: Dictionary<PreselectedFilter>) => ({\n payload: {\n gridKey,\n enabled,\n values: filterValues,\n },\n })\n);\n\nexport const filterChanged = createAction<PrepareAction<FilterChangedPayload>>(\n types.FILTER_CHANGED,\n (gridKey: GridKeys, filterKey: string, values?: Dictionary<PreselectedFilter>) => ({\n payload: {\n gridKey,\n filterKey,\n values,\n },\n })\n);\n\nexport const edit = createAction<PrepareAction<EditPayload>>(\n types.EDIT,\n (gridKey: GridKeys, isEditing: boolean) => ({\n payload: {\n gridKey,\n isEditing,\n },\n })\n);\n\nexport const applyEdit = createAction<ApplyEditPayload>(types.APPLY_EDIT);\n\n// Action called when histogram searches for default histogram but the default histogram is already cached.\nexport const resetToDefault = createAction<ResetPayload>(types.RESET_TO_DEFAULT);\n\nexport const init = createAction(types.INIT);\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { FilterSource } from '@models/filters';\nimport { CompanyFiltersMeta } from '@models/search';\nimport { ResetFilter } from '@features/grid/search/state/interfaces';\nimport {\n FetchHistogramsSuccessActionPayload,\n FilterChangedPayload,\n ToggleRefreshPayload,\n HistogramState,\n FetchHistogramsActionPayload,\n EditPayload,\n ResetPayload,\n ApplyEditPayload,\n} from './interfaces';\nimport { GridPayload, GridPayloadMain } from '@optx/models/grid';\nimport { SearchCountPayload } from '@optx/features/grid/search-count/state/interfaces';\nimport { UserInformation } from '@optx/models/user';\n// constants\nimport { HISTOGRAM_KEYS, HISTOGRAM_INITIAL_STATE } from '@constants/grid';\n// utils\nimport { filtersWithHistogram } from '@utils/filters/preselectedValues';\nimport { generateGridReducerInitialState } from '@utils/grid';\n// redux\nimport { fetchReducer } from '@redux/feature/fetch/reducers';\nimport * as actions from './actions';\nimport { actions as searchCountActions } from '@features/grid/search-count';\nimport { actions as companyFilterActions } from '@redux/company/filters';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport {\n clearSearch as clearSearchSearchActions,\n resetSearch as resetSearchSearchActions,\n resetFilter as resetFilterSearchActions,\n} from '@features/grid/search/state/actions';\nimport * as fetchReducers from '@redux/feature/fetch/reducers';\n\nconst initialState: HistogramState = generateGridReducerInitialState(\n HISTOGRAM_KEYS,\n HISTOGRAM_INITIAL_STATE\n);\n\nexport const fetchHistogramFiltersReducer: CaseReducer<\n HistogramState,\n PayloadAction<FetchHistogramsActionPayload>\n> = (draftState, action) => {\n const { gridKey } = action.payload;\n\n if (draftState[gridKey].enabled) {\n fetchReducer(draftState[gridKey]);\n }\n};\n\nexport const fetchHistogramFiltersSuccessReducer: CaseReducer<\n HistogramState,\n PayloadAction<FetchHistogramsSuccessActionPayload>\n> = (draftState, action) => {\n const { gridKey, data, isDefault, companyCount } = action.payload;\n // Merge data values; if the changed filter is one that has histogram,\n // the response will contain other histograms except the one changed.\n const newData = data\n ? {\n ...(draftState[gridKey].edit ? draftState[gridKey].edit!.data : draftState[gridKey].data),\n ...data,\n }\n : {};\n\n if (!draftState[gridKey].fetchedAt) {\n // If it was just enabled update all histograms data.\n if (draftState[gridKey].edit) {\n draftState[gridKey].edit!.data = newData;\n }\n\n draftState[gridKey].data = newData;\n } else if (draftState[gridKey].edit) {\n // Is in edit mode.\n draftState[gridKey].edit!.data = newData;\n } else {\n draftState[gridKey].data = newData;\n }\n\n draftState[gridKey].searchCount = companyCount;\n draftState[gridKey].loading = false;\n draftState[gridKey].error = '';\n\n if (isDefault && !draftState[gridKey].defaultHistograms) {\n draftState[gridKey].defaultHistograms = newData;\n }\n\n draftState[gridKey].fetchedAt = new Date().toISOString();\n};\n\n// external reducers\nexport const fetchCompanyFiltersSuccessReducer: CaseReducer<\n HistogramState,\n PayloadAction<Array<FilterSource>, any, CompanyFiltersMeta>\n> = (draftState, action) => {\n const filters = filtersWithHistogram(action.payload);\n\n draftState.advancedSearch.allFilters = filters;\n draftState.addons.allFilters = filters;\n draftState.myCompanies.allFilters = filters;\n draftState.lists.allFilters = filters;\n};\n\nexport const toggleRefreshReducer: CaseReducer<\n HistogramState,\n PayloadAction<ToggleRefreshPayload>\n> = (draftState, action) => {\n const { gridKey, enabled } = action.payload;\n\n draftState[gridKey].enabled = enabled;\n\n if (!enabled) {\n draftState[gridKey].data = {};\n draftState[gridKey].searchCount = undefined;\n draftState[gridKey].edit = null;\n draftState[gridKey].fetchedAt = null;\n draftState[gridKey].lastChangedFilter = undefined;\n } else {\n // for now we know histograms can be enabled only when in edit modal (filters modal).\n draftState[gridKey].edit = {\n data: {},\n changedFilters: [],\n };\n }\n};\n\nexport const resetToDefaultReducer: CaseReducer<HistogramState, PayloadAction<ResetPayload>> = (\n draftState,\n action\n) => {\n const { gridKey } = action.payload;\n\n draftState[gridKey].loading = false;\n draftState[gridKey].changedFilters = [];\n\n if (draftState[gridKey].defaultHistograms) {\n draftState[gridKey].data = draftState[gridKey].defaultHistograms!;\n draftState[gridKey].searchCount = draftState[gridKey].defaultHistograms!.search_count as number;\n\n if (draftState[gridKey].edit) {\n draftState[gridKey].edit!.data = draftState[gridKey].defaultHistograms!;\n draftState[gridKey].edit!.changedFilters = [];\n }\n }\n};\n\nexport const resetReducer: CaseReducer<HistogramState, PayloadAction<ResetPayload>> = (\n draftState,\n action\n) => {\n const { gridKey } = action.payload;\n\n if (!draftState[gridKey]) {\n draftState[gridKey] = { ...HISTOGRAM_INITIAL_STATE };\n }\n\n draftState[gridKey].changedFilters = [];\n draftState[gridKey].lastChangedFilter = undefined;\n\n if (draftState[gridKey].enabled) {\n if (draftState[gridKey].defaultHistograms) {\n draftState[gridKey].data = draftState[gridKey].defaultHistograms!;\n\n if (draftState[gridKey].edit) {\n draftState[gridKey].edit!.data = draftState.advancedSearch.defaultHistograms!;\n draftState[gridKey].edit!.changedFilters = [];\n }\n }\n }\n};\n\nexport const filterChangedReducer: CaseReducer<\n HistogramState,\n PayloadAction<FilterChangedPayload>\n> = (draftState, action) => {\n const { gridKey, filterKey } = action.payload;\n\n if (!draftState[gridKey]) {\n draftState[gridKey] = { ...HISTOGRAM_INITIAL_STATE };\n }\n\n if (draftState[gridKey].enabled) {\n draftState[gridKey].lastChangedFilter = filterKey;\n\n if (draftState[gridKey].edit) {\n const index = draftState[gridKey].edit!.changedFilters.indexOf(filterKey);\n\n if (index === -1) {\n draftState[gridKey].edit!.changedFilters.push(filterKey);\n }\n } else {\n const index = draftState[gridKey].changedFilters.indexOf(filterKey);\n\n if (index === -1) {\n draftState[gridKey].changedFilters.push(filterKey);\n }\n }\n }\n};\n\nexport const editReducer: CaseReducer<HistogramState, PayloadAction<EditPayload>> = (\n draftState,\n action\n) => {\n const { gridKey, isEditing } = action.payload;\n\n if (draftState[gridKey]?.enabled) {\n if (isEditing) {\n draftState[gridKey].edit = {\n data: draftState[gridKey].data,\n changedFilters: [],\n };\n } else {\n draftState[gridKey].edit = null;\n draftState[gridKey].lastChangedFilter = undefined;\n draftState[gridKey].searchCount = undefined;\n }\n }\n};\n\nexport const applyEditReducer: CaseReducer<HistogramState, PayloadAction<ApplyEditPayload>> = (\n draftState,\n action\n) => {\n const { gridKey } = action.payload;\n\n if (draftState[gridKey].enabled) {\n draftState[gridKey].lastChangedFilter = undefined;\n\n if (draftState[gridKey].edit) {\n draftState[gridKey].data = draftState[gridKey].edit!.data;\n draftState[gridKey].changedFilters = draftState[gridKey].edit!.changedFilters;\n\n // Modal is closed so need to reset edit.\n draftState[gridKey].edit = null;\n }\n }\n};\n\nexport const resetFilterSearchActionsReducer: CaseReducer<\n HistogramState,\n PayloadAction<GridPayload<ResetFilter>>\n> = (draftState, action) => {\n const { gridKey } = action.payload;\n\n if (draftState[gridKey].enabled) {\n const tag = (action.payload as GridPayload<ResetFilter>).data.selectedTag;\n draftState[gridKey].lastChangedFilter = undefined;\n\n const index = draftState[gridKey].changedFilters.indexOf(tag.filter);\n\n if (index !== -1) {\n draftState[gridKey].changedFilters.splice(index, 1);\n }\n }\n};\n\n// external reducers\nexport const searchCountSuccessReducer: CaseReducer<\n HistogramState,\n PayloadAction<SearchCountPayload>\n> = (draftState, action) => {\n const { gridName } = action.payload;\n\n if (draftState[gridName]) {\n draftState[gridName].searchCount = undefined;\n }\n};\n\nconst fetchUserInformationSuccessReducer: CaseReducer<\n HistogramState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n draftState.advancedSearch.enabled = action.payload.settings.filters_refresh;\n draftState.addons.enabled = action.payload.settings.my_companies_filters_refresh;\n draftState.myCompanies.enabled = action.payload.settings.my_companies_filters_refresh;\n draftState.lists.enabled = !!action.payload.settings.user_list_filters_refresh;\n};\n\nexport const fetchHistogramFiltersFailReducer = (\n draftState: HistogramState,\n action: PayloadAction<GridPayloadMain<string>>\n) => {\n const { gridKey, data } = action.payload;\n fetchReducers.fetchFailReducer(draftState[gridKey], { payload: data, type: action.type });\n};\n\nconst reducer = createReducer<HistogramState>(initialState, builder =>\n builder\n .addCase(actions.fetchHistogramFilters, fetchHistogramFiltersReducer)\n .addCase(actions.fetchHistogramFiltersSuccess, fetchHistogramFiltersSuccessReducer)\n .addCase(actions.fetchHistogramFiltersFail, fetchHistogramFiltersFailReducer)\n .addCase(actions.toggleRefresh, toggleRefreshReducer)\n .addCase(actions.filterChanged, filterChangedReducer)\n .addCase(actions.edit, editReducer)\n .addCase(actions.applyEdit, applyEditReducer)\n .addCase(actions.resetToDefault, resetToDefaultReducer)\n // external reduces\n .addCase(companyFilterActions.fetchCompanyFiltersSuccess, fetchCompanyFiltersSuccessReducer)\n .addCase(\n companyFilterActions.fetchCompanyFiltersForNotificationsSuccess,\n fetchCompanyFiltersSuccessReducer\n )\n .addCase(clearSearchSearchActions, resetReducer)\n .addCase(resetSearchSearchActions, resetReducer)\n .addCase(searchCountActions.searchCountSuccess, searchCountSuccessReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n .addCase(resetFilterSearchActions, resetFilterSearchActionsReducer)\n);\n\nexport default reducer;\n","import React from 'react';\nimport { Switch, Typography, Space, Tooltip } from 'antd';\nimport { SwitchProps } from 'antd/lib/switch';\n\ninterface FiltersRefreshProps extends SwitchProps {\n // Check need to be controlled.\n checked: boolean;\n renderLabel?: (checked: boolean) => React.ReactNode;\n}\n\nconst RenderLabel = (checked: boolean) => {\n return <Typography.Text>Auto Refresh {checked ? 'On' : 'Off'}</Typography.Text>;\n};\n\nexport const HistogramRefreshToggler: React.FC<FiltersRefreshProps> = ({\n checked,\n title,\n renderLabel,\n ...restProps\n}) => {\n return (\n <div>\n <Tooltip title={title}>\n <Space align=\"center\" size=\"small\">\n <Switch checked={checked} {...restProps} />\n {renderLabel && renderLabel(checked)}\n </Space>\n </Tooltip>\n </div>\n );\n};\n\nHistogramRefreshToggler.defaultProps = {\n title: 'Auto refresh filters',\n renderLabel: RenderLabel,\n};\n","import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n background-color: rgba(0, 0, 0, 0.75);\n padding: 6px 8px;\n color: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n`;\n\nexport const Styled = {\n Wrapper,\n};\n","import React from 'react';\nimport { TooltipProps } from 'recharts';\nimport { Styled } from './HistogramTooltip.styled';\n\nexport const HistogramTooltip = (props: TooltipProps) => {\n const { payload, active } = props;\n\n // display tooltip only for count > 0\n if (active && payload && payload[0].value > 0) {\n return (\n <Styled.Wrapper>\n <span>\n {`Range : ${payload && payload[0].payload.min_value} - ${\n payload && payload[0].payload.max_value\n }`}\n </span>\n <br />\n <span>{`Count : ${payload && payload[0].value}`}</span>\n </Styled.Wrapper>\n );\n }\n\n return null;\n};\n","import styled, { css } from 'styled-components';\n\nconst Wrapper = styled.div<{ hidden?: boolean }>`\n width: 100%;\n height: 80px;\n box-sizing: border-box;\n\n ${props =>\n props.hidden &&\n css`\n visibility: hidden;\n width: 0;\n height: 0;\n `}\n`;\n\nexport const Styled = {\n Wrapper,\n};\n","import React, { useMemo } from 'react';\nimport { ResponsiveContainer, BarChart, XAxis, YAxis, Bar, Cell, Tooltip } from 'recharts';\n\n// models\nimport { Histogram as HistogramDataProps } from '@optx/models/filters';\nimport { HistogramTooltip } from './HistogramTooltip';\nimport { Styled } from './Histogram.styled';\n\nconst COLOR_SELECTED = '#91D5FF';\nconst COLOR_DISABLED = '#f5f5f5';\n\n// logic to change the bar colors of the histogram\nconst buildHistogramData = (\n list: Array<HistogramDataProps> | undefined,\n initial: number,\n final: number\n) => {\n const newList: Array<HistogramDataProps> = [];\n\n if (list) {\n list.forEach((entry: HistogramDataProps) => {\n const newEntry = { ...entry, color: COLOR_DISABLED };\n newEntry.color =\n (entry.min_value >= initial || entry.max_value >= initial) &&\n (entry.min_value <= final || entry.max_value <= final)\n ? COLOR_SELECTED\n : COLOR_DISABLED;\n\n // if x length is 0, hide the bar.\n if (!entry.x) {\n newEntry.color = '#ffffff';\n }\n\n newList.push(newEntry);\n });\n }\n\n return newList;\n};\n\nexport interface HistogramProps {\n histogramList?: Array<HistogramDataProps>;\n min: number;\n max: number;\n}\n\nexport const Histogram: React.FC<HistogramProps> = ({ histogramList, min, max }) => {\n const data = useMemo(\n () => buildHistogramData(histogramList, min, max),\n [histogramList, max, min]\n );\n\n return (\n <Styled.Wrapper hidden={!data.length} className=\"histogram-wrapper\">\n <ResponsiveContainer width=\"100%\" height={80}>\n <BarChart\n data={data}\n margin={{\n top: 5,\n right: 5,\n left: 5,\n bottom: 5,\n }}\n >\n <XAxis hide dataKey=\"min_value\" />\n <YAxis hide dataKey=\"x\" allowDataOverflow domain={['dataMin', 'dataMax']} scale=\"sqrt\" />\n <Tooltip content={<HistogramTooltip />} cursor={{ fill: '#f1f1f1' }} />\n <Bar dataKey=\"x\" radius={[10, 10, 10, 10]} minPointSize={10}>\n {data.map((entry: HistogramDataProps, index: number) => (\n <Cell cursor=\"pointer\" fill={entry.color} key={`cell-${index}`} />\n ))}\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n </Styled.Wrapper>\n );\n};\n","import { call, put, takeLatest, select, fork } from 'redux-saga/effects';\nimport { Dictionary, pickBy } from 'lodash';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { LOCATION_CHANGE, LocationChangePayload } from 'connected-react-router';\nimport queryString from 'query-string';\n// models\nimport { BaseFilter, HistogramGroup, PreselectedFilter } from '@optx/models/filters';\nimport { SearchStateData } from '@optx/models/search';\nimport {\n ApplyEditPayload,\n FetchHistogramsActionPayload,\n FilterChangedPayload,\n ToggleRefreshPayload,\n} from './interfaces';\n// constants\nimport AppRoutes from '@constants/routes';\nimport { FILTER_ORIGIN_VALUES } from '@constants/filters';\nimport {\n FILTER_KEYS_DEFAULT_SHOW_ALL_COMPANIES,\n FILTER_KEYS_DEFAULT_SHOW_ALL,\n FILTER_MODAL_KEYS,\n} from '@optx/constants/pendoAction';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { CompanyService } from '@services/api';\n// utils\nimport { normalizeFilter } from '@optx/utils/filters/filterHelpers';\nimport { getGridKeyFromRouteAlias, getRouteAlias } from '@optx/utils/routes';\nimport { getErrorMessage } from '@utils/api/errors';\nimport { pendoActionsFilterModal } from '@optx/utils/utils';\n// redux\nimport * as actions from './actions';\nimport { saga as routerSagas } from '@redux/router';\nimport {\n selectors as userInformationSelectors,\n actions as userInformationActions,\n} from '@redux/user/information';\nimport { actions as filterActions, selectors as filtersSelectors } from '@redux/company/filters';\nimport { getFiltersQuery, handleTouchFilters } from '@redux/company/search/search/sagasReusable';\nimport { selectors as searchSelectorsAddon } from '@redux/company/addon-management';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport { selectors as filtersCardsSelectors } from '@optx/redux/my-companies/filters-cards';\nimport { selectors as listsSelectors } from '@redux/lists/details';\nimport * as histogramSelectors from './selectors';\n\nexport function* fetchHistogramFiltersSaga(action: PayloadAction<FetchHistogramsActionPayload>) {\n const { gridKey } = action.payload;\n const currentRoute = getRouteAlias();\n\n try {\n const histogramsEnabled: boolean = yield select(histogramSelectors.isEnabled(gridKey));\n\n if (!histogramsEnabled || currentRoute === 'companyProfile') {\n return;\n }\n\n const defaultHistogramKeys: Array<string> = yield select(\n histogramSelectors.allFiltersWithHistograms(gridKey)\n );\n const defaultHistograms: HistogramGroup = yield select(\n histogramSelectors.defaultHistograms(gridKey)\n );\n let filter: Dictionary<PreselectedFilter> = action.payload.filter || {};\n\n if (gridKey === 'advancedSearch') {\n if (filter.ddate !== undefined) {\n delete filter.ddate;\n }\n\n filter = yield call(handleTouchFilters, filter);\n\n const filterQueryPayload: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n filter\n );\n\n const filterQueryString = queryString.stringify(filterQueryPayload, { arrayFormat: 'comma' });\n const isDefaultHistogram = !filterQueryString;\n\n if (isDefaultHistogram && defaultHistograms) {\n yield put(actions.resetToDefault({ gridKey }));\n } else {\n // @ts-ignore\n const res = yield call(CompanyService.getHistograms, {\n filterQuery: filterQueryPayload,\n histogramList: defaultHistogramKeys,\n });\n\n yield put(\n actions.fetchHistogramFiltersSuccess({\n gridKey,\n data: res.data,\n companyCount: res.data.company_count,\n isDefault: isDefaultHistogram,\n })\n );\n }\n }\n\n if (gridKey === 'addons') {\n const companyProfileId: number = yield select(profileSelectors.getCompanyId);\n const additionalFilterQuery: Dictionary<string | (string | number)[]> = yield select(\n searchSelectorsAddon.getAdditionalFiltersQuery\n );\n\n filter = yield call(handleTouchFilters, filter);\n\n const filterQueryPayload: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n filter\n );\n const normalizedFilter = { ...filterQueryPayload, ...additionalFilterQuery };\n\n const filterQueryString = queryString.stringify(normalizedFilter, { arrayFormat: 'comma' });\n const isDefaultHistogram = !filterQueryString;\n\n if (isDefaultHistogram && defaultHistograms) {\n yield put(actions.resetToDefault({ gridKey }));\n } else {\n // @ts-ignore\n const res = yield call(CompanyService.getHistograms, {\n filterQuery: normalizedFilter,\n histogramList: defaultHistogramKeys,\n companyId: companyProfileId,\n filterOrigin: FILTER_ORIGIN_VALUES.addonManagement,\n });\n\n yield put(\n actions.fetchHistogramFiltersSuccess({\n gridKey,\n data: res.data,\n companyCount: res.data.company_count,\n isDefault: isDefaultHistogram,\n })\n );\n }\n }\n\n if (gridKey === 'myCompanies') {\n const selectedCard: Dictionary<SearchStateData> = yield select(\n filtersCardsSelectors.getSelectedCard\n );\n const subFilter: string = yield select(filtersCardsSelectors.getSubFilter);\n\n filter = yield call(handleTouchFilters, filter);\n\n let filterQueryPayload: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n filter\n );\n\n filterQueryPayload = subFilter\n ? // @ts-ignore\n { ...selectedCard.filter, ...selectedCard.data[subFilter], ...filterQueryPayload }\n : { ...selectedCard?.filter, ...filterQueryPayload };\n\n delete filterQueryPayload.query;\n delete filterQueryPayload.company_name_or_url;\n\n const filterQueryString = queryString.stringify(filterQueryPayload, { arrayFormat: 'comma' });\n const isDefaultHistogram = !filterQueryString;\n\n if (isDefaultHistogram && defaultHistograms) {\n yield put(actions.resetToDefault({ gridKey }));\n } else {\n // @ts-ignore\n const res = yield call(CompanyService.getHistograms, {\n filterQuery: filterQueryPayload,\n histogramList: defaultHistogramKeys,\n });\n\n yield put(\n actions.fetchHistogramFiltersSuccess({\n gridKey,\n data: res.data,\n companyCount: res.data.company_count,\n isDefault: isDefaultHistogram,\n })\n );\n }\n }\n\n if (gridKey === 'lists') {\n const listId: string = yield select(listsSelectors.getRouteListId);\n const isSourceScrubRoute: boolean = yield select(listsSelectors.isSourceScrubRoute);\n\n // Inject list id in filter.\n filter = {\n ...filter,\n ...(isSourceScrubRoute ? { ss_list_id: listId } : { saved_list_id: listId }),\n };\n\n filter = yield call(handleTouchFilters, filter);\n\n const filterQueryPayload: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n filter\n );\n\n const filterQueryString = queryString.stringify(filterQueryPayload, { arrayFormat: 'comma' });\n const isDefaultHistogram = !filterQueryString;\n\n if (isDefaultHistogram && defaultHistograms) {\n yield put(actions.resetToDefault({ gridKey }));\n } else {\n // @ts-ignore\n const res = yield call(CompanyService.getHistograms, {\n filterQuery: filterQueryPayload,\n histogramList: defaultHistogramKeys,\n });\n\n yield put(\n actions.fetchHistogramFiltersSuccess({\n gridKey,\n data: res.data,\n companyCount: res.data.company_count,\n isDefault: isDefaultHistogram,\n })\n );\n }\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Error fetching histograms!');\n yield put(actions.fetchHistogramFiltersFail({ gridKey, data: errorMessage }));\n NotificationService.error(errorMessage);\n }\n}\n\n/**\n * Matches lists details or source scrub list details route.\n */\nfunction* getRouteMatcher() {\n const matcher: boolean = yield call(routerSagas.matchesLocation, [\n AppRoutes.userLists.list,\n AppRoutes.userLists.sourceScrubLists,\n ]);\n\n return matcher;\n}\n\n/**\n * Initialize histograms after filters are fetched on home page.\n */\nfunction* initializeHistogramsSaga() {\n const gridKey = getGridKeyFromRouteAlias();\n\n if (gridKey === 'lists') {\n const matcher: boolean = yield call(getRouteMatcher);\n\n if (matcher) {\n // when retrieving filters also make call to update histograms.\n // this is necessary for when the app is refreshed and histograms\n const allFiltersWithHistograms: Array<string> = yield select(\n histogramSelectors.allFiltersWithHistograms(gridKey)\n );\n const filter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter(gridKey)\n );\n yield put(actions.fetchHistogramFilters(gridKey, filter, allFiltersWithHistograms));\n }\n }\n\n if (gridKey === 'myCompanies') {\n const filter: Dictionary<PreselectedFilter> = yield select(filterSelectors.getFilter(gridKey));\n const allFiltersWithHistograms: Array<string> = yield select(\n histogramSelectors.allFiltersWithHistograms(gridKey)\n );\n\n yield put(actions.fetchHistogramFilters(gridKey, filter, allFiltersWithHistograms));\n }\n\n const histogramsEnabled: boolean = yield select(userInformationSelectors.filtersRefresh);\n const isAnalyst: boolean = yield select(userInformationSelectors.getIsAnalyst);\n const matcher: boolean = yield call(routerSagas.matchesLocation, [\n isAnalyst ? AppRoutes.advancedSearch : AppRoutes.home,\n ]);\n\n if (matcher && histogramsEnabled) {\n // when retrieving filters also make call to update histograms.\n // this is necessary for when the app is refreshed and histograms\n // have to reflect the state of the filters\n const filter: Dictionary<PreselectedFilter> = yield select(filterSelectors.getFilter(gridKey));\n let histogramFilters: Array<string> = [];\n\n if (gridKey === 'addons') {\n histogramFilters = yield select(histogramSelectors.changedFilters(gridKey));\n }\n\n if (gridKey === 'advancedSearch') {\n histogramFilters = yield select(histogramSelectors.changedFilters(gridKey));\n }\n\n yield put(actions.fetchHistogramFilters(gridKey, filter, histogramFilters));\n }\n}\n\n/**\n * Initialize histograms after comming from other pages with filters already loaded but no histograms\n * (User refreshed the other page and accessed home page afterwards).\n * @param action location change action.\n */\nfunction* locationChangeSaga(action: PayloadAction<LocationChangePayload>) {\n const isAnalyst: boolean = yield select(userInformationSelectors.getIsAnalyst);\n const matcher: boolean = yield call(routerSagas.matchesLocation, [\n isAnalyst ? AppRoutes.advancedSearch : AppRoutes.home,\n ]);\n\n if (matcher) {\n const filtersLoaded: boolean = yield select(filtersSelectors.filtersLoaded);\n const histogramsLoaded: boolean = yield select(\n histogramSelectors.isInitialized('advancedSearch')\n );\n\n if (filtersLoaded && !histogramsLoaded) {\n yield fork(initializeHistogramsSaga);\n }\n }\n}\n\nfunction* filterChangeSaga(action: PayloadAction<FilterChangedPayload>) {\n let { gridKey, values } = action.payload;\n values = normalizeFilter(values);\n yield put(actions.fetchHistogramFilters(gridKey, values));\n}\n\nfunction* toggleRefreshSaga(action: PayloadAction<ToggleRefreshPayload>) {\n const { gridKey, enabled, values } = action.payload;\n\n if (enabled) {\n yield put(actions.fetchHistogramFilters(gridKey, normalizeFilter(values)));\n }\n\n const userSettingsMap: { [key: string]: string } = {\n advancedSearch: 'filters_refresh',\n myCompanies: 'my_companies_filters_refresh',\n addons: 'filters_refresh',\n lists: 'user_list_filters_refresh',\n };\n\n const settingKey = userSettingsMap[gridKey];\n\n if (settingKey) {\n yield put(userInformationActions.updateUserSettings({ [settingKey]: enabled }));\n }\n}\n\nfunction* applyEditSaga(action: PayloadAction<ApplyEditPayload>) {\n const { filter, gridKey } = action.payload;\n\n if (filter && gridKey === 'advancedSearch') {\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(\n getFiltersQuery,\n filter\n );\n const filteredFilters = pickBy(filterQuery, value => value.length > 0);\n const normalizedFilters: Dictionary<BaseFilter> = yield select(filtersSelectors.getFiltersMap);\n\n FILTER_KEYS_DEFAULT_SHOW_ALL_COMPANIES.forEach(key => {\n if (!(key in filteredFilters)) {\n filteredFilters[key] = 'Show all companies';\n }\n });\n FILTER_KEYS_DEFAULT_SHOW_ALL.forEach(key => {\n if (!(key in filteredFilters)) {\n filteredFilters[key] = 'Show all';\n }\n });\n\n pendoActionsFilterModal(filteredFilters, normalizedFilters, FILTER_MODAL_KEYS, true);\n }\n}\n\nexport default function* companyHistogramsSaga() {\n yield takeLatest(actions.fetchHistogramFilters, fetchHistogramFiltersSaga);\n yield takeLatest(filterActions.fetchCompanyFiltersSuccess, initializeHistogramsSaga);\n yield takeLatest(\n filterActions.fetchCompanyFiltersForNotificationsSuccess,\n initializeHistogramsSaga\n );\n yield takeLatest(actions.init, initializeHistogramsSaga);\n yield takeLatest(LOCATION_CHANGE, locationChangeSaga);\n yield takeLatest(actions.filterChanged, filterChangeSaga);\n yield takeLatest(actions.toggleRefresh, toggleRefreshSaga);\n yield takeLatest(actions.applyEdit, applyEditSaga);\n}\n","import {\n FilterSource,\n RangeFilter,\n BaseFilter,\n PreselectedFilter,\n MultiRangeNumberFilter,\n MultiSelectFilter,\n MultiCheckboxFilter,\n FilterGroupDataSection,\n} from '@optx/models/filters';\nimport { Dictionary } from 'lodash';\nimport {\n RangeOptionBase,\n CheckableRangeOption,\n SingleCheckboxRangeOption,\n} from '@optx/models/RangeOption';\nimport Option, {\n SelectOption,\n FormCheckboxOption,\n LogicOption,\n LogicOptionResponse,\n FormCheckableRangeOption,\n DateRangeOption,\n FilterMultiTextOption,\n} from '@optx/models/Option';\n// utils\nimport { mapToSelectOption } from '../option';\n\nexport function preselectedValues(sources: Array<FilterSource>): Dictionary<Array<string>> {\n const preselectedValues: Dictionary<Array<string>> = {};\n const preselectedNames: Dictionary<Array<string>> = {};\n\n sources.forEach(source => {\n if (source.data) {\n source.data.forEach(filter => {\n if (filter.preselected && filter.preselected.length) {\n const filterPreselectedNames: Array<string> = [];\n\n preselectedValues[filter.column] = filter.preselected.map(item => {\n if (item.name) {\n filterPreselectedNames.push(item.name);\n }\n\n return item.value ? item.value.toString() : item.toString();\n });\n\n if (filterPreselectedNames.length) {\n preselectedNames[`${filter.column}_label`] = filterPreselectedNames;\n }\n }\n });\n }\n });\n\n return {\n ...preselectedValues,\n ...preselectedNames,\n };\n}\n\nexport function mapPreselectedFilters(\n sources: Array<FilterSource>,\n includePreselected = true,\n defaultDateIndex: number = 0\n) {\n const preselectedFilters: Dictionary<PreselectedFilter> = {};\n\n sources.forEach(source => {\n if (source.data) {\n (source.data as Array<BaseFilter>).forEach(filter => {\n switch (filter.type) {\n case 'range_input': {\n const options: Array<FormCheckableRangeOption> = getRangeInputOptions(\n filter as RangeFilter<[RangeOptionBase, SelectOption[]]>\n );\n\n preselectedFilters[filter.column] = options;\n break;\n }\n\n case 'checkbox': {\n const options = getCheckboxOptions(filter, includePreselected);\n preselectedFilters[filter.column] = options;\n // custom option\n const customOption = getCheckboxCustomOption(filter as MultiCheckboxFilter);\n\n if (customOption) {\n preselectedFilters[`${filter.column}_custom`] = customOption;\n }\n\n break;\n }\n\n case 'multi_text': {\n const options = getMultiTextOptions(\n filter as BaseFilter<Array<{ name: string; placeholder?: string }>>\n );\n preselectedFilters[filter.column] = options;\n break;\n }\n\n case 'logic_checkbox': {\n const options = getLogicCheckboxOptions(\n filter as BaseFilter<Array<LogicOptionResponse>>\n );\n preselectedFilters[filter.column] = options;\n break;\n }\n\n case 'multiple_range_nr': {\n const options = getMultiRangeNumberOptions(filter as MultiRangeNumberFilter);\n preselectedFilters[filter.column] = options;\n // custom option\n const customOption = getMultiRangeCustomOption(filter as MultiRangeNumberFilter);\n\n if (customOption) {\n preselectedFilters[`${filter.column}_custom`] = customOption;\n }\n\n break;\n }\n\n case 'date_range': {\n const options = getDateRangeOptions(filter as RangeFilter<null>);\n preselectedFilters[filter.column] = options;\n break;\n }\n\n case 'date_range_radio': {\n const options = getDateRangesOptions(\n filter as BaseFilter<Array<DateRangeOption>>,\n defaultDateIndex\n );\n preselectedFilters[filter.column] = options;\n break;\n }\n\n case 'radio': {\n preselectedFilters[filter.column] = getRadioOption(\n filter as BaseFilter<Array<Option>>,\n includePreselected\n );\n\n break;\n }\n\n case 'endpoint_query':\n case 'multi_select':\n\n // eslint-disable-next-line no-fallthrough\n case 'single_select': {\n const options = getMultiSelectOptions(\n filter as MultiSelectFilter<Array<Option>>,\n includePreselected\n );\n preselectedFilters[filter.column] = options;\n\n break;\n }\n\n // for the moment add empty values, it's necessary to display error message for validation\n // in the future, if this filter will be included in a preselected filter, depending on the\n // data format sent from api, the function should be updated\n case 'single_select_helper': {\n const option = getSingleSelectHelperOptions(\n filter as BaseFilter<Array<{ name: string; value: string }>>\n );\n preselectedFilters[filter.column] = option;\n\n break;\n }\n\n case 'filter_group_custom': {\n const data = filter.data as FilterGroupDataSection[];\n\n data.forEach(section => {\n switch (section.type) {\n case 'multi_select': {\n preselectedFilters[section.column] = getMultiSelectOptions(\n section as MultiSelectFilter<Array<Option>>,\n includePreselected\n );\n break;\n }\n\n case 'checkbox': {\n const options = getCheckboxOptions(\n section as BaseFilter<any>,\n includePreselected\n );\n preselectedFilters[section.column] = options;\n // custom option\n const customOption = getCheckboxCustomOption(section as MultiCheckboxFilter);\n\n if (customOption) {\n preselectedFilters[`${section.column}_custom`] = customOption;\n }\n\n break;\n }\n\n case 'radio': {\n preselectedFilters[section.column] = getRadioOption(\n filter as BaseFilter<Array<Option>>,\n includePreselected\n );\n\n break;\n }\n\n case 'date_range': {\n preselectedFilters[section.column] = getDateRangeOptions(\n section as RangeFilter<null>\n );\n break;\n }\n\n default:\n break;\n }\n });\n\n break;\n }\n\n default:\n break;\n }\n });\n }\n });\n\n return preselectedFilters;\n}\n\nexport function getRadioOption(filter: BaseFilter<Array<Option>>, includePreselected = true) {\n const preselected = filter.preselected as Array<string>;\n let defaultValue = '';\n\n if (preselected && preselected.length) {\n defaultValue = includePreselected ? preselected[0] : '';\n } else {\n defaultValue = (filter.data && filter.data.length && filter.data[0].value) || '';\n }\n\n return defaultValue;\n}\n\nexport function getDateRangeOptions(filter: RangeFilter<null>) {\n const { placeholders } = filter as RangeFilter<null>;\n const options: Array<SelectOption> = [];\n\n options.push({\n label: placeholders.min,\n value: '',\n });\n\n options.push({\n label: placeholders.max,\n value: '',\n });\n\n return options;\n}\n\nexport function getDateRangesOptions(\n filter: BaseFilter<Array<DateRangeOption>>,\n defaultDateIndex: number = 0\n): [string | null, string | null] {\n const values: [string | null, string | null] = [null, null];\n\n if (!filter.preselected || !filter.preselected.length) {\n // If there is no options preselected select first option on data.\n if (filter.data && filter.data.length) {\n const firstOption = filter.data[defaultDateIndex];\n\n return [firstOption.start, firstOption.end];\n }\n\n return values;\n }\n\n return filter.preselected as [string | null, string | null];\n}\n\nexport function getMultiTextOptions(\n filter: BaseFilter<Array<{ name: string; placeholder?: string }>>\n) {\n const options: Array<FilterMultiTextOption> = [];\n\n filter.data.forEach(item => {\n options.push({\n label: item.name,\n value: '',\n placeholder: item.placeholder,\n });\n });\n\n return options;\n}\n\nexport function getCheckboxOptions(filter: BaseFilter<any>, includePreselected: boolean = true) {\n const options: Array<FormCheckboxOption> = [];\n const preselected: Dictionary<string> = {};\n\n if (includePreselected && filter.preselected) {\n (filter.preselected as Array<string>).forEach(item => {\n preselected[item] = item;\n });\n }\n\n (filter as BaseFilter<Array<Option>>).data.forEach(option => {\n options.push({\n label: option.name as string,\n value: option.value,\n checked: includePreselected ? !!preselected[option.value] : false,\n });\n });\n\n return options;\n}\n\nexport function getLogicCheckboxOptions(filter: BaseFilter<Array<LogicOptionResponse>>) {\n const options: Array<LogicOption> = [];\n\n (filter as BaseFilter<Array<LogicOptionResponse>>).data.forEach(option => {\n options.push({\n label: option.name!,\n value: option.value,\n in: !!option.in,\n notIn: !!option.not_in,\n });\n });\n\n return options;\n}\n\nexport function getMultiRangeNumberOptions(filter: MultiRangeNumberFilter) {\n const options: Array<CheckableRangeOption> = [];\n\n filter.data.forEach(option => {\n options.push({\n label: option.name,\n min: option.min,\n max: option.max,\n checked: false,\n });\n });\n\n return options;\n}\n\nexport function getMultiRangeCustomOption(\n filter: MultiRangeNumberFilter\n): CheckableRangeOption<string> | undefined {\n if (!filter.custom) {\n return undefined;\n }\n\n const option: CheckableRangeOption<string> = {\n checked: false,\n min: '',\n max: '',\n label: '',\n };\n\n return option;\n}\n\nexport function getCheckboxCustomOption(\n filter: MultiCheckboxFilter\n): SingleCheckboxRangeOption<string> | undefined {\n if (!filter.custom) {\n return undefined;\n }\n\n const option: SingleCheckboxRangeOption<string> = {\n checked: false,\n label: '',\n value: '',\n min: '',\n max: '',\n };\n\n return option;\n}\n\nexport function getRangeInputOptions(filter: RangeFilter<[RangeOptionBase, SelectOption[]]>) {\n const options: Array<FormCheckableRangeOption> = [];\n\n const [range, dataCheck] = filter.data;\n let check: SelectOption[] = [];\n\n if (Array.isArray(dataCheck)) {\n check = dataCheck;\n } else {\n check = [dataCheck];\n }\n\n options.push({\n ...range,\n range: [range.min, range.max],\n check: check ? check.map(check => ({ ...check, checked: false })) : undefined,\n });\n\n return options;\n}\n\nexport function getMultiSelectOptions(\n filter: MultiSelectFilter<Array<Option>>,\n includePreselected = true\n) {\n if (includePreselected && filter.preselected) {\n return filter.preselected.map(option => mapToSelectOption(option, filter.format_name));\n }\n\n return undefined;\n}\n\nexport function filtersWithHistogram(sources: Array<FilterSource>): Array<string> {\n const filtersList: Array<string> = [];\n\n sources.forEach(source => {\n if (source.data) {\n source.data.forEach(filter => {\n if (filter.hasHistogram) {\n filtersList.push(filter.column);\n }\n });\n }\n });\n\n return filtersList;\n}\n\nexport function getSingleSelectHelperOptions(filter: BaseFilter<Array<Option>>) {\n const option: SelectOption = {\n label: '',\n value: '',\n };\n\n return option;\n}\n","/**\n * @description The storage item name\n * @type {string}\n */\nconst IS_ANALYST = 'is_analyst';\n\n/**\n * @description get item from localStorage\n * @return {boolean}\n */\nconst getIsAnalyst = () => {\n return localStorage.getItem(IS_ANALYST) === 'true';\n};\n\n/**\n * @description Set value to localStorage\n * @param {boolean} value item value\n */\nconst setIsAnalyst = (value: boolean) => {\n localStorage.setItem(IS_ANALYST, value.toString());\n};\n\n/**\n * @description remove is_analyst from localStorage\n */\nconst removeIsAnalyst = () => {\n localStorage.removeItem(IS_ANALYST);\n};\n\nexport default {\n getIsAnalyst,\n setIsAnalyst,\n removeIsAnalyst,\n};\n","/**\n * @description The storage item name\n * @type {string}\n */\nconst IS_ADMIN = 'is_admin';\n\n/**\n * @description get item from localStorage\n * @return {boolean}\n */\nconst getIsAdmin = () => {\n return localStorage.getItem(IS_ADMIN) === 'true';\n};\n\n/**\n * @description Set value to localStorage\n * @param {boolean} value item value\n */\nconst setIsAdmin = (value: boolean) => {\n localStorage.setItem(IS_ADMIN, value.toString());\n};\n\n/**\n * @description remove IS_ADMIN from localStorage\n */\nconst removeIsAdmin = () => {\n localStorage.removeItem(IS_ADMIN);\n};\n\nexport default {\n getIsAdmin,\n setIsAdmin,\n removeIsAdmin,\n};\n","/**\n * @description The storage item name\n * @type {string}\n */\nconst IS_PARTNER = 'is_partner';\n\n/**\n * @description get item from localStorage\n * @return {boolean}\n */\nconst getIsPartner = () => {\n return localStorage.getItem(IS_PARTNER) === 'true';\n};\n\n/**\n * @description Set value to localStorage\n * @param {boolean} value item value\n */\nconst setIsPartner = (value: boolean) => {\n localStorage.setItem(IS_PARTNER, value.toString());\n};\n\n/**\n * @description remove partner from localStorage\n */\nconst removeIsPartner = () => {\n localStorage.removeItem(IS_PARTNER);\n};\n\nexport default {\n getIsPartner,\n setIsPartner,\n removeIsPartner,\n};\n","const errorCodeKey = 'cognitoErrorCode';\nconst errorDetailsKey = 'cognitoError';\n\nconst getError = () => localStorage.getItem(errorDetailsKey);\n\nconst saveError = (errorMessage: string) => localStorage.setItem(errorDetailsKey, errorMessage);\n\nconst clearErrors = () => {\n localStorage.removeItem(errorCodeKey);\n localStorage.removeItem(errorDetailsKey);\n};\n\nconst getErrorCode = (): number => {\n const errorCode = localStorage.getItem(errorCodeKey);\n\n if (errorCode === null) {\n return -1;\n }\n\n return parseInt(errorCode);\n};\n\nconst setErrorCode = (errorCode: number | string) =>\n localStorage.setItem(errorCodeKey, String(errorCode));\n\nexport default {\n getError,\n saveError,\n clearErrors,\n getErrorCode,\n setErrorCode,\n};\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from './featureName';\nimport * as actionTypes from './actionTypes';\nimport {\n DashboardSuccess,\n ScheduledTouchesSortBy,\n ScheduledTouchesResponse,\n ScheduledTouchesCountResponse,\n} from './interfaces';\n\nexport const fetchScheduledTouchesDashboard = createFeatureAction<void>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_DASHBOARD\n);\nexport const resetScheduledTouchesFilter = createFeatureAction<void>(\n featureName,\n actionTypes.RESET_SCHEDULED_TOUCHES_FILTER\n);\nexport const fetchScheduledTouchesDashboardSuccess = createFeatureAction<DashboardSuccess>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_DASHBOARD_SUCCESS\n);\nexport const fetchScheduledTouchesDashboardFail = createFeatureAction<string>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_DASHBOARD_FAIL\n);\n\nexport const fetchScheduledTouchesNextPage = createFeatureAction<void>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_NEXT_PAGE\n);\nexport const fetchScheduledTouchesNextPageSuccess = createFeatureAction<ScheduledTouchesResponse>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_NEXT_PAGE_SUCCESS\n);\nexport const fetchScheduledTouchesNextPageFail = createFeatureAction<string>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_NEXT_PAGE_FAIL\n);\n\nexport const fetchScheduledTouches = createFeatureAction<void>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES\n);\nexport const fetchScheduledTouchesSuccess = createFeatureAction<ScheduledTouchesResponse>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_SUCCESS\n);\nexport const fetchScheduledTouchesFail = createFeatureAction<string>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_FAIL\n);\n\nexport const fetchScheduledTouchesCount = createFeatureAction<void>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_COUNT\n);\nexport const fetchScheduledTouchesCountSuccess = createFeatureAction<ScheduledTouchesCountResponse>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_COUNT_SUCCESS\n);\nexport const fetchScheduledTouchesCountFail = createFeatureAction<string>(\n featureName,\n actionTypes.FETCH_SCHEDULED_TOUCHES_COUNT_FAIL\n);\n\nexport const changeScheduledTouchesSortBy = createFeatureAction<ScheduledTouchesSortBy>(\n featureName,\n actionTypes.CHANGE_SCHEDULED_TOUCHES_SORT_BY\n);\n\nexport const changeScheduledTouchesTouchType = createFeatureAction<string>(\n featureName,\n actionTypes.CHANGE_SCHEDULED_TOUCHES_TOUCH_TYPE\n);\n\nexport const changeScheduledTouchesStageType = createFeatureAction<string>(\n featureName,\n actionTypes.CHANGE_SCHEDULED_TOUCHES_STAGE_TYPE\n);\n\nexport const changeScheduledTouchesRankType = createFeatureAction<string>(\n featureName,\n actionTypes.CHANGE_SCHEDULED_TOUCHES_RANK_TYPE\n);\n\nexport const changeSelectedDate = createFeatureAction<[string | null, string | null]>(\n featureName,\n actionTypes.CHANGE_SELECTED_DATE\n);\nexport const changeSelectedPeriod = createFeatureAction<string>(\n featureName,\n actionTypes.CHANGE_SELECTED_PERIOD\n);\nexport const changeSelectedTab = createFeatureAction<string>(\n featureName,\n actionTypes.CHANGE_SELECTED_TAB\n);\n","export const FETCH_SCHEDULED_TOUCHES_DASHBOARD = 'FETCH_SCHEDULED_TOUCHES_DASHBOARD';\nexport const FETCH_SCHEDULED_TOUCHES_DASHBOARD_SUCCESS =\n 'FETCH_SCHEDULED_TOUCHES_DASHBOARD_SUCCESS';\nexport const FETCH_SCHEDULED_TOUCHES_DASHBOARD_FAIL = 'FETCH_SCHEDULED_TOUCHES_DASHBOARD_FAIL';\n\nexport const FETCH_SCHEDULED_TOUCHES = 'FETCH_SCHEDULED_TOUCHES';\nexport const FETCH_SCHEDULED_TOUCHES_SUCCESS = 'FETCH_SCHEDULED_TOUCHES_SUCCESS';\nexport const FETCH_SCHEDULED_TOUCHES_FAIL = 'FETCH_SCHEDULED_TOUCHES_FAIL';\n\nexport const RESET_SCHEDULED_TOUCHES_FILTER = 'RESET_SCHEDULED_TOUCHES_FILTER';\n\nexport const FETCH_SCHEDULED_TOUCHES_COUNT = 'FETCH_SCHEDULED_TOUCHES_COUNT';\nexport const FETCH_SCHEDULED_TOUCHES_COUNT_SUCCESS = 'FETCH_SCHEDULED_TOUCHES_COUNT_SUCCESS';\nexport const FETCH_SCHEDULED_TOUCHES_COUNT_FAIL = 'FETCH_SCHEDULED_TOUCHES_COUNT_FAIL';\n\nexport const FETCH_SCHEDULED_TOUCHES_NEXT_PAGE = 'FETCH_SCHEDULED_TOUCHES_NEXT_PAGE';\nexport const FETCH_SCHEDULED_TOUCHES_NEXT_PAGE_SUCCESS =\n 'FETCH_SCHEDULED_TOUCHES_NEXT_PAGE_SUCCESS';\nexport const FETCH_SCHEDULED_TOUCHES_NEXT_PAGE_FAIL = 'FETCH_SCHEDULED_TOUCHES_NEXT_PAGE_FAIL';\n\nexport const CHANGE_SCHEDULED_TOUCHES_SORT_BY = 'CHANGE_SCHEDULED_TOUCHES_SORT_BY';\nexport const CHANGE_SCHEDULED_TOUCHES_STAGE_TYPE = 'CHANGE_SCHEDULED_TOUCHES_STAGE_TYPE';\nexport const CHANGE_SCHEDULED_TOUCHES_TOUCH_TYPE = 'CHANGE_SCHEDULED_TOUCHES_TOUCH_TYPE';\nexport const CHANGE_SCHEDULED_TOUCHES_RANK_TYPE = 'CHANGE_SCHEDULED_TOUCHES_RANK_TYPE';\nexport const CHANGE_SELECTED_DATE = 'CHANGE_SELECTED_DATE';\nexport const CHANGE_SELECTED_PERIOD = 'CHANGE_SELECTED_PERIOD';\nexport const CHANGE_SELECTED_TAB = 'CHANGE_SELECTED_TAB';\n","import numeral from 'numeral';\nimport { orderBy } from 'lodash';\n// models\nimport Company, {\n CompanyProfile,\n CompanyTag,\n CompanyUserValue,\n FinancialFieldRangeValue,\n} from '@optx/models/Company';\nimport { GridKeys } from '@optx/models/grid';\nimport { EditDateFields } from '@optx/components/feature/company-individual-edit/state/date-fields/interfaces';\nimport {\n CustomValue,\n FieldOptions,\n UpdateFieldsPayload,\n} from '@optx/features/company/edit-fields/state/interfaces';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n\n/**\n * Function to return company address based on different company properties\n * @param {Company} company company data\n * @param defaultValue optional default display value to compare against\n */\nexport const getCompanyAddress = (company: Company, defaultValue: string | null = null) => {\n // if these company properties have the default value\n // or they're null, consider them undefined\n const street = company.street !== defaultValue ? company.street : undefined;\n const city = company.city !== defaultValue ? company.city : undefined;\n const state = company.state !== defaultValue ? company.state : undefined;\n const country = company.country !== defaultValue ? company.country : undefined;\n\n // display the value, if it has one, then check whether or not we have\n // subsequent values and add a comma\n // eslint-disable-next-line max-len\n return `${street || ''}${street && (city || state || country) ? ', ' : ''} ${city || ''}${\n city && (state || country) ? ', ' : ''\n } ${state || ''}${state && country ? ', ' : ''} ${country || ''}`.trim();\n};\n\n/**\n * Function to return the previous and next company ids of a company in a list\n * @param companyId the company id for which the previous and next company id is returned\n */\nexport const getPreviousNextCompanyIds = (companyId: number) => (state: Company[]) => {\n const index = state.findIndex((company: Company) => company.company_id === companyId);\n\n return [\n state[index - 1] && state[index - 1].company_id,\n state[index + 1] && state[index + 1].company_id,\n ];\n};\n\n/**\n * for revenue and ebitda we are using revenue_list, respectively ebitda_list properties,\n * for showing corresponding amounts for available years.\n * for revenue we have a special case, there is additional data coming from\n * last_rev_update_amount and last_rev_update_year. this function is used to check those\n * properties and add that data to revenue_list\n * @param {Company | CompanyProfile} stateData company data, from profile or grid\n */\nexport const updateRevenueList = (stateData: Company | CompanyProfile) => {\n const revenue = numeral(stateData.last_rev_update_amount).value();\n let revenueValue: number | FinancialFieldRangeValue | null = revenue;\n\n // if last_rev_update_amount_high has value means it's a range value (selected from dropdown)\n if (revenue && stateData.last_rev_update_amount_high !== DEFAULT_CELL_VALUE) {\n const revenueMax = numeral(stateData.last_rev_update_amount_high).value();\n\n revenueValue = { min: revenue, max: revenueMax };\n }\n\n if (revenueValue) {\n if (stateData.revenue_list === null) {\n // eslint-disable-next-line no-param-reassign\n stateData.revenue_list = [\n {\n value: revenueValue,\n year: stateData.last_rev_update_year || new Date().getFullYear(),\n },\n ];\n } else if (!stateData.revenue_list.some(item => item.year === stateData.last_rev_update_year)) {\n const newRevenueList = [\n ...stateData.revenue_list,\n {\n value: revenueValue,\n year: stateData.last_rev_update_year || new Date().getFullYear(),\n },\n ];\n\n // eslint-disable-next-line no-param-reassign\n stateData = { ...stateData, revenue_list: orderBy(newRevenueList, ['year'], 'desc') };\n }\n }\n};\n\n/**\n * Checks if a company is a PSG company\n * @param {Company} company - The company to check\n * @returns {boolean} - true if the company is meeting the conditions, false otherwise\n */\nexport const getIsPsgCompany = (company: Company) => {\n return (\n company.is_psg_company ||\n (company.stage === 'Portfolio Company' && company.fund !== 'PEP Flagship')\n );\n};\n\n/**\n * getTags - Returns an array of SelectOption objects from a given array of CompanyTag objects\n * @param {CompanyTag[] | null} specialties - An array of CompanyTag objects, coming from api\n * @returns {SelectOption[]} A sorted array of SelectOption objects\n */\nexport const getTags = (specialties: CompanyTag[] | null) => {\n if (!specialties) {\n return [];\n }\n\n return specialties\n .map(specialty => {\n const tag: SelectOption = {\n label: specialty.tag,\n value: specialty.tag_id.toString(),\n closable: specialty.from_user,\n };\n\n return tag;\n })\n .sort((firstTag, secondTag) => firstTag.label.localeCompare(secondTag.label));\n};\n\n/**\n * Maps the company information data based on the provided options.\n * @param options - An object containing the data, fieldName, and editDateFielData for mapping the company information.\n * @param options.data - The data to be mapped, which can be of type UpdateFieldsPayload or CompanyUserValue.\n * @param options.fieldName - The field name for mapping the company information.\n * @param options.editDateFielData - The edit date field data for mapping the company information.\n * @returns The mapped company information payload.\n */\nexport const mapCompanyInfoData = (options: {\n data?: UpdateFieldsPayload | CompanyUserValue;\n fieldName?: FieldOptions;\n editDateFieldData?: EditDateFields;\n lastFundingDate?: string;\n gridKey?: GridKeys | '';\n}) => {\n const { data, fieldName, editDateFieldData, lastFundingDate, gridKey } = options;\n\n let payload = {\n company_id: data?.companyId,\n user_values: {},\n };\n\n const isLastRaisedAmountForAddons =\n data?.fieldKey === 'last_raised_amount' && gridKey === 'addons';\n\n if (\n (fieldName && ['Revenue', 'EBITDA', 'Last Round'].includes(fieldName)) ||\n isLastRaisedAmountForAddons\n ) {\n let fieldKey = data?.fieldKey;\n let financialYearKey;\n const financialValue = (data as UpdateFieldsPayload).value as CustomValue;\n\n if (data?.fieldKey === 'revenue_list') {\n fieldKey = 'last_rev_update_amount';\n financialYearKey = 'last_rev_update_year';\n }\n\n if (data?.fieldKey === 'ebitda_list') {\n fieldKey = 'ebitda_amount';\n financialYearKey = 'ebitda_year';\n }\n\n payload.user_values = {\n [fieldKey!]:\n data?.fieldKey === 'revenue_list' || data?.fieldKey === 'ebitda_list'\n ? financialValue.value\n : data?.value,\n ...(data?.lastRoundData ?? {}),\n ...(financialYearKey && { [financialYearKey]: data?.year }),\n };\n\n return payload;\n }\n\n if (fieldName === 'OPS Team') {\n const membersName = (data?.value as SelectOption<string>[]).map(members => members.value);\n payload.user_values = { ops_team: membersName };\n\n return payload;\n }\n\n if (fieldName === 'Capital Raised') {\n const customData = data as UpdateFieldsPayload;\n\n payload.user_values = {\n [customData.fieldKey as string]: customData.value,\n };\n\n return payload;\n }\n\n if (fieldName === 'Last Funding Date') {\n payload.user_values = {\n raise_date: data?.value,\n };\n\n return payload;\n }\n\n if (fieldName === 'Last Raised Amount') {\n payload.user_values = {\n last_raised_amount: data?.value,\n raise_date: lastFundingDate,\n };\n\n return payload;\n }\n\n if (\n fieldName === 'IC Status Date' ||\n fieldName === 'Expected Close Date' ||\n fieldName === 'Use Parent Company'\n ) {\n const { ...rest } = editDateFieldData || {};\n\n const customData = data as UpdateFieldsPayload;\n\n const fieldKey = Object.keys(rest)[0];\n const value = Object.values(rest)[0];\n\n // check format date\n\n payload.user_values = {\n [customData.fieldKey ? (customData.fieldKey as string) : fieldKey]: customData.value\n ? customData.value\n : value,\n };\n\n return payload;\n }\n\n if (fieldName === 'Next Steps') {\n let extraPayload = {};\n const { extraValues, extraKeys } = data as UpdateFieldsPayload;\n\n if (extraValues !== undefined && extraKeys?.length && extraValues?.length) {\n extraKeys.forEach((key, index) => {\n extraPayload = {\n ...extraPayload,\n ...(extraValues[index] ? { [key]: extraValues[index] } : {}),\n };\n });\n }\n\n payload.user_values = {\n next_steps: ((data as UpdateFieldsPayload)?.value as CustomValue).value,\n ...extraPayload,\n };\n\n return payload;\n }\n\n if (fieldName === 'Active on Pipeline') {\n const active = data?.value;\n\n payload.user_values = { active };\n\n return payload;\n }\n\n if (fieldName === 'Website Status') {\n payload.user_values = { url_status: data?.value };\n\n return payload;\n }\n\n if (fieldName === 'Senior Deal Team Lead') {\n const seniorsDealTeamList = (data?.value as Array<SelectOption>).map(item => item.value);\n\n payload.user_values = { senior_deal_team_lead: seniorsDealTeamList };\n\n return payload;\n }\n\n if (fieldName === 'Deal Team') {\n const dealTeamValues = (data?.value as Array<SelectOption>).map(item => ({\n value: Number(item.value),\n label: item.label,\n }));\n payload.user_values = { deal_team: dealTeamValues };\n\n return payload;\n }\n\n return payload;\n};\n","export { useHistoryTab } from './useHistoryTab';\n","import { createSelector } from 'reselect';\n// models\nimport { GridKeys } from '@models/grid';\nimport { selectFeatureState, StateSlice } from '../../selectFeature';\nimport Company from '@optx/models/Company';\n// utils\nimport { getPreviousNextCompanyIds as previousNextCompanyIds } from '@utils/company';\n// redux\nimport { isLoading as isLoadingFavoriteListsSelectors } from '@redux/favorite-lists/lists/selectors';\nimport { selectors as favoriteSelectors } from '@redux/favorites';\nimport {\n getSearchKey as getSearchKeySelector,\n getTotalCount as getTotalCountSelector,\n isLoading as isLoadingSelector,\n} from './selectorsReusable';\n\nconst selectSearchFeatureState = (state: StateSlice) => selectFeatureState(state).search;\n\nexport const getCompanies = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => {\n return state[gridKey].allIds.map(id => state[gridKey].byId[id]);\n });\n\nexport const getCompanyById = (gridKey: GridKeys, companyId: number) =>\n createSelector(getCompanies(gridKey), companies => {\n const findCompany = companies.find((company: Company) => company.company_id === companyId);\n\n return findCompany;\n });\n\nexport const getPreviousNextCompanyIds = (gridKey: GridKeys, companyId: number) =>\n createSelector(getCompanies(gridKey), previousNextCompanyIds(companyId));\n\nexport const getFirstCompanyFromSearch = (gridKey: GridKeys) =>\n createSelector(\n selectSearchFeatureState,\n state => state[gridKey].allIds.map(id => state[gridKey].byId[id])[0]\n );\n\nexport const getError = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey].error);\n\nexport const shouldInitialFetch = (gridKey: GridKeys) =>\n createSelector(\n selectSearchFeatureState,\n state => !state[gridKey].fetchedAt && !state[gridKey].error && !state[gridKey].loading\n );\n\nexport const isInitialSearch = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => !state[gridKey].fetchedAt);\n\nexport const isLoading = (gridKey: GridKeys) => isLoadingSelector(gridKey);\n\nexport const fetched = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => !!state[gridKey].fetchedAt);\n\nexport const isCancelled = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey]?.cancelled);\n\nexport const isError = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey].error);\n\nexport const hideCancelSearch = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey].hideCancelSearch);\n\nexport const filterIsLoading = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey].loading);\n\nexport const makeSelectLoadingHomePage = (gridKey: GridKeys) =>\n createSelector(\n isLoading(gridKey),\n filterIsLoading(gridKey),\n favoriteSelectors.isLoading,\n isLoadingFavoriteListsSelectors,\n (loadingSeach, loadingFilters, loadingFavorite, loadingListsFavorites) => {\n return loadingSeach || loadingFilters || loadingFavorite || loadingListsFavorites;\n }\n );\n\nexport const getSearchName = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => {\n if (state[gridKey]) {\n return state[gridKey].searchTitle;\n }\n\n return '';\n });\n\nexport const getTrending = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey].trending);\n\nexport const getTotalCount = (gridKey: GridKeys) => getTotalCountSelector(gridKey);\n\nexport const getSearchKey = (gridKey: GridKeys) => getSearchKeySelector(gridKey);\n\nexport const getTableGridQuery = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey].tableGridQuery);\n\nexport const shouldUpdateSourcingOutReachAnalystInfo = createSelector(\n selectSearchFeatureState,\n state => state.outreachDetails.shouldUpdateSourcingOutReachAnalystInfo\n);\n\nexport const getCompanyId = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey].companyId);\n\nexport const getListType = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey]?.listType);\n\nexport const getAdvancedSearchListId = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey]?.list_id);\n","import { createAction } from '@reduxjs/toolkit';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport * as types from './types';\nimport {\n prepareFetchSuccess,\n prepareSaveSearch,\n prepareSaveSearchSuccess,\n renameSearchPrepare,\n prepareSavedSearch,\n} from '../../feature/saved-search/actions';\n\n// fetch contacts saved searches actions\nexport const fetchContactSavedSearches = createAction<string | undefined>(\n types.FETCH_SAVED_SEARCHES\n);\nexport const fetchContactSavedSearchesSuccess = createAction(\n types.FETCH_SAVED_SEARCHES_SUCCESS,\n prepareFetchSuccess\n);\nexport const fetchContactSavedSearchesFail = createAction<string>(types.FETCH_SAVED_SEARCHES_FAIL);\n\n// save search\nexport const saveContactSearch = createAction(types.SAVE_SEARCH, prepareSaveSearch);\nexport const saveContactSearchSuccess = createAction(\n types.SAVE_SEARCH_SUCCESS,\n prepareSaveSearchSuccess\n);\nexport const saveContactSearchFail = createAction<string>(types.SAVE_SEARCH_FAIL);\n\n// delete search\nexport const deleteContactSearch = createAction<number | string>(types.DELETE_SEARCH);\nexport const deleteContactSearchSuccess = createAction<number>(types.DELETE_SEARCH_SUCCESS);\nexport const deleteContactSearchFail = createAction<string>(types.DELETE_SEARCH_FAIL);\n\n// rename search\nexport const renameContactSearch = createAction(types.RENAME_SEARCH, renameSearchPrepare);\nexport const renameContactSearchSuccess = createAction(\n types.RENAME_SEARCH_SUCCESS,\n renameSearchPrepare\n);\nexport const renameContactSearchFail = createAction<string>(types.RENAME_SEARCH_FAIL);\n\n// go to search\nexport const resetToSearch = createAction(types.RESET_TO_SEARCH, prepareSavedSearch);\n\n// pagination\nexport const savedContactsSearchPagination = createAction<PageInfo>(\n types.SAVED_CONTACTS_SEARCH_PAGINATION\n);\n","// fetch saved searches\nexport const FETCH_SAVED_SEARCHES = 'contacts/search/saved-searches/FETCH_SAVED_SEARCHES';\nexport const FETCH_SAVED_SEARCHES_SUCCESS =\n 'contacts/search/saved-searches/FETCH_SAVED_SEARCHES_SUCCESS';\nexport const FETCH_SAVED_SEARCHES_FAIL = 'contacts/search/saved-searches/FETCH_SAVED_SEARCHES_FAIL';\n\n// save search\nexport const SAVE_SEARCH = 'contacts/search/saved-searches/SAVE_SEARCH';\nexport const SAVE_SEARCH_SUCCESS = 'contacts/search/saved-searches/SAVE_SEARCH_SUCCESS';\nexport const SAVE_SEARCH_FAIL = 'contacts/search/saved-searches/SAVE_SEARCH_FAIL';\n\n// delete search\nexport const DELETE_SEARCH = 'contacts/search/saved-searches/DELETE_SEARCH';\nexport const DELETE_SEARCH_SUCCESS = 'contacts/search/saved-searches/DELETE_SEARCH_SUCCESS';\nexport const DELETE_SEARCH_FAIL = 'contacts/search/saved-searches/DELETE_SEARCH_FAIL';\n\n// delete search\nexport const RENAME_SEARCH = 'contacts/search/saved-searches/RENAME_SEARCH';\nexport const RENAME_SEARCH_SUCCESS = 'contacts/search/saved-searches/RENAME_SEARCH_SUCCESS';\nexport const RENAME_SEARCH_FAIL = 'contacts/search/saved-searches/RENAME_SEARCH_FAIL';\n\n// go to search\nexport const RESET_TO_SEARCH = 'contacts/search/saved-searches/RESET_TO_SEARCH';\n\n// pagination\nexport const SAVED_CONTACTS_SEARCH_PAGINATION =\n 'contacts/search/saved-searches/SAVED_CONTACTS_SEARCH_PAGINATION';\n","import { CompanyProfile } from '@optx/models/Company';\nimport { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\nimport {\n AiDescriptionResponse,\n ViewSimilarCompaniesOnGrid,\n AiRelationshipSummaryResponse,\n} from './interfaces';\n\nexport const fetchCompanyProfile = createAction<number>(types.FETCH_COMPANY_PROFILE);\nexport const fetchCompanyProfileSuccess = createAction<CompanyProfile>(\n types.FETCH_COMPANY_PROFILE_SUCCESS\n);\nexport const fetchCompanyProfileFail = createAction<string>(types.FETCH_COMPANY_PROFILE_FAIL);\n\nexport const backToSearchResults = createAction<string>(types.BACK_TO_RESULTS);\n\nexport const resetCompanyProfile = createAction(types.RESET_COMPANY_PROFILE);\n\nexport const setSelectedDescription = createAction<string | number>(types.SET_SELECTED_DESCRIPTION);\n\nexport const viewSimilarCompaniesOnGrid = createAction<ViewSimilarCompaniesOnGrid>(\n types.VIEW_SIMILAR_COMPANIES_ON_GRID\n);\n\n// AI Description\nexport const regenerateAiDescription = createAction<(value: string) => void>(\n types.REGENERATE_AI_DESCRIPTION\n);\nexport const regenerateAiDescriptionSuccess = createAction<AiDescriptionResponse>(\n types.REGENERATE_AI_DESCRIPTION_SUCCESS\n);\nexport const regenerateAiDescriptionFail = createAction(types.REGENERATE_AI_DESCRIPTION_FAIL);\n\nexport const opinionAiDescription = createAction(\n types.OPINION_AI_DESCRIPTION,\n (status: boolean, cb: (value: string) => void) => ({\n payload: status,\n meta: cb,\n })\n);\nexport const opinionAiDescriptionSuccess = createAction<AiDescriptionResponse>(\n types.OPINION_AI_DESCRIPTION_SUCCESS\n);\nexport const opinionAiDescriptionFail = createAction(types.OPINION_AI_DESCRIPTION_FAIL);\n\nexport const aiRelationshipSummary = createAction(\n types.AI_RELATIONSHIP_SUMMARY,\n (status: boolean, cb?: () => void) => ({\n payload: status,\n meta: cb,\n })\n);\nexport const aiRelationshipSummarySuccess = createAction<AiRelationshipSummaryResponse>(\n types.AI_RELATIONSHIP_SUMMARY_SUCCESS\n);\nexport const aiRelationshipSummaryFail = createAction(types.AI_RELATIONSHIP_SUMMARY_FAIL);\n","import React, { useMemo } from 'react';\nimport { Typography } from 'antd';\nimport { merge, Dictionary, isEqual } from 'lodash';\nimport { CommonProps, GroupType } from 'react-select';\n// models\nimport { SelectOption } from '@optx/models/Option';\n// utils\nimport { hasGroups } from '@optx/utils/select/select';\n// Local\n// models\nimport { MultiSelectProps } from '../../interfaces';\n\ninterface MultiValueContainerProps extends CommonProps<SelectOption> {\n data: SelectOption;\n}\n\nfunction reduceValues(acumulator: Dictionary<string>, nextValue: SelectOption) {\n return merge(acumulator, { [nextValue.value]: nextValue.value });\n}\n\nconst MultiValueContainer: React.FC<MultiValueContainerProps> = props => {\n const { selectProps, data } = props;\n const { placeholder } = selectProps as MultiSelectProps;\n\n const selectedValue = useMemo(() => {\n const options = selectProps.options;\n const value = selectProps.value as Array<SelectOption> | null;\n\n if (!value || !value.length || data.value !== value[0].value) {\n return '';\n }\n\n let allOptions: Array<SelectOption> = [];\n const includesGroups = hasGroups(options);\n const valuesDictionary: Dictionary<string> = value.reduce(reduceValues, {});\n const selectedGroups: Array<number> = [];\n\n // get all options\n if (includesGroups) {\n options?.forEach((option: SelectOption | GroupType<SelectOption>, index: number) => {\n const groupOptions = (option as GroupType<SelectOption>).options;\n\n if (groupOptions) {\n // grouped options\n allOptions = allOptions.concat(groupOptions);\n\n if (!groupOptions.some(item => valuesDictionary[item.value] === undefined)) {\n selectedGroups.push(index);\n }\n } else {\n // single option\n allOptions.push(option as SelectOption);\n }\n });\n } else {\n allOptions = [...(options as Array<SelectOption>)];\n }\n\n // All option\n if (includesGroups) {\n // check if we have single group selected.\n if (selectedGroups.length === 1) {\n const groupIndex = selectedGroups[0];\n const group = options![groupIndex] as GroupType<SelectOption>;\n const groupValues = group.options.reduce(reduceValues, {});\n\n // Set group label as value when one and only one group is selected.\n if (isEqual(groupValues, valuesDictionary)) {\n return group.label as string;\n }\n }\n\n // Set label value if only one options is selected.\n if (value.length === 1) {\n return value[0].label;\n }\n }\n\n if (value.length === 1 && value.length !== allOptions.length) {\n return value[0].label;\n }\n\n const someOptionsDisabled = allOptions.some(item => item.disabled);\n\n if (value.length === allOptions.length && !someOptionsDisabled) {\n if (value.length === 1) {\n return value[0].label;\n }\n\n return 'All';\n }\n\n return `${value.length} Selected`;\n }, [data.value, selectProps.options, selectProps.value]);\n\n if (selectedValue) {\n return (\n <Typography.Text ellipsis>\n {placeholder}:{' '}\n <Typography.Text style={{ color: '#1890FF' }}>{selectedValue}</Typography.Text>\n </Typography.Text>\n );\n }\n\n return null;\n};\n\nexport default MultiValueContainer;\n","import React, { useCallback } from 'react';\nimport ReactSelect, { Props } from 'react-select';\n// models\nimport { SelectOption } from '@optx/models/Option';\n// components\nimport {\n MultiValueRemove,\n MultiValueLabel,\n ValueContainer,\n DropdownIndicator,\n Option,\n} from '../components';\nimport { SelectAllMenuList, SelectableGroupHeading } from '../MultiSelect/components';\nimport { Styled } from '../MultiSelect/MultiSelect.styled';\nimport { MultiValueContainer } from './components';\nimport { isOptionDisabled } from '../utils';\n\nconst MultiSelectInline: React.FC<Props<SelectOption>> = ({\n options,\n value,\n onChange,\n ...restProps\n}) => {\n // eslint-disable-next-line\n const MenuListMemoized = useCallback(SelectAllMenuList(), []);\n\n return (\n <Styled.MultiSelectWrapper>\n <ReactSelect\n options={options}\n value={value}\n onChange={onChange}\n hideSelectedOptions={false}\n components={{\n MultiValueContainer,\n MultiValueLabel,\n MultiValueRemove,\n ValueContainer,\n DropdownIndicator,\n Option,\n GroupHeading: SelectableGroupHeading,\n MenuList: MenuListMemoized,\n }}\n {...restProps}\n // Leave isMulti at the end to not be overriden.\n backspaceRemovesValue={false}\n isMulti\n />\n </Styled.MultiSelectWrapper>\n );\n};\n\nMultiSelectInline.defaultProps = {\n placeholder: 'search',\n classNamePrefix: 'multiselect',\n isClearable: false,\n hideSelectedOptions: false,\n closeMenuOnSelect: false,\n isOptionDisabled,\n};\n\nexport default MultiSelectInline;\n","import React from 'react';\nimport ReactSelect from 'react-select';\nimport styled, { css } from 'styled-components';\n\nimport { SingleSelectProps } from './interfaces';\n\nconst Select = styled((props: SingleSelectProps) => <ReactSelect {...props} />)`\n min-width: 200px;\n width: 100%;\n\n .styled-single-select {\n &__control {\n border: 1px solid #d9d9d9;\n border-radius: 0;\n\n &--is-focused {\n border: 1px solid #d9d9d9;\n }\n }\n\n &__value-container {\n height: 40px;\n }\n\n &__placeholder {\n color: #bfbfbf;\n font-size: 16px;\n line-height: 24px;\n }\n\n &__indicator {\n color: #000000;\n &-separator {\n display: none;\n }\n }\n\n &__menu {\n background: #ffffff;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.15);\n border-radius: 2px;\n margin-top: 4px;\n margin-bottom: 4px;\n z-index: 2;\n }\n\n &__option {\n color: rgba(0, 0, 0, 0.85);\n\n &--is-selected {\n background: none;\n }\n\n &--is-focused {\n background: #deebff !important;\n }\n }\n\n &__single-value {\n ${props =>\n props.valuePrefix &&\n css`\n color: #1890ff;\n `}\n }\n }\n\n &.bulk-action-watch-list__sorting {\n .styled-single-select {\n &__control {\n border: 0;\n justify-content: center;\n box-shadow: none;\n\n span {\n margin: 0;\n font-size: 14px;\n }\n }\n\n &__value-container {\n padding: 0;\n flex: 0.77;\n }\n\n &__indicator {\n color: #1890ff;\n }\n }\n }\n`;\n\nSelect.defaultProps = {\n classNamePrefix: 'styled-single-select',\n};\n\nexport const Styled = {\n Select,\n};\n","import styled from 'styled-components';\n\nconst PrefixWrapper = styled.span`\n margin: 0 0 0 16px;\n`;\n\nconst PrefixIconWrapper = styled.span`\n color: #595959;\n`;\n\nconst Prefix = styled.span`\n font-size: 16px;\n line-height: 24px;\n color: #595959;\n margin: 0 0 0 8px;\n`;\n\nexport const Styled = {\n PrefixWrapper,\n Prefix,\n PrefixIconWrapper,\n};\n","import React, { useMemo } from 'react';\nimport { SelectComponentsConfig } from 'react-select';\nimport { SearchOutlined } from '@ant-design/icons';\n// components\nimport { DropdownIndicator } from '../components';\nimport { Styled } from './SingleSelect.styled';\nimport { SingleSelectProps } from './interfaces';\nimport { Control } from './components/Control';\n\nconst defaultComponents: Partial<SelectComponentsConfig<any>> = {\n DropdownIndicator,\n Control,\n};\n\nconst SingleSelect: React.FC<SingleSelectProps> = ({ options, components, ...restProps }) => {\n const selectComponents = useMemo(\n () => ({\n ...defaultComponents,\n ...(components || {}),\n }),\n [components]\n );\n\n return (\n // @ts-ignore for now until we add fix later for theme type.\n <Styled.Select\n options={options}\n components={selectComponents}\n {...restProps}\n // Leave isMulti at the end to not be overriden.\n isMulti={false}\n />\n );\n};\n\nSingleSelect.defaultProps = {\n placeholder: 'search',\n isClearable: false,\n hideSelectedOptions: false,\n SearchIcon: <SearchOutlined />,\n};\n\nexport default SingleSelect;\n","import React from 'react';\nimport { components, ControlProps } from 'react-select';\nimport { SingleSelectProps } from '../interfaces';\nimport { Styled } from './Control.styled';\n\n/**\n * Dropdown search area.\n */\nexport const Control: React.FC<ControlProps<any>> = ({ children, ...restProps }) => {\n const selectProps: SingleSelectProps = restProps.selectProps;\n const { SearchIcon, valuePrefix } = selectProps;\n\n return (\n <components.Control {...restProps}>\n {(SearchIcon || valuePrefix) && (\n <Styled.PrefixWrapper>\n {SearchIcon && <Styled.PrefixIconWrapper>{SearchIcon}</Styled.PrefixIconWrapper>}\n {valuePrefix && <Styled.Prefix>{valuePrefix}</Styled.Prefix>}\n </Styled.PrefixWrapper>\n )}\n\n {children}\n </components.Control>\n );\n};\n","import { EquityTouchState } from './interfaces';\n\nexport const shouldFetch = (state: EquityTouchState) => !state.fetchedAt;\nexport const loading = (state: EquityTouchState) => state.loading;\nexport const formData = (state: EquityTouchState) => state.formData;\nexport const companies = (state: EquityTouchState) => state.companiesById;\nexport const allIds = (state: EquityTouchState) => state.allCompanyIds;\nexport const companyData = (state: EquityTouchState) => state.companyData;\nexport const bulkValues = (state: EquityTouchState) => state.bulkValues;\nexport const getQueue = (state: EquityTouchState) => state.queue;\n\nexport const companyEqtData = (companyId: number) => (state: EquityTouchState) =>\n state.companiesById[companyId];\n\nexport const getResults = (state: EquityTouchState) => state.results;\nexport const isInProgress = (state: EquityTouchState) => state.inProgress;\nexport const isCompleted = (state: EquityTouchState) => state.completed;\nexport const getPercentageCompleted = (state: EquityTouchState) => state.percentageCompleted;\nexport const getSelectedCompaniesCount = (state: EquityTouchState) => state.selectedCompaniesCount;\nexport const cancel = (state: EquityTouchState) => state.cancel;\nexport const getTemporaryData = (state: EquityTouchState) => state.temporaryData;\nexport const getListId = (state: EquityTouchState) => state.listId;\nexport const getListType = (state: EquityTouchState) => state.listType;\nexport const getCompanyTemporaryData = (companyId: number) => (state: EquityTouchState) =>\n (state.temporaryData?.step2 as any)?.[companyId] || {};\n","import { TableCellCompanyName } from '@components/common/table/AntTable/cells';\nimport { ColumnsType } from 'antd/lib/table';\nimport { SelectedCompanies } from '@models/bulkActions';\n\nexport const BULK_EDIT_DEFAULT_COLUMNS: ColumnsType<SelectedCompanies> = [\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n render: TableCellCompanyName,\n },\n];\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, has, pick } from 'lodash';\n// constants\nimport { BULK_ACTIONS_CONTACT_FIELDS } from '@optx/constants/equitytouch';\nimport { CONTACT_SELECT_LIMIT } from '@optx/constants/contacts';\n// models\nimport { EquityTouchFetchedField, EquityTouchContact } from '@models/equityTouch';\nimport { SalesloftEditData } from '@models/Salesloft';\nimport {\n BulkCompanyData,\n CompanyBulkData,\n ResolveSalesloftSuccess,\n UpdateCompanyAndSubmit,\n SalesloftContactsBulk,\n SelectedCompanies,\n EquityTouchBulkCompanies,\n SalesloftCompanyContacts,\n EquityTouchBulkResults,\n SelectedCompaniesGrids,\n TemporaryDataEquityTouch,\n} from '@models/bulkActions';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { SalesloftContact } from '@optx/models/Salesloft';\nimport { CompanyProfile } from '@models/Company';\n// utils\nimport { updateContacts } from '@optx/utils/utils';\n// redux\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { fetchReducer } from '@redux/feature/fetch/reducers';\nimport {\n actions as selectedCompaniesActions,\n interfaces as selectedCompaniesModels,\n} from '@features/bulk-actions/selected-companies';\nimport { actions as salesloftBulkActions } from '@features/bulk-actions/salesloft';\nimport { getSalesloftEmails } from '@optx/utils/salesloft';\nimport { SelectOption } from '@optx/models/Option';\nimport { UserInformation } from '@optx/models/user';\n\nimport { EquityTouchState } from './interfaces';\nimport { actions as primaryContactsActions } from 'src/redux/company/primary-contacts';\nimport * as actions from './actions';\n\nconst initialState: EquityTouchState = {\n companiesById: {},\n temporaryData: {},\n allCompanyIds: [],\n formData: {},\n companyData: {},\n bulkValues: {},\n editedCompanies: [],\n loading: false,\n error: '',\n fetchedAt: '',\n queue: 0,\n results: [],\n inProgress: false,\n completed: false,\n percentageCompleted: 0,\n selectedCompaniesCount: 0,\n cancel: false,\n};\n\nconst fetchFormDataSuccessReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<{\n formData: Dictionary<EquityTouchFetchedField>;\n isInitializing: boolean;\n companyId?: number;\n }>\n> = (draftState, action) => {\n const { formData, isInitializing } = action.payload;\n draftState.formData = formData;\n\n if (isInitializing) {\n draftState.fetchedAt = new Date().toISOString();\n }\n};\n\nconst initializeEquityTouchBulkSuccessReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<BulkCompanyData>\n> = (draftState, action) => {\n const { companiesById, allIds, listId, listType } = action.payload;\n draftState.loading = false;\n draftState.companiesById = companiesById;\n draftState.allCompanyIds = allIds;\n draftState.selectedCompaniesCount = allIds.length;\n\n if (listId && listType) {\n draftState.listId = listId;\n draftState.listType = listType;\n }\n};\n\nconst initializeIndividualEditingReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<Dictionary<string | number | number[] | boolean>>\n> = (draftState, action) => {\n const formValues = action.payload;\n const customFormValues = { ...formValues };\n\n delete customFormValues.FTEs;\n draftState.allCompanyIds.forEach(id => {\n if (!draftState.editedCompanies.includes(id)) {\n draftState.companiesById[id] = { ...draftState.companiesById[id], ...customFormValues };\n }\n });\n draftState.bulkValues = formValues;\n};\n\nconst fetchCompanySuccessReducer: CaseReducer<EquityTouchState, PayloadAction<CompanyProfile>> = (\n draftState,\n action\n) => {\n const company = action.payload;\n const companyId = company.company_id;\n draftState.companyData = company;\n\n draftState.companiesById[companyId].add_all_contacts = false;\n\n const selectedContactsLimit = company.contacts.slice(0, CONTACT_SELECT_LIMIT);\n\n if (draftState.companiesById[companyId].contacts === undefined) {\n draftState.companiesById[companyId].contacts =\n company.contacts.length >= CONTACT_SELECT_LIMIT ? selectedContactsLimit : company.contacts;\n\n draftState.temporaryData.step2 = {\n ...draftState.temporaryData.step2,\n [companyId]: {\n ...(draftState.temporaryData.step2?.[companyId] as unknown as Dictionary<number>),\n contacts:\n company.contacts.length >= CONTACT_SELECT_LIMIT\n ? selectedContactsLimit\n : company.contacts,\n },\n };\n }\n\n draftState.loading = false;\n};\n\nconst addBulkContactReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<{\n contacts: EquityTouchContact[];\n companyId: number;\n }>\n> = (draftState, action) => {\n const { companyId, contacts } = action.payload;\n draftState.companiesById[companyId].contacts = contacts || [];\n};\n\nconst updateBulkContactSuccessReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n const contact = action.payload;\n const { company_id: companyId } = contact;\n const companyData = draftState.companyData as CompanyProfile;\n\n if (Object.keys(companyData).length) {\n const contacts = companyData.contacts;\n\n const primaryContactIndex = contacts.findIndex(contact => contact.primary_contact);\n\n const index = contacts.findIndex(contactItem => contactItem.person_id === contact.person_id);\n\n // update the data used for the table\n if (\n primaryContactIndex > -1 &&\n contacts[primaryContactIndex].person_id !== contact.person_id &&\n contact.primary_contact\n ) {\n contacts[primaryContactIndex].primary_contact = false;\n }\n\n if (index > -1) {\n contacts[index] = {\n ...contacts[index],\n ...contact,\n full_name: `${contact.first_name} ${contact.last_name}`,\n additional_phones: contact.phones || null,\n };\n }\n }\n\n // updated the selected contacts that will be sent to backend\n const selectedContacts = draftState.companiesById[companyId as number]\n ?.contacts as EquityTouchContact[];\n\n if (selectedContacts?.length) {\n const selectedContacts = draftState.companiesById[companyId as number]\n .contacts as EquityTouchContact[];\n const selectedPrimaryContactIndex = selectedContacts.findIndex(\n contact => contact.primary_contact\n );\n const index = selectedContacts.findIndex(\n contactItem => contactItem.person_id === contact.person_id\n );\n\n if (\n selectedPrimaryContactIndex > -1 &&\n selectedContacts[selectedPrimaryContactIndex].person_id !== contact.person_id &&\n contact.primary_contact\n ) {\n selectedContacts[selectedPrimaryContactIndex].primary_contact = false;\n }\n\n if (index > -1) {\n selectedContacts[index] = {\n ...selectedContacts[index],\n ...contact,\n full_name: `${contact.first_name} ${contact.last_name}`,\n additional_phones: contact.phones || null,\n };\n }\n }\n\n // update salesloft contacts\n\n const salesloftContacts = draftState.companiesById[companyId as number]\n ?.salesloft_contacts as SalesloftContact[];\n\n const tempSalesloftContacts =\n draftState.temporaryData.step2 && draftState.temporaryData.step2[companyId as number] // if its not add to et (bulk)\n ? ((draftState.temporaryData.step2![companyId as number] as any)\n .salesloft_contacts as SalesloftContact[])\n : salesloftContacts;\n\n if (tempSalesloftContacts?.length) {\n const selectedPrimaryContactIndex = tempSalesloftContacts.findIndex(\n contact => contact.primary_contact\n );\n\n const index = tempSalesloftContacts.findIndex(\n selectedContact => selectedContact.person_id === contact.person_id\n );\n\n const selectedContactsIds = tempSalesloftContacts.map(\n selectedContact => selectedContact.person_id\n );\n\n if (selectedPrimaryContactIndex !== -1) {\n if (\n contact.primary_contact &&\n tempSalesloftContacts[selectedPrimaryContactIndex]?.person_id !== contact?.person_id &&\n !selectedContactsIds.includes(contact?.person_id as number)\n ) {\n const newContact: SalesloftContact = {\n ...contact,\n ...getSalesloftEmails(contact.email as string),\n additional_phones: contact.phones || null,\n };\n\n salesloftContacts.push(newContact);\n }\n\n if (contact.primary_contact && selectedContactsIds.includes(contact.person_id as number)) {\n salesloftContacts[index] = {\n ...salesloftContacts[index],\n ...contact,\n ...getSalesloftEmails(contact.email as string),\n additional_phones: contact.phones || null,\n };\n }\n\n if (!contact.primary_contact && selectedContactsIds.includes(contact.person_id as number)) {\n salesloftContacts[index] = {\n ...salesloftContacts[index],\n ...contact,\n ...getSalesloftEmails(contact.email as string),\n additional_phones: contact.phones || null,\n };\n }\n\n const temporaryState = {\n ...draftState.temporaryData.step2,\n [contact.company_id as any]: {\n ...(draftState.temporaryData.step2![contact.company_id as any] as any),\n salesloft_contacts: salesloftContacts,\n },\n };\n\n draftState.temporaryData.step2 = temporaryState;\n }\n\n if (selectedPrimaryContactIndex === -1) {\n const arrayOfSalesLoftContacts = [...tempSalesloftContacts];\n\n const newContact: SalesloftContact = {\n ...salesloftContacts[selectedPrimaryContactIndex],\n ...contact,\n ...getSalesloftEmails(contact.email as string),\n additional_phones: contact.phones || null,\n };\n\n const newSalesloftContacts = (\n draftState.temporaryData.step2![contact.company_id as any] as any\n ).salesloft_contacts.map((slContact: SalesloftContact) => {\n if (slContact.person_id === newContact.person_id) {\n return newContact;\n }\n\n return slContact;\n });\n\n const temporaryState = {\n ...draftState.temporaryData.step2,\n [contact.company_id as any]: {\n ...(draftState.temporaryData.step2![contact.company_id as any] as any),\n salesloft_contacts: newSalesloftContacts,\n },\n };\n\n draftState.temporaryData.step2 = temporaryState;\n\n arrayOfSalesLoftContacts[index] = newContact;\n\n (draftState.companiesById[companyId as number].salesloft_contacts as SalesloftContact[]) =\n arrayOfSalesLoftContacts;\n }\n\n if (contact.primary_contact && selectedContactsIds.includes(contact.person_id as number)) {\n if (salesloftContacts[index].primary_contact) {\n salesloftContacts[index].primary_contact = true;\n }\n\n if (selectedPrimaryContactIndex !== -1) {\n salesloftContacts[selectedPrimaryContactIndex].primary_contact = false;\n\n const newContact: SalesloftContact = {\n ...contact,\n ...getSalesloftEmails(contact.email as string),\n additional_phones: contact.phones || null,\n };\n\n const newSalesloftContacts = (\n draftState.temporaryData.step2![contact.company_id as any] as any\n ).salesloft_contacts;\n newSalesloftContacts[index] = newContact;\n\n const temporaryState = {\n ...draftState.temporaryData.step2,\n [contact.company_id as any]: {\n ...(draftState.temporaryData.step2![contact.company_id as any] as any),\n salesloft_contacts: newSalesloftContacts,\n },\n };\n\n draftState.temporaryData.step2 = temporaryState;\n\n (draftState.companiesById[companyId as number].salesloft_contacts as SalesloftContact[]) =\n newSalesloftContacts;\n }\n }\n } else if (draftState.companiesById[companyId as number]?.salesloft_contacts) {\n const index = (\n draftState.companiesById[companyId as number].salesloft_contacts as SalesloftContact[]\n ).findIndex(selectedContact => selectedContact.person_id === contact.person_id);\n\n if (index !== -1) {\n (draftState.companiesById[companyId as number].salesloft_contacts as SalesloftContact[])[\n index\n ] = {\n ...contact,\n ...getSalesloftEmails(contact.email as string),\n additional_phones: contact.phones || null,\n is_edited: true,\n };\n } else {\n (draftState.companiesById[companyId as number].salesloft_contacts as SalesloftContact[]).push(\n {\n ...contact,\n ...getSalesloftEmails(contact.email as string),\n additional_phones: contact.phones || null,\n }\n );\n }\n }\n};\n\nconst addToEquityTouchBulkReducer: CaseReducer<EquityTouchState, PayloadAction<CompanyBulkData>> = (\n draftState,\n action\n) => {\n const { formValues, cadence } = action.payload;\n\n if (Object.keys(formValues).length) {\n draftState.allCompanyIds.forEach(companyId => {\n if (!draftState.editedCompanies.includes(companyId)) {\n draftState.companiesById[companyId] = {\n ...draftState.companiesById[companyId],\n ...formValues,\n cadence,\n };\n }\n });\n }\n};\n\nconst addToEquityTouchBulkFailReducer: CaseReducer<EquityTouchState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.completed = true;\n draftState.error = action.payload;\n};\n\nconst updateBulkCadenceCompanyReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<EquityTouchBulkCompanies>\n> = (draftState, action) => {\n const companyKeys = Object.keys(action.payload);\n const companyKeysFiltered = companyKeys.find(key => key === 'Company Id');\n const companyId = action.payload[companyKeysFiltered as string];\n\n if (companyId) {\n draftState.companiesById[companyId as unknown as number] = {\n ...draftState.companiesById[companyId as unknown as number],\n cadence: action.payload.cadence as unknown as number,\n };\n }\n};\n\nconst updateBulkCompanyReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<UpdateCompanyAndSubmit>\n> = (draftState, action) => {\n const formValues = action.payload.formValues;\n const companyId = formValues.company_id as number;\n\n draftState.companiesById[companyId] = {\n ...draftState.companiesById[companyId],\n ...formValues,\n add_all_contacts: false,\n };\n\n if (!draftState.editedCompanies.includes(companyId)) {\n draftState.editedCompanies.push(companyId);\n }\n};\n\nconst saveResultsReducer: CaseReducer<EquityTouchState, PayloadAction<EquityTouchBulkResults[]>> = (\n draftState,\n action\n) => {\n draftState.results = [...draftState.results, ...action.payload];\n};\n\nconst updateProgressReducer: CaseReducer<EquityTouchState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.inProgress = action.payload;\n};\n\nconst updateCompletedReducer: CaseReducer<EquityTouchState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.completed = action.payload;\n};\n\nconst updatePercentageReducer: CaseReducer<EquityTouchState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n const addProgress = action.payload;\n\n if (addProgress === 0 || addProgress === 100) {\n draftState.percentageCompleted = action.payload;\n } else {\n draftState.percentageCompleted += action.payload;\n }\n};\n\nconst cancelReducer: CaseReducer<EquityTouchState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.cancel = action.payload;\n};\n\nconst resetProgressReducer: CaseReducer<EquityTouchState> = draftState => {\n return initialState;\n};\n\nconst selectCompanyIdsReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<selectedCompaniesModels.SelectedCompaniesPayload>\n> = (draftState, action) => {\n draftState.selectedCompaniesCount = action.payload.selectedCompanies.length;\n};\n\nconst resolveSalesloftSuccessReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<ResolveSalesloftSuccess>\n> = (draftState, action) => {\n const { company_id: companyId, contacts } = action.payload;\n const index = draftState.results.findIndex(result => result.company_id === companyId);\n\n if (index !== -1) {\n if (\n draftState.results[index].salesloftContacts.length === 1 &&\n draftState.results[index].salesloftContacts[0].person_id === null\n ) {\n draftState.results[index].salesloftContacts = contacts;\n } else {\n contacts.forEach(contact => {\n const resultIndex = draftState.results[index].salesloftContacts.findIndex(\n result => result.person_id === contact.person_id\n );\n\n if (resultIndex !== -1) {\n draftState.results[index].salesloftContacts[resultIndex] = contact;\n }\n });\n }\n }\n};\n\nconst fetchContactsSuccessReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<{ contacts: CompanyUserContact[]; companyId: number }>\n> = (draftState, action) => {\n const { contacts, companyId } = action.payload;\n\n draftState.companiesById[companyId].contacts = contacts.map(contact =>\n pick(contact, BULK_ACTIONS_CONTACT_FIELDS)\n );\n\n draftState.loading = false;\n};\n\nconst salesloftSelectContactsBulkReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<SalesloftContactsBulk>\n> = (draftState, action) => {\n const { id, companyId, type, selectedContactData } = action.payload;\n\n if (type === 'select') {\n if (selectedContactData) {\n if (Array.isArray(draftState.companiesById[companyId]?.salesloft_contacts)) {\n (draftState.companiesById[companyId]?.salesloft_contacts as SalesloftContact[]).push({\n ...selectedContactData,\n ...getSalesloftEmails(selectedContactData.email as string | null),\n company_id: companyId,\n });\n } else {\n draftState.companiesById[companyId].salesloft_contacts = [\n { ...selectedContactData, company_id: companyId },\n ];\n }\n }\n } else if (type === 'deselect') {\n const removeContactIndex = (\n draftState.companiesById[companyId]?.salesloft_contacts as SalesloftContact[]\n ).findIndex(contact => contact.person_id === id);\n\n (draftState.companiesById[companyId]?.salesloft_contacts as SalesloftContact[]).splice(\n removeContactIndex,\n 1\n );\n } else {\n draftState.companiesById[companyId].salesloft_contacts = [];\n }\n};\n\nconst fetchCompaniesContactsSuccessReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<{\n contacts: SalesloftCompanyContacts[];\n selectedCompanies: SelectedCompanies[];\n gridName: SelectedCompaniesGrids;\n }>\n> = (draftState, action) => {\n const { contacts } = action.payload;\n draftState.loading = false;\n contacts.forEach(contact => {\n const { company_id: id, contacts } = contact;\n\n if (draftState.companiesById[id]) {\n const primaryContact = contacts.find(contact => contact.primary_contact);\n\n if (primaryContact) {\n draftState.companiesById[id].salesloft_contacts = [\n {\n ...primaryContact,\n company_id: id,\n ...getSalesloftEmails(primaryContact.primary_email as string | null),\n },\n ];\n } else {\n draftState.companiesById[id].salesloft_contacts = [];\n }\n }\n });\n};\n\nconst addContactSuccessReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n const contact = action.payload;\n\n const companyData = draftState.companiesById[contact.company_id as number];\n const companyDataContacts = companyData?.contacts as CompanyUserContact[];\n\n if (companyData) {\n if (companyDataContacts && companyDataContacts.length < CONTACT_SELECT_LIMIT) {\n const mappedContacts = action.payload.primary_contact\n ? companyDataContacts.map(contact => ({ ...contact, primary_contact: false }))\n : companyDataContacts;\n mappedContacts?.push(contact as CompanyUserContact);\n\n companyData.contacts = mappedContacts;\n } else {\n companyDataContacts?.push(contact as CompanyUserContact);\n companyData.contacts = companyDataContacts;\n }\n }\n\n const tempDataContacts = draftState.temporaryData.step2?.[\n contact.company_id as number\n ] as unknown as Dictionary<CompanyUserContact[]>;\n const tempDataContactsContacts = tempDataContacts?.contacts;\n\n if (tempDataContactsContacts && tempDataContactsContacts.length < CONTACT_SELECT_LIMIT) {\n if (contact.primary_contact) {\n const mappedContacts = action.payload.primary_contact\n ? tempDataContactsContacts.map(contact => ({ ...contact, primary_contact: false }))\n : tempDataContactsContacts;\n\n mappedContacts.push(contact as CompanyUserContact);\n tempDataContacts.contacts = mappedContacts;\n\n (tempDataContacts.salesloft_contacts as SalesloftContact[]) = [{ ...contact }];\n\n if (tempDataContactsContacts) {\n (tempDataContacts as any).salesloft_contacts = mappedContacts as CompanyUserContact[];\n }\n }\n\n const mappedContacts = action.payload.primary_contact\n ? tempDataContactsContacts.map(contact => ({ ...contact, primary_contact: false }))\n : tempDataContactsContacts;\n mappedContacts?.push(contact as CompanyUserContact);\n\n tempDataContacts.contacts = mappedContacts;\n } else {\n tempDataContactsContacts?.push(contact as CompanyUserContact);\n }\n\n const tempDataSLContacts = draftState.temporaryData.step2?.[contact.company_id as number];\n\n if (\n companyData &&\n companyData.salesloft_contacts &&\n (companyData.salesloft_contacts as SalesloftContact[]).length < CONTACT_SELECT_LIMIT\n ) {\n const newContact: SalesloftContact = {\n ...contact,\n company_name: contact.company_name,\n company_website: contact.company_url,\n company_id: contact.company_id,\n primary_contact: !!contact.primary_contact,\n ...getSalesloftEmails(contact.email as string),\n };\n\n if (Array.isArray(companyData.salesloft_contacts)) {\n if (contact.primary_contact) {\n const companyContacts = companyData.salesloft_contacts as SalesloftContact[];\n\n const mappedContacts = action.payload.primary_contact\n ? companyContacts.map(contact => ({ ...contact, primary_contact: false }))\n : companyContacts;\n mappedContacts.push(newContact as CompanyUserContact);\n (companyData.salesloft_contacts as SalesloftContact[]) = [{ ...newContact }];\n\n if (tempDataSLContacts) {\n if (contact.primary_contact) {\n (tempDataSLContacts as any).salesloft_contacts = [{ ...newContact }];\n } else {\n (tempDataSLContacts as any).salesloft_contacts = mappedContacts as CompanyUserContact[];\n }\n }\n }\n }\n }\n\n if (Object.keys(draftState.companyData).length) {\n if (Array.isArray((draftState.companyData as CompanyProfile).contacts)) {\n if (contact.primary_contact) {\n const companyContacts = (draftState.companyData as CompanyProfile).contacts;\n const mappedContacts = action.payload.primary_contact\n ? companyContacts.map(contact => ({ ...contact, primary_contact: false }))\n : companyContacts;\n mappedContacts.push(contact as CompanyUserContact);\n\n (draftState.companyData as CompanyProfile).contacts =\n mappedContacts as CompanyUserContact[];\n } else {\n (draftState.companyData as CompanyProfile).contacts.push(contact as CompanyUserContact);\n }\n } else {\n (draftState.companyData as CompanyProfile).contacts = [contact as CompanyUserContact];\n }\n }\n};\n\nconst updatePrimaryContactsReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<SalesloftEditData>\n> = (draftState, action) => {\n const {\n tenure_end_date: tenureEndDate,\n tenure_start_date: tenureStartDate,\n company_id: companyId,\n person_id: personId,\n } = action.payload;\n\n const companyData = draftState.companyData as CompanyProfile;\n const isValidData =\n typeof personId === 'number' && tenureEndDate !== undefined && tenureStartDate !== undefined;\n\n if (Object.keys(companyData).length) {\n const contacts = companyData.contacts;\n\n if (isValidData && contacts && contacts.length) {\n const updatedContacts = updateContacts(\n contacts,\n personId as number,\n tenureEndDate as string | null,\n tenureStartDate as string | null\n );\n\n if (updatedContacts) {\n (draftState.companyData as CompanyProfile).contacts =\n updatedContacts as CompanyUserContact[];\n }\n }\n }\n\n const companyByIdData = draftState.companiesById[companyId as number];\n\n if (companyByIdData && personId && companyId) {\n const companyDataContacts = companyByIdData?.contacts as CompanyUserContact[];\n\n if (isValidData && companyDataContacts && companyDataContacts.length) {\n const updatedContacts = updateContacts(\n companyDataContacts,\n personId as number,\n tenureEndDate as string | null,\n tenureStartDate as string | null\n );\n\n if (updatedContacts) {\n draftState.companiesById[companyId as number].contacts = updatedContacts;\n }\n }\n\n const tempData = draftState.temporaryData.step2?.[companyId as number] as unknown as Dictionary<\n CompanyUserContact[]\n >;\n\n const tempDataContacts = tempData?.contacts;\n\n if (isValidData && tempData && tempDataContacts && tempDataContacts.length) {\n const updatedContacts = updateContacts(\n tempDataContacts,\n personId as number,\n tenureEndDate as string | null,\n tenureStartDate as string | null\n );\n\n if (updatedContacts) {\n (tempData as any).contacts = updatedContacts as CompanyUserContact[];\n }\n }\n\n const tempDataSLContacts = tempData?.salesloft_contacts;\n\n if (isValidData && tempData && tempDataSLContacts && tempDataSLContacts.length) {\n const updatedContacts = updateContacts(\n tempDataSLContacts,\n personId as number,\n tenureEndDate as string | null,\n tenureStartDate as string | null\n );\n\n if (updatedContacts) {\n (tempData as any).salesloft_contacts = updatedContacts as CompanyUserContact[];\n }\n }\n }\n};\n\nconst selectCadenceIndividuallyReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<{ cadenceId: number | string; companyId: number }>\n> = (draftState, action) => {\n const { cadenceId, companyId } = action.payload;\n\n if (draftState.companiesById[companyId]) {\n draftState.companiesById[companyId].cadence = cadenceId;\n }\n};\n\n// External reducers\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccess: CaseReducer<EquityTouchState, PayloadAction<UserInformation>> = (\n draftState,\n action\n) => {\n const persistedFilter = action.payload.settings.session_settings\n ? action.payload.settings.session_settings.et_form_auto_save\n : undefined;\n\n if (persistedFilter !== null && persistedFilter !== undefined) {\n if (has(persistedFilter, 'Company Name')) {\n draftState.bulkValues = persistedFilter as Dictionary<\n string | number | boolean | number[] | string[] | null | SelectOption\n >;\n } else {\n const companiesById = (persistedFilter?.companiesById ?? {}) as EquityTouchBulkCompanies;\n const formData = (persistedFilter?.formData ?? {}) as Dictionary<EquityTouchFetchedField>;\n const firstStepData = (persistedFilter?.firstStepData ?? {}) as any;\n const listId = persistedFilter?.listId;\n const listType = persistedFilter?.listType;\n const companiesData = (persistedFilter?.companiesData ?? []) as Array<any>;\n draftState.companiesById = companiesById;\n draftState.formData = formData;\n draftState.temporaryData.step1 = firstStepData;\n\n if (persistedFilter?.queue) {\n draftState.queue = persistedFilter.queue as number;\n }\n\n if (listId && listType) {\n draftState.listId = listId.toString() as string;\n draftState.listType = listType.toString() as string;\n }\n\n const allCompanyIds: number[] = [];\n companiesData.forEach(item => {\n if (Number.isInteger(Number(item.company_id))) {\n allCompanyIds.push(Number(item.company_id));\n }\n });\n draftState.allCompanyIds = allCompanyIds;\n\n draftState.selectedCompaniesCount = allCompanyIds.length;\n\n draftState.loading = false;\n }\n }\n};\n\nconst updateTemporaryDataReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<TemporaryDataEquityTouch>\n> = (draftState, action) => {\n if (action.payload?.step1) {\n draftState.temporaryData.step1 = action.payload?.step1;\n }\n\n if (action.payload?.step2) {\n draftState.temporaryData.step2 = action.payload?.step2;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.initializeEquityTouchBulk, fetchReducer)\n .addCase(actions.initializeEquityTouchBulkSuccess, initializeEquityTouchBulkSuccessReducer)\n .addCase(actions.initializeIndividualEditing, initializeIndividualEditingReducer)\n .addCase(actions.addToEquityTouchBulk, addToEquityTouchBulkReducer)\n .addCase(actions.addToEquityTouchBulkFail, addToEquityTouchBulkFailReducer)\n .addCase(actions.fetchFormDataSuccess, fetchFormDataSuccessReducer)\n .addCase(actions.fetchCompany, fetchReducer)\n .addCase(actions.fetchCompanySuccess, fetchCompanySuccessReducer)\n .addCase(actions.addBulkContacts, addBulkContactReducer)\n .addCase(actions.updateBulkContactSuccess, updateBulkContactSuccessReducer)\n .addCase(actions.updateBulkCompany, updateBulkCompanyReducer)\n .addCase(actions.updateBulkCadence, updateBulkCadenceCompanyReducer)\n .addCase(actions.saveResults, saveResultsReducer)\n .addCase(actions.updateProgress, updateProgressReducer)\n .addCase(actions.updateCompleted, updateCompletedReducer)\n .addCase(actions.updatePercentage, updatePercentageReducer)\n .addCase(actions.cancel, cancelReducer)\n .addCase(actions.resetProgress, resetProgressReducer)\n .addCase(actions.resolveSalesloftSuccess, resolveSalesloftSuccessReducer)\n .addCase(actions.fetchContactsSuccess, fetchContactsSuccessReducer)\n .addCase(actions.salesloftSelectContactsBulk, salesloftSelectContactsBulkReducer)\n .addCase(actions.selectCadenceIndividually, selectCadenceIndividuallyReducer)\n .addCase(actions.updateTemporaryData, updateTemporaryDataReducer)\n .addCase(salesloftBulkActions.addContactSuccess, addContactSuccessReducer)\n .addCase(selectedCompaniesActions.selectCompanyIds, selectCompanyIdsReducer)\n .addCase(\n salesloftBulkActions.fetchCompaniesContactsSuccess,\n fetchCompaniesContactsSuccessReducer\n )\n .addCase(primaryContactsActions.updatePrimaryContacts, updatePrimaryContactsReducer)\n .addCase(userInformationActions.fetchUserInformation, fetchReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccess)\n);\n\nexport default reducer;\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, pick } from 'lodash';\nimport queryString from 'query-string';\nimport { push } from 'react-router-redux';\nimport { AxiosResponse } from 'axios';\n// constants\nimport { BULK_ADD_COMPANY_LIMIT_EQUITY_TOUCH } from '@optx/config/bulkConfig';\nimport { SALESLOFT_ERROR_MESSAGE_SPECIAL_CHARACTERS } from '../../salesloft/state/constants';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport {\n SelectedCompanies,\n CompanyBulkData,\n EquityTouchBulkResponse,\n EquityTouchBulkCompanies,\n ResolveSalesloft,\n UpdateCompanyAndSubmit,\n EquityTouchBulkResults,\n EquityTouchBulkAutoSave,\n SelectedCompaniesData,\n ResolveSalesloftSuccess,\n} from '@models/bulkActions';\nimport { CompanyProfile } from '@models/Company';\nimport { SalesloftRequest, SalesloftCadences, SalesloftContact } from '@optx/models/Salesloft';\nimport {\n EquityTouchContact,\n EquityTouchFetchedField,\n EquityTouchSubmitField,\n GroupsSubmitField,\n} from '@models/equityTouch';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport { UserSessionSettings } from '@optx/models/user';\n// utils\nimport { mapEquityTouchProps, mapEquityTouchForm } from '@utils/equityTouch';\nimport { getErrorMessage } from '@utils/api/errors';\nimport { handleSalesloftError } from '@optx/utils/salesloft';\n// services\nimport { CompanyService, SalesloftService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { selectors as salesLoftSelector } from '@redux/contacts/salesloft';\nimport { selectors as companyEditSelectors } from '@components/feature/company-individual-edit/state';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport { actions as salesLoftActions } from '@features/bulk-actions/salesloft';\nimport { actions as loaderActions } from '@features/custom-global-loader';\nimport { getSessionSettings } from '@redux/user/information/selectors';\nimport * as actions from './actions';\n\nfunction* initializeEquityTouchBulkSaga(action: PayloadAction<SelectedCompaniesData>) {\n yield put(loaderActions.toggle({ loading: true }));\n const gridName = action.payload.grid;\n const listId = action.payload?.listId;\n const listType = action.payload?.listType;\n const isFirstStep = action.payload?.isFirstStep;\n const defaultErrorMessage = 'Failed to fetch Equity Touch data!';\n const selectedCompanies: SelectedCompanies[] = yield select(\n bulkActionsSelectors.selectedCompanies.getSelectedCompanies(gridName)\n );\n\n // if user refreshes page, because currently we don't save the selected companies,\n // redirect user to the grid from where he accessed the page\n if (!selectedCompanies.length) {\n const urlParams = queryString.parse(window.location.search.substr(1));\n yield put(push(urlParams.referrer as string));\n } else {\n const shouldFetch: boolean = yield select(bulkActionsSelectors.equityTouch.shouldFetch);\n const sessionSettings: UserSessionSettings = yield select(getSessionSettings);\n const sessionSettingsFormData =\n Object.keys((sessionSettings?.et_form_auto_save?.formData as {}) || {}).length === 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let formData: Dictionary<EquityTouchFetchedField> = yield select(\n bulkActionsSelectors.equityTouch.getFormData\n );\n\n try {\n if (shouldFetch && sessionSettingsFormData) {\n const res: AxiosResponse<Dictionary<EquityTouchFetchedField>> = yield call(\n CompanyService.fetchEquityTouchFormData,\n {\n companyId: selectedCompanies[0].company_id,\n ...(isFirstStep ? { isFirstStep: true } : {}),\n }\n );\n\n if (res.data) {\n yield put(actions.fetchFormDataSuccess(res.data, true));\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formData = res.data;\n\n yield put(salesLoftActions.fetchCompaniesContacts(gridName));\n\n const initialFormData: Dictionary<string | number | boolean | number[] | SelectOption> =\n yield select(bulkActionsSelectors.equityTouch.getInitialFormValues);\n\n const companiesById: EquityTouchBulkCompanies = {};\n const allIds: number[] = [];\n selectedCompanies.forEach(company => {\n const { company_id: id } = company;\n const companyData = mapEquityTouchProps(company);\n companiesById[id] = {\n ...companyData,\n ...initialFormData,\n contacts: company?.contacts,\n FTEs: companyData.FTEs as number,\n salesloft_contacts: company?.contacts?.filter(\n contact => contact.primary_contact\n ) as any,\n 'Company Id': id,\n // flag for api to know whether to add the contacts from their side or\n // use the contact data sent from UI.\n add_all_contacts: true,\n 'Equity Check':\n company.asking_amount && company.asking_amount !== DEFAULT_EMPTY_VALUE\n ? Number((company.asking_amount as string).replace('$', '').replaceAll(',', ''))\n : '',\n };\n allIds.push(id);\n });\n\n yield put(\n actions.initializeEquityTouchBulkSuccess({\n companiesById,\n allIds,\n ...(listId && { listId }),\n ...(listType && { listType }),\n })\n );\n } else {\n NotificationService.error(defaultErrorMessage);\n }\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, defaultErrorMessage);\n NotificationService.error(errorMessage);\n }\n }\n\n yield put(loaderActions.toggle({ loading: false }));\n}\n\nfunction* initializeIndividualEditingSaga(\n action: PayloadAction<Dictionary<string | number | number[] | boolean>>\n) {\n const companyIds: number[] = yield select(bulkActionsSelectors.equityTouch.getAllIds);\n\n yield put(actions.fetchCompany(companyIds[0], true));\n}\n\nfunction* addToEquityTouchBulkSaga(action: PayloadAction<CompanyBulkData>) {\n const defaultErrorMessage = 'Failed to add to Equity Touch!';\n\n // @ts-ignore\n const editableFieldsOptions = yield select(\n // @ts-ignore\n companyEditSelectors.companyIndividualEdit.getAllOptions\n );\n const formData: Dictionary<EquityTouchFetchedField> = yield select(\n bulkActionsSelectors.equityTouch.getFormData\n );\n const companiesById: EquityTouchBulkCompanies = yield select(\n bulkActionsSelectors.equityTouch.getCompanies\n );\n const allIds: number[] = yield select(bulkActionsSelectors.equityTouch.getAllIds);\n const ids = [...allIds];\n const selectedCompaniesCount: number = yield select(\n bulkActionsSelectors.equityTouch.selectedCompaniesCount\n );\n const currentResults: EquityTouchBulkResults[] = yield select(\n bulkActionsSelectors.equityTouch.results\n );\n\n const idBatch = ids.splice(currentResults.length, BULK_ADD_COMPANY_LIMIT_EQUITY_TOUCH);\n // @ts-ignore\n const companyBatch: Dictionary<string | number | EquityTouchSubmitField | GroupsSubmitField>[] =\n idBatch.map((id: number) => ({\n // @ts-ignore\n ...mapEquityTouchForm(companiesById[id], formData),\n cadence: companiesById[id].cadence || '',\n // for contacts email data comes from api in a \"email\" prop,\n // but for equity touch we need to send email data in a \"emails\" prop\n contacts: (companiesById[id].contacts as EquityTouchContact[])?.map(\n (contact: Partial<CompanyUserContact>) => ({\n ...contact,\n emails: contact.email,\n email: undefined,\n })\n ),\n 'Company Id': id,\n add_all_contacts: companiesById[id].add_all_contacts,\n salesloft_contacts: (companiesById[id]?.salesloft_contacts as SalesloftContact[])?.map(\n (contact: SalesloftContact) => {\n const updatedContact = {\n ...contact,\n company_name: companiesById[id]['Company Name']\n ? companiesById[id]['Company Name']\n : contact.company_name,\n };\n\n return pick(updatedContact, [\n 'first_name',\n 'last_name',\n 'person_id',\n 'title',\n 'primary_email',\n 'secondary_email',\n 'tertiary_email',\n 'quarternary_email',\n 'company_name',\n 'company_website',\n 'phone',\n 'phone_type',\n 'additional_phones',\n 'linkedin',\n ]);\n }\n ),\n }));\n\n try {\n const res: AxiosResponse<EquityTouchBulkResponse[]> = yield call(\n CompanyService.addEquityTouchBulk,\n companyBatch\n );\n\n if (res.data) {\n yield put(\n actions.updatePercentage(\n Math.round((BULK_ADD_COMPANY_LIMIT_EQUITY_TOUCH / selectedCompaniesCount) * 100)\n )\n );\n\n const results: EquityTouchBulkResults[] = res.data.map(result => ({\n company_id: result.et_status.company_id,\n company_url: result.et_status.company_url,\n raw_url: result.et_status.raw_url,\n company_name: result.et_status.company_name,\n et_sync_status: result.et_status.et_sync_status,\n et_message: result.et_status.et_message,\n et_resolve: result.et_status.et_resolve,\n et_url: result.et_status.et_url,\n salesloftContacts: result.salesloft_status.map(item => {\n if (item.sl_message === SALESLOFT_ERROR_MESSAGE_SPECIAL_CHARACTERS) {\n return {\n ...item,\n sl_resolve: true,\n };\n }\n\n return item;\n }),\n }));\n const finalResults: EquityTouchBulkResults[] = [...currentResults, ...results];\n\n yield put(actions.saveResults(results));\n\n const cancelSearch: boolean = yield select(bulkActionsSelectors.equityTouch.cancel);\n\n if (!cancelSearch) {\n if (allIds.length !== finalResults.length) {\n yield put(actions.addToEquityTouchBulk({ formValues: {} }));\n } else {\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage(100));\n yield put(\n actions.addToEquityTouchBulkSuccess({\n results: finalResults,\n companies: companiesById,\n editableFields: editableFieldsOptions,\n })\n );\n }\n } else {\n const canceledCompanies: EquityTouchBulkResults[] = [];\n const prevResults: EquityTouchBulkResults[] = yield select(\n bulkActionsSelectors.equityTouch.results\n );\n\n const prevResultsIds = prevResults.map(result => result.company_id);\n const remainingIds = allIds.filter((id: number) => !prevResultsIds.includes(id));\n\n if (remainingIds?.length) {\n remainingIds.forEach((id: number) => {\n canceledCompanies.push({\n company_id: companiesById[id]['Company Id'] as number,\n company_url: companiesById[id].Website as string,\n raw_url: results.find(company => company.company_id === id)?.raw_url || null,\n company_name: companiesById[id]['Company Name'] as string,\n et_sync_status: false,\n et_message: 'Canceled by user',\n et_resolve: false,\n et_url: null,\n salesloftContacts: [\n {\n person_id: null,\n sl_message: null,\n sl_resolve: null,\n sl_sync_status: null,\n sl_url: null,\n },\n ],\n });\n });\n }\n\n yield put(actions.saveResults(canceledCompanies));\n yield put(actions.updateProgress(false));\n yield put(actions.updateCompleted(true));\n yield put(actions.cancel(false));\n yield put(loaderActions.toggle({ loading: false, customText: '' }));\n }\n } else {\n NotificationService.error(defaultErrorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, defaultErrorMessage);\n yield put(actions.addToEquityTouchBulkFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* fetchCompanySaga(action: PayloadAction<{ companyId: number; fetchEqtData: boolean }>) {\n yield put(loaderActions.toggle({ loading: true }));\n const { companyId, fetchEqtData } = action.payload;\n const defaultErrorMessage = 'Failed to fetch company data!';\n\n try {\n const profileRes: AxiosResponse<false | CompanyProfile> = yield call(\n CompanyService.getProfile,\n companyId,\n false\n );\n\n if (profileRes.data) {\n yield put(actions.fetchCompanySuccess(profileRes.data));\n } else {\n NotificationService.error(defaultErrorMessage);\n }\n\n if (fetchEqtData) {\n const formRes: AxiosResponse<Dictionary<EquityTouchFetchedField<any>>> = yield call(\n CompanyService.fetchEquityTouchFormData,\n { companyId: companyId }\n );\n\n if (formRes.data) {\n yield put(actions.fetchFormDataSuccess(formRes.data, false, companyId));\n } else {\n NotificationService.error(defaultErrorMessage);\n }\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, defaultErrorMessage);\n NotificationService.error(errorMessage);\n }\n\n yield put(loaderActions.toggle({ loading: false }));\n}\n\nfunction* updateBulkContactSaga(\n action: PayloadAction<Partial<CompanyUserContact>, any, VoidFunction>\n) {\n yield put(loaderActions.toggle({ loading: true }));\n\n const { payload: contact, meta: callback } = action;\n const { company_id: companyId } = contact;\n\n try {\n const res: AxiosResponse<Partial<CompanyUserContact>> = yield call(\n CompanyService.editPrimaryContact,\n {\n ...contact,\n company_id: companyId,\n }\n );\n\n if (res.data) {\n yield put(actions.updateBulkContactSuccess(contact));\n callback && callback();\n }\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to edit contact!');\n NotificationService.error(message);\n }\n\n yield put(loaderActions.toggle({ loading: false }));\n}\n\nfunction* updateBulkCompanySaga(action: PayloadAction<UpdateCompanyAndSubmit>) {\n const { shouldSubmit } = action.payload;\n\n if (shouldSubmit) {\n yield put(actions.addToEquityTouchBulk({ formValues: {} }));\n }\n}\n\nfunction* resolveSalesloftSaga(action: PayloadAction<ResolveSalesloft>) {\n yield put(loaderActions.toggle({ loading: true }));\n\n const { companyId, all } = action.payload;\n const companiesById: EquityTouchBulkCompanies = yield select(\n bulkActionsSelectors.equityTouch.getCompanies\n );\n const cadences: SalesloftCadences[] = yield select(salesLoftSelector.getCadences);\n const results: EquityTouchBulkResults[] = yield select(bulkActionsSelectors.equityTouch.results);\n\n const company = companiesById[companyId];\n const cadence = cadences.find(\n (item: SalesloftCadences) => item.id === companiesById[companyId].cadence\n );\n\n const result = results.find(result => result.company_id === companyId);\n const failedContactIds = result?.salesloftContacts\n .filter(contact => contact.sl_resolve)\n ?.map(contact => contact.person_id);\n\n let contacts: SalesloftContact[] = [];\n\n if (\n all ||\n (result?.salesloftContacts.length === 1 && result?.salesloftContacts[0].person_id === null)\n ) {\n contacts = company?.salesloft_contacts as SalesloftContact[];\n } else if (failedContactIds) {\n contacts = (company?.salesloft_contacts as SalesloftContact[])?.filter(\n (contact: SalesloftContact) => failedContactIds.includes(contact.person_id as number)\n );\n }\n\n const requestData: SalesloftRequest = {\n cadence_id: cadence?.id,\n cadence_name: cadence?.name,\n team_cadence: cadence?.team_cadence,\n company_name: company['Company Name'] as string,\n company_website: company.Website as string,\n company_id: company['Company Id'] as number,\n contacts: contacts.map((contact: SalesloftContact) =>\n pick(contact, [\n 'first_name',\n 'last_name',\n 'person_id',\n 'title',\n 'primary_email',\n 'secondary_email',\n 'tertiary_email',\n 'quarternary_email',\n ])\n ),\n };\n\n try {\n const res: AxiosResponse<ResolveSalesloftSuccess> = yield call(\n SalesloftService.postSalesloftData,\n requestData\n );\n\n if (res) {\n const customContact = res.data.contacts.map(contact => {\n if (contact.sl_message === SALESLOFT_ERROR_MESSAGE_SPECIAL_CHARACTERS) {\n return {\n ...contact,\n sl_resolve: true,\n };\n }\n\n return contact;\n });\n const customResponse = {\n ...res.data,\n contacts: customContact,\n };\n yield put(actions.resolveSalesloftSuccess(customResponse));\n }\n } catch (error: any) {\n const errorMessage = handleSalesloftError(\n error.response,\n 'Failed to add contact to Sales Loft!'\n );\n NotificationService.error(errorMessage);\n }\n\n yield put(loaderActions.toggle({ loading: false }));\n}\n\nfunction* fetchContactsSaga(action: PayloadAction<number>) {\n yield put(loaderActions.toggle({ loading: true }));\n const companyId = action.payload;\n const defaultErrorMessage = 'Failed to fetch contacts!';\n\n try {\n const res: AxiosResponse<Array<CompanyUserContact>> = yield call(\n CompanyService.getPrimaryContacts,\n companyId\n );\n\n if (res.data) {\n yield put(actions.fetchContactsSuccess(res.data, companyId));\n }\n } catch (error: any) {\n const message = getErrorMessage(error, defaultErrorMessage);\n NotificationService.error(message);\n }\n\n yield put(loaderActions.toggle({ loading: false }));\n}\n\nexport function* autoSaveSaga(action: PayloadAction<EquityTouchBulkAutoSave | null>) {\n try {\n yield put(userInformationActions.updateUserSettings({ et_form_auto_save: action.payload }));\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to edit primary contact!');\n NotificationService.error(message);\n }\n}\n\nexport default function* equityTouchBulkSaga() {\n yield takeLatest(actions.initializeEquityTouchBulk, initializeEquityTouchBulkSaga);\n yield takeLatest(actions.initializeIndividualEditing, initializeIndividualEditingSaga);\n yield takeLatest(actions.addToEquityTouchBulk, addToEquityTouchBulkSaga);\n yield takeLatest(actions.fetchCompany, fetchCompanySaga);\n yield takeLatest(actions.updateBulkContact, updateBulkContactSaga);\n yield takeLatest(actions.updateBulkCompany, updateBulkCompanySaga);\n yield takeLatest(actions.resolveSalesloft, resolveSalesloftSaga);\n yield takeLatest(actions.fetchContacts, fetchContactsSaga);\n yield takeLatest(actions.autoSave, autoSaveSaga);\n}\n","export const DEFAULT_FIT_VALUE = '-';\nexport const DEFAULT_COMPANY_OWNER_VALUE = 'Unowned';\nexport const DEFAULT_LEAD_SOURCE_VALUE = '-';\nexport const DEFAULT_SENIOR_ADVISOR_VALUE = '-';\nexport const DEFAULT_OPPORTUNITY_TYPE = '-';\nexport const DEFAULT_FUND_VALUE = '-';\n","import { useSelector } from 'react-redux';\n// constants\nimport appRoutes from '@constants/routes';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\n// storage\nimport { AdminStorage, AnalystStorage, PartnerStorage } from '@optx/storage/localStorage';\n\n/**\n * Function to check if the role of user.\n * Fallback to the redux store value because\n * after login localStorage doesn't get read in time.\n * @returns\n */\nconst useUserRole = () => {\n const isAnalystStorage = AnalystStorage.getIsAnalyst();\n const isAdminStorage = AdminStorage.getIsAdmin();\n const isAnalystSelector = useSelector(userSelectors.getIsAnalyst);\n const isAdminSelector = useSelector(userSelectors.getIsAdmin);\n const isAnalyst = isAnalystStorage || isAnalystSelector;\n\n const isPartnerStorage = PartnerStorage.getIsPartner();\n const isPartnerSelector = useSelector(userSelectors.getIsPartner);\n const isPartner = isPartnerStorage || isPartnerSelector;\n const isAdmin = isAdminSelector || isAdminStorage;\n\n return {\n isAnalyst,\n isAdmin,\n isPartner,\n advancedSearchPathname: isAnalyst || isAdmin ? appRoutes.advancedSearch : appRoutes.home,\n };\n};\n\nexport default useUserRole;\n","export const featureName = 'company-touches';\n","import { utils as requestUtils } from '@features/request';\nimport { featureName } from '../../featureName';\n\n// fetch company touches\nexport const fetchCompanyTouches = requestUtils.createActionTypes(featureName, 'FETCH_TOUCHES');\n","// fetch touches filters\nimport { utils as requestUtils } from '@optx/features/request';\nimport { featureName } from '../../featureName';\n\nexport const fetchTouchesFilters = requestUtils.createActionTypes(\n featureName,\n 'FETCH_TOUCHES_FILTERS'\n);\n","import * as search from './search';\nimport * as filters from './filters';\n\nexport const types = {\n search,\n filters,\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { CompanyTouchesResponse } from '@optx/models/company/CompanyTouch';\nimport { types } from '../types';\nimport { SearchTouchesPayload } from '../interfaces';\n\n// fetch company touches actions\nexport const fetchTouches = createAction<SearchTouchesPayload>(\n types.search.fetchCompanyTouches.REQUEST\n);\nexport const fetchTouchesSuccess = createAction(\n types.search.fetchCompanyTouches.SUCCESS,\n (response: CompanyTouchesResponse, searchPayload: SearchTouchesPayload) => ({\n payload: response,\n meta: searchPayload,\n })\n);\nexport const fetchTouchesFail = createAction<string>(types.search.fetchCompanyTouches.FAILURE);\n","import { takeLatest, call, put, select } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyTouchesResponse } from '@optx/models/company/CompanyTouch';\nimport { SearchTouchesPayload, TouchHistoryTabFilters } from '../interfaces';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getTouchTypeForRequest, parseTouchHistoryResponse } from '@optx/utils/touches';\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport * as actions from '../actions/search';\nimport { selectors as touchesSelectors } from '@features/company-touches';\n\nexport function* fetchCompanyTouchesSaga(\n action: PayloadAction<SearchTouchesPayload, any, boolean>\n) {\n // @ts-ignore\n const tabs: TouchHistoryTabFilters[] = yield select(touchesSelectors.search.getTouchTabs);\n const searchPayload = action.payload;\n const touchType = getTouchTypeForRequest(\n searchPayload.touchType,\n tabs.map(tab => tab.name)\n );\n\n try {\n const res: AxiosResponse<CompanyTouchesResponse> = yield call(CompanyService.fetchTouches, {\n ...searchPayload,\n touchType,\n });\n yield put(actions.fetchTouchesSuccess(parseTouchHistoryResponse(res.data), searchPayload));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Error fetch company touches!');\n yield put(actions.fetchTouchesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companyTouchesSaga() {\n yield takeLatest(actions.fetchTouches.type, fetchCompanyTouchesSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyTouchesOptionsResponse } from '@optx/models/company/CompanyTouch';\nimport { CompanyTouchesFiltersInterface } from '@features/company-touches/state/interfaces';\n// redux\nimport { types } from '../types';\n\n// fetch touches filters\nexport const fetchTouchesFilters = createAction<number | CompanyTouchesFiltersInterface>(\n types.filters.fetchTouchesFilters.REQUEST\n);\nexport const fetchTouchesFiltersSuccess = createAction<CompanyTouchesOptionsResponse>(\n types.filters.fetchTouchesFilters.SUCCESS\n);\nexport const fetchTouchesFiltersFail = createAction<string>(\n types.filters.fetchTouchesFilters.FAILURE\n);\n","import { takeLatest, call, put } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\nimport { CompanyTouchesOptionsResponse } from '@optx/models/company/CompanyTouch';\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\nimport { getErrorMessage } from '@utils/api/errors';\nimport * as actions from '../actions/filters';\nimport { CompanyTouchesFiltersInterface } from '../interfaces';\n\nexport function* fetchCompanyTouchesFiltersSaga(\n action: PayloadAction<number | CompanyTouchesFiltersInterface>\n) {\n let companyId;\n\n if (typeof action.payload === 'number') {\n companyId = action.payload;\n } else {\n companyId = action.payload.companyId;\n }\n\n try {\n const res: AxiosResponse<CompanyTouchesOptionsResponse> = yield call(\n CompanyService.fetchTouchesFilters,\n companyId\n );\n yield put(actions.fetchTouchesFiltersSuccess(res.data));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Error fetch company touches filters!');\n yield put(actions.fetchTouchesFiltersFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* touchesFiltersSaga() {\n yield takeLatest(actions.fetchTouchesFilters.type, fetchCompanyTouchesFiltersSaga);\n}\n","import { fork } from 'redux-saga/effects';\nimport searchSagas from './search';\nimport filters from './filters';\n\nexport function* saga() {\n yield fork(searchSagas);\n yield fork(filters);\n}\n","import * as search from './search';\nimport * as filters from './filters';\n\nexport const actions = {\n search,\n filters,\n};\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { cloneDeep } from 'lodash';\n// models\nimport { CompanyTouchesResponse } from '@optx/models/company/CompanyTouch';\nimport {\n CompanyTouchesSearchState,\n SearchTouchesPayload,\n TouchHistoryTabFilters,\n} from '../interfaces';\nimport { SuccessResponse } from '@optx/redux/ui/modals/add-document-upload-touch/interfaces';\n// utils\nimport { formatTouchHistoryNotes } from '@utils/touches';\n// redux\nimport { fetchReducer, fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport { actions as uploadFileActions } from '@redux/ui/modals/add-document-upload-touch';\nimport { actions } from '../actions';\n\nconst initialState: CompanyTouchesSearchState = {\n data: null,\n loading: false,\n error: '',\n fetchedAt: '',\n pagination: {\n pageNumber: 0,\n pageSize: 25,\n },\n companyId: null,\n tabs: [],\n};\n\n// fetch touches\nconst fetchTouchesSuccessReducer: CaseReducer<\n CompanyTouchesSearchState,\n PayloadAction<CompanyTouchesResponse, any, SearchTouchesPayload>\n> = (draftState, action) => {\n const searchPaylod = action.meta;\n const currentPage = draftState.pagination.pageNumber;\n\n const data = cloneDeep(action.payload);\n formatTouchHistoryNotes(data);\n\n draftState.loading = false;\n draftState.fetchedAt = new Date().toISOString();\n draftState.companyId = searchPaylod.companyId;\n draftState.pagination.pageNumber = searchPaylod.pagination.pageNumber;\n\n if (data) {\n const { touches_left: touchesLeft, touch_history: touchHistory, tabs } = data;\n draftState.tabs = tabs as TouchHistoryTabFilters[];\n\n if (currentPage < searchPaylod.pagination.pageNumber) {\n // page has been changed due to infinit scroll or initial search\n if (!draftState.data) {\n draftState.data = data;\n } else {\n draftState.data.touches_left = touchesLeft;\n draftState.data.touch_history.scheduled = [\n ...draftState.data.touch_history.scheduled,\n ...touchHistory.scheduled,\n ];\n draftState.data.touch_history.last_six_weeks = [\n ...draftState.data.touch_history.last_six_weeks,\n ...touchHistory.last_six_weeks,\n ];\n draftState.data.touch_history.over_six_weeks = [\n ...draftState.data.touch_history.over_six_weeks,\n ...touchHistory.over_six_weeks,\n ];\n draftState.data.touch_history.over_six_months = [\n ...draftState.data.touch_history.over_six_months,\n ...touchHistory.over_six_months,\n ];\n }\n } else {\n // filter has reset\n draftState.data = data;\n }\n }\n};\n\nconst uploadFilesSuccessReducer: CaseReducer<\n CompanyTouchesSearchState,\n PayloadAction<SuccessResponse[]>\n> = (draftState, action) => {\n const payload = action.payload;\n\n if (payload && draftState.data) {\n draftState.data.touch_history.last_six_weeks.unshift({\n ...payload[0].payload,\n touchtype: 'Document Upload',\n touchid: payload[0].payload.touchId,\n });\n\n draftState.data.number_of_touches.last_six_weeks =\n draftState.data.number_of_touches.last_six_weeks + 1;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // fetch company touches\n .addCase(actions.search.fetchTouches, fetchReducer)\n .addCase(actions.search.fetchTouchesSuccess, fetchTouchesSuccessReducer)\n .addCase(actions.search.fetchTouchesFail, fetchFailReducer)\n // upload\n .addCase(uploadFileActions.uploadFilesSuccess, uploadFilesSuccessReducer)\n);\n\nexport default reducer;\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport {\n CompanyTouchesOptionsResponse,\n TouchInitiator,\n CompanyTouchesResponse,\n} from '@optx/models/company/CompanyTouch';\nimport { SelectOption } from '@optx/models/Option';\nimport { CompanyTouchesFiltersState, SearchTouchesPayload } from '../interfaces';\n// redux\nimport { fetchReducer, fetchFailReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\nimport { actions } from '../actions';\n\nconst ALL_OPTION: SelectOption = {\n label: 'All',\n value: '*',\n};\n\nconst mapInitiators = (initiators: Array<TouchInitiator>) => {\n // initialize with all option\n const options: Array<SelectOption> = [];\n\n if (!initiators.length) {\n return options;\n }\n\n options.push(ALL_OPTION);\n\n initiators.forEach(item =>\n options.push({\n label: item.initiatorname,\n value: item.initiatorid === null ? '' : item.initiatorid.toString(),\n })\n );\n\n return options;\n};\n\nconst initialState: CompanyTouchesFiltersState = {\n data: null,\n loading: false,\n error: '',\n fetchedAt: '',\n initiators: [],\n touchTabFilter: 'All',\n};\n\n// fetch touches filters reducer\nconst fetchTouchesFiltersSuccessReducer: CaseReducer<\n CompanyTouchesFiltersState,\n PayloadAction<CompanyTouchesOptionsResponse>\n> = (draftState, action) => {\n fetchSuccessReducer(draftState, action);\n\n const { available_initiators: availableInitiators } = action.payload;\n\n const initiators = mapInitiators(availableInitiators);\n draftState.initiators = initiators;\n draftState.currentInititator = initiators.length ? initiators[0].value : undefined;\n\n draftState.fetchedAt = new Date().toISOString();\n};\n\nconst fetchTouchesReducer: CaseReducer<\n CompanyTouchesFiltersState,\n PayloadAction<SearchTouchesPayload>\n> = (draftState, action) => {\n draftState.touchTabFilter = action.payload.touchType;\n};\n\n// search success\n// fetch touches\nconst fetchTouchesSuccessReducer: CaseReducer<\n CompanyTouchesFiltersState,\n PayloadAction<CompanyTouchesResponse, any, SearchTouchesPayload>\n> = (draftState, action) => {\n const { initiatorId } = action.meta;\n\n draftState.currentInititator = initiatorId || '*';\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // fetch company touches filters\n .addCase(actions.filters.fetchTouchesFilters, fetchReducer)\n .addCase(actions.filters.fetchTouchesFiltersSuccess, fetchTouchesFiltersSuccessReducer)\n .addCase(actions.filters.fetchTouchesFiltersFail, fetchFailReducer)\n // search success\n .addCase(actions.search.fetchTouches, fetchTouchesReducer)\n .addCase(actions.search.fetchTouchesSuccess, fetchTouchesSuccessReducer)\n);\n\nexport default reducer;\n","import { combineReducers } from 'redux';\nimport { CompanyTouchesState } from '../interfaces';\nimport search from './search';\nimport filters from './filters';\n\nexport const reducer = combineReducers<CompanyTouchesState>({\n search,\n filters,\n});\n","import { TouchesCount } from '@optx/models/company/CompanyTouch';\n\nexport const DEFAULT_TOUCHES_COUNT: TouchesCount = {\n scheduled: 0,\n last_six_weeks: 0,\n over_six_months: 0,\n over_six_weeks: 0,\n};\n","import { createSelector } from 'reselect';\nimport { selectors as fetchSelectors } from '@redux/feature/fetch';\nimport { CompanyTouchesSearchState } from '../interfaces';\nimport { DEFAULT_TOUCHES_COUNT } from '../../constants/touches';\n\n// specific selectors\nconst selectSearchState = (state: CompanyTouchesSearchState) => state;\n\nexport const shouldInitialFetch = createSelector(\n selectSearchState,\n fetchSelectors.shouldInitialFetchSelector\n);\n\nexport const getTouches = (state: CompanyTouchesSearchState) => state.data;\n\nexport const hasMore = (state: CompanyTouchesSearchState) =>\n state.data ? !!state.data.touches_left : false;\n\nexport const getCompanyId = (state: CompanyTouchesSearchState) => state.companyId;\n\nexport const getTouchTabs = (state: CompanyTouchesSearchState) => state.tabs;\n\nexport const getTouchesCount = (state: CompanyTouchesSearchState) => {\n if (!state.data) {\n return DEFAULT_TOUCHES_COUNT;\n }\n\n return state.data.number_of_touches;\n};\n\nexport const getTotalTouches = (state: CompanyTouchesSearchState) => {\n let totalTouches: number = 0;\n\n if (state.data) {\n const { number_of_touches: numberOfTouches } = state.data;\n\n totalTouches =\n numberOfTouches.scheduled +\n numberOfTouches.last_six_weeks +\n numberOfTouches.over_six_months +\n numberOfTouches.over_six_weeks;\n }\n\n return totalTouches;\n};\n","import { createSelector } from 'reselect';\nimport moment from 'moment';\n// models\nimport { CompanyTouchesFiltersState } from '../interfaces';\n// constants\nimport { SHORT_MONTH_YEAR_DATE_FORMAT } from '@optx/constants/format/date';\n// redux\nimport { selectors as fetchSelectors } from '@redux/feature/fetch';\n\n// specific selectors\nconst selectFiltersState = (state: CompanyTouchesFiltersState) => state;\n\nexport const isLoading = createSelector(selectFiltersState, fetchSelectors.isLoadingSelector);\n\nexport const shouldInitialFetch = createSelector(\n selectFiltersState,\n fetchSelectors.shouldInitialFetchSelector\n);\n\nexport const isLoaded = createSelector(selectFiltersState, state => !!state.fetchedAt);\n\nexport const getCurrentInitiator = (state: CompanyTouchesFiltersState) => state.currentInititator;\n\nexport const getTouchTabFilter = (state: CompanyTouchesFiltersState) => state.touchTabFilter;\n\nexport const getInitiatorOptions = (state: CompanyTouchesFiltersState) => state.initiators;\n\nexport const getAllTypesTotalTouches = (state: CompanyTouchesFiltersState) =>\n state.data?.number_of_touches;\n\nconst touchDateValue = (date: string) => {\n return moment(date).format(SHORT_MONTH_YEAR_DATE_FORMAT);\n};\n\n/**\n * Get summary Key Performance Indicators.\n */\nexport const getSummaryKPIs = (state: CompanyTouchesFiltersState) => {\n const options: Array<{ label: string; value: string }> = [];\n\n if (state.data) {\n const {\n number_of_touches: numberOfTouches,\n first_touch_date: firstTouchDate,\n last_touch_date: lastTouchDate,\n } = state.data;\n const totalTouches = numberOfTouches;\n\n options.push({\n label: 'Total # of Touches',\n value: totalTouches !== 1 ? `${totalTouches} Touches` : `${totalTouches} Touch`,\n });\n\n if (firstTouchDate) {\n options.push({\n label: 'First Touch Date',\n value: touchDateValue(firstTouchDate),\n });\n }\n\n if (lastTouchDate) {\n options.push({\n label: 'Most Recent Touch',\n value: touchDateValue(lastTouchDate),\n });\n }\n }\n\n return options;\n};\n","import { createSelector } from 'reselect';\n// models\nimport { CompanyTouchesSearchState, CompanyTouchesState } from '../interfaces';\n// constants\nimport { featureName } from '../../featureName';\n// redux\nimport { selectors as loaderSelectors } from '@optx/features/request';\nimport * as localSearch from './search';\nimport * as localFilters from './filters';\nimport * as types from '../types/search';\n\nconst selectFeatureState = (state: any) => state[featureName] as CompanyTouchesState;\nconst selectSearchState = createSelector(selectFeatureState, state => state?.search);\nconst selectFiltersState = createSelector(selectFeatureState, state => state?.filters);\n\nconst companiesTouches = createSelector(selectSearchState, localSearch.getTouches);\n\nexport const isLoadingSearch = loaderSelectors.createLoadingSelector([\n types.fetchCompanyTouches.SELECTOR,\n]);\n\nconst getPagination = (state: CompanyTouchesSearchState) => state?.pagination;\n\nconst search = {\n isLoading: isLoadingSearch,\n data: companiesTouches,\n pagination: createSelector(selectSearchState, getPagination),\n companyId: createSelector(selectSearchState, localSearch.getCompanyId),\n count: createSelector(selectSearchState, localSearch.getTouchesCount),\n total: createSelector(selectSearchState, localSearch.getTotalTouches),\n hasMore: createSelector(selectSearchState, localSearch.hasMore),\n getTouches: createSelector(selectSearchState, localSearch.getTouches),\n getTouchTabs: createSelector(selectSearchState, localSearch.getTouchTabs),\n};\n\nconst filters = {\n isLoading: createSelector(selectFiltersState, localFilters.isLoading),\n getCurrentInitiator: createSelector(selectFiltersState, localFilters.getCurrentInitiator),\n getTouchTabFilter: createSelector(selectFiltersState, localFilters.getTouchTabFilter),\n getInitiatorOptions: createSelector(selectFiltersState, localFilters.getInitiatorOptions),\n getSummaryKPIs: createSelector(selectFiltersState, localFilters.getSummaryKPIs),\n getAllTypesTotalTouches: createSelector(selectFiltersState, localFilters.getAllTypesTotalTouches),\n};\n\nexport const selectors = {\n search,\n filters,\n};\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport { reducer, saga } from './state';\nimport { featureName } from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","import React, { ReactHTML, HTMLAttributes } from 'react';\n\ninterface DangerousInnerHTMLProps extends HTMLAttributes<HTMLElement> {\n type?: keyof ReactHTML;\n innerHTML: string;\n}\n\ninterface DangerouslySetInnerHTML {\n __html: string;\n}\n\nconst DangerousInnerHTML = ({\n type = 'div',\n innerHTML,\n children,\n ...restProps\n}: DangerousInnerHTMLProps) => {\n const dangerouslySetInnerHTML: DangerouslySetInnerHTML = {\n __html: innerHTML,\n };\n\n return React.createElement(type, { ...restProps, dangerouslySetInnerHTML });\n};\n\nexport default DangerousInnerHTML;\n","import React from 'react';\n\ninterface TimelineIntervalLabelProps {\n count?: number;\n title?: string;\n renderTitle?: () => React.ReactNode;\n renderCount?: () => React.ReactNode;\n}\n\n/**\n * Generate count lablel.\n * @param count count value.\n * @param renderCount count render function.\n */\nconst getCountLabel = (count: number | undefined, renderCount?: () => React.ReactNode) => {\n if (renderCount) {\n return renderCount();\n }\n\n return `${count} ${count === 1 ? 'Touch' : 'Touches'}`;\n};\n\nconst TimelineIntervalLabel: React.FC<TimelineIntervalLabelProps> = ({\n title,\n renderTitle,\n count,\n renderCount,\n}) => {\n const Label = renderTitle ? (\n renderTitle()\n ) : (\n <span className=\"touch-timeline-interval__title\" style={{ padding: '0 0 0 5px' }}>\n {title}\n </span>\n );\n\n return (\n <span className=\"touch-timeline-interval\">\n {Label}\n <span className=\"touch-timeline-interval__count\">{getCountLabel(count, renderCount)}</span>\n </span>\n );\n};\n\nexport default TimelineIntervalLabel;\n","import React from 'react';\n// components\nimport FixedLoader from '@components/common/loader';\n\nconst PageLoader = ({ loading }: { loading: boolean }) => {\n return <FixedLoader loading={loading} />;\n};\n\nexport default PageLoader;\n","const emailRegex = /([mailto:\\w.\\-pL]+@\\w+.[\\w.\\-pL]+)/gi;\n\nconst replaceEmailTouchNotes = (notes: string) => {\n return notes.replace(emailRegex, (match: string) => {\n if (match.includes('mailto:')) {\n return '';\n }\n\n return `<a href=\"mailto:${match}\">${match}</a>`;\n });\n};\n\nexport default replaceEmailTouchNotes;\n","import React from 'react';\nimport { UpOutlined } from '@ant-design/icons';\n\ninterface PanelProps {\n isActive?: boolean;\n}\n\nconst ExpandIcon: React.FC<PanelProps> = ({ isActive }) => {\n const rotate = isActive ? 180 : 0;\n const color = isActive ? '#1890FF' : '#D9D9D9';\n\n return <UpOutlined rotate={rotate} style={{ color }} />;\n};\n\nexport default ExpandIcon;\n","import React from 'react';\n\ninterface AttendeesProps extends React.HTMLAttributes<HTMLSpanElement> {\n attendees: Array<string> | null;\n}\n\n/**\n * Compute atendees label.\n * @param atendees the list of atendees.\n */\nconst getAtendeesLabel = (atendees: Array<string>) => {\n const subject = `(${atendees.length > 1 ? 'attendees' : 'attendee'})`;\n const names = atendees.join(', ');\n\n return `${names} ${subject}`;\n};\n\nconst Attendees = ({ attendees, ...restProps }: AttendeesProps) => {\n if (!attendees || !attendees.length) {\n return null;\n }\n\n return <span {...restProps}>{getAtendeesLabel(attendees)}</span>;\n};\n\nexport default Attendees;\n","import React from 'react';\nimport { Row, Col, Typography } from 'antd';\nimport moment from 'moment';\nimport { BellOutlined } from '@ant-design/icons';\n// models\nimport CompanyTouch from '@optx/models/company/CompanyTouch';\n// constants\nimport { TOUCH_DATE_FORMAT } from './constants';\n// components\nimport TouchIcon from './TouchIcon';\nimport Attendees from './Attendees';\n\ninterface TouchHeaderProps {\n touch: CompanyTouch;\n scheduled?: boolean;\n}\n\nconst TouchHeader: React.FC<TouchHeaderProps> = ({ touch, scheduled }) => {\n return (\n <Row gutter={[20, 0]}>\n <Col flex=\"0\">\n {scheduled ? (\n <BellOutlined\n className={touch.past_due ? 'is-past-due' : ''}\n style={{ fontSize: 19, color: '#1890FF' }}\n />\n ) : (\n <TouchIcon type={touch.touchtype} />\n )}\n </Col>\n <Col flex=\"auto\">\n <Typography.Title className=\"touch-item__title\" level={4}>\n {touch.subject}\n </Typography.Title>\n <Typography.Text className=\"touch-item__date\">\n {scheduled &&\n (touch.past_due ? (\n <Typography.Text type=\"danger\">PAST DUE: </Typography.Text>\n ) : (\n 'SCHEDULED: '\n ))}\n {moment(touch.startdate).format(TOUCH_DATE_FORMAT)}\n </Typography.Text>\n <Typography.Text className=\"touch-item__attendees\">\n {!scheduled && touch.past_due && <span className=\"touch-item__past-due\">PAST DUE:</span>}\n <span>{`${touch.initiatorname} (initiator) `}</span>\n <Attendees attendees={touch.attendees} />\n </Typography.Text>\n </Col>\n </Row>\n );\n};\n\nexport default TouchHeader;\n","export const TOUCH_DATE_FORMAT = 'dddd MMMM D YYYY';\n","import styled from 'styled-components';\nimport { Menu } from 'antd';\n\nconst MenuList = styled(Menu)`\n .ant-menu-item[aria-disabled='false'] {\n cursor: pointer;\n }\n`;\n\nexport default {\n MenuList,\n};\n","import React, { useMemo } from 'react';\nimport { Menu } from 'antd';\nimport { useDispatch } from 'react-redux';\n// models\nimport Company from '@optx/models/Company';\nimport CompanyTouch from '@optx/models/company/CompanyTouch';\n// constants\nimport { CompanyPageRelationshipManagement, OPTXChromePlugin } from '@constants/pendoActions';\n// utils\nimport { sendEmail } from '../utils/emailAttendees';\n// redux\nimport { actions as modalActions } from '@redux/ui/modals/company-touches';\n// styles\nimport Styled from './TouchMenu.styled';\n\ninterface TouchMenuProps {\n touch: CompanyTouch;\n company: Company;\n handleVisibilityChange: (visible: boolean) => void;\n}\n\nconst TouchMenu: React.FC<TouchMenuProps> = ({ touch, company, handleVisibilityChange }) => {\n const dispatch = useDispatch();\n\n const disableMenuItemByTouch = useMemo(\n () => touch.touchtype === 'Document Upload',\n [touch.touchtype]\n );\n\n const handleEmailClick = () => {\n const chromeExtensionExists = document.getElementsByClassName('extension-tabs').length;\n\n if (chromeExtensionExists) {\n window.pendo.track(OPTXChromePlugin.companyPage.threeDotsAction_emailAttendees);\n } else {\n window.pendo.track(CompanyPageRelationshipManagement.equityTouchHistory_emailAttendees);\n }\n\n document.body.classList.remove('popover-visible');\n handleVisibilityChange(false);\n\n if (company.et_company_id === touch.companyid && touch.attendees_email) {\n sendEmail(touch, company.company_name);\n }\n };\n\n const handleEditClick = (setCompleted: boolean = false) => {\n const chromeExtensionExists = document.getElementsByClassName('extension-tabs').length;\n\n if (chromeExtensionExists) {\n window.pendo.track(OPTXChromePlugin.companyPage.threeDotsAction_editTouch);\n } else {\n window.pendo.track(CompanyPageRelationshipManagement.equityTouchHistory_editTouch);\n }\n\n document.body.classList.remove('popover-visible');\n handleVisibilityChange(false);\n const updatedTouch = {\n ...touch,\n touchIsComplete: touch.iscomplete,\n iscomplete: setCompleted ? true : touch.iscomplete,\n };\n dispatch(\n modalActions.toggleCompanyTouchesDialog({\n companyId: company.company_id,\n companyName: company.company_name,\n company,\n touch: updatedTouch,\n })\n );\n };\n\n return (\n <Styled.MenuList className=\"dropdown-add dropdown-menu\" selectable={false}>\n {!touch.iscomplete && (\n <Menu.Item key=\"0\" onClick={e => handleEditClick(true)} disabled={disableMenuItemByTouch}>\n Log Complete Touch\n </Menu.Item>\n )}\n <Menu.Item key=\"1\" onClick={e => handleEditClick(false)} disabled={disableMenuItemByTouch}>\n Edit Touch\n </Menu.Item>\n <Menu.Item\n key=\"2\"\n onClick={handleEmailClick}\n disabled={!touch.attendees_email || disableMenuItemByTouch}\n >\n Email Attendees\n </Menu.Item>\n </Styled.MenuList>\n );\n};\n\nexport default TouchMenu;\n","import moment from 'moment';\n// models\nimport CompanyTouch from '@optx/models/company/CompanyTouch';\n\n/**\n * create a URL string for mailto a touch using email attendees and company name\n * @param {CompanyTouch} touch the touch that we will send email for\n * @param {string} companyName the name of company that has this touch\n */\nexport const sendEmail = (touch: CompanyTouch, companyName: string) => {\n if (touch.attendees_email) {\n const recipients = touch.attendees_email.join(';');\n const date = moment(touch.startdatetime).format('MM/DD/yy h:mm A');\n const subject = touch.subject ? ' - ' + touch.subject : '';\n const emailSubject = companyName + ' - ' + touch.touchtype + subject + ' - ' + date;\n const url = 'mailto:' + recipients + '?subject=' + encodeURIComponent(emailSubject);\n window.location.href = url;\n }\n};\n","import React, { useEffect, useState } from 'react';\nimport { Typography, Dropdown, Timeline, Collapse } from 'antd';\nimport { EllipsisOutlined } from '@ant-design/icons';\nimport styled from 'styled-components';\n// models\nimport CompanyTouch from '@optx/models/company/CompanyTouch';\nimport Company from '@optx/models/Company';\n// constants\nimport { CompanyPageRelationshipManagement, OPTXChromePlugin } from '@constants/pendoActions';\n// utils\nimport { handleMenuVisibleChange } from '@utils/menu';\nimport replaceEmailTouchNotes from '@optx/utils/replaceEmailTouchNotes';\n// components\nimport DangerousInnerHTML from '@optx/components/common/DangerousInnerHTML';\nimport TimelineIntervalLabel from './TimelineIntervalLabel';\nimport ExpandIcon from './ExpandIcon';\nimport TouchHeader from './TouchHeader';\nimport TouchMenu from './TouchMenu';\n\nconst TimelineItem = styled(Timeline.Item)`\n table {\n width: 100% !important;\n }\n`;\n\ninterface TimelineTouchItemProps {\n touch: CompanyTouch;\n touchesCount: number;\n index: number;\n timelineInterval: string;\n company: Company;\n colorInterval: string;\n setActiveKey: (key: string | string[]) => void;\n activeKey: string | string[];\n hasTouchAccess: boolean;\n isExtension?: boolean;\n className?: string;\n renderCount?: () => React.ReactNode;\n actionPendo?: string;\n}\n\nconst TimelineTouchItem: React.FC<TimelineTouchItemProps> = ({\n touch,\n touchesCount,\n index,\n timelineInterval,\n company,\n colorInterval,\n setActiveKey,\n activeKey,\n hasTouchAccess,\n isExtension,\n className,\n renderCount,\n actionPendo,\n}) => {\n const [dropdownVisible, setDropdownVisibility] = useState<boolean>(false);\n const [scheduled, setScheduled] = useState<boolean>(false);\n\n const onChange = (key: string | string[]) => {\n if (isExtension) {\n window.pendo.track(OPTXChromePlugin.companyPage.clickTouchpoint);\n window.pendo.track(OPTXChromePlugin.companyPage.arrowToExpand);\n } else {\n window.pendo.track(\n CompanyPageRelationshipManagement.equityTouchHistory_expandTouchPointArrow\n );\n\n timelineInterval === 'SCHEDULED TOUCHES' &&\n window.pendo.track(CompanyPageRelationshipManagement.equityTouchHistory_scheduledTouches);\n }\n\n setActiveKey(key);\n };\n\n const onVisibleChange = (visible: boolean) => {\n handleMenuVisibleChange(visible);\n setDropdownVisibility(visible);\n };\n\n useEffect(() => {\n if (~(className as string).search('future')) {\n setScheduled(true);\n }\n }, [className]);\n\n return (\n <TimelineItem\n key={touch.touchid}\n className={`timeline-item--touch ant-timeline-item-left ${className}`}\n label={\n !index && (\n <TimelineIntervalLabel\n renderTitle={() => (\n <Typography.Text style={{ color: colorInterval, padding: '0 0 0 5px' }}>\n {timelineInterval}\n </Typography.Text>\n )}\n count={touchesCount}\n renderCount={renderCount}\n />\n )\n }\n >\n <Collapse\n activeKey={activeKey}\n onChange={onChange}\n expandIconPosition=\"right\"\n accordion\n bordered={false}\n expandIcon={ExpandIcon}\n >\n <Collapse.Panel\n className=\"collapse-item--touch\"\n header={<TouchHeader touch={touch} scheduled={scheduled} />}\n key={touch.touchid}\n >\n <DangerousInnerHTML\n type=\"p\"\n innerHTML={replaceEmailTouchNotes(touch.notes)}\n className=\"touch-item__description\"\n />\n </Collapse.Panel>\n </Collapse>\n {hasTouchAccess && (\n <Dropdown\n overlay={\n <TouchMenu\n touch={touch}\n company={company}\n handleVisibilityChange={setDropdownVisibility}\n />\n }\n trigger={['click']}\n getPopupContainer={(trigger: HTMLElement) => trigger as HTMLElement}\n placement=\"bottomRight\"\n className={activeKey === touch.touchid?.toString() ? 'menu-active' : ''}\n onVisibleChange={onVisibleChange}\n visible={dropdownVisible}\n >\n <EllipsisOutlined\n onClick={() => {\n if (isExtension) {\n window.pendo.track(OPTXChromePlugin.companyPage.threeDotsAction);\n } else {\n window.pendo.track(actionPendo);\n }\n }}\n />\n </Dropdown>\n )}\n </TimelineItem>\n );\n};\n\nexport default TimelineTouchItem;\n","import React, { useState } from 'react';\nimport { Timeline } from 'antd';\nimport { useSelector } from 'react-redux';\nimport classnames from 'classnames';\n// constants\nimport { CompanyPageRelationshipManagement } from '@optx/constants/pendoActions';\n// models\nimport Company from '@optx/models/Company';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { selectors } from '../state';\n// components\nimport DangerousInnerHTML from '@optx/components/common/DangerousInnerHTML';\nimport TimelineIntervalLabel from './TimelineIntervalLabel';\nimport PageLoader from './PageLoader';\nimport TimelineTouchItem from './TimelineTouchItem';\n// styles\nimport './style.scss';\n\ninterface TouchesTimeline {\n company: Company;\n isExtension?: boolean;\n}\n\nconst TouchesTimeline: React.FC<TouchesTimeline> = ({ company, isExtension }) => {\n const [activeKey, setActiveKey] = useState<string | string[]>('');\n\n const touches = useSelector(selectors.search.getTouches);\n const loading = useSelector(selectors.search.isLoading);\n const hasTouchAccess = useSelector(userSelectors.getHasAccessToTouches);\n\n if (!touches) {\n return <DangerousInnerHTML type=\"p\" innerHTML=\"\" />;\n }\n\n const {\n touch_history: {\n last_six_weeks: lastSixWeeks,\n over_six_months: overSixMonths,\n over_six_weeks: overSixWeeks,\n scheduled,\n },\n number_of_touches: {\n last_six_weeks: lastSixWeeksCount,\n over_six_months: overSixMonthsCount,\n over_six_weeks: overSixWeeksCount,\n scheduled: scheduledCount,\n },\n } = touches;\n\n // ISSUE: seems there is a bug and Timeline.Item has to be direct children of Timeline otherwise the label isn't\n // displayed. List can't be mapped inside Fragment or any other element :(.\n return (\n <>\n <PageLoader loading={loading} />\n <Timeline mode=\"left\" className=\"ant-timeline-label\">\n {scheduled.map((touch, index) => {\n const futureTouchClassName = classnames(\n 'timeline-item--touch',\n 'timeline-item--touch-future',\n {\n bordered: index === scheduled.length - 1,\n }\n );\n\n return (\n <TimelineTouchItem\n key={index}\n touch={touch}\n touchesCount={scheduledCount}\n index={index}\n setActiveKey={setActiveKey}\n activeKey={activeKey}\n timelineInterval=\"SCHEDULED TOUCHES\"\n company={company}\n colorInterval=\"#87919f\"\n hasTouchAccess={hasTouchAccess}\n className={futureTouchClassName}\n renderCount={() => `${scheduled.length} scheduled`}\n actionPendo={\n CompanyPageRelationshipManagement.equityTouchHistory_previousTouches_touchpoint\n }\n />\n );\n })}\n {!scheduled.length && (\n <Timeline.Item\n className=\"timeline-item--touch timeline-item--touch-future timeline-item--touch-no-future bordered\"\n label={<TimelineIntervalLabel title=\"SCHEDULED TOUCHES\" renderCount={() => ''} />}\n >\n No Future Touch Scheduled\n </Timeline.Item>\n )}\n {lastSixWeeks.map((touch, index) => (\n <TimelineTouchItem\n key={index}\n touch={touch}\n touchesCount={lastSixWeeksCount}\n index={index}\n setActiveKey={setActiveKey}\n activeKey={activeKey}\n timelineInterval=\"LAST 6 WEEKS\"\n company={company}\n colorInterval=\"#13C2C2\"\n hasTouchAccess={hasTouchAccess}\n isExtension={isExtension}\n className=\"ant-timeline--past\"\n actionPendo={\n CompanyPageRelationshipManagement.equityTouchHistory_previousTouches_touchpoint\n }\n />\n ))}\n {overSixWeeks.map((touch, index) => (\n <TimelineTouchItem\n key={index}\n touch={touch}\n touchesCount={overSixWeeksCount}\n index={index}\n setActiveKey={setActiveKey}\n activeKey={activeKey}\n timelineInterval=\"MORE THAN 6 WEEKS\"\n company={company}\n colorInterval=\"#FA8C16\"\n hasTouchAccess={hasTouchAccess}\n isExtension={isExtension}\n className=\"ant-timeline--past\"\n actionPendo={\n CompanyPageRelationshipManagement.equityTouchHistory_previousTouches_touchpoint\n }\n />\n ))}\n {overSixMonths.map((touch, index) => (\n <TimelineTouchItem\n key={index}\n touch={touch}\n touchesCount={overSixMonthsCount}\n index={index}\n setActiveKey={setActiveKey}\n activeKey={activeKey}\n timelineInterval=\"MORE THAN 6 MONTHS\"\n company={company}\n colorInterval=\"#FA541C\"\n hasTouchAccess={hasTouchAccess}\n isExtension={isExtension}\n className=\"ant-timeline--past\"\n actionPendo={\n CompanyPageRelationshipManagement.equityTouchHistory_previousTouches_touchpoint\n }\n />\n ))}\n </Timeline>\n </>\n );\n};\n\nexport default TouchesTimeline;\n","import { useCallback, FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Tabs } from 'antd';\n// constants\nimport { TOUCHES_PER_PAGE } from '@features/long-card/company-card/constants/touches';\nimport { CompanyPageRelationshipManagement } from '@constants/pendoActions';\n// redux\nimport {\n actions as touchesActions,\n selectors as touchesSelectors,\n} from '@features/company-touches';\nimport { SearchTouchesPayload } from '../state/interfaces';\n\nconst { TabPane } = Tabs;\n\nconst valueToTrackMapping = {\n All: CompanyPageRelationshipManagement.equityTouchHistory_touchType_all,\n Call: CompanyPageRelationshipManagement.equityTouchHistory_touchType_call,\n 'E-mail': CompanyPageRelationshipManagement.equityTouchHistory_touchType_email,\n 'Internal Note': CompanyPageRelationshipManagement.equityTouchHistory_touchType_internalNote,\n Meeting: CompanyPageRelationshipManagement.equityTouchHistory_touchType_meeting,\n Other: CompanyPageRelationshipManagement.equityTouchHistory_touchType_other,\n};\n\ninterface TouchesTabFiltersProps {\n companyId: number;\n isExtension?: boolean;\n}\n\nconst TouchesTabFilters: FC<TouchesTabFiltersProps> = ({ companyId, isExtension = false }) => {\n const dispatch = useDispatch();\n\n const touchTypes = useSelector(touchesSelectors.search.getTouchTabs);\n const activeTabKey = useSelector(touchesSelectors.filters.getTouchTabFilter);\n const pagination = useSelector(touchesSelectors.search.pagination);\n const currentInitiator = useSelector(touchesSelectors.filters.getCurrentInitiator);\n\n const fetchTouches = useCallback(\n (payload: SearchTouchesPayload) => dispatch(touchesActions.search.fetchTouches(payload)),\n [dispatch]\n );\n\n const handleChange = (activeKey: string) => {\n const trackAction = valueToTrackMapping[activeKey as keyof typeof valueToTrackMapping];\n\n if (trackAction) {\n window.pendo.track(trackAction);\n }\n\n fetchTouches({\n companyId,\n pagination: { pageSize: isExtension ? TOUCHES_PER_PAGE : pagination.pageSize, pageNumber: 1 },\n initiatorId: currentInitiator,\n touchType: activeKey,\n });\n };\n\n return (\n <Tabs className=\"touch-history-tabs\" activeKey={activeTabKey} onChange={handleChange}>\n {touchTypes.map(touchType => (\n <TabPane tab={`${touchType.name} (${touchType.count})`} key={touchType.name} />\n ))}\n </Tabs>\n );\n};\n\nexport default TouchesTabFilters;\n","import React from 'react';\nimport { components, OptionProps } from 'react-select';\nimport { Checkbox as $Checkbox, Tag as AntDTag } from 'antd';\nimport styled, { css } from 'styled-components';\n\ntype OptionFCProps = OptionProps<any> & { highlight?: boolean };\n\nconst highlightStyles = css`\n border-bottom: 1px solid #d9d9d9;\n padding: 15px 12px 17px;\n margin-bottom: 8px;\n`;\n\n// Tag for EqutyTouch select Options\nconst Tag = styled(AntDTag)`\n cursor: pointer;\n margin-left: 10px;\n color: gold;\n height: max-content;\n`;\n\n/**\n * Option Function Component removing props not used by original Option component.\n */\nconst OptionFC: React.FunctionComponent<OptionFCProps> = ({ highlight, ...restProps }) => (\n <components.Option {...restProps} />\n);\n\nconst Option = styled(OptionFC)`\n ${props => props.highlight && highlightStyles};\n align-items: center;\n\n &.multiselect__option {\n display: flex;\n }\n\n &.sub-option {\n padding-left: 25px;\n }\n\n & > span {\n margin-top: -2px;\n }\n\n .option-value {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n .option-value-bold {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n font-weight: bold;\n }\n`;\n\nconst Checkbox = styled($Checkbox)`\n margin: 0 8px 0 0;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n white-space: nowrap;\n\n span.ant-checkbox {\n top: 0;\n }\n`;\n\nexport default {\n Option,\n Checkbox,\n OptionFC,\n highlightStyles,\n Tag,\n};\n","import React from 'react';\nimport { OptionProps } from 'react-select';\nimport { Link } from 'react-router-dom';\n// utils\nimport { getListURL } from '@optx/utils/routes';\n// constants\nimport { SELECT_ALL } from '@constants/select';\n// components\nimport Icon from '@components/common/Icon';\nimport Styled from './Option.styled';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nexport { Styled };\n\n/**\n * Option inside the dropdown list.\n * OBS: this option fixes option label click closing modal.\n * TO FIX LATER: the checkbox still closes modal when clicking on bottom right corner margin :(.\n * If children is in checkbox it will close on selection outside checkbox.\n * If needs to be changed and allow selection on entire option the children should be outside check.\n */\nexport const Option: React.FC<OptionProps<any>> = props => {\n const { children, ...restProps } = props;\n const { isSelected, data, isDisabled } = restProps;\n\n return (\n // @ts-ignore react-select theme is claching with styled-components theme property.\n // react-select property overrides the styled components one,\n // meaning getting dynamic values in styled components won't work.\n <Styled.Option\n highlight={data.value === SELECT_ALL.value}\n className={(data.className as string) + (data.parent ? ' sub-option' : '')}\n {...restProps}\n >\n <Styled.Checkbox style={{ margin: '0 8px 0 0' }} checked={isSelected} disabled={isDisabled} />\n\n <TruncateTooltip title={children}>\n <span className={`option-value${data.isBold ? '-bold' : ''}`} data-value={children}>\n {children}\n </span>\n </TruncateTooltip>\n {data.isET && <Styled.Tag color=\"gold\">ET</Styled.Tag>}\n {data.isPublic && <Styled.Tag color=\"gold\">Public</Styled.Tag>}\n {typeof data.count === 'number' && <span> ({data.count})</span>}\n {typeof data.count === 'number' && data.value !== 'blank' && data.canBeOpened && (\n <div\n className=\"open-in-new-wrapper\"\n onClick={(event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n event.stopPropagation();\n }}\n >\n <Link className=\"open-in-new\" to={getListURL(data.value)} target=\"_blank\">\n <Icon iconName=\"open-in-new\" />\n </Link>\n </div>\n )}\n </Styled.Option>\n );\n};\n\nexport default Option;\n","import { Tag as $Tag, Typography } from 'antd';\nimport styled from 'styled-components';\n\nconst { Title: $Title } = Typography;\n\nconst Wrapper = styled.div`\n margin: 2px 0 0;\n`;\n\nconst Tag = styled($Tag)`\n margin-top: 2px;\n margin-bottom: 2px;\n max-width: 100%;\n white-space: inherit;\n word-break: break-word;\n`;\n\nconst Title = styled($Title)`\n font-weight: normal;\n margin: 0 !important;\n`;\n\nexport default {\n Wrapper,\n Tag,\n Title,\n};\n","import React, { useMemo, useRef } from 'react';\nimport { ActionMeta, GroupedOptionsType, GroupType } from 'react-select';\n// models\nimport { SelectOption } from '@optx/models/Option';\n// utils\nimport { hasGroups, checkOption } from '@optx/utils/select/select';\nimport { hasBlankOrNoneLabel, hasBlankLabel } from '@optx/utils/helpers';\n// local\nimport Styled from './MultiSelectTags.styled';\n\ninterface MultiSelectTagsProps<OptionTypeBase> {\n value?: Array<OptionTypeBase>;\n options: Array<OptionTypeBase>;\n allowSelectAll?: boolean;\n // @ts-ignore\n onChange?: (value: Array<OptionTypeBase>, action: ActionMeta<OptionTypeBase>) => void;\n showKey?: 'label' | 'value';\n hasNoneValue?: boolean;\n selectedOptionsListTitle?: string;\n}\n\nconst MultiSelectTags = <OptionTypeBase extends SelectOption = SelectOption>({\n value,\n options,\n allowSelectAll,\n onChange,\n showKey = 'label',\n hasNoneValue = false,\n selectedOptionsListTitle,\n}: React.PropsWithChildren<MultiSelectTagsProps<OptionTypeBase>>) => {\n const tagsRef = useRef<HTMLDivElement>(null);\n const filterLabel = hasNoneValue ? hasBlankLabel : hasBlankOrNoneLabel;\n\n // don't show Tags if there is no value.\n const showTags = useMemo(() => {\n if (!value || !(value as Array<OptionTypeBase>).length) {\n return false;\n }\n\n let allOptions: Array<OptionTypeBase> = [];\n\n if (hasGroups(options)) {\n options?.forEach((option: OptionTypeBase | GroupType<OptionTypeBase>) => {\n const groupOptions = (option as GroupType<OptionTypeBase>).options;\n\n if (groupOptions) {\n // grouped options\n allOptions = allOptions.concat(groupOptions);\n } else {\n // single option\n allOptions.push(option as OptionTypeBase);\n }\n });\n } else {\n allOptions = [...(options as Array<OptionTypeBase>)];\n }\n\n // there is no group so we check if all options are selected.\n return (value as Array<OptionTypeBase>).length !== allOptions.length;\n }, [options, value]);\n\n if (!value || !showTags) {\n return null;\n }\n\n // Don't show tags if all options are selected.\n if (allowSelectAll) {\n if (hasGroups(options)) {\n // Options are grouped.\n let allOptions: Array<OptionTypeBase> = [];\n\n allOptions = (options as unknown as GroupedOptionsType<OptionTypeBase>).reduce(\n (acumulator, group) => acumulator.concat(group.options),\n allOptions\n );\n\n if (allOptions.length === value?.length) {\n return null;\n }\n } else if ((value as Array<OptionTypeBase>).length === options.length) {\n return null;\n }\n }\n\n const removeOption = (removedOption: OptionTypeBase) => {\n const newValue = value.filter(option => option !== removedOption);\n onChange && onChange(newValue, { action: 'remove-value', option: removedOption });\n\n // to find element which is has onKeyDown\n const parentElement = tagsRef.current?.parentNode?.parentNode?.parentNode?.parentElement;\n (parentElement!.querySelector(\"div[role='presentation']\") as HTMLElement)?.focus();\n };\n\n const getColor = (option: SelectOption) => {\n return 'isValid' in option && !option.isValid ? 'red' : 'blue';\n };\n\n return (\n <Styled.Wrapper className=\"multiselect-tags-wrapper\" ref={tagsRef}>\n {selectedOptionsListTitle && (\n <Styled.Title level={5}>{selectedOptionsListTitle}</Styled.Title>\n )}\n {value.map(option => {\n if (checkOption(showKey, filterLabel, option)) {\n return '';\n }\n\n if (\n option.value !== 'active sourcing team' &&\n option.value !== 'everybody else' &&\n option.value !== 'us team group' &&\n option.value !== 'uk team group' &&\n option.value !== 'other group'\n ) {\n return (\n <Styled.Tag\n color={getColor(option)}\n key={option.value}\n closable={!option.disabled}\n onClose={() => removeOption(option)}\n >\n {option[showKey]}\n </Styled.Tag>\n );\n }\n })}\n </Styled.Wrapper>\n );\n};\n\nexport default MultiSelectTags;\n","import React from 'react';\n// models\nimport { SelectOption } from '@optx/models/Option';\n// utils\nimport { checkOption } from '@optx/utils/select/select';\nimport { hasBlankOrNoneLabel, hasBlankLabel } from '@optx/utils/helpers';\n// local\nimport Styled from './MultiSelectTags.styled';\n\ninterface PreviousMultiSelectedTagsProps<OptionTypeBase> {\n options: Array<OptionTypeBase>;\n showKey?: 'label' | 'value';\n hasNoneValue?: boolean;\n previousSelectedOptions: Array<any>;\n previousSelectedOptionsListTitle?: string;\n}\n\nconst PreviousMultiSelectedTags = <OptionTypeBase extends SelectOption = SelectOption>({\n options,\n showKey = 'label',\n hasNoneValue = false,\n previousSelectedOptions,\n previousSelectedOptionsListTitle,\n}: React.PropsWithChildren<PreviousMultiSelectedTagsProps<OptionTypeBase>>) => {\n const filterLabel = hasNoneValue ? hasBlankLabel : hasBlankOrNoneLabel;\n\n let shouldDisplayPreviousSelectedOptions = true;\n\n // Don't show tags if all options are selected.\n if (previousSelectedOptions.length === options.length) {\n shouldDisplayPreviousSelectedOptions = false;\n }\n\n return (\n <>\n {previousSelectedOptions.length !== 0 && (\n <Styled.Wrapper className=\"multiselect-tags-wrapper\">\n {previousSelectedOptionsListTitle && (\n <Styled.Title level={5}>{previousSelectedOptionsListTitle}</Styled.Title>\n )}\n {shouldDisplayPreviousSelectedOptions\n ? previousSelectedOptions.map(option => {\n if (checkOption(showKey, filterLabel, option)) {\n return '';\n }\n\n return (\n <Styled.Tag color=\"blue\" key={option.value}>\n {option[showKey]}\n </Styled.Tag>\n );\n })\n : 'All users'}\n </Styled.Wrapper>\n )}\n </>\n );\n};\n\nexport default PreviousMultiSelectedTags;\n","import React from 'react';\nimport { components, IndicatorProps } from 'react-select';\nimport { DownOutlined } from '@ant-design/icons';\n\n/**\n * customDropdownIndicator - style the arrow of the dropdown.\n */\nconst DropdownIndicator: React.FC<IndicatorProps<any>> = props => (\n <components.DropdownIndicator {...props}>\n <DownOutlined />\n </components.DropdownIndicator>\n);\n\nexport default DropdownIndicator;\n","import styled from 'styled-components';\n\nconst IconWrapper = styled.span`\n position: absolute;\n top: 12px;\n left: 11px;\n height: 14px;\n\n > span {\n vertical-align: top;\n }\n`;\n\nexport const Styled = {\n IconWrapper,\n};\n","import React from 'react';\nimport { components, ValueContainerProps } from 'react-select';\nimport { SearchOutlined } from '@ant-design/icons';\nimport { Styled } from './ValueContainer.styled';\n\n/**\n * Dropdown search area.\n */\nconst ValueContainer: React.FC<ValueContainerProps<any>> = props => {\n const { children } = props;\n\n const showSearchIcon = props.selectProps.SearchIcon;\n\n return (\n <components.ValueContainer {...props}>\n <Styled.IconWrapper>\n {showSearchIcon === false ? null : <SearchOutlined />}\n </Styled.IconWrapper>\n {children}\n </components.ValueContainer>\n );\n};\n\nexport default ValueContainer;\n","import React from 'react';\nimport { components, MultiValueProps } from 'react-select';\nimport { CloseOutlined } from '@ant-design/icons';\nimport { SelectOption } from '@optx/models/Option';\n\n/**\n * Selected value remove element.\n */\nconst MultiValueRemove: React.FC<MultiValueProps<SelectOption>> = props => {\n const { data, innerProps } = props;\n\n const handleClick = (event: React.MouseEvent) => {\n event.stopPropagation();\n\n // Use click handler from select binded to item removal.\n innerProps.onClick();\n };\n\n if (!data.closable) {\n return null;\n }\n\n return (\n <components.MultiValueRemove {...props}>\n <CloseOutlined onClick={handleClick} />\n </components.MultiValueRemove>\n );\n};\n\nexport default MultiValueRemove;\n","import React from 'react';\n\n/**\n * Selected value label element.\n */\nconst MultiValueLabel: React.FC = ({ children }) => <>{children}</>;\n\nexport default MultiValueLabel;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { MenuListComponentProps, components } from 'react-select';\nimport { LoadingOutlined } from '@ant-design/icons';\n\nconst StyledLoadingOutlined = styled(LoadingOutlined)`\n font-size: 16px;\n color: #4ce1b6;\n\n width: 14px;\n margin: auto;\n margin-top: 8px;\n display: flex;\n`;\n\nconst StyledMenuList = styled(components.MenuList)`\n min-height: 40px;\n`;\n\nconst MenuListWithLoader: (isLoading: boolean) => React.FC<MenuListComponentProps<any>> =\n isLoading => props =>\n (\n <StyledMenuList {...props}>\n {props.children}\n {isLoading && <StyledLoadingOutlined />}\n </StyledMenuList>\n );\n\nexport default MenuListWithLoader;\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\nimport { WatchlistsSorting } from '@optx/models/WatchList';\nimport { hasEditPermission } from '@optx/utils/lists';\nimport { selectors as fetchSelectors } from '@redux/feature/fetch';\nimport { selectors as userSelectors } from '@redux/user/information';\n\n// specific selectors\nconst selectListsState = (state: AppState) => state.favoriteLists;\n\nconst selectListsPopupSate = createSelector(selectListsState, state => state.listsPopup);\n\nexport const isLoading = createSelector(selectListsPopupSate, fetchSelectors.isLoadingSelector);\n\nexport const getError = createSelector(selectListsPopupSate, fetchSelectors.errorSelector);\n\nexport const shouldFetch = createSelector(\n selectListsPopupSate,\n state => !state.loading && !state.fetchedAt && !state.error\n);\n\nexport const shouldInitialFetch = createSelector(\n userSelectors.loaded,\n shouldFetch,\n (userInfoLoaded, shouldFetch) => userInfoLoaded && shouldFetch\n);\n\nexport const getAllListIds = createSelector(selectListsPopupSate, state => state.allIds);\n\nexport const getListsNormalized = createSelector(selectListsPopupSate, state =>\n state.allIds.map(id => state.allWatchlists[id])\n);\n\nexport const getAllWatchlists = createSelector(selectListsPopupSate, state => state.allWatchlists);\n\nexport const getAllListAccessRightLists = createSelector(selectListsPopupSate, state =>\n Object.values(state.allWatchlists).filter(list => hasEditPermission(list.share_permission))\n);\n\nexport const getSortBy = createSelector(selectListsPopupSate, state => state.sortBy);\n\nexport const getSortSelect = createSelector(selectListsPopupSate, state => {\n let newValue: WatchlistsSorting = 'recently';\n let label = '';\n\n if (state.sortBy.length) {\n if (state.sortBy[0].id === 'recently_used' && state.sortBy[0].desc === true) {\n newValue = 'recently';\n label = 'Recently accessed';\n } else if (state.sortBy[0].id === 'title' && state.sortBy[0].desc === false) {\n newValue = 'title-asc';\n label = 'Name A to Z';\n } else if (state.sortBy[0].id === 'title' && state.sortBy[0].desc === true) {\n newValue = 'title-desc';\n label = 'Name Z to A';\n } else if (state.sortBy[0].id === 'owner_name' && state.sortBy[0].desc === false) {\n newValue = 'owner';\n label = 'Owner';\n }\n }\n\n return { value: newValue, label };\n});\n\nexport const getWatchlists = (lists: number[]) => {\n return createSelector(selectListsPopupSate, state => {\n const allWatchlists = state.allWatchlists;\n\n return lists.map(id =>\n Object.values(allWatchlists).find(watchlist => watchlist.unique_id === id)\n );\n });\n};\n\nexport const getWatchlistsById = () => {\n return createSelector(selectListsPopupSate, state => {\n const allWatchlists = state.allWatchlists;\n const allIds = state.allIds;\n const allWatchlistsById: Array<any> = [];\n allIds.forEach(itemId => {\n allWatchlistsById.push(allWatchlists[itemId]);\n });\n\n return allWatchlistsById;\n });\n};\n\nexport const showEmptyLists = createSelector(selectListsPopupSate, state => state.showEmptyLists);\n","import { call, put } from 'redux-saga/effects';\nimport { InitialFavoriteListsSearchData } from '@models/lists/search';\n// services\nimport { SavedSearchesService } from '@services/api';\nimport * as actions from './actions';\n\n// search\nexport function* searchLists(data: InitialFavoriteListsSearchData) {\n // @ts-ignore\n const res = yield call(SavedSearchesService.initialFetchFavoriteLists, data);\n\n yield put(\n actions.fetchFavoriteListsPopupSuccess({\n data: res.data.lists,\n ...data,\n showEmptyLists: data.showEmptyLists || false,\n })\n );\n}\n","import { takeLatest, call, put, select, fork } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { push } from 'react-router-redux';\nimport queryString from 'query-string';\n// constants\nimport { LISTS_ROUTES } from '@constants/routes';\n// models\nimport { CompanyWatchList, FetchFavoriteLists } from '@models/WatchList';\nimport { InitialFavoriteListsSearchData } from '@models/lists/search';\nimport {\n SortingRule,\n CreateListPopupPayload,\n CompanyToListPayload,\n DeleteCompanyFromList,\n} from '@redux/favorite-lists/lists-popup/interfaces';\n// services\nimport { SavedSearchesService, UserService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { mapSortQuery } from '@optx/utils/search';\n// redux\nimport { selectors as userSelectors, actions as userActions } from '@redux/user/information';\nimport { deleteCompanyInCurrentList } from '@redux/lists/details/actions';\nimport { actions as searchActions } from '@features/grid/search';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { getErrorMessage } from '@optx/utils/api/errors';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { AxiosResponse } from 'axios';\nimport * as actions from './actions';\nimport * as favoriteListsSelectors from './selectors';\nimport companyListsSagas from '../company-lists/sagas';\nimport { searchLists } from './sagasReusable';\n\nfunction* searchListsFail() {\n const errorMessage = 'Error fetching watch lists!';\n yield put(actions.fetchFavoriteListsPopupFail(errorMessage));\n NotificationService.error(errorMessage);\n}\n\nfunction* initialFetchFavoriteListsPopupSaga(\n action: PayloadAction<FetchFavoriteLists | undefined>\n) {\n const fetchAll = action.payload?.fetchAll;\n const showEmptyLists = action.payload?.showEmptyLists;\n const sorting: SortByRule<any>[] = yield select(favoriteListsSelectors.getSortBy);\n const searchData: InitialFavoriteListsSearchData = {\n sortBy: sorting,\n fetchAll,\n showEmptyLists: showEmptyLists ?? true,\n popup: true,\n };\n\n try {\n // @ts-ignore\n const res = yield call(SavedSearchesService.initialFetchFavoriteLists, searchData);\n\n if (res.data) {\n yield put(\n actions.initialFetchFavoritesListsPopupSuccess({\n data: res.data.lists,\n ...searchData,\n showEmptyLists: searchData.showEmptyLists,\n })\n );\n }\n } catch (e: any) {\n yield call(searchListsFail);\n }\n}\n\nfunction* fetchFavoriteListsPopupSaga(action: PayloadAction<FetchFavoriteLists | undefined>) {\n const fetchAll = action.payload?.fetchAll;\n const showEmptyLists = action.payload?.showEmptyLists;\n const sorting: SortByRule<any>[] = yield select(favoriteListsSelectors.getSortBy);\n const searchData: InitialFavoriteListsSearchData = {\n sortBy: sorting,\n fetchAll,\n showEmptyLists: showEmptyLists ?? true,\n popup: true,\n };\n\n try {\n yield call(searchLists, searchData);\n\n yield put(actions.resetFetchedAt());\n } catch (e: any) {\n yield call(searchListsFail);\n }\n}\n\nfunction* sortFavoriteListsPopupSaga(action: PayloadAction<SortingRule>) {\n const sorting = action.payload.sorting;\n const showEmptyLists: boolean = yield select(favoriteListsSelectors.showEmptyLists);\n let sortBy = [{ id: 'recently_used' as string, desc: true }];\n\n switch (sorting) {\n case 'recently':\n sortBy = [{ id: 'recently_used' as string, desc: true }];\n break;\n case 'title-asc':\n sortBy = [{ id: 'title' as string, desc: false }];\n break;\n case 'title-desc':\n sortBy = [{ id: 'title' as string, desc: true }];\n break;\n case 'owner':\n sortBy = [{ id: 'owner_name' as string, desc: false }];\n break;\n }\n\n const searchData: InitialFavoriteListsSearchData = {\n sortBy,\n fetchAll: true,\n showEmptyLists,\n popup: true,\n };\n const sortQuery = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n\n try {\n yield call(searchLists, searchData);\n\n yield put(\n userActions.updateUserSettingsForFavoritesList({ favorites_list_popup_sorting: sortQuery })\n );\n } catch (e: any) {\n yield call(searchListsFail);\n }\n}\n\nfunction* createFavoriteListPopupSaga(action: PayloadAction<CreateListPopupPayload>) {\n const { payload } = action;\n\n try {\n const res: AxiosResponse<CompanyWatchList> = yield call(\n SavedSearchesService.addCompanyToList,\n action.payload\n );\n const sorting: SortByRule<any>[] = yield select(favoriteListsSelectors.getSortBy);\n yield put(\n actions.createFavoriteListPopupSuccess({ list: res.data, companyId: payload.company_id })\n );\n\n yield put(actions.fetchFavoriteListsPopup({ query: '', sortBy: sorting, fetchAll: true }));\n\n NotificationService.success(`Create watchlist ${payload.title} success!`);\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to add to Watchlist!');\n NotificationService.error(message);\n yield put(actions.createFavoriteListPopupFail(message));\n }\n}\n\nfunction* addCompanyToListPopupSaga(action: PayloadAction<CompanyToListPayload>) {\n const { company_id: companyId, selectedLists, callback } = action.payload;\n const titles: string[] = selectedLists.map(item => item.list_title);\n\n const existingListIds: number[] = [];\n const newTitles: string[] = [];\n\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n\n selectedLists.flat().map(data => {\n if (data.list_id !== null) {\n return existingListIds.push(Number(data.list_id));\n }\n\n return newTitles.push(data.list_title.toString());\n });\n\n try {\n // @ts-ignore\n const res = yield call(UserService.bulkAddToWatchlist, [companyId], existingListIds, newTitles);\n\n if (res.data) {\n const failureListIds: number[] = [];\n const successListIds: number[] = [];\n\n res.data.map((item: { status: boolean; message: string; list_id: number }) => {\n if (item.status) {\n return successListIds.push(item.list_id);\n }\n\n return failureListIds.push(item.list_id);\n });\n\n if (failureListIds.length > 0) {\n const list: CompanyWatchList[] = yield select(\n favoriteListsSelectors.getWatchlists(failureListIds)\n );\n const titles: string[] = list.map((item: CompanyWatchList) => item.title);\n NotificationService.error(`Failed to add company to ${titles.join(', ')}`);\n }\n\n if (successListIds.length > 0) {\n const list: CompanyWatchList[] = yield select(\n favoriteListsSelectors.getWatchlists(successListIds)\n );\n\n const ownerName: string = yield select(userSelectors.getFullName);\n yield put(actions.addCompanyToListPopupSuccess(companyId, list, ownerName));\n\n const titles: string[] = list.map((item: CompanyWatchList) => item.title);\n NotificationService.success(`Company was added to ${titles.join(', ')} list(s)!`);\n callback && callback();\n }\n } else {\n const errorMessage = res.data[0].message;\n\n yield put(actions.addCompanyToListPopupFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n } catch (error: any) {\n let errorMessage = '';\n\n if (error.response.status === 409) {\n errorMessage = 'Company is already part of this list';\n } else if (Object.values(error.response.data.errors)[0] === 'Company is not in Equity Touch') {\n errorMessage = Object.values(error.response.data.errors)[0] as string;\n } else {\n errorMessage = `Failed to add company to ${titles.join(', ')}!`;\n }\n\n yield put(actions.addCompanyToListPopupFail(errorMessage));\n NotificationService.error(errorMessage);\n\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n}\n\nexport function* deleteCompanyFromListSaga(action: PayloadAction<DeleteCompanyFromList>) {\n const { payload } = action;\n\n try {\n // @ts-ignore\n const res = yield call(SavedSearchesService.deleteCompanyInList, payload);\n\n if (res.data) {\n yield put(\n actions.deleteCompanyFromListPopupSuccess({\n companyId: payload.company_id,\n listId: payload.list_id,\n })\n );\n\n const lists: CompanyWatchList[] = yield select(favoriteListsSelectors.getListsNormalized);\n const list = (lists as CompanyWatchList[]).find(\n (item: CompanyWatchList) => item.unique_id === Number(payload.list_id)\n );\n\n if (list && list.count === 0) {\n const isSourceScrub = window.location.pathname.substr(1).startsWith('ss');\n\n if (isSourceScrub) {\n yield put(push(LISTS_ROUTES.sourceScrubLists));\n } else {\n yield put(push(LISTS_ROUTES.myWatchList));\n }\n }\n }\n\n yield put(searchActions.initialCompaniesSearch({ gridKey: 'lists', data: undefined }));\n yield put(deleteCompanyInCurrentList(payload.company_id));\n\n NotificationService.success('Delete company from list success!');\n } catch (e: any) {\n const errorMessage = 'Delete company from list fail!';\n yield put(actions.deleteCompanyFromListPopupFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* favoriteListsPopupSagas() {\n yield takeLatest(actions.initialFetchFavoritesListsPopup, initialFetchFavoriteListsPopupSaga);\n yield takeLatest(actions.fetchFavoriteListsPopup, fetchFavoriteListsPopupSaga);\n yield takeLatest(actions.sortFavoriteListsPopup, sortFavoriteListsPopupSaga);\n yield takeLatest(actions.createFavoriteListPopup, createFavoriteListPopupSaga);\n yield takeLatest(actions.addCompanyToListPopup, addCompanyToListPopupSaga);\n yield takeLatest(actions.deleteCompanyFromListPopup, deleteCompanyFromListSaga);\n yield fork(companyListsSagas);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport {\n CompanyWatchList,\n AddCompanyToWatchList,\n DeleteCompanyFromWatchList,\n} from '@models/WatchList';\nimport { UserInformation } from '@optx/models/user';\nimport { SortByRule } from '@models/table/sorting';\nimport {\n BulkAddToWatchList,\n BulkRemoveFromWatchList,\n} from '@optx/features/bulk-actions/bulk-watchlist/state/interfaces';\n// utils\nimport { normalizeData } from '@utils/utils';\nimport { parseSorting } from '@optx/utils/filters/parseSorting';\n// constants\nimport { FAVORITE_LISTS_POPUP_DEFAULT_SORT } from '@constants/table/sort/defaultSort';\n// reducer\nimport * as bulkWatchlistsActions from '@features/bulk-actions/bulk-watchlist/state/actions';\nimport { fetchReducer, fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport * as actions from './actions';\nimport { FavoriteListsPopupState, CreateListPopupSuccessPayload } from './interfaces';\n\nexport const initialState: FavoriteListsPopupState = {\n allWatchlists: {},\n allIds: [],\n error: '',\n loading: false,\n fetchedAt: '',\n sortBy: FAVORITE_LISTS_POPUP_DEFAULT_SORT,\n showEmptyLists: true,\n};\n\nconst initialFetchFavoriteListsPopupSuccessReducer: CaseReducer<\n FavoriteListsPopupState,\n PayloadAction<{\n data: Array<CompanyWatchList>;\n sortBy: Array<SortByRule<any>>;\n showEmptyLists: boolean;\n }>\n> = (draftState, action) => {\n const { data, showEmptyLists } = action.payload;\n\n const allWatchlists: CompanyWatchList[] = data;\n\n const allWatchlistsById = {} as Dictionary<CompanyWatchList>;\n\n allWatchlists.forEach((listItem: CompanyWatchList) => {\n allWatchlistsById[listItem.unique_id] = listItem;\n });\n\n const filteredAllWatchlists = data\n .filter(item => item.share_permission !== 1)\n .reduce(normalizeData('unique_id'), {}) as Dictionary<CompanyWatchList>;\n\n draftState.allWatchlists = filteredAllWatchlists;\n\n draftState.allIds = allWatchlists\n .filter(item => item.share_permission !== 1)\n .map(listItem => listItem.unique_id);\n draftState.loading = false;\n draftState.sortBy = action.payload.sortBy;\n draftState.showEmptyLists = showEmptyLists;\n\n if (!draftState.fetchedAt) {\n draftState.fetchedAt = new Date().toISOString();\n }\n};\n\n// fetch favorite lists success reducer\nconst fetchFavoriteListsPopupSuccessReducer: CaseReducer<\n FavoriteListsPopupState,\n PayloadAction<{\n data: Array<CompanyWatchList>;\n sortBy: Array<SortByRule<any>>;\n showEmptyLists: boolean;\n }>\n> = (draftState, action) => {\n const { data, showEmptyLists } = action.payload;\n const allWatchlists: CompanyWatchList[] = data;\n\n const allWatchlistsById = {} as Dictionary<CompanyWatchList>;\n\n allWatchlists.forEach((listItem: CompanyWatchList) => {\n allWatchlistsById[listItem.unique_id] = listItem;\n });\n\n const filteredAllWatchlists = data\n .filter(item => item.share_permission !== 1)\n .reduce(normalizeData('unique_id'), {}) as Dictionary<CompanyWatchList>;\n\n draftState.allWatchlists = filteredAllWatchlists;\n\n draftState.allIds = allWatchlists\n .filter(item => item.share_permission !== 1)\n .map(listItem => listItem.unique_id);\n draftState.loading = false;\n draftState.sortBy = action.payload.sortBy;\n draftState.showEmptyLists = showEmptyLists;\n\n if (!draftState.fetchedAt) {\n draftState.fetchedAt = new Date().toISOString();\n }\n};\n\nexport const fetchUserInformationSuccessReducer: CaseReducer<\n FavoriteListsPopupState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const sorting = action.payload.settings.session_settings?.favorites_list_popup_sorting;\n\n if (sorting) {\n const { sortBy } = parseSorting(sorting);\n draftState.sortBy = sortBy;\n }\n};\n\n// create list success\nconst createListPopupSuccessReducer: CaseReducer<\n FavoriteListsPopupState,\n PayloadAction<CreateListPopupSuccessPayload>\n> = (draftState, action) => {\n const { list } = action.payload;\n\n draftState.loading = false;\n draftState.allWatchlists = { ...draftState.allWatchlists, [list.unique_id]: list };\n};\n\n// add company to list success\nconst addCompanyToListPopupSuccessReducer: CaseReducer<\n FavoriteListsPopupState,\n PayloadAction<AddCompanyToWatchList>\n> = (draftState, action) => {\n const { watchLists } = action.payload;\n\n draftState.loading = false;\n watchLists.forEach(list => {\n draftState.allWatchlists[list.unique_id].count =\n Number(draftState.allWatchlists[list.unique_id].count) + watchLists.length;\n });\n};\n\n// delete company from list success\nconst deleteCompanyFromListSuccessReducer: CaseReducer<\n FavoriteListsPopupState,\n PayloadAction<DeleteCompanyFromWatchList>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.allWatchlists[action.payload.listId].count--;\n};\n\nconst resetFetchedAtReducer: CaseReducer<FavoriteListsPopupState> = draftState => {\n draftState.fetchedAt = '';\n};\n\nconst bulkRemoveFromWatchListReducer: CaseReducer<\n FavoriteListsPopupState,\n PayloadAction<BulkRemoveFromWatchList>\n> = (draftState, action) => {\n const count = action.payload.selectedCompanies.length;\n const { listId } = action.payload;\n\n if (\n draftState.allWatchlists[listId] &&\n typeof draftState.allWatchlists[listId].count === 'number'\n ) {\n draftState.allWatchlists[listId].count -= count;\n }\n};\n\nconst bulkAddToWatchListReducer: CaseReducer<\n FavoriteListsPopupState,\n PayloadAction<BulkAddToWatchList>\n> = (draftState, action) => {\n const count = action.payload.selectedCompanies.length;\n const { selectedData } = action.payload;\n\n selectedData.forEach(list => {\n if (draftState.allWatchlists[list.value]) {\n draftState.allWatchlists[list.value].count =\n Number(draftState.allWatchlists[list.value].count) + Number(count);\n }\n });\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // initial fetch favorites lists\n .addCase(actions.initialFetchFavoritesListsPopup, fetchReducer)\n .addCase(\n actions.initialFetchFavoritesListsPopupSuccess,\n initialFetchFavoriteListsPopupSuccessReducer\n )\n // fetch favorites lists\n .addCase(actions.fetchFavoriteListsPopup, fetchReducer)\n .addCase(actions.fetchFavoriteListsPopupSuccess, fetchFavoriteListsPopupSuccessReducer)\n .addCase(actions.fetchFavoriteListsPopupFail, fetchFailReducer)\n // sort favorites lists\n .addCase(actions.sortFavoriteListsPopup, fetchReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n // create favorite list\n .addCase(actions.createFavoriteListPopup, fetchReducer)\n .addCase(actions.createFavoriteListPopupSuccess, createListPopupSuccessReducer)\n .addCase(actions.createFavoriteListPopupFail, fetchFailReducer)\n // add company to list\n .addCase(actions.addCompanyToListPopup, fetchReducer)\n .addCase(actions.addCompanyToListPopupSuccess, addCompanyToListPopupSuccessReducer)\n .addCase(actions.addCompanyToListPopupFail, fetchFailReducer)\n // delete company in list\n .addCase(actions.deleteCompanyFromListPopup, fetchReducer)\n .addCase(actions.deleteCompanyFromListPopupSuccess, deleteCompanyFromListSuccessReducer)\n .addCase(actions.deleteCompanyFromListPopupFail, fetchFailReducer)\n // reset fetchedAt\n .addCase(actions.resetFetchedAt, resetFetchedAtReducer)\n // bulk remove\n .addCase(bulkWatchlistsActions.bulkRemoveFromWatchList, bulkRemoveFromWatchListReducer)\n .addCase(bulkWatchlistsActions.bulkAddToWatchList, bulkAddToWatchListReducer)\n);\n\nexport default reducer;\n","import { DefaultTheme, ThemeProps } from 'styled-components';\nimport { ANTDColors, PalleteProp } from '@models/theme';\n\ntype ANTDColor = keyof ANTDColors;\ntype PrimaryKey = keyof Pick<PalleteProp, 'primary'>;\ntype ColorIndex = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | PrimaryKey;\n\nexport const getThemeColor = (theme: DefaultTheme, color: ANTDColor, index: ColorIndex) => {\n const colorPalleteIndex = typeof index === 'number' ? index - 1 : index;\n\n return theme.colors[color][colorPalleteIndex];\n};\n\nexport const themeColor =\n (color: ANTDColor, index: ColorIndex) => (props: ThemeProps<DefaultTheme>) =>\n getThemeColor(props.theme, color, index);\n\n// used colors\n// gray\nconst gray2 = themeColor('gray', 2);\nconst gray4 = themeColor('gray', 4);\nconst gray5 = themeColor('gray', 5);\nconst gray6 = themeColor('gray', 6);\nconst gray7 = themeColor('gray', 7);\nconst gray8 = themeColor('gray', 8);\nconst gray9 = themeColor('gray', 9);\nconst gray10 = themeColor('gray', 10);\n// blue\nconst blue1 = themeColor('blue', 1);\nconst blue6 = themeColor('blue', 6);\nconst blue7 = themeColor('blue', 7);\nconst blue8 = themeColor('blue', 8);\n// green\nconst green6 = themeColor('green', 6);\n// red\nconst red6 = themeColor('red', 6);\n\nexport const styledColors = {\n // gray\n gray2,\n gray4,\n gray5,\n gray6,\n gray7,\n gray8,\n gray9,\n gray10,\n // blue\n blue1,\n blue6,\n blue7,\n blue8,\n // green\n green6,\n // red\n red6,\n};\n","/**\n * Convert string to URL representation.\n * @param url url string.\n */\nexport function toURL(url: string) {\n if (/.*http.*/.test(url)) {\n return url;\n }\n\n return `//${url}`;\n}\n\n/**\n * remove double slashes from the start of urls\n * main use case is for urls coming from api with this format \"//website.com\"\n * @param url url string\n */\nexport const stripUrlSlashes = (url: string) => url.replace('//', '');\n\n/**\n * Convert string to URL representation.\n * @param url url string.\n */\nexport function convertToURL(url: string): string {\n if (!url) return '#';\n\n if (url.startsWith('//')) return `http:${url}`;\n\n if (url && !url.startsWith('http://') && !url.startsWith('https://')) {\n return `http://${url}`;\n }\n\n return url;\n}\n\nexport function sliceURLQuery(url: string) {\n const startsWithHttp = url.startsWith('http://');\n const startsWithHttps = url.startsWith('https://');\n const endWithSlash = url.endsWith('/');\n const startWithWWW = url.startsWith('wwww.');\n\n let result: string = url;\n\n if (startWithWWW || startsWithHttp || startsWithHttps) {\n if (startsWithHttp) {\n result = `${result.slice(7)}`;\n }\n\n if (startsWithHttps) {\n result = `${result.slice(8)}`;\n }\n\n if (endWithSlash) {\n result = `${result.slice(0, -1)}`;\n }\n }\n\n return result;\n}\n\n/**\n * Get multiple parameters from the current URL\n * @param {string} params The parameters from the URL\n */\nexport const getParametersFromURL = (params: string[]) =>\n params.map(param => new URLSearchParams(window.location.search).get(param));\n\n/**\n * Removes a specific parameter from the current URL and updates the URL without reloading the page.\n * @param {string} param The parameter to be removed from the URL\n */\nexport const removeParameterFromURL = (param: string) => {\n // Get the current URL\n const url = new URL(window.location.href);\n\n // Get the search parameters from the URL\n const searchParams = new URLSearchParams(url.search);\n\n // If parameter doesn't exist in URL, just ignore the call\n if (!searchParams.get(param)) return;\n\n // Remove the specific parameter\n searchParams.delete(param);\n\n // Create a new URL with the updated search parameters\n const newUrl = `${url.origin}${url.pathname}?${searchParams.toString()}`;\n\n // Replace the current URL without reloading the page\n window.history.replaceState(null, '', newUrl);\n};\n\n/**\n * Removes all parameters from the current URL and updates the URL without reloading the page.\n */\nexport const removeAllParametersFromURL = () => {\n // Get the current URL\n const url = new URL(window.location.href);\n\n // Get the search parameters from the URL\n const searchParams = new URLSearchParams(url.search);\n\n // If parameters don't exist in URL, just ignore the call\n // We will also ignore this line because TS doesn't recognize size as a property of URLSearchParams,\n // but it is supported on almost every browser engine.\n // @ts-ignore\n if (!searchParams.size) return;\n\n // Create a new URL with the updated search parameters\n const newUrl = `${url.origin}${url.pathname}`;\n\n // Replace the current URL without reloading the page\n window.history.replaceState(null, '', newUrl);\n};\n\n/**\n * Updates the current history state. This doesn't create the state if it didn't previously exist.\n * @param stateFieldKey\n * @param stateFieldValue\n */\nexport const updateHistoryState = (stateFieldKey: string, stateFieldValue: any) => {\n const state = window.history.state;\n\n if (state) {\n state.state[stateFieldKey] = stateFieldValue;\n\n window.history.replaceState(state, '');\n }\n};\n","import queryString from 'query-string';\nimport { Dictionary, each } from 'lodash';\n// models\nimport {\n FilterSource,\n FilterSorting,\n ParsedFilterSorting,\n PreselectedFilter,\n RangeFilter,\n BaseFilter,\n MultiRangeNumberFilter,\n MultiSelectFilter,\n MultiCheckboxFilter,\n FilterGroupDataSection,\n} from '@optx/models/filters';\nimport Option, {\n FormCheckableRangeOption,\n SelectOption,\n FormCheckboxOption,\n} from '@optx/models/Option';\nimport { RangeOptionBase, CheckableRangeOption } from '@optx/models/RangeOption';\n// constants\nimport {\n RANGE_FILTER_UNKNOWN_VALUE,\n RANGE_FILTER_UNKNOWN_ONLY_VALUE,\n RANGE_FILTER_PSG_VALUE,\n RANGE_FILTER_PSG_ONLY_VALUE,\n RANGE_FILTER_INCLUDE_BELOW_VALUE,\n} from '../../constants/filters';\n// utils\nimport {\n getDateRangeOptions,\n getCheckboxOptions,\n getLogicCheckboxOptions,\n getMultiRangeNumberOptions,\n getMultiTextOptions,\n getMultiRangeCustomOption,\n getCheckboxCustomOption,\n} from './preselectedValues';\nimport { lowerRangeKey, upperRangeKey } from './rangeKey';\nimport { mapToSelectOption } from '../option';\n\nconst getDateRangeFilter = (\n filter: RangeFilter<null>,\n filterParsed: queryString.ParsedQuery<string>\n) => {\n const defaultOptions = getDateRangeOptions(filter);\n const lowerKey = lowerRangeKey(filter.column);\n const upperKey = upperRangeKey(filter.column);\n\n if (filterParsed[lowerKey]) {\n defaultOptions[0].value = filterParsed[lowerKey] as string;\n }\n\n if (filterParsed[upperKey]) {\n defaultOptions[1].value = filterParsed[upperKey] as string;\n }\n\n return defaultOptions;\n};\n\nconst getCheckboxFilter = (\n filter: BaseFilter<any>,\n filterParsed: queryString.ParsedQuery<string>\n) => {\n const defaultOptions = getCheckboxOptions(filter, false);\n let checkboxFilters = [];\n let checkboxFilter;\n\n if (filterParsed[filter.column]) {\n const savedValues: Dictionary<string> = {};\n\n if (typeof filterParsed[filter.column] === 'string') {\n const value = filterParsed[filter.column] as string;\n savedValues[value] = value;\n } else {\n // is array\n (filterParsed[filter.column] as Array<string>).forEach(item => {\n savedValues[item] = item;\n });\n }\n\n checkboxFilter = defaultOptions.map(item => {\n if (item.value === savedValues[item.value]) {\n return {\n ...item,\n checked: true,\n };\n }\n\n return item;\n });\n } else {\n checkboxFilter = defaultOptions;\n }\n\n checkboxFilters.push({\n key: filter.column,\n value: checkboxFilter,\n });\n\n const customOption = getCheckboxCustomOption(filter as MultiCheckboxFilter);\n\n // custom option\n if (customOption) {\n const optionsList: string[] | null | undefined = filterParsed[filter.column] as string[];\n\n // check if last option is a custom option\n const lastOption =\n optionsList && typeof optionsList === 'object'\n ? optionsList[optionsList.length - 1]\n : optionsList;\n\n if (lastOption) {\n // check if we have the option in default options\n const defaultItem = defaultOptions.find(item => item.value.toString() === lastOption);\n\n if (!defaultItem) {\n customOption.checked = true;\n customOption.value = lastOption as string;\n customOption.min = (lastOption as string).split('_')[0];\n customOption.max = (lastOption as string).split('_')[1];\n }\n }\n\n checkboxFilters.push({\n key: `${filter.column}_custom`,\n value: customOption,\n });\n }\n\n return checkboxFilters;\n};\n\nconst getSelectFilter = (\n filter: BaseFilter<any>,\n filterParsed: queryString.ParsedQuery<string>\n) => {\n const parsedOptions = filterParsed[filter.column] as string | Array<string> | undefined;\n\n if (!parsedOptions) return null;\n\n const options: Array<SelectOption> = [];\n const { data: allOptions, format_name: formatName } = filter as MultiSelectFilter<Array<Option>>;\n\n const optionByValue: Dictionary<Option> = {};\n allOptions.forEach(option => {\n optionByValue[option.value] = option;\n });\n\n if (typeof parsedOptions === 'string') {\n const originalOption = optionByValue[parsedOptions];\n\n if (originalOption) {\n options.push(mapToSelectOption(originalOption, formatName));\n }\n } else {\n // is a list\n parsedOptions.forEach(item => {\n const originalOption = optionByValue[item];\n\n if (originalOption) {\n options.push(mapToSelectOption(originalOption, formatName));\n }\n });\n }\n\n return options;\n};\n\n/**\n * Parse filter object from query string.\n * @param filterQuery filter query string.\n * @param filterSources all filter sources.\n * @returns object parsed filter\n */\nexport const parseFilter = (\n filterQuery: string,\n filterSources: Array<FilterSource> = [],\n hasPipelineReportFilters?: boolean\n): [Dictionary<PreselectedFilter>, string | string[] | null | undefined] => {\n let formattedFilterParsed: queryString.ParsedQuery<string>;\n\n const filterParsed = queryString.parse(filterQuery, {\n arrayFormat: 'comma',\n });\n\n if ('product_category' in filterParsed) {\n let productCategory = filterParsed.product_category;\n\n if (typeof productCategory === 'string') {\n productCategory = [productCategory];\n }\n\n const mergedCategories = (productCategory as string[]).reduce((acc: string[], curr) => {\n if (curr.startsWith(' ')) {\n const previousCategory = acc.pop();\n acc.push(previousCategory + ', ' + curr.trim());\n } else {\n acc.push(curr);\n }\n\n return acc;\n }, []);\n\n formattedFilterParsed = { ...filterParsed, product_category: mergedCategories };\n } else {\n formattedFilterParsed = filterParsed;\n }\n\n const finalFilter: Dictionary<PreselectedFilter> = {};\n const searchQuery = Array.isArray(filterParsed.query)\n ? filterParsed.query.join(',')\n : filterParsed.query;\n\n if (!filterParsed) {\n return [{}, undefined];\n }\n\n if ('company_id' in filterParsed) {\n finalFilter.similarCompanies = {\n label: '',\n value: filterParsed.company_id?.toString(),\n } as PreselectedFilter;\n }\n\n filterSources.forEach(filterSource => {\n // @ts-ignore\n filterSource.data.forEach((filter: BaseFilter<any>) => {\n switch (filter.type) {\n case 'radio': {\n // @ts-ignore\n finalFilter[filter.column] = filterParsed[filter.column] || '';\n break;\n }\n\n case 'date_range': {\n finalFilter[filter.column] = getDateRangeFilter(\n filter as RangeFilter<null>,\n filterParsed\n );\n\n break;\n }\n\n case 'checkbox': {\n const checkboxFilters = getCheckboxFilter(filter, filterParsed);\n checkboxFilters.forEach(cbFilter => {\n finalFilter[cbFilter.key] = cbFilter.value;\n });\n\n break;\n }\n\n case 'logic_checkbox': {\n const defaultOptions = getLogicCheckboxOptions(filter);\n\n if (filterParsed[filter.column]) {\n const values: Dictionary<boolean> = {};\n\n if (typeof filterParsed[filter.column] === 'string') {\n // single value selected\n const value = filterParsed[filter.column] as string;\n values[value] = true;\n } else if (Array.isArray(filterParsed[filter.column])) {\n (filterParsed[filter.column] as Array<string>).forEach(item => {\n values[item] = true;\n });\n }\n\n finalFilter[filter.column] = defaultOptions.map(option => {\n const finalOption = { ...option };\n\n if (values[`${option.value}-1-0`]) {\n finalOption.in = true;\n }\n\n if (values[`${option.value}-0-1`]) {\n finalOption.notIn = true;\n }\n\n return finalOption;\n });\n } else {\n finalFilter[filter.column] = defaultOptions;\n }\n\n break;\n }\n\n case 'multi_text': {\n const defaultOptions = getMultiTextOptions(filter);\n\n if (!filterParsed[filter.column]) {\n finalFilter[filter.column] = defaultOptions;\n } else {\n // If we have one input in filter the filter value should be just a string, otherwise array of strings.\n const values = Array.isArray(filterParsed[filter.column])\n ? (filterParsed[filter.column] as Array<string>)\n : [filterParsed[filter.column] as string];\n\n finalFilter[filter.column] = defaultOptions.map((option, index) => {\n if (index < values.length) {\n return {\n ...option,\n value: values[index],\n };\n }\n\n return option;\n });\n }\n\n break;\n }\n\n case 'range_input': {\n const options: Array<FormCheckableRangeOption> = [];\n const lowerKey = lowerRangeKey(filter.column);\n const upperKey = upperRangeKey(filter.column);\n const { data } = filter as RangeFilter<[RangeOptionBase, SelectOption[]]>;\n\n // TODO: remove after API update\n if (!data) {\n break;\n }\n\n const [defaultRange, dataCheck] = data;\n let check: SelectOption[] = [];\n\n if (Array.isArray(dataCheck)) {\n check = dataCheck;\n } else {\n check = [dataCheck];\n }\n\n // push default range\n options.push({\n ...defaultRange,\n range: [defaultRange.min, defaultRange.max],\n check: check ? check.map(check => ({ ...check, checked: false })) : undefined,\n });\n\n if (filterParsed[lowerKey]) {\n if (typeof filterParsed[lowerKey] === 'string') {\n switch (filterParsed[lowerKey]) {\n case RANGE_FILTER_UNKNOWN_VALUE: {\n const checkIndex = options[0].check?.findIndex(\n item => item.value === RANGE_FILTER_UNKNOWN_VALUE\n );\n\n if (checkIndex !== undefined && checkIndex !== -1) {\n options[0].check![checkIndex].checked = true;\n }\n\n break;\n }\n\n case RANGE_FILTER_UNKNOWN_ONLY_VALUE: {\n const checkIndex = options[0].check?.findIndex(\n item => item.value === RANGE_FILTER_UNKNOWN_ONLY_VALUE\n );\n\n if (checkIndex !== undefined && checkIndex !== -1) {\n options[0].check![checkIndex].checked = true;\n }\n\n break;\n }\n\n case RANGE_FILTER_PSG_VALUE: {\n const checkIndex = options[0].check?.findIndex(\n item => item.value === RANGE_FILTER_PSG_VALUE\n );\n\n if (checkIndex !== undefined && checkIndex !== -1) {\n options[0].check![checkIndex].checked = true;\n }\n\n break;\n }\n\n case RANGE_FILTER_PSG_ONLY_VALUE: {\n const checkIndex = options[0].check?.findIndex(\n item => item.value === RANGE_FILTER_PSG_ONLY_VALUE\n );\n\n if (checkIndex !== undefined && checkIndex !== -1) {\n options[0].check![checkIndex].checked = true;\n }\n\n break;\n }\n\n case RANGE_FILTER_INCLUDE_BELOW_VALUE: {\n const checkIndex = options[0].check?.findIndex(\n item => item.value === RANGE_FILTER_INCLUDE_BELOW_VALUE\n );\n\n if (checkIndex !== undefined && checkIndex !== -1) {\n options[0].check![checkIndex].checked = true;\n }\n\n break;\n }\n\n default: {\n options[0].range[0] = Number(filterParsed[lowerKey]);\n options[0].range[1] = Number(filterParsed[upperKey]);\n break;\n }\n }\n } else {\n // it is a list of options\n (filterParsed[lowerKey] as Array<string>).forEach((item, index) => {\n switch (item) {\n case RANGE_FILTER_UNKNOWN_VALUE: {\n const checkIndex = options[0].check?.findIndex(\n item => item.value === RANGE_FILTER_UNKNOWN_VALUE\n );\n\n if (checkIndex !== undefined && checkIndex !== -1) {\n options[0].check![checkIndex].checked = true;\n }\n\n return;\n }\n\n case RANGE_FILTER_UNKNOWN_ONLY_VALUE: {\n const checkIndex = options[0].check?.findIndex(\n item => item.value === RANGE_FILTER_UNKNOWN_ONLY_VALUE\n );\n\n if (checkIndex !== undefined && checkIndex !== -1) {\n options[0].check![checkIndex].checked = true;\n }\n\n return;\n }\n\n case RANGE_FILTER_PSG_VALUE: {\n const checkIndex = options[0].check?.findIndex(\n item => item.value === RANGE_FILTER_PSG_VALUE\n );\n\n if (checkIndex !== undefined && checkIndex !== -1) {\n options[0].check![checkIndex].checked = true;\n }\n\n return;\n }\n\n case RANGE_FILTER_PSG_ONLY_VALUE: {\n const checkIndex = options[0].check?.findIndex(\n item => item.value === RANGE_FILTER_PSG_ONLY_VALUE\n );\n\n if (checkIndex !== undefined && checkIndex !== -1) {\n options[0].check![checkIndex].checked = true;\n }\n\n return;\n }\n\n case RANGE_FILTER_INCLUDE_BELOW_VALUE: {\n const checkIndex = options[0].check?.findIndex(\n item => item.value === RANGE_FILTER_INCLUDE_BELOW_VALUE\n );\n\n if (checkIndex !== undefined && checkIndex !== -1) {\n options[0].check![checkIndex].checked = true;\n }\n\n return;\n }\n\n default:\n break;\n }\n\n if (index >= 1) {\n options.push({\n min: defaultRange.min,\n max: defaultRange.max,\n range: [Number(item), Number((filterParsed[upperKey] as Array<string>)[index])],\n check: check ? check.map(check => ({ ...check, checked: false })) : undefined,\n });\n } else {\n options[0].range = [\n Number(item),\n Number((filterParsed[upperKey] as Array<string>)[index]),\n ];\n }\n });\n }\n }\n\n finalFilter[filter.column] = options;\n break;\n }\n\n case 'multiple_range_nr':\n {\n // @ts-ignore\n const minData: string | Array<string> =\n filterParsed[lowerRangeKey(filter.column)] || '';\n // @ts-ignore\n const maxData: string | Array<string> =\n filterParsed[upperRangeKey(filter.column)] || '';\n let minList: Array<string> = [];\n let maxList: Array<string> = [];\n\n if (minData && typeof minData === 'string') {\n minList = [minData];\n } else if (Array.isArray(minData)) {\n minList = minData;\n }\n\n if (maxData && typeof maxData === 'string') {\n maxList = [maxData];\n } else if (Array.isArray(maxData)) {\n maxList = maxData;\n }\n\n const parsedOptions: Dictionary<RangeOptionBase<string>> = {};\n\n minList.forEach((item, index) => {\n const option: RangeOptionBase<string> = {\n min: item,\n max: maxList[index],\n };\n\n parsedOptions[item] = option;\n });\n\n const defaultOptions = getMultiRangeNumberOptions(filter as MultiRangeNumberFilter);\n const customOption = getMultiRangeCustomOption(filter as MultiRangeNumberFilter);\n\n const finalOptions: Array<CheckableRangeOption<number>> = [];\n\n defaultOptions.forEach(option => {\n const finalOption = { ...option };\n const min = option.min.toString();\n\n if (parsedOptions[min] && parsedOptions[min].max === option.max.toString()) {\n finalOption.checked = true;\n }\n\n finalOptions.push(finalOption);\n });\n\n finalFilter[filter.column] = finalOptions;\n\n // custom option\n if (customOption) {\n // check if last option is a custom option\n const lastMinOption = minList[minList.length - 1];\n\n if (lastMinOption) {\n const customParsedOption = parsedOptions[lastMinOption];\n // check if we have the option in default options\n const defaultItem = defaultOptions.find(\n item => item.min.toString() === lastMinOption\n );\n\n if (\n !defaultItem ||\n (defaultItem && defaultItem.max.toString() !== customParsedOption.max)\n ) {\n customOption.checked = true;\n customOption.min = customParsedOption.min;\n customOption.max = customParsedOption.max;\n }\n }\n\n finalFilter[`${filter.column}_custom`] = customOption;\n }\n }\n\n break;\n\n case 'endpoint_query': {\n let parsedOptions;\n\n if (filter.column === 'product_category') {\n parsedOptions = formattedFilterParsed[filter.column] as\n | string\n | Array<string>\n | undefined;\n } else {\n parsedOptions = filterParsed[filter.column] as string | Array<string> | undefined;\n }\n\n if (parsedOptions) {\n let options: Array<SelectOption> = [];\n\n if (typeof parsedOptions === 'string') {\n options.push({ label: parsedOptions, value: parsedOptions });\n } else {\n // is a list\n options = parsedOptions.map(item => ({ label: item, value: item }));\n }\n\n finalFilter[filter.column] = options;\n }\n\n break;\n }\n\n case 'multi_select':\n\n // eslint-disable-next-line no-fallthrough\n case 'single_select': {\n const selectOptions = getSelectFilter(filter, filterParsed);\n if (selectOptions) finalFilter[filter.column] = selectOptions;\n\n break;\n }\n\n case 'date_range_radio': {\n const parsedOptions = filterParsed[filter.column] as [string, string] | undefined;\n\n if (parsedOptions) {\n finalFilter[filter.column] = parsedOptions;\n }\n\n break;\n }\n\n case 'single_select_helper': {\n filter.used_by.forEach(columnName => {\n const helpedFilter = filterParsed[columnName];\n\n if (helpedFilter) {\n const value = {\n label: helpedFilter![helpedFilter!.length - 1],\n value: helpedFilter![helpedFilter!.length - 1],\n } as SelectOption;\n finalFilter[filter.column] = value;\n }\n });\n\n break;\n }\n\n case 'filter_group_custom': {\n const data = filter.data as FilterGroupDataSection[];\n\n data.forEach(section => {\n switch (section.type) {\n case 'multi_select': {\n const selectOptions = getSelectFilter(section as BaseFilter<any>, filterParsed);\n\n if (selectOptions) finalFilter[section.column] = selectOptions;\n\n break;\n }\n\n case 'checkbox': {\n let checkboxFilters = getCheckboxFilter(section as BaseFilter<any>, filterParsed);\n checkboxFilters.forEach(cbFilter => {\n finalFilter[cbFilter.key] = cbFilter.value;\n });\n break;\n }\n\n case 'radio': {\n // @ts-ignore\n finalFilter[section.column] = filterParsed[section.column] || '';\n break;\n }\n\n case 'date_range': {\n finalFilter[section.column] = getDateRangeFilter(\n section as RangeFilter<null>,\n filterParsed\n );\n break;\n }\n\n default:\n break;\n }\n });\n\n break;\n }\n\n default:\n break;\n }\n });\n });\n\n // Handle company assigned tag special case.\n if (filterParsed.my_assigned_companies) {\n finalFilter.my_assigned_companies = filterParsed.my_assigned_companies as string;\n }\n\n // Handle Israel Region in Pipeline Report\n if (filterParsed.is_il_optx_score && hasPipelineReportFilters) {\n finalFilter.country = 'Israel';\n }\n\n // Handle IVC or Israel tag special case.\n if (filterParsed.is_in_israel) {\n finalFilter.is_in_israel = filterParsed.is_in_israel as string;\n }\n\n // Handle is platform/portfolio company special case.\n if (filterParsed.is_platform) {\n finalFilter.is_platform = filterParsed.is_platform as string;\n }\n\n // Handle source scrub list special case.\n if (filterParsed.ss_list_id) {\n finalFilter.ss_list_id = filterParsed.ss_list_id as string;\n }\n\n // Handle my watchlist list special case.\n if (filterParsed.saved_list_id) {\n finalFilter.saved_list_id = filterParsed.saved_list_id as string;\n }\n\n // Handle parent company special case.\n if (filterParsed.parentcompany) {\n const formatedValue: string =\n filterParsed.parentcompany instanceof Array\n ? filterParsed.parentcompany.join()\n : (filterParsed.parentcompany as string);\n finalFilter.parentcompany = formatedValue;\n }\n\n // Handle query special case.\n if (filterParsed.query) {\n const formatedValue: string =\n filterParsed.query instanceof Array\n ? filterParsed.query.join()\n : (filterParsed.query as string);\n finalFilter.query = formatedValue;\n }\n\n // Handle Company Name+URL query special case.\n if (filterParsed.company_name_or_url) {\n finalFilter.company_name_or_url = filterParsed.company_name_or_url as string;\n }\n\n // fix for special case for ebitda_numeric, it has another parameter,\n // ebitda_string, which contains extra checkbox values\n if (filterParsed.ebitda_string) {\n const checkboxes = (finalFilter.ebitda_numeric as FormCheckableRangeOption[])[0]\n .check as FormCheckboxOption[];\n\n const ebitdaString: string[] =\n typeof filterParsed.ebitda_string === 'string'\n ? filterParsed.ebitda_string.split(',')\n : (filterParsed.ebitda_string as string[]);\n\n ebitdaString.forEach(value => {\n const index = checkboxes?.findIndex(checkbox => checkbox.value === value);\n\n if (index && index > -1) {\n checkboxes[index].checked = true;\n }\n });\n }\n\n // handle special case for next and last touch date (hidden from filters modal)\n if (filterParsed.next_touch_date) {\n finalFilter.next_touch_date = filterParsed.next_touch_date as string[];\n }\n\n if (filterParsed.last_touch_date) {\n finalFilter.last_touch_date = filterParsed.last_touch_date as string[];\n }\n\n // this is a hidden filter requested by API\n if (filterParsed.addon_bool) {\n finalFilter.addon_bool = filterParsed.addon_bool as string;\n }\n\n if (filterParsed.next_touch_date_days) {\n finalFilter.next_touch_date_days = filterParsed.next_touch_date_days as string;\n }\n\n if (filterParsed.last_touch_date_days) {\n finalFilter.last_touch_date_days = filterParsed.last_touch_date_days as string;\n }\n\n return [finalFilter, searchQuery];\n};\n\nexport const parseFilterSorting = (\n filterParsed: Dictionary<Array<string>>,\n filterSources: Array<FilterSource> = []\n) => {\n const sorting = [] as Array<FilterSorting>;\n const parsedSorting = [] as Array<ParsedFilterSorting>;\n\n if (\n typeof filterParsed.sort_fields === 'string' &&\n typeof filterParsed.sort_orders === 'string'\n ) {\n sorting.push({\n id: filterParsed.sort_fields,\n desc: filterParsed.sort_orders === 'asc' ? 'Ascending' : 'Descending',\n });\n } else {\n filterParsed.sort_fields.forEach((sortField: string, index: number) => {\n sorting.push({\n id: sortField,\n desc: filterParsed.sort_orders[index] === 'asc' ? 'Ascending' : 'Descending',\n });\n });\n }\n\n sorting.forEach((sortItem: FilterSorting, index: number) => {\n filterSources.forEach(filterSource => {\n each(filterSource.data, filter => {\n if (\n sortItem.id === filter.column ||\n (sortItem.id === 'date_presented' && filter.column === 'date_presented_group')\n ) {\n parsedSorting.push({ name: filter.label, order: sorting[index].desc });\n\n return false;\n }\n });\n });\n });\n\n return parsedSorting;\n};\n\n// eslint-disable-next-line consistent-return\nexport const parseFiltersKeys = (item: string): string | undefined => {\n // Rank\n if (item.startsWith('score_v3')) {\n return 'New OPTX Score (BETA)';\n }\n\n if (item.startsWith('score')) {\n return 'OPTX Score';\n }\n\n if (item.startsWith('il_optx_score')) {\n return 'IL OPTX Score';\n }\n\n if (item.startsWith('company_id')) {\n return 'Similar Companies';\n }\n\n if (item.startsWith('pipeline_rank')) {\n return 'Pipeline Rank';\n }\n\n if (item.startsWith('sw_website_rank_per_country')) {\n return 'US Website Rank';\n }\n\n if (item.startsWith('sw_website_rank')) {\n return 'WW Website Rank';\n }\n\n if (item.startsWith('is_interesting')) {\n return 'PSG Fit';\n }\n\n if (item.startsWith('url_status')) {\n return 'Website';\n }\n\n if (item.startsWith('is_on_linkedin')) {\n return 'Has Linkedin Profile';\n }\n\n if (item.startsWith('g2_rating')) {\n return 'G2Crowd Rating';\n }\n\n if (item.startsWith('g2_review_count')) {\n return 'G2Crowd Reviews';\n }\n\n if (item.startsWith('ct_rating')) {\n return 'Capterra Rating';\n }\n\n if (item.startsWith('ct_review_count')) {\n return 'Capterra Reviews';\n }\n\n if (item.startsWith('cb_rank')) {\n return 'CrunchBase Rank';\n }\n\n // Company Background\n if (item.startsWith('is_software_verified')) {\n return 'Verified Software Companies';\n }\n\n if (item.startsWith('is_software')) {\n return 'Show Software Companies';\n }\n\n if (item.startsWith('is_ai_ml')) {\n return 'Show AI / ML Companies';\n }\n\n if (item.startsWith('num_employees')) {\n return 'Number of Employees';\n }\n\n if (item.startsWith('is_company_reviewed')) {\n return 'Show Reviewed Companies';\n }\n\n if (item.startsWith('emp_growth_percent')) {\n return 'Employee Growth Percentage Y/Y';\n }\n\n if (item.startsWith('job_openings_percent')) {\n return 'Job Openings (%)';\n }\n\n if (item.startsWith('job_openings')) {\n return 'Job Openings';\n }\n\n if (item.startsWith('country')) {\n return 'Country';\n }\n\n if (item.startsWith('state')) {\n return 'State/Province';\n }\n\n if (item.startsWith('city')) {\n return 'Town/City';\n }\n\n if (item.startsWith('geo_range')) {\n return 'Geographic Range';\n }\n\n if (item.startsWith('year_founded')) {\n return 'Year Founded';\n }\n\n if (item.startsWith('company_type')) {\n return 'Company Type';\n }\n\n if (item.startsWith('opportunity_type')) {\n return 'Opportunity Type';\n }\n\n if (item.startsWith('product_category')) {\n return 'Product Category';\n }\n\n if (item.startsWith('sector')) {\n return 'Sector';\n }\n\n if (item.startsWith('sub_sector')) {\n return 'Sub Sector';\n }\n\n if (item.startsWith('sub_vertical')) {\n return 'Sub Vertical';\n }\n\n if (item.startsWith('has_parent')) {\n return 'Has Parent Company';\n }\n\n if (item.startsWith('diversity')) {\n return 'Diversity Spotlight (US Only)';\n }\n\n if (item.startsWith('customer_type')) {\n return 'Customer Type';\n }\n\n if (item.startsWith('sales_and_marketing')) {\n return 'Sales & Marketing';\n }\n\n if (item.startsWith('sales_cycle')) {\n return 'Sales Cycle';\n }\n\n if (item.startsWith('delivery_model')) {\n return 'Delivery Model';\n }\n\n if (item.startsWith('cloud_provider')) {\n return 'Cloud Provider';\n }\n\n if (item.startsWith('last_ebitda_margin')) {\n return 'EBITDA Margin';\n }\n\n // Financial & Stages\n if (item.startsWith('raise_date')) {\n return 'Last Funding Round Date';\n }\n\n if (item.startsWith('last_round')) {\n return 'Last Round';\n }\n\n if (item.startsWith('capital_raised')) {\n return 'Total Raised ($)';\n }\n\n if (item.startsWith('last_rev_update_amount')) {\n return 'Revenue ($)';\n }\n\n if (item.startsWith('ebitda_numeric') || item.startsWith('ebitda_string')) {\n return 'EBITDA ($)';\n }\n\n if (item.startsWith('fund')) {\n return 'Fund';\n }\n\n if (item.startsWith('next_steps')) {\n return 'Next Steps';\n }\n\n if (item.startsWith('stage')) {\n return 'Stage';\n }\n\n if (item.startsWith('last_valuation')) {\n return 'Valuation';\n }\n\n if (item.startsWith('last_arr_value')) {\n return 'ARR ($)';\n }\n\n if (item.startsWith('last_gross_margin')) {\n return 'GM %';\n }\n\n if (item.startsWith('last_rev_growth')) {\n return 'Growth %';\n }\n\n if (item.startsWith('last_raised_amount')) {\n return 'Last Raised Amount';\n }\n\n if (item.startsWith('revenue_model')) {\n return 'Revenue Model';\n }\n\n if (item.startsWith('cashflow')) {\n return 'Cashflow';\n }\n\n if (item.startsWith('deal_type')) {\n return 'Deal Type';\n }\n\n if (item.startsWith('banker_name')) {\n return 'Banker';\n }\n\n if (item.startsWith('asking_amount')) {\n return 'Equity Check (Ask Amount)';\n }\n\n if (item.startsWith('architecture')) {\n return 'Architecture';\n }\n\n // Data & Management\n if (item.startsWith('source_tag_filter')) {\n return 'Data Source Presence';\n }\n\n if (item.startsWith('company_owner_id')) {\n return 'Company Owner (Analyst)';\n }\n\n if (item.startsWith('has_date_presented')) {\n return 'Has Date Presented';\n }\n\n if (item.startsWith('created_on_optx')) {\n return 'Date Created';\n }\n\n if (item.startsWith('senior_advisor_thesis')) {\n return 'Senior Advisor Thesis';\n }\n\n if (item.startsWith('lead_source')) {\n return 'Lead Source';\n }\n\n if (item.startsWith('last_touch_date')) {\n return 'Last Touch';\n }\n\n if (item.startsWith('last_touch_initiator')) {\n return 'Last Touch Initiator';\n }\n\n if (item.startsWith('next_touch_date')) {\n return 'Future Touch';\n }\n\n if (item.startsWith('next_touch_initiator')) {\n return 'Future Touch Initiated By';\n }\n\n if (item.startsWith('addon')) {\n return 'Add-on';\n }\n\n if (item.startsWith('active_investors')) {\n return 'Active Investors';\n }\n\n if (item.startsWith('active')) {\n return 'Active on Pipeline Companies';\n }\n\n if (item.startsWith('last_automatic_data_update') || item.startsWith('last_manual_data_update')) {\n return 'Last Data Update';\n }\n\n if (item.startsWith('is_viewed')) {\n return 'Companies Viewed';\n }\n\n // Handle company profile special tags applying\n if (item.startsWith('company_tag')) {\n return 'Tags';\n }\n\n if (item.startsWith('is_platform')) {\n return 'Platform Company';\n }\n\n // Handle IVC or Israel special tag applying\n if (item.startsWith('is_in_israel')) {\n return 'IVC or Israel';\n }\n\n // Handle Touch Type Filters\n if (item.startsWith('completed_touch_option')) {\n return 'Completed Touch Option';\n }\n\n if (item.startsWith('completed_touch_type')) {\n return 'Completed Touch Type';\n }\n\n if (item.startsWith('completed_touch_type_date')) {\n return 'Completed Touch Type Date';\n }\n\n if (item.startsWith('completed_touch_date_lower')) {\n return 'Completed Touch Date Lower';\n }\n\n if (item.startsWith('completed_touch_date_upper')) {\n return 'Completed Touch Date Upper';\n }\n\n if (item.startsWith('completed_touch')) {\n return 'Completed Touch Type(s)';\n }\n\n if (item.startsWith('schedule_touch_type')) {\n return 'Scheduled Touch Type';\n }\n\n if (item.startsWith('schedule_touch_type_date')) {\n return 'Scheduled Touch Type Date';\n }\n\n if (item.startsWith('schedule_touch_date_upper')) {\n return 'Scheduled Touch Date Upper';\n }\n\n if (item.startsWith('schedule_touch_date_lower')) {\n return 'Scheduled Touch Date Lower';\n }\n\n if (item.startsWith('schedule_touch')) {\n return 'Scheduled Touch Type(s)';\n }\n\n if (item.startsWith('size_multiple_lower')) {\n return 'Size Multiple';\n }\n\n if (item.startsWith('size_multiple_upper')) {\n return 'Size Multiple';\n }\n\n if (item.startsWith('psg_attendees')) {\n return 'PSG Attendees';\n }\n\n if (item.startsWith('psg_attendees_date_type')) {\n return 'PSG Attendees Type Date';\n }\n\n if (item.startsWith('psg_attendees_date_lower')) {\n return 'PSG Attendees Date Lower';\n }\n\n if (item.startsWith('psg_attendees_date_upper')) {\n return 'PSG Attendees Date Upper';\n }\n};\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst selectListImportState = (state: AppState) => state.favoriteLists.listImport;\n\nexport const isInProgress = createSelector(selectListImportState, state => state.loading);\nexport const isCompleted = createSelector(selectListImportState, state => state.completed);\nexport const getPercentageCompleted = createSelector(\n selectListImportState,\n state => state.percentageCompleted.result\n);\nexport const getFailedImports = createSelector(selectListImportState, state => state.failedImports);\nexport const getCanceledImports = createSelector(\n selectListImportState,\n state => state.canceledImports\n);\nexport const getImportCompaniesCount = createSelector(\n selectListImportState,\n state => state.importCompaniesCount\n);\nexport const getImportCompanies = createSelector(\n selectListImportState,\n state => state.importCompanies\n);\nexport const getWatchlistTitle = createSelector(selectListImportState, state => state.title);\nexport const getEditingCompanyIndex = createSelector(\n selectListImportState,\n state => state.editingCompanyIndex\n);\nexport const getResults = createSelector(selectListImportState, state => state.results);\nexport const getListId = createSelector(selectListImportState, state => state.listId);\nexport const cancel = createSelector(selectListImportState, state => state.cancel);\nexport const showSimilarCompanies = createSelector(\n selectListImportState,\n state => state.showSimilarCompanies\n);\nexport const getSimilarCompanies = createSelector(\n selectListImportState,\n state => state.similarCompanies\n);\n\nexport const successfulCount = createSelector(selectListImportState, state => {\n const successCompanies =\n state.importCompaniesCount -\n state.failedImports.length -\n state.failedImportsOnRequest.length -\n state.canceledImportsNumber;\n\n if (successCompanies) {\n return successCompanies;\n }\n\n return 0;\n});\n\nexport const getCanceledImportsNumber = createSelector(\n selectListImportState,\n state => state.canceledImportsNumber\n);\n\nexport const getFailedImportsOnRequestNumber = createSelector(\n selectListImportState,\n state => state.failedImportsOnRequest.length\n);\n\nexport const getFailedImportsOnRequest = createSelector(\n selectListImportState,\n state => state.failedImportsOnRequest\n);\n\nexport const getFailedBatches = createSelector(selectListImportState, state => state.failedBatches);\nexport const getIsEditing = createSelector(selectListImportState, state => state.isEditing);\n","export const BULK_IMPORT_LIMIT = 30;\nexport const BULK_RETRY_IMPORT_LIMIT = BULK_IMPORT_LIMIT;\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { forEach, indexOf } from 'lodash';\nimport {\n CompanyImport,\n CompanyImportFailedData,\n ImportSimilarCompanies,\n} from '@optx/models/Company';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\nimport * as actions from './actions';\nimport { ListImportState, ImportedCompany, ImportResults, PercentageCompleted } from './interfaces';\n\nexport const initialState: ListImportState = {\n data: null,\n failedImports: [],\n canceledImports: [],\n importCompanies: [],\n failedImportsOnRequest: [],\n results: [],\n error: '',\n title: '',\n listId: null,\n editingCompanyIndex: null,\n isEditing: false,\n percentageCompleted: { result: 0 },\n importCompaniesCount: 0,\n canceledImportsNumber: 0,\n failedBatches: 0,\n showSimilarCompanies: false,\n similarCompanies: [],\n loading: false,\n completed: false,\n cancel: false,\n};\n\n// fetch favorite lists success reducer\nconst importFavoriteListSuccessReducer: CaseReducer<\n ListImportState,\n PayloadAction<CompanyImport>\n> = (draftState, action) => {\n const listImports = action.payload;\n draftState.loading = false;\n\n forEach(listImports.failed_company_data, (value, key) => {\n if (indexOf(draftState.failedImports, value) < 0) {\n draftState.failedImports.push(value);\n }\n });\n\n draftState.data = listImports;\n};\n\nconst updateCanceledImportsReducer: CaseReducer<\n ListImportState,\n PayloadAction<CompanyImportFailedData[]>\n> = (draftState, action) => {\n draftState.canceledImports = action.payload;\n};\n\nconst cancelReducer: CaseReducer<ListImportState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.cancel = action.payload;\n};\n\nconst updateImportCompaniesReducer: CaseReducer<\n ListImportState,\n PayloadAction<{ title: string; data: ImportedCompany[] }>\n> = (draftState, action) => {\n draftState.importCompanies = action.payload.data;\n draftState.importCompaniesCount = action.payload.data.length;\n draftState.title = action.payload.title;\n};\n\nconst updateImportCompaniesIdsReducer: CaseReducer<\n ListImportState,\n PayloadAction<Array<{ companyName: string; id: number; URL: string; raw_url: string | null }>>\n> = (draftState, action) => {\n action.payload.forEach(({ companyName, id, URL: companyUrl, raw_url }) => {\n const index = draftState.results.findIndex(\n ({ URL, Company }) => Company === companyName && URL === companyUrl\n );\n\n draftState.results[index] = {\n ...draftState.results[index],\n raw_url,\n company_id: id,\n Reason: '',\n possible_matches: [],\n };\n });\n};\n\nconst removeFailedCompamyReducer: CaseReducer<\n ListImportState,\n PayloadAction<{ Company: string; URL: string }>\n> = (draftState, { payload }) => {\n const failedCompanieyIndex = draftState.failedImports.findIndex(\n ({ Company, URL }) => Company === payload.Company || URL === payload.URL\n );\n\n draftState.failedImports.splice(failedCompanieyIndex, 1);\n};\n\nconst removeFailedCompamiesReducer: CaseReducer<ListImportState, PayloadAction<string[]>> = (\n draftState,\n action\n) => {\n action.payload.forEach(companyName => {\n draftState.failedImportsOnRequest = draftState.failedImportsOnRequest.filter(\n ({ Company }) => Company !== companyName\n );\n });\n};\n\nconst editCompaniesReducer: CaseReducer<\n ListImportState,\n PayloadAction<CompanyImportFailedData[]>\n> = (draftState, { payload }) => {\n payload.forEach(importedCompany => {\n const companyIndex = draftState.importCompanies.findIndex(\n ({ Company }) => Company === importedCompany.Company\n );\n\n if (companyIndex) {\n draftState.importCompanies[companyIndex] = {\n Company: importedCompany.Company,\n URL: importedCompany.URL,\n Website: importedCompany.URL,\n raw_url: importedCompany.raw_url,\n };\n draftState.results = draftState.results.map(result => {\n if (result.Company === importedCompany.Company) {\n return {\n ...result,\n possible_matches: importedCompany.possible_matches,\n count_possible_matches: importedCompany.count_possible_matches,\n Reason: importedCompany.Reason,\n };\n }\n\n return result;\n });\n }\n });\n};\n\nconst setIsLoadingReducer: CaseReducer<ListImportState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.loading = action.payload;\n};\n\nconst saveResultsReducer: CaseReducer<ListImportState, PayloadAction<ImportResults>> = (\n draftState,\n action\n) => {\n if (action.payload.sort) {\n draftState.results = Array.from(action.payload.data).sort((a, b) => {\n let comparison = 0;\n\n if (a.Reason < b.Reason) {\n comparison = 1;\n } else if (a.Reason > b.Reason) {\n comparison = -1;\n }\n\n return comparison;\n });\n } else {\n draftState.results = action.payload.data;\n }\n};\n\nconst resetProgressReducer: CaseReducer<ListImportState> = draftState => {\n draftState.results = [];\n draftState.failedImportsOnRequest = [];\n draftState.failedImports = [];\n draftState.completed = false;\n draftState.percentageCompleted.result = 0;\n draftState.failedBatches = 0;\n draftState.importCompaniesCount = 0;\n draftState.canceledImportsNumber = 0;\n draftState.editingCompanyIndex = null;\n draftState.title = '';\n draftState.listId = null;\n draftState.data = null;\n draftState.isEditing = false;\n draftState.cancel = false;\n draftState.showSimilarCompanies = false;\n draftState.similarCompanies = [];\n draftState.importCompanies = [];\n draftState.canceledImports = [];\n};\n\nconst updateCompletedReducer: CaseReducer<ListImportState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.completed = action.payload;\n\n if (draftState.completed) {\n // Show errors on top when completed\n draftState.results = Array.from(draftState.results).sort((a, b) => {\n let comparison = 0;\n\n if (a.Reason < b.Reason) {\n comparison = 1;\n } else if (a.Reason > b.Reason) {\n comparison = -1;\n }\n\n return comparison;\n });\n }\n};\n\nconst updatePercentageReducer: CaseReducer<ListImportState, PayloadAction<PercentageCompleted>> = (\n draftState,\n action\n) => {\n const { result: addProgress, isPrevious } = action.payload;\n\n if (addProgress === 0 || addProgress === 100) {\n draftState.percentageCompleted.result = addProgress;\n } else if (addProgress === 0 || (addProgress === 100 && isPrevious)) {\n draftState.percentageCompleted.result = addProgress;\n } else {\n draftState.percentageCompleted.result += addProgress;\n }\n};\n\nconst updateProgressReducer: CaseReducer<ListImportState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.loading = action.payload;\n};\n\nconst editCompanyReducer: CaseReducer<ListImportState, PayloadAction<ImportedCompany>> = (\n draftState,\n { payload }\n) => {\n const companyIndex = draftState.editingCompanyIndex;\n\n if (companyIndex) {\n draftState.importCompanies[companyIndex] = payload;\n }\n};\n\nconst editingCompanyIndexReducer: CaseReducer<ListImportState, PayloadAction<number | null>> = (\n draftState,\n { payload }\n) => {\n draftState.editingCompanyIndex = payload;\n};\n\nconst saveListIdReducer: CaseReducer<ListImportState, PayloadAction<number>> = (\n draftState,\n { payload }\n) => {\n draftState.listId = payload;\n};\n\nconst showSimilarCompaniesReducer: CaseReducer<ListImportState, PayloadAction<boolean>> = (\n draftState,\n { payload }\n) => {\n draftState.showSimilarCompanies = payload;\n};\n\nconst setIsEditingReducer: CaseReducer<ListImportState, PayloadAction<boolean>> = (\n draftState,\n { payload }\n) => {\n draftState.isEditing = payload;\n};\n\nconst setSimilarCompaniesReducer: CaseReducer<\n ListImportState,\n PayloadAction<ImportSimilarCompanies[]>\n> = (draftState, { payload }) => {\n draftState.similarCompanies = payload;\n};\n\nconst updateCanceledImportsNumberReducer: CaseReducer<ListImportState, PayloadAction<number>> = (\n draftState,\n { payload }\n) => {\n draftState.canceledImportsNumber = payload;\n};\n\nconst setFailedBatchesReducer: CaseReducer<ListImportState, PayloadAction<number>> = (\n draftState,\n { payload }\n) => {\n draftState.failedBatches = payload;\n};\n\nconst setFailedImportsOnRequestReducer: CaseReducer<\n ListImportState,\n PayloadAction<ImportedCompany[]>\n> = (draftState, action) => {\n draftState.failedImportsOnRequest.push(...action.payload);\n};\n\nconst removeFailedImportsOnRequestReducer: CaseReducer<ListImportState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.failedImportsOnRequest = draftState.failedImportsOnRequest.filter(\n ({ Company }) => Company !== action.payload\n );\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.importFavoriteList, fetchReducers.fetchReducer)\n .addCase(actions.importFavoriteListSuccess, importFavoriteListSuccessReducer)\n .addCase(actions.resetProgress, resetProgressReducer)\n .addCase(actions.updateCompleted, updateCompletedReducer)\n .addCase(actions.saveResults, saveResultsReducer)\n .addCase(actions.setLoading, setIsLoadingReducer)\n .addCase(actions.cancel, cancelReducer)\n .addCase(actions.updateImportCompanies, updateImportCompaniesReducer)\n .addCase(actions.updatePercentage, updatePercentageReducer)\n .addCase(actions.updateProgress, updateProgressReducer)\n .addCase(actions.editCompany, editCompanyReducer)\n .addCase(actions.editingCompanyIndex, editingCompanyIndexReducer)\n .addCase(actions.saveListId, saveListIdReducer)\n .addCase(actions.showSimilarCompanies, showSimilarCompaniesReducer)\n .addCase(actions.setSimilarCompanies, setSimilarCompaniesReducer)\n .addCase(actions.updateImportCompaniesIds, updateImportCompaniesIdsReducer)\n .addCase(actions.removeFailedCompamy, removeFailedCompamyReducer)\n .addCase(actions.updateCanceledImports, updateCanceledImportsReducer)\n .addCase(actions.updateCanceledImportsNumber, updateCanceledImportsNumberReducer)\n .addCase(actions.setFailedImportsOnRequest, setFailedImportsOnRequestReducer)\n .addCase(actions.removeFailedImportsOnRequest, removeFailedImportsOnRequestReducer)\n .addCase(actions.setFailedBatches, setFailedBatchesReducer)\n .addCase(actions.editCompanies, editCompaniesReducer)\n .addCase(actions.removeFailedCompamies, removeFailedCompamiesReducer)\n .addCase(actions.setIsEditing, setIsEditingReducer)\n);\n\nexport default reducer;\n","import { PageInfo } from '@models/table/Pagination';\n\nexport const DEFAULT_PAGINATION_PAGE_NUMBER = 1;\nexport const DEFAULT_PAGINATION_PAGE_SIZE = 50;\nexport const LONG_CARD_VIEW_DEFAULT_PAGE_SIZE = 50;\nexport const LONG_CARD_VIEW_DEFAULT_LOAD_MORE_SIZE = 10;\n\nexport const DEFAULT_PAGINATION: PageInfo = {\n pageNumber: DEFAULT_PAGINATION_PAGE_NUMBER,\n pageSize: DEFAULT_PAGINATION_PAGE_SIZE,\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { AsyncMultiSelectPayload } from './interfaces';\nimport {\n SEARCH_ASYNC_MULTISELECT,\n SEARCH_ASYNC_MULTISELECT_SUCCESS,\n SEARCH_ASYNC_MULTISELECT_FAIL,\n} from './actionTypes';\n\nexport const searchAsyncMultiSelect = createAction(\n SEARCH_ASYNC_MULTISELECT,\n (payload: AsyncMultiSelectPayload, callback: SuccessErrorCallback) => ({\n payload,\n meta: callback,\n })\n);\n\nexport const fetchAsyncMultiSelectSuccess = createAction<Array<any>>(\n SEARCH_ASYNC_MULTISELECT_SUCCESS\n);\n\nexport const fetchAsyncMultiSelectFail = createAction<string>(SEARCH_ASYNC_MULTISELECT_FAIL);\n","export const SEARCH_ASYNC_MULTISELECT = 'SEARCH_ASYNC_MULTISELECT';\nexport const SEARCH_ASYNC_MULTISELECT_SUCCESS = 'SEARCH_ASYNC_MULTISELECT_SUCCESS';\nexport const SEARCH_ASYNC_MULTISELECT_FAIL = 'SEARCH_ASYNC_MULTISELECT_FAIL';\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, put, takeLatest } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { formattingSquareBrackets } from '@optx/utils/utils';\nimport {\n searchAsyncMultiSelect,\n fetchAsyncMultiSelectSuccess,\n fetchAsyncMultiSelectFail,\n} from './actions';\nimport { AsyncMultiSelect } from '../../services/api';\nimport NotificationService from '../../services/NotificationService';\nimport { AsyncMultiSelectPayload } from './interfaces';\n\nexport function* fetchAsyncMultiSelectSaga(\n action: PayloadAction<AsyncMultiSelectPayload, any, SuccessErrorCallback>\n) {\n const { payload, meta: callback } = action;\n\n try {\n const res: AxiosResponse<Array<any>> = yield call(AsyncMultiSelect.getOptions, payload);\n\n if (res.data) {\n const modifiedData = res.data.map(item => ({\n value: item.value,\n label: item.location_info\n ? `${item.name} ${formattingSquareBrackets(item.location_info as string)}`\n : item.name || item.label,\n id: item.company_id ?? item.id,\n isDefault: item.is_default,\n }));\n // for some reason API is sending on reponse a tag with a value of a unicode U+00ad\n // and this appear invisible on front-end\n const modifiedDataWithOutSpecialUnicodeAndBlank = modifiedData.filter(\n item => item.label !== DEFAULT_EMPTY_VALUE && item.label !== ''\n );\n\n yield put(fetchAsyncMultiSelectSuccess(modifiedDataWithOutSpecialUnicodeAndBlank));\n\n callback && callback(modifiedDataWithOutSpecialUnicodeAndBlank);\n } else {\n const errorMessage = 'Failed to fetch Async MultiSelect!';\n yield put(fetchAsyncMultiSelectFail(errorMessage));\n callback && callback(null, errorMessage);\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Failed to fetch Async MultiSelect!';\n yield put(fetchAsyncMultiSelectFail(errorMessage));\n callback && callback(null, errorMessage);\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* AsyncMultiSelectSaga() {\n yield takeLatest(searchAsyncMultiSelect.type, fetchAsyncMultiSelectSaga);\n}\n","import { Dictionary } from 'lodash';\n\n// redux\nimport { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport { useInjectSaga } from 'redux-injectors';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { actions, saga } from '../../../redux/async-multiselect';\n\ninterface SelectSearchPayload {\n query?: string;\n endpoint: string;\n additionalOptions?: Dictionary<number | string | Array<string>>;\n}\n\ninterface UseAsyncSearchOptions {\n endpoint: string;\n action?: (payload: SelectSearchPayload, callback: SuccessErrorCallback) => void;\n dependenciesOptions?: Dictionary<number | string | Array<string>>;\n}\n\nconst useInjectAsyncMultiSelect = () => {\n useInjectSaga({ key: 'asyncMultiSelect', saga });\n};\n\n// action\nconst searchAction = actions.searchAsyncMultiSelect;\n\nconst useAsyncSearch = (options: UseAsyncSearchOptions) => {\n useInjectAsyncMultiSelect();\n\n const { endpoint, action = searchAction, dependenciesOptions } = options;\n\n const dispatch = useDispatch();\n const search = useCallback(\n (query: string, callback: SuccessErrorCallback) => {\n dispatch(\n action(\n {\n query,\n endpoint,\n additionalOptions: dependenciesOptions,\n },\n callback\n )\n );\n },\n [dispatch, action, endpoint, dependenciesOptions]\n );\n\n return {\n loadOptions: search,\n };\n};\n\nexport default useAsyncSearch;\n","export default 'bulk-salesloft';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const fetchCompaniesContacts = createFeatureActionType(\n featureName,\n 'FETCH_COMPANIES_CONTACTS'\n);\nexport const fetchCompaniesContactsSuccess = createFeatureActionType(\n featureName,\n 'FETCH_COMPANIES_CONTACTS_SUCCESS'\n);\n\nexport const setModalVisible = createFeatureActionType(featureName, 'SET_MODAL_VISIBLE');\nexport const addContact = createFeatureActionType(featureName, 'BULK_SALESLOFT_ADD_CONTACT');\nexport const addContactSuccess = createFeatureActionType(\n featureName,\n 'BULK_SALESLOFT_ADD_CONTACT_SUCCESS'\n);\nexport const resolveSalesloft = createFeatureActionType(featureName, 'RESOLVE_SALESLOFT');\nexport const resolveSalesloftSuccess = createFeatureActionType(\n featureName,\n 'RESOLVE_SALESLOFT_SUCCESS'\n);\n\nexport const addPersonBulk = createFeatureActionType(featureName, 'ADD_PERSON_BULK');\nexport const addPersonBulkFail = createFeatureActionType(featureName, 'ADD_PERSON_BULK_FAIL');\n\nexport const salesloftSelectContactsBulk = createFeatureActionType(\n featureName,\n 'SALESLOFT_SELECT_CONTACTS_BULK'\n);\n\nexport const updateProgress = createFeatureActionType(featureName, 'UPDATE_PROGRESS');\n\nexport const updateCompleted = createFeatureActionType(featureName, 'UPDATE_COMPLETED');\n\nexport const updatePercentage = createFeatureActionType(featureName, 'UPDATE_PERCENTAGE');\n\nexport const saveResults = createFeatureActionType(featureName, 'SAVE_RESULTS');\n\nexport const resetProgress = createFeatureActionType(featureName, 'RESET_PROGRESS');\n\nexport const cancel = createFeatureActionType(featureName, 'CANCEL');\n","import { createAction } from '@reduxjs/toolkit';\n// redux\nimport {\n SelectedCompanies,\n ResolveSalesloft,\n ResolveSalesloftSuccess,\n SalesloftContactsBulk,\n SalesloftCompanyContacts,\n SalesloftBulkResults,\n SelectedCompaniesGrids,\n} from '@models/bulkActions';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport * as types from './types';\nimport { SalesloftCadences, AddNewContact } from '../../../../models/Salesloft';\n\nexport const fetchCompaniesContacts = createAction<SelectedCompaniesGrids>(\n types.fetchCompaniesContacts\n);\nexport const fetchCompaniesContactsSuccess = createAction(\n types.fetchCompaniesContactsSuccess,\n (\n contacts: SalesloftCompanyContacts[],\n selectedCompanies: SelectedCompanies[],\n gridName: SelectedCompaniesGrids\n ) => ({\n payload: {\n contacts,\n selectedCompanies,\n gridName,\n },\n })\n);\n\nexport const addPersonBulk = createAction<SalesloftCadences>(types.addPersonBulk);\n\nexport const addContact = createAction<AddNewContact>(types.addContact);\nexport const addContactSuccess = createAction<Partial<CompanyUserContact>>(types.addContactSuccess);\nexport const setModalVisible = createAction<boolean>(types.setModalVisible);\nexport const addPersonBulkFail = createAction<string>(types.addPersonBulkFail);\nexport const resolveSalesloft = createAction<ResolveSalesloft>(types.resolveSalesloft);\nexport const resolveSalesloftSuccess = createAction<ResolveSalesloftSuccess>(\n types.resolveSalesloftSuccess\n);\n\nexport const salesloftSelectContactsBulk = createAction<SalesloftContactsBulk>(\n types.salesloftSelectContactsBulk\n);\n\nexport const updateProgress = createAction<boolean>(types.updateProgress);\n\nexport const updateCompleted = createAction<boolean>(types.updateCompleted);\n\nexport const updatePercentage = createAction<number>(types.updatePercentage);\n\nexport const saveResults = createAction<SalesloftBulkResults[]>(types.saveResults);\n\nexport const resetProgress = createAction(types.resetProgress);\n\nexport const cancel = createAction<boolean>(types.cancel);\n","import { SalesloftBulkState } from './interfaces';\n\nexport const companies = (state: SalesloftBulkState) => state.companies;\nexport const results = (state: SalesloftBulkState) => state.results;\nexport const contacts = (state: SalesloftBulkState) =>\n state.companies.map(company => ({\n company_id: company.company_id,\n company_name: company.company_name,\n company_website: company.company_url,\n contacts: company.salesloft_contacts,\n }));\nexport const inProgress = (state: SalesloftBulkState) => state.inProgress;\nexport const isCompleted = (state: SalesloftBulkState) => state.completed;\nexport const modalVisible = (state: SalesloftBulkState) => state.modalVisible;\nexport const getPercentageCompleted = (state: SalesloftBulkState) => state.percentageCompleted;\nexport const cancel = (state: SalesloftBulkState) => state.cancel;\nexport const getCadenceId = (state: SalesloftBulkState) => state.cadenceId;\n","/* eslint-disable max-len */\nimport { SalesloftBulkState } from '@optx/features/bulk-actions/salesloft/state/interfaces';\nimport { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport {\n SelectedCompanies,\n ResolveSalesloftSuccess,\n SalesloftContactsBulk,\n SalesloftCompanyContacts,\n SalesloftBulkResults,\n} from '@models/bulkActions';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport { SalesloftContact, SalesloftCadences } from '@optx/models/Salesloft';\n// utils\nimport { getSalesloftEmails } from '@optx/utils/salesloft';\nimport { getEmailsFromString } from '@optx/utils/equityTouch';\n// redux\nimport * as equityTouchActions from '@optx/features/bulk-actions/equity-touch/state/actions';\nimport * as actions from './actions';\n\nconst initialState: SalesloftBulkState = {\n companies: [],\n results: [],\n error: '',\n cadenceId: 0,\n modalVisible: false,\n loading: false,\n inProgress: false,\n completed: false,\n percentageCompleted: 0,\n selectedCompaniesCount: 0,\n cancel: false,\n};\n\nconst fetchCompaniesContactsSuccessReducer: CaseReducer<\n SalesloftBulkState,\n PayloadAction<{ contacts: SalesloftCompanyContacts[]; selectedCompanies: SelectedCompanies[] }>\n> = (draftState, action) => {\n const { contacts, selectedCompanies } = action.payload;\n\n const companiesWithContacts = selectedCompanies.map(company => {\n const selectContactIndex = contacts.findIndex(item => item.company_id === company.company_id);\n const primaryContact = contacts[selectContactIndex].contacts.find(\n contact => contact.primary_contact\n );\n\n return {\n ...company,\n contacts: contacts[selectContactIndex].contacts.map(contact => {\n return {\n ...contact,\n company_id: company.company_id,\n email: contact.primary_email,\n emails: getEmailsFromString(contact.primary_email),\n ...getSalesloftEmails(contact.primary_email as string | null),\n };\n }),\n salesloft_contacts: primaryContact\n ? [\n {\n ...primaryContact,\n company_id: company.company_id,\n ...getSalesloftEmails(primaryContact.primary_email as string | null),\n },\n ]\n : [],\n };\n });\n\n draftState.companies = companiesWithContacts;\n draftState.loading = false;\n};\n\nconst addPersonBulkReducer: CaseReducer<SalesloftBulkState, PayloadAction<SalesloftCadences>> = (\n draftState,\n action\n) => {\n draftState.cadenceId = action.payload.id;\n};\n\nconst setModalVisibleReducer: CaseReducer<SalesloftBulkState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.modalVisible = action.payload;\n};\n\nconst updatePercentageReducer: CaseReducer<SalesloftBulkState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n const addProgress = action.payload;\n\n if (addProgress === 0 || addProgress === 100) {\n draftState.percentageCompleted = action.payload;\n } else {\n draftState.percentageCompleted += action.payload;\n }\n};\n\nconst cancelReducer: CaseReducer<SalesloftBulkState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.cancel = action.payload;\n};\n\nconst resetProgressReducer: CaseReducer<SalesloftBulkState> = draftState => {\n return initialState;\n};\n\nconst addNewContactSuccessReducer: CaseReducer<\n SalesloftBulkState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n const newContact = {\n ...action.payload,\n primary_contact: !!action.payload.primary_contact,\n ...getSalesloftEmails(action.payload.email as string),\n };\n const index = draftState.companies.findIndex(\n company => company.company_id === newContact.company_id\n );\n\n if (index !== -1) {\n if (newContact.primary_contact) {\n const primaryContactIndex = draftState.companies[index].contacts.findIndex(\n el => el.primary_contact === true\n );\n\n const primarySalesLoftContactIndex = draftState.companies[\n index\n ]?.salesloft_contacts.findIndex(el => el.person_id === newContact.person_id);\n\n if (primaryContactIndex !== -1) {\n draftState.companies[index].contacts[primaryContactIndex].primary_contact = false;\n }\n\n if (primarySalesLoftContactIndex !== -1) {\n draftState.companies[index].salesloft_contacts[primarySalesLoftContactIndex] = newContact;\n } else {\n draftState.companies[index].salesloft_contacts = [newContact];\n }\n }\n }\n\n if (draftState.companies[index]?.contacts) {\n draftState.companies[index].contacts = draftState.companies[index]?.contacts.concat([\n {\n company_id: newContact.company_id,\n company_name: newContact.company_name,\n ...newContact,\n },\n ]);\n }\n\n draftState.loading = false;\n};\n\nconst resolveSalesloftSuccessReducer: CaseReducer<\n SalesloftBulkState,\n PayloadAction<ResolveSalesloftSuccess>\n> = (draftState, action) => {\n const { company_id: companyId, contacts: resolvedContacts } = action.payload;\n const index = draftState.results.findIndex(result => result.company_id === companyId);\n\n if (index !== -1) {\n if (\n draftState.results[index].contacts.length === 1 &&\n draftState.results[index].contacts[0].person_id === null\n ) {\n draftState.results[index].contacts = resolvedContacts;\n } else {\n resolvedContacts.forEach(contact => {\n const resultIndex = draftState.results[index].contacts.findIndex(\n result => result.person_id === contact.person_id\n );\n\n if (resultIndex !== -1) {\n draftState.results[index].contacts[resultIndex] = contact;\n }\n });\n }\n }\n\n draftState.loading = false;\n};\n\nconst addPersonBulkFailReducer: CaseReducer<SalesloftBulkState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.inProgress = false;\n draftState.error = action.payload;\n};\n\nconst saveResultsReducer: CaseReducer<SalesloftBulkState, PayloadAction<SalesloftBulkResults[]>> = (\n draftState,\n action\n) => {\n draftState.results = [...draftState.results, ...action.payload];\n};\n\nconst updateProgressReducer: CaseReducer<SalesloftBulkState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.inProgress = action.payload;\n};\n\nconst updateCompletedReducer: CaseReducer<SalesloftBulkState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.completed = action.payload;\n};\n\nconst resolveSalesloftReducer: CaseReducer<SalesloftBulkState> = draftState => {\n draftState.loading = true;\n};\n\nconst updateBulkContactSuccessReducer: CaseReducer<\n SalesloftBulkState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n const contact = action.payload;\n const { company_id: companyId } = contact;\n const index = draftState.companies.findIndex(company => company.company_id === companyId);\n\n if (index !== -1) {\n const contactIndex = draftState.companies[index].contacts.findIndex(\n item => item.person_id === contact.person_id\n );\n\n if (contactIndex !== -1) {\n draftState.companies[index].contacts[contactIndex] = {\n ...draftState.companies[index].contacts[contactIndex],\n ...contact,\n additional_phones: contact.phones || null,\n };\n }\n\n const salesloftContactIndex = draftState.companies[index]?.salesloft_contacts.findIndex(\n item => item.person_id === contact.person_id\n );\n\n if (salesloftContactIndex !== -1) {\n draftState.companies[index].salesloft_contacts[salesloftContactIndex] = {\n ...draftState.companies[index]?.salesloft_contacts[salesloftContactIndex],\n ...contact,\n ...getSalesloftEmails(contact.email as string),\n additional_phones: contact.phones || null,\n };\n }\n }\n};\n\nconst salesloftSelectContactsBulkReducer: CaseReducer<\n SalesloftBulkState,\n PayloadAction<SalesloftContactsBulk>\n> = (draftState, action) => {\n const { id, companyId, type, selectedContactData } = action.payload;\n const index = draftState.companies.findIndex(item => item.company_id === companyId);\n\n if (type === 'select') {\n if (selectedContactData) {\n if (Array.isArray(draftState.companies[index].salesloft_contacts)) {\n (draftState.companies[index].salesloft_contacts as SalesloftContact[]).push(\n selectedContactData\n );\n } else {\n draftState.companies[index].salesloft_contacts = [selectedContactData];\n }\n }\n } else if (type === 'deselect') {\n const removeContactIndex = (\n draftState.companies[index]?.salesloft_contacts as SalesloftContact[]\n ).findIndex(contact => contact.person_id === id);\n\n (draftState.companies[index]?.salesloft_contacts as SalesloftContact[]).splice(\n removeContactIndex,\n 1\n );\n } else {\n draftState.companies[index].salesloft_contacts = [];\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchCompaniesContactsSuccess, fetchCompaniesContactsSuccessReducer)\n .addCase(actions.addPersonBulk, addPersonBulkReducer)\n .addCase(actions.addPersonBulkFail, addPersonBulkFailReducer)\n .addCase(actions.saveResults, saveResultsReducer)\n .addCase(actions.updateProgress, updateProgressReducer)\n .addCase(actions.updateCompleted, updateCompletedReducer)\n .addCase(actions.updatePercentage, updatePercentageReducer)\n .addCase(actions.cancel, cancelReducer)\n .addCase(actions.resetProgress, resetProgressReducer)\n .addCase(actions.addContactSuccess, addNewContactSuccessReducer)\n .addCase(actions.resolveSalesloft, resolveSalesloftReducer)\n .addCase(actions.resolveSalesloftSuccess, resolveSalesloftSuccessReducer)\n .addCase(actions.setModalVisible, setModalVisibleReducer)\n .addCase(equityTouchActions.updateBulkContactSuccess, updateBulkContactSuccessReducer)\n .addCase(actions.salesloftSelectContactsBulk, salesloftSelectContactsBulkReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\nimport queryString from 'query-string';\nimport { push } from 'react-router-redux';\n// models\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport { SalesloftCadences, AddNewContact, SalesloftContact } from '@optx/models/Salesloft';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport {\n SelectedCompanies,\n ResolveSalesloft,\n SalesloftBulkContactResponse,\n SalesloftCompanyContacts,\n SalesloftBulkResponse,\n SalesloftBulkResults,\n SelectedCompaniesGrids,\n ResolveSalesloftSuccess,\n} from '@models/bulkActions';\n// constants\nimport { BULK_ADD_COMPANY_LIMIT_SALESLOFT } from '@optx/config/bulkConfig';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// services\nimport { CompanyService, SalesloftService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport { actions as loaderActions } from '@features/custom-global-loader';\nimport { selectors as salesLoftSelector } from '@redux/contacts/salesloft';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport { actions as eqtBulkActions } from '@features/bulk-actions/equity-touch';\nimport { pick } from 'lodash';\nimport { CompanyWithContacts } from './interfaces';\nimport * as actions from './actions';\n\nfunction* fetchCompaniesContactsSaga(action: PayloadAction<SelectedCompaniesGrids>) {\n yield put(loaderActions.toggle({ loading: true }));\n\n const selectedCompanies: SelectedCompanies[] = yield select(\n bulkActionsSelectors.selectedCompanies.getSelectedCompanies(action.payload)\n );\n const defaultErrorMessage = 'Failed to fetch contacts!';\n\n if (!selectedCompanies.length) {\n const urlParams = queryString.parse(window.location.search.substr(1));\n yield put(push(urlParams.referrer as string));\n } else {\n try {\n const res: AxiosResponse<SalesloftCompanyContacts[]> = yield call(\n CompanyService.getCompaniesContacts,\n selectedCompanies.map(company => company.company_id)\n );\n\n if (res.data) {\n yield put(\n actions.fetchCompaniesContactsSuccess(res.data, selectedCompanies, action.payload)\n );\n }\n } catch (error: any) {\n const message = getErrorMessage(error, defaultErrorMessage);\n NotificationService.error(message);\n }\n }\n\n yield put(loaderActions.toggle({ loading: false }));\n}\n\nfunction* addPersonBulkSaga(action: PayloadAction<SalesloftCadences>) {\n const cadence = action.payload;\n const defaultErrorMessage = 'Failed to add to SL Cadence';\n\n const companies: CompanyWithContacts[] = yield select(\n bulkActionsSelectors.salesloft.salesloftBulkCompanies\n );\n const selectedCompanies = [...companies];\n const currentResults: SalesloftBulkResults[] = yield select(\n bulkActionsSelectors.salesloft.results\n );\n const companiesBatch = selectedCompanies.splice(\n currentResults.length,\n BULK_ADD_COMPANY_LIMIT_SALESLOFT\n );\n\n const mappedCompanies = companiesBatch.map(company => ({\n company_id: company.company_id,\n company_name: company.company_name,\n company_website: company.company_url,\n contacts: company?.salesloft_contacts.map(item => ({\n ...pick(item, [\n 'first_name',\n 'last_name',\n 'person_id',\n 'title',\n 'primary_email',\n 'secondary_email',\n 'tertiary_email',\n 'quarternary_email',\n 'phone',\n 'phone_type',\n 'additional_phones',\n 'linkedin',\n ]),\n })),\n }));\n\n try {\n const res: AxiosResponse<SalesloftBulkResponse> = yield call(\n SalesloftService.addPersonBulk,\n cadence,\n mappedCompanies\n );\n\n if (res.data) {\n yield put(\n actions.updatePercentage(\n Math.round((BULK_ADD_COMPANY_LIMIT_SALESLOFT / companies.length) * 100)\n )\n );\n\n const results = res.data.companies.map(result => {\n const companyData = companies.find(company => company.company_id === result.company_id);\n\n return {\n company_id: result.company_id,\n company_website: companyData!.company_url,\n company_raw_url: companyData!.raw_url,\n company_name: result.company_name,\n cadence_id: res.data.cadence_id,\n contacts: [...(result.contacts as SalesloftBulkContactResponse[])],\n };\n });\n const finalResults = [...currentResults, ...results];\n yield put(actions.saveResults(results));\n\n const cancelSearch: boolean = yield select(bulkActionsSelectors.salesloft.cancel);\n\n if (!cancelSearch) {\n if (companies.length !== finalResults.length) {\n yield put(actions.addPersonBulk(cadence));\n } else {\n yield put(actions.updateCompleted(true));\n yield put(actions.updatePercentage(100));\n }\n } else {\n const canceledCompanies: SalesloftBulkResults[] = [];\n const prevResults: SalesloftBulkResults[] = yield select(\n bulkActionsSelectors.salesloft.results\n );\n\n const prevResultsIds = prevResults.map(result => result.company_id);\n\n const remainingCompanies = companies.filter(\n company => !prevResultsIds.includes(company.company_id)\n );\n\n if (remainingCompanies?.length) {\n remainingCompanies.forEach(company => {\n canceledCompanies.push({\n company_id: company.company_id,\n company_website: company.company_url,\n company_raw_url: company.raw_url,\n company_name: company.company_name,\n cadence_id: res.data.cadence_id,\n contacts: [\n {\n person_id: null,\n sl_message: 'Canceled by user',\n sl_resolve: null,\n sl_sync_status: null,\n sl_url: null,\n },\n ],\n });\n });\n }\n\n yield put(actions.saveResults(canceledCompanies));\n yield put(actions.updateCompleted(true));\n yield put(actions.cancel(false));\n yield put(loaderActions.toggle({ loading: false, customText: '' }));\n }\n } else {\n NotificationService.error(defaultErrorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, defaultErrorMessage);\n yield put(actions.addPersonBulkFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n\n yield put(loaderActions.toggle({ loading: false }));\n}\n\nexport function* addNewContactSaga(action: PayloadAction<AddNewContact>) {\n yield put(loaderActions.toggle({ loading: true }));\n\n const { contact, shouldResolve, isEtBulk } = action.payload;\n\n try {\n const res: AxiosResponse<CompanyUserContact> = yield call(CompanyService.addContactToOptx, {\n ...contact,\n company_url: contact.company_url || null,\n });\n\n if (res.data) {\n yield put(actions.addContactSuccess({ ...res.data, company_id: contact.company_id }));\n\n if (shouldResolve) {\n if (isEtBulk) {\n yield put(eqtBulkActions.addBulkContacts([res.data], res.data.company_id as number));\n\n if (!res.data.primary_contact) {\n yield put(\n eqtBulkActions.salesloftSelectContactsBulk({\n id: res.data.person_id as number,\n companyId: res.data.company_id as number,\n type: 'select',\n selectedContactData: res.data,\n })\n );\n }\n\n yield put(eqtBulkActions.resolveSalesloft({ companyId: contact.company_id as number }));\n } else {\n yield put(actions.resolveSalesloft({ companyId: contact.company_id as number }));\n }\n }\n\n if (!shouldResolve) {\n yield put(loaderActions.toggle({ loading: false }));\n }\n }\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to add new contact!');\n NotificationService.error(message);\n yield put(loaderActions.toggle({ loading: false }));\n }\n}\n\nfunction* resolveSalesloftSaga(action: PayloadAction<ResolveSalesloft>) {\n yield put(loaderActions.toggle({ loading: true }));\n const { companyId, all } = action.payload;\n const companies: CompanyWithContacts[] = yield select(\n bulkActionsSelectors.salesloft.salesloftBulkCompanies\n );\n const cadenceId: number = yield select(bulkActionsSelectors.salesloft.getCadenceId);\n const cadences: SalesloftCadences[] = yield select(salesLoftSelector.getCadences);\n const results: SalesloftBulkResults[] = yield select(bulkActionsSelectors.salesloft.results);\n const cadence = cadences.find((item: SalesloftCadences) => item.id === cadenceId);\n const company = companies.find((item: CompanyWithContacts) => item.company_id === companyId);\n const result = results.find(result => result.company_id === companyId);\n const failedContactIds = result?.contacts\n .filter(contact => contact.sl_resolve)\n ?.map(contact => contact.person_id);\n\n let contacts: SalesloftContact[] = [];\n\n if (all || (result?.contacts.length === 1 && result?.contacts[0].person_id === null)) {\n contacts = company?.salesloft_contacts as SalesloftContact[];\n } else if (failedContactIds) {\n contacts = company?.salesloft_contacts.filter((contact: SalesloftContact) =>\n failedContactIds.includes(contact.person_id as number)\n ) as SalesloftContact[];\n }\n\n const formData = {\n cadence_id: cadence?.id,\n cadence_name: cadence?.name,\n team_cadence: cadence?.team_cadence,\n company_website: company?.company_url,\n company_id: companyId,\n company_name: company?.company_name,\n contacts: contacts.map((contact: SalesloftContact) =>\n pick(contact, [\n 'first_name',\n 'last_name',\n 'person_id',\n 'title',\n 'primary_email',\n 'secondary_email',\n 'tertiary_email',\n 'quarternary_email',\n ])\n ),\n };\n\n try {\n const res: AxiosResponse<ResolveSalesloftSuccess> = yield call(\n SalesloftService.postSalesloftData,\n formData\n );\n\n if (res) {\n yield put(actions.resolveSalesloftSuccess(res.data));\n yield put(loaderActions.toggle({ loading: false }));\n }\n } catch (error: any) {\n yield put(loaderActions.toggle({ loading: false }));\n\n const message = getErrorMessage(error, 'Failed to add contact to Sales Loft!');\n\n NotificationService.error(message);\n }\n}\n\nexport default function* salesloftBulkSaga() {\n yield takeLatest(actions.fetchCompaniesContacts, fetchCompaniesContactsSaga);\n yield takeLatest(actions.addPersonBulk, addPersonBulkSaga);\n yield takeLatest(actions.addContact, addNewContactSaga);\n yield takeLatest(actions.resolveSalesloft, resolveSalesloftSaga);\n}\n","import { useEffect, RefObject } from 'react';\n\nexport const useOnClickOutside = (ref: RefObject<any>, handler: (event: Event) => void) => {\n useEffect(() => {\n const listener = (event: Event) => {\n // Do nothing if clicking ref's element or descendent elements\n if (!ref.current || ref.current.contains(event.target)) {\n return;\n }\n\n handler(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, handler]);\n};\n","import { GridKeys } from '@optx/models/grid';\nimport { UserSessionsSettingsSearchKey } from './interface';\n\nexport const userSessionsSettingsGridsSearchKeys: Record<UserSessionsSettingsSearchKey, GridKeys> =\n {\n company_filters: 'advancedSearch',\n user_list_filters: 'lists',\n my_companies_filters: 'myCompanies',\n checklist_insights_companies_filters: 'checklistResearchInsights',\n addon_filters: 'addons',\n sourcing_outreach_detail_filters: 'outreachDetails',\n contact_filters: 'contacts',\n };\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const SET_SEARCH_KEY = createFeatureActionType(featureName, 'SET_SEARCH_KEY');\n","import { GridPayload } from '@optx/models/grid';\nimport { createAction } from '@reduxjs/toolkit';\nimport { SET_SEARCH_KEY } from './types';\n\nexport const setSearchKey = createAction<GridPayload<string>>(SET_SEARCH_KEY);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\nimport { Dictionary } from 'lodash';\n//models\nimport { Filter, FilterSource } from '@optx/models/filters';\nimport { SearchKeyState, UserSessionsSettingsSearchKey } from './interface';\nimport { CompanyFiltersMeta, SearchSaveResponse } from '@optx/models/search';\nimport { GridPayload } from '@optx/models/grid';\nimport { UserInformation, UserSessionSettings } from '@optx/models/user';\n//constants\nimport { userSessionsSettingsGridsSearchKeys } from './constants';\nimport { GRID_KEYS } from '@optx/constants/grid';\nimport appRoutes from '@constants/routes';\n//utils\nimport { generateGridReducerInitialState } from '@optx/utils/grid';\nimport { parseFilter } from '@utils/filters/parseFilters';\n//redux\nimport * as actions from './actions';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { actions as companyFiltersActions } from '@redux/company/filters';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches';\nimport { actions as addonManagementActions } from '@optx/redux/company/addon-management';\n\nconst initialState: SearchKeyState = generateGridReducerInitialState(GRID_KEYS, '');\n\n// clear Addons Mgmt search key on clear icon\nconst clearAddonSearchKeyReducer: CaseReducer<SearchKeyState> = draftState => {\n draftState.addons = '';\n};\n\nconst setSearchKeyReducer: CaseReducer<SearchKeyState, PayloadAction<GridPayload<string>>> = (\n draftState,\n action\n) => {\n const { data, gridKey } = action.payload;\n draftState[gridKey] = data;\n};\n\nconst fetchUserInformationSuccessReducer: CaseReducer<\n SearchKeyState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const sessionSettingsKeys = Object.keys(action.payload.settings.session_settings);\n\n sessionSettingsKeys.forEach(key => {\n const persistedSearch = action.payload.settings.session_settings\n ? action.payload.settings.session_settings[key as keyof UserSessionSettings]\n : undefined;\n\n if (persistedSearch !== undefined && /^.*query.*$/.test(persistedSearch as string)) {\n const data = queryString.parse(persistedSearch as string);\n\n if ((persistedSearch as string).includes('ss_list_id')) {\n draftState.lists = data.query as string;\n }\n\n if (data.rationale_report_query) {\n draftState.checklistResearchInsights = data.rationale_report_query as string;\n } else {\n draftState[userSessionsSettingsGridsSearchKeys[key as UserSessionsSettingsSearchKey]] =\n data.query as string;\n }\n }\n\n if (\n persistedSearch !== undefined &&\n /^.*company_name_or_url.*$/.test(persistedSearch as string)\n ) {\n const data = queryString.parse(persistedSearch as string);\n\n draftState[userSessionsSettingsGridsSearchKeys[key as UserSessionsSettingsSearchKey]] =\n data.company_name_or_url as string;\n }\n });\n};\n\n/**\n * When filters are loaded if there are filters in URL it was a redirect and should reset search key.\n * @param draftState\n * @param action\n */\nconst fetchFiltersSuccessReducer: CaseReducer<\n SearchKeyState,\n PayloadAction<Array<FilterSource>, any, CompanyFiltersMeta>\n> = (draftState, action) => {\n const searchPathname = action.meta.isAnalystOrIsAdmin ? appRoutes.advancedSearch : appRoutes.home;\n\n if (window.location.search && window.location.pathname === searchPathname) {\n const queryFilter = window.location.search.replace('?', '');\n const [parsedFilters] = parseFilter(queryFilter, action.payload);\n\n if (parsedFilters?.query) {\n draftState.advancedSearch = (parsedFilters?.query as string) || '';\n }\n }\n};\n\nconst initializeSavedSearchesAndViewsSuccessReducer: CaseReducer<\n SearchKeyState,\n PayloadAction<\n Array<SearchSaveResponse> | Dictionary<SearchSaveResponse>,\n any,\n {\n filterSources: Array<FilterSource<Filter<any>>>;\n }\n >\n> = (draftState, action) => {\n const allSavedSearches = action.payload as Array<SearchSaveResponse>;\n const { filterSources } = action.meta;\n\n const query = window.location.search ? window.location.search.replace('?', '') : undefined;\n\n const listId = query?.split('=')[1];\n const list = query?.split('=')[0] === 'saved_search_id';\n\n if (list) {\n const savedSearch = allSavedSearches.find(search => search.unique_id.toString() === listId);\n\n if (savedSearch) {\n const queryFilter = savedSearch.search_criteria;\n const [parsedFilters] = parseFilter(queryFilter, filterSources);\n\n if (parsedFilters?.query) {\n draftState.advancedSearch = (parsedFilters?.query as string) || '';\n }\n }\n }\n};\n\nconst reducer = createReducer<SearchKeyState>(initialState, builder => {\n // custom clear addons searchKey on Clear All button\n builder.addCase(addonManagementActions.clearSearch, clearAddonSearchKeyReducer);\n builder.addCase(actions.setSearchKey, setSearchKeyReducer);\n builder.addCase(\n userInformationActions.fetchUserInformationSuccess,\n fetchUserInformationSuccessReducer\n );\n builder.addCase(companyFiltersActions.fetchCompanyFiltersSuccess, fetchFiltersSuccessReducer);\n builder.addCase(\n companyFiltersActions.fetchCompanyFiltersForNotificationsSuccess,\n fetchFiltersSuccessReducer\n );\n builder.addCase(\n savedSearchesActions.initializeSavedSearchesAndViewsSuccess,\n initializeSavedSearchesAndViewsSuccessReducer\n );\n});\n\nexport default reducer;\n","import styled from 'styled-components';\n\nconst CellPopover = styled.div`\n min-width: 300px;\n .singleselect-wrapper {\n min-width: 300px;\n }\n`;\n\nexport default {\n CellPopover,\n};\n","import { Dictionary } from 'lodash';\nimport { createAction } from '@reduxjs/toolkit';\n// models\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { FilterTag } from '@optx/models/tags';\nimport {\n AddonManagementRamoveTagPayload,\n AddonManagementResponse,\n RemoveCompanyFromAddonManagementPayload,\n AdditionalFiltersPayload,\n AdditionalFiltersResponse,\n AdditionalFiltersFailPayload,\n BulkRemoveAddon,\n} from '@optx/redux/company/addon-management/interfaces';\nimport * as types from './actionTypes';\nimport { SearchPayload } from '@optx/models/api/contacts';\nimport { ResetFilter } from '@features/grid/search/state/interfaces';\nimport { AddonColumnWidth, ColumnWidthUserSettings } from '@optx/models/table/Columns';\n\nexport const fetchCompanyAddonManagement = createAction<{\n companyId: number;\n shouldResetPageNumber?: boolean;\n filter?: Dictionary<PreselectedFilter>;\n}>(types.FETCH_COMPANY_ADDON_MANAGEMENT);\n\nexport const fetchCompanyAddonManagementSuccess = createAction(\n types.FETCH_COMPANY_ADDON_MANAGEMENT_SUCCESS,\n (response: AddonManagementResponse, searchPayload: SearchPayload) => ({\n payload: response,\n meta: searchPayload,\n })\n);\n\nexport const fetchCompanyAddonManagementFail = createAction<string>(\n types.FETCH_COMPANY_ADDON_MANAGEMENT_FAIL\n);\n\nexport const bulkRemoveAddon = createAction<BulkRemoveAddon>(types.BULK_REMOVE_ADDON);\n\nexport const togglePortfolioCompanies = createAction<void>(types.TOGGLE_PORTFOLIO_COMPANIES);\n\nexport const clearSearch = createAction(\n types.CLEAR_ADDON_MANAGEMENT_SEARCH,\n (customClearedFilter?: Dictionary<PreselectedFilter>, callback?: SuccessErrorCallback) => ({\n payload: customClearedFilter,\n meta: callback,\n })\n);\n\nexport const resetFilter = createAction<ResetFilter>(types.RESET_ADDON_MANAGEMENT_FILTER);\nexport const removeFilterTag = createAction<AddonManagementRamoveTagPayload>(\n types.REMOVE_ADDON_MANAGEMENT_FILTER_TAG\n);\n\nexport const setSearchKey = createAction<string>(types.SET_SEARCH_KEY);\nexport const setSelectedFilters = createAction<Dictionary<PreselectedFilter>>(\n types.SET_SELECTED_FILTERS\n);\n\n// additional filters\nexport const fetchAdditionalFilters = createAction<AdditionalFiltersPayload>(\n types.FETCH_ADDITIONAL_FILTERS\n);\n\nexport const fetchAdditionalFiltersSuccess = createAction<AdditionalFiltersResponse>(\n types.FETCH_ADDITIONAL_FILTERS_SUCCESS\n);\n\nexport const fetchAdditionalFiltersFail = createAction<AdditionalFiltersFailPayload>(\n types.FETCH_ADDITIONAL_FILTERS_FAIL\n);\nexport const updateAdditionalFilters = createAction<{\n key: string;\n value: PreselectedFilter;\n companyId: number;\n isPaginationChanged?: boolean;\n shouldResetPageNumber?: boolean;\n}>(types.UPDATE_ADDITIONAL_FILTERS);\n\nexport const resetAdditionalFilter = createAction<FilterTag>(types.RESET_ADDITIONAL_FILTER);\n\nexport const removeCompanyFromAddonManagement =\n createAction<RemoveCompanyFromAddonManagementPayload>(types.REMOVE_COMPANY_FROM_ADDON_MANAGEMENT);\n\nexport const removeCompanyFromAddonManagementSuccess = createAction<{ companyId: number }>(\n types.REMOVE_COMPANY_FROM_ADDON_MANAGEMENT_SUCCESS\n);\n\nexport const removeCompanyFromAddonManagementFail = createAction<string>(\n types.REMOVE_COMPANY_FROM_ADDON_MANAGEMENT_FAIL\n);\n\nexport const clearAddonManagementFetchedAt = createAction(types.CLEAR_ADDON_MANAGEMENT_FETCHED_AT);\n\nexport const saveColumnWidth = createAction<AddonColumnWidth>(types.SAVE_COLUMN_WIDTH);\n\nexport const resetColumnWidths = createAction<ColumnWidthUserSettings>(types.RESET_COLUMN_WIDTHS);\n","export const FETCH_COMPANY_ADDON_MANAGEMENT = 'FETCH_COMPANY_ADDON_MANAGEMENT';\nexport const FETCH_COMPANY_ADDON_MANAGEMENT_SUCCESS = 'FETCH_COMPANY_ADDON_MANAGEMENT_SUCCESS';\nexport const FETCH_COMPANY_ADDON_MANAGEMENT_FAIL = 'FETCH_COMPANY_ADDON_MANAGEMENT_FAIL';\n\nexport const TOGGLE_PORTFOLIO_COMPANIES = 'TOGGLE_PORTFOLIO_COMPANIES';\nexport const CLEAR_ADDON_MANAGEMENT_SEARCH = 'CLEAR_ADDON_MANAGEMENT_SEARCH';\nexport const CLEAR_ADDON_MANAGEMENT_FETCHED_AT = 'CLEAR_ADDON_MANAGEMENT_FETCHED_AT';\nexport const RESET_ADDON_MANAGEMENT_FILTER = 'RESET_ADDON_MANAGEMENT_FILTER';\nexport const REMOVE_ADDON_MANAGEMENT_FILTER_TAG = 'REMOVE_ADDON_MANAGEMENT_FILTER_TAG';\nexport const SET_SEARCH_KEY = 'SET_SEARCH_KEY';\nexport const SET_SELECTED_FILTERS = 'SET_SELECTED_FILTERS';\nexport const FETCH_ADDITIONAL_FILTERS = 'FETCH_ADDITIONAL_FILTERS';\nexport const FETCH_ADDITIONAL_FILTERS_SUCCESS = 'FETCH_ADDITIONAL_FILTERS_SUCCESS';\nexport const FETCH_ADDITIONAL_FILTERS_FAIL = 'FETCH_ADDITIONAL_FILTERS_FAIL';\nexport const UPDATE_ADDITIONAL_FILTERS = 'UPDATE_ADDITIONAL_FILTERS';\nexport const RESET_ADDITIONAL_FILTER = 'RESET_ADDITIONAL_FILTER';\nexport const REMOVE_COMPANY_FROM_ADDON_MANAGEMENT = 'REMOVE_COMPANY_FROM_ADDON_MANAGEMENT';\nexport const REMOVE_COMPANY_FROM_ADDON_MANAGEMENT_SUCCESS =\n 'REMOVE_COMPANY_FROM_ADDON_MANAGEMENT_SUCCESS';\nexport const REMOVE_COMPANY_FROM_ADDON_MANAGEMENT_FAIL =\n 'REMOVE_COMPANY_FROM_ADDON_MANAGEMENT_FAIL';\nexport const BULK_REMOVE_ADDON = 'BULK_REMOVE_ADDON';\n\nexport const SAVE_COLUMN_WIDTH = 'ADDON_MANAGEMENT_SAVE_COLUMN_WIDTH';\nexport const RESET_COLUMN_WIDTHS = 'ADDON_MANAGEMENT_RESET_COLUMN_WIDTH';\n","import { createSelector } from 'reselect';\nimport { Dictionary, isEmpty } from 'lodash';\n// models\nimport { SpecialFilterTag } from '@optx/models/tags';\nimport { SelectOption } from '@optx/models/Option';\nimport Company from '@optx/models/Company';\nimport { BaseFilter } from '@models/filters';\n// utils\nimport mapTags from '@optx/utils/filters/mapTags';\nimport { generateUniqueKey } from '@optx/utils/uuid';\nimport mapFiltersToURLParams from '@optx/utils/filters/mapFiltersToURLParams';\n// redux\nimport { AppState } from '@optx/redux/interfaces';\nimport { selectors as filtersSourcesSelectors } from '../filters';\nimport { getSearchKey as searchKey } from '@optx/features/grid/searchkey/state/selectors';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\n\nconst getCompanyAddonManagementState = (state: AppState) => state.companyAddonManagement;\n\nexport const shouldInitialFetch = createSelector(\n getCompanyAddonManagementState,\n state => !state.search.loading\n);\n\nexport const getData = createSelector(getCompanyAddonManagementState, state => {\n const data: Company[] = [];\n\n state.search.allIds.forEach(id => {\n const company = state.search.data?.find(company => company.company_id === id);\n\n if (company) data.push(company);\n });\n\n return data;\n});\n\nexport const currentCompanyId = createSelector(\n getCompanyAddonManagementState,\n state => state.search.currentCompanyId\n);\n\nexport const getError = createSelector(getCompanyAddonManagementState, state => state.search.error);\nexport const isLoading = createSelector(\n getCompanyAddonManagementState,\n state => state.search.loading\n);\n\nexport const getCompanies = createSelector(\n getCompanyAddonManagementState,\n state => state.search.allIds.map(id => state.search.byId[id]) as Company[]\n);\n\nexport const getCurrentCompanyAddon = (companyId: number) =>\n createSelector(\n getCompanyAddonManagementState,\n state => state.search.byId[companyId]?.addon || {}\n );\n\nexport const getSearchKey = searchKey('addons');\n\n/**\n * Show if current search has seach term or a filter set.\n */\nexport const searchHasValues = createSelector(\n getSearchKey,\n filterSelectors.getFilter('addons'),\n (searchKey, filter) => !!searchKey || !isEmpty(filter)\n);\n\nexport const getAdditionalFilter = createSelector(\n getCompanyAddonManagementState,\n state => state.search.additionalFilter\n);\n\nexport const getAdditionalValues = createSelector(getCompanyAddonManagementState, state => {\n const { additionalFiltersValues: values } = state.search;\n\n return values;\n});\n\nexport const getAdditionalFilters = createSelector(getCompanyAddonManagementState, state => {\n const { normalizedAdditionalFilters: normalized, additionalFilter: filter } = state.search;\n\n return { normalized, filter };\n});\n\nexport const getAdditionalFiltersQuery = createSelector(\n getAdditionalFilters,\n ({ normalized, filter }) => {\n let additionalFilterQuery = {\n ...mapFiltersToURLParams(normalized as Dictionary<BaseFilter<any>>, filter),\n };\n\n if (additionalFilterQuery.origin && additionalFilterQuery.origin.length === 0) {\n additionalFilterQuery = {\n ...additionalFilterQuery,\n origin: [''],\n };\n }\n\n return additionalFilterQuery;\n }\n);\n\nexport const getAdditionalFiltersData = createSelector(getCompanyAddonManagementState, state => {\n const { additionalFiltersData: data } = state.search;\n\n return data;\n});\n\nconst getAdditionalFiltersDataLists = createSelector(getCompanyAddonManagementState, state => {\n const { additionalFiltersData: data } = state.search;\n\n const lists: SelectOption[] = data[0].data[0].data.reduce(\n (result: SelectOption[], item: SelectOption) => {\n if (item.value !== 'blank') {\n result.push(item);\n }\n\n return result;\n },\n []\n );\n\n return lists || [];\n});\n\nexport const getAdditionalFiltersDataListsNames = (listIds: string[]) =>\n createSelector(getAdditionalFiltersDataLists, lists => {\n const selectedNames = (lists as unknown as { name: string; value: string | number }[]).reduce(\n (acc: string[], item) => {\n if (listIds.includes(item.value.toString())) {\n acc.push(item.name);\n }\n\n return acc;\n },\n []\n );\n\n return selectedNames;\n });\n\nexport const getOriginAdditionalFilterRelatedListsIds = (companyId: number | number[]) =>\n createSelector(getAdditionalFiltersDataLists, lists => {\n const relatedListsIds = lists.reduce((acc: number[], item) => {\n if (item.data && typeof companyId === 'number' && item.data.includes(companyId)) {\n acc.push(Number(item.value));\n }\n\n if (\n item.data &&\n typeof companyId !== 'number' &&\n item.data.some(id => companyId.includes(id))\n ) {\n acc.push(Number(item.value));\n }\n\n return acc;\n }, []);\n\n return relatedListsIds;\n });\n\nexport const getListOfCompaniesIdFromAdditionalFilters = (companyIds: number[]) =>\n createSelector(getAdditionalFiltersDataLists, lists => {\n const companiesIds = lists.reduce((acc: { listId: number; companyIds: number[] }[], item) => {\n if (item.data) {\n const commonIds = item.data.filter(id => companyIds.includes(id));\n acc.push({\n listId: Number(item.value),\n companyIds: commonIds,\n });\n }\n\n return acc;\n }, []);\n\n return companiesIds;\n });\n\nexport const getAdditionalFiltersClear = createSelector(getCompanyAddonManagementState, state => {\n const { clearAdditionalFilters: clear } = state.search;\n\n return clear;\n});\n\nexport const getTags = createSelector(\n filterSelectors.getFilter('addons'),\n filtersSourcesSelectors.getCompanyFilters,\n filterSelectors.getClearedFilter('addons'),\n getSearchKey,\n getAdditionalValues,\n getAdditionalFiltersData,\n getAdditionalFiltersClear,\n\n (\n filter,\n filterSources,\n clearedFilter,\n searchKey,\n additionalValues,\n additionalFiltersData,\n clearAdditionalFilters\n ) => {\n const tags = mapTags(filter, filterSources, clearedFilter);\n const additionalFiltersTags = mapTags(\n additionalValues,\n additionalFiltersData,\n clearAdditionalFilters\n );\n\n if (searchKey) {\n tags.unshift({\n filter: 'keyword' as SpecialFilterTag,\n uniqueKey: generateUniqueKey(),\n label: 'Keyword',\n isDefault: false,\n values: [\n {\n value: searchKey,\n },\n ],\n });\n }\n\n return [...tags, ...additionalFiltersTags];\n }\n);\n\nexport const isClearedFilter = createSelector(getTags, tags => {\n const tagNotDefault = tags.find(tag => {\n if (tag.isDefault === false && tag.values?.length > 0) {\n return true;\n }\n\n return false;\n });\n\n return !!tagNotDefault;\n});\n","/* eslint-disable max-len */\nimport { Dictionary } from 'lodash';\nimport { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\n// models\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { FilterTag } from '@optx/models/tags';\nimport { FilterMultiTextOption, SelectOption } from '@optx/models/Option';\n// utils\nimport { mapPreselectedFilters } from '@optx/utils/filters/preselectedValues';\nimport { parseFilter } from '@optx/utils/filters/parseFilters';\nimport { normalizeFiltersByColumn } from '@utils/filters/normalize';\nimport { injectFilter } from '@utils/filters/injectFilter';\n// redux\nimport * as fetchReducers from '@redux/feature/fetch/reducers';\nimport { actions as paginationActions } from '@features/grid/pagination';\nimport { AdditionalFiltersResponse, AddonManagementState } from './interfaces';\nimport * as actions from './actions';\nimport {\n sendNewOptxScoreRationaleSuccess,\n sendOptxScoreRationaleSuccess,\n} from '@redux/company/score/actions';\nimport { OptxScoreRationale } from '../score/interfaces';\n\nconst initialState: AddonManagementState = {\n byId: {},\n allIds: [],\n data: null,\n loading: false,\n error: '',\n fetchedAt: null,\n additionalFiltersData: [],\n additionalFilter: {},\n preselectedAdditionalFilters: {},\n normalizedAdditionalFilters: {},\n persistedAdditionalFilters: '',\n additionalFiltersValues: {},\n clearAdditionalFilters: {},\n};\n\nconst clearSearchReducer: CaseReducer<\n AddonManagementState,\n PayloadAction<Dictionary<PreselectedFilter> | undefined>\n> = draftState => {\n return {\n ...initialState,\n additionalFilter: draftState.clearAdditionalFilters,\n additionalFiltersValues: draftState.clearAdditionalFilters,\n additionalFiltersData: draftState.additionalFiltersData,\n preselectedAdditionalFilters: draftState.preselectedAdditionalFilters,\n normalizedAdditionalFilters: draftState.normalizedAdditionalFilters,\n persistedAdditionalFilters: draftState.persistedAdditionalFilters,\n clearAdditionalFilters: draftState.clearAdditionalFilters,\n };\n};\n\nexport const sendOptxScoreRationaleSuccessReducer = (\n draftState: AddonManagementState,\n action: PayloadAction<OptxScoreRationale>\n) => {\n const {\n companyId,\n rationale,\n defaultScore,\n optxScoreVerified,\n optxScoreRationaleReason,\n optxScoreRationaleReasonType,\n scoreType,\n } = action.payload;\n\n if (draftState.byId[companyId]) {\n if (defaultScore === 'us') {\n if (scoreType === 'score_v3') {\n draftState.byId[companyId]!.optx_score_v3_rationale = rationale;\n draftState.byId[companyId]!.optx_score_v3_verified = optxScoreVerified;\n draftState.byId[companyId]!.optx_score_v3_rationale_reason = optxScoreRationaleReason;\n draftState.byId[companyId]!.optx_score_v3_rationale_reason_type =\n optxScoreRationaleReasonType;\n } else {\n draftState.byId[companyId]!.optx_score_rationale = rationale;\n draftState.byId[companyId]!.optx_score_verified = optxScoreVerified;\n draftState.byId[companyId]!.optx_score_rationale_reason = optxScoreRationaleReason;\n draftState.byId[companyId]!.optx_score_rationale_reason_type = optxScoreRationaleReasonType;\n }\n }\n\n if (defaultScore === 'il') {\n draftState.byId[companyId]!.il_optx_score_rationale = rationale;\n draftState.byId[companyId]!.il_optx_score_verified = optxScoreVerified;\n draftState.byId[companyId]!.il_optx_score_rationale_reason = optxScoreRationaleReason;\n draftState.byId[companyId]!.il_optx_score_rationale_reason_type =\n optxScoreRationaleReasonType;\n }\n }\n};\n\nconst fetchAdditionalFiltersSuccessReducer: CaseReducer<\n AddonManagementState,\n PayloadAction<AdditionalFiltersResponse>\n> = (draftState, action) => {\n const { filterSource } = action.payload;\n const sourceData = filterSource[0].data;\n\n const sources = filterSource.flatMap(item => ({ ...item, data: sourceData }));\n\n const preselected = mapPreselectedFilters(sources);\n draftState.preselectedAdditionalFilters = preselected;\n const clearedFilter = mapPreselectedFilters(sources, false);\n const normalized = normalizeFiltersByColumn(filterSource);\n // @ts-ignore\n draftState.normalizedAdditionalFilters = normalized;\n\n const defaultOrigin = normalized.origin.data;\n\n if (draftState.persistedAdditionalFilters !== undefined) {\n const persistedFilter = draftState.persistedAdditionalFilters;\n const [parsedFilters] = parseFilter(persistedFilter, filterSource);\n const parsedFiltersData = {\n ...parsedFilters,\n origin: parsedFilters.origin\n ? parsedFilters.origin\n : parsedFilters.origin === undefined && persistedFilter.includes('origin')\n ? []\n : defaultOrigin,\n };\n\n draftState.additionalFiltersValues = parsedFiltersData;\n draftState.additionalFilter = parsedFiltersData;\n }\n\n if (draftState.persistedAdditionalFilters === '') {\n const preselectedData = {\n ...preselected,\n origin:\n (preselected.origin as FilterMultiTextOption[]).length === 0\n ? defaultOrigin\n : preselected.origin,\n };\n draftState.additionalFiltersValues = preselectedData;\n draftState.additionalFilter = preselectedData;\n }\n\n draftState.clearAdditionalFilters = {\n ...clearedFilter,\n origin: defaultOrigin,\n };\n\n draftState.preselectedAdditionalFilters = {\n ...preselected,\n origin: draftState.additionalFilter.origin,\n };\n\n draftState.additionalFiltersData = sources;\n draftState.loading = false;\n};\n\nconst updateValueReducer: CaseReducer<\n AddonManagementState,\n PayloadAction<{ key: string; value: PreselectedFilter }>\n> = (draftState, action) => {\n const { key, value } = action.payload;\n draftState.additionalFilter = { ...draftState.additionalFilter, [key]: value };\n draftState.additionalFiltersValues = { ...draftState.additionalFiltersValues, [key]: value };\n const normalizedValue = (value as Array<SelectOption>).map(item => item.value);\n draftState.persistedAdditionalFilters = queryString.stringify(\n { [key]: normalizedValue },\n {\n arrayFormat: 'comma',\n }\n );\n};\n\nconst resetAdditionalFilterReducer: CaseReducer<AddonManagementState, PayloadAction<FilterTag>> = (\n draftState,\n action\n) => {\n const tag = action.payload;\n const {\n normalizedAdditionalFilters: normalized,\n clearAdditionalFilters: clear,\n additionalFilter: filter,\n } = draftState;\n\n //@ts-ignore\n const newFilters = injectFilter(normalized, filter, clear, tag.filter, tag.optionId);\n draftState.additionalFilter = newFilters;\n draftState.additionalFiltersValues = newFilters;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.clearSearch, clearSearchReducer)\n .addCase(actions.resetFilter, fetchReducers.fetchReducer)\n .addCase(actions.fetchAdditionalFilters, fetchReducers.fetchReducer)\n .addCase(actions.fetchAdditionalFiltersSuccess, fetchAdditionalFiltersSuccessReducer)\n .addCase(actions.updateAdditionalFilters, updateValueReducer)\n .addCase(actions.resetAdditionalFilter, resetAdditionalFilterReducer)\n .addCase(paginationActions.changePagination, fetchReducers.fetchReducer)\n .addCase(sendOptxScoreRationaleSuccess, sendOptxScoreRationaleSuccessReducer)\n .addCase(sendNewOptxScoreRationaleSuccess, sendOptxScoreRationaleSuccessReducer)\n);\n\nexport default reducer;\n","import reducer from '@redux/company/addon-management/reducer';\nimport { combineReducers } from 'redux';\nimport { AddonManagementTab } from './interfaces';\n\nconst combinedReducer = combineReducers<AddonManagementTab>({\n search: reducer,\n});\n\nexport default combinedReducer;\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, pickBy, size } from 'lodash';\n// models\nimport { GetGridSearchData } from '@models/grid';\nimport { SearchPayload, SearchPayloadRequest } from '@models/api/contacts';\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// constants\nimport { BULK_EDIT_COMPANY_LIMIT_SYNCED_TO_ET } from '@optx/config/bulkConfig';\n// services\nimport { CompanyService, SavedSearchesService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { injectFilter } from '@utils/filters/injectFilter';\nimport { getErrorMessage } from '@optx/utils/api/errors';\nimport { removeTouchFilters } from '@features/grid/search/utils/filters';\n// models\nimport { PreselectedFilter, BaseFilter } from '@optx/models/filters';\nimport { BulkWatchlistResponse } from '@optx/features/bulk-actions/bulk-watchlist/state/interfaces';\nimport { CompanyBulkEditingResults } from '@optx/models/bulkActions';\nimport {\n AddonManagementAdditionalFiltersResponse,\n AdditionalFiltersPayload,\n AddonManagementRamoveTagPayload,\n RemoveCompanyFromAddonManagementPayload,\n RemoveCompanyFromAddonManagementResponse,\n BulkRemoveAddon,\n BulkRemoveAddonPayload,\n AddonListItem,\n CompanyListItem,\n} from '@optx/redux/company/addon-management/interfaces';\n// redux\nimport * as companiesFilterSelectors from '@redux/company/filters/selectors';\nimport * as editFieldActions from '@features/bulk-actions/edit-fields/state/actions';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport { selectors as filterSelectors } from '@features/grid/filter';\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport { actions as searchCountActions } from '@features/grid/search-count';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\nimport { updateFilterSettings } from '@features/grid/search/state/sagasReusable';\nimport { getGridSearchDataSaga } from '@features/grid/state/sagasReusable';\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\n\nfunction* removeFilterTagSaga(action: PayloadAction<AddonManagementRamoveTagPayload>) {\n const tagName = action.payload.filterTag.filter;\n const tagId = action.payload.filterTag.optionId;\n const companyId = action.payload.companyId;\n\n if (tagName === 'keyword') {\n yield put(actions.setSearchKey(''));\n } else if (tagName === 'origin') {\n yield put(actions.resetAdditionalFilter(action.payload.filterTag));\n } else {\n const filter: Dictionary<PreselectedFilter> = yield select(filterSelectors.getFilter('addons'));\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getClearedFilter('advancedSearch')\n );\n\n const normalizedFilterSources: Dictionary<BaseFilter<any>> = yield select(\n companiesFilterSelectors.getFiltersMap\n );\n\n let filterNew = injectFilter(normalizedFilterSources, filter, clearedFilters, tagName, tagId);\n\n const clearedFields = removeTouchFilters(filterNew, action.payload.filterTag);\n\n filterNew = { ...filterNew, ...clearedFields };\n\n yield put(actions.setSelectedFilters(filterNew));\n }\n\n yield put(\n actions.fetchCompanyAddonManagement({ companyId: companyId, shouldResetPageNumber: true })\n );\n}\n\nfunction* fetchAddonManagementFiltersSaga(action: PayloadAction<AdditionalFiltersPayload>) {\n const { companyId, shouldBeAddedToLoading, isBulkRemoved } = action.payload;\n\n try {\n const res: AxiosResponse<AddonManagementAdditionalFiltersResponse> = yield call(\n CompanyService.fetchAddonFilters,\n companyId\n );\n\n if (res.data) {\n yield put(\n actions.fetchAdditionalFiltersSuccess({\n filterSource: res.data.filters,\n shouldBeAddedToLoading,\n })\n );\n\n if (isBulkRemoved) {\n yield put(actions.fetchCompanyAddonManagement({ companyId: companyId }));\n }\n } else {\n const errorMessage = 'Failed to fetch filters for Add-on Management!';\n yield put(\n actions.fetchAdditionalFiltersFail({ error: errorMessage, shouldBeAddedToLoading })\n );\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch filters for Add-on Management!');\n yield put(actions.fetchAdditionalFiltersFail({ error: errorMessage, shouldBeAddedToLoading }));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* setSelectedFiltersSaga() {\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, 'addons');\n const { searchKey, searchType, filter: filterQuery, pagination, sortBy } = gridSearchData;\n const additionalFilterQuery: Dictionary<string | (string | number)[]> = yield select(\n selectors.getAdditionalFiltersQuery\n );\n\n const payloadData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: {\n ...filterQuery,\n ...additionalFilterQuery,\n },\n pagination,\n sortBy,\n };\n\n yield call(updateFilterSettings, payloadData, 'addons');\n}\n\nfunction* searchCompaniesSaga(\n action: PayloadAction<{\n companyId: number;\n shouldResetPageNumber?: boolean;\n filter?: Dictionary<PreselectedFilter>;\n }>\n) {\n const { companyId, shouldResetPageNumber, filter: payloadFilter } = action.payload;\n\n const gridSearchData: GetGridSearchData = yield call(getGridSearchDataSaga, 'addons');\n let { searchKey, searchType, originalFilter: filter, pagination, sortBy } = gridSearchData;\n\n if (shouldResetPageNumber) pagination = { ...pagination, pageNumber: 1 };\n if (payloadFilter) filter = payloadFilter;\n\n const customFilter = { ...filter };\n\n delete customFilter.query;\n\n const searchCompaniesData: SearchPayload = {\n searchKey,\n searchType,\n filter: customFilter,\n pagination,\n sortBy,\n companyId,\n shouldHandleTouchFilters: true,\n shouldResetPageNumber,\n };\n\n yield put(searchActions.searchCompanies({ gridKey: 'addons', data: searchCompaniesData }));\n}\n\nfunction* clearSearchSaga(\n action: PayloadAction<Dictionary<PreselectedFilter> | undefined, any, SuccessErrorCallback>\n) {\n const callback: SuccessErrorCallback = yield action.meta;\n\n callback && callback(null);\n\n const companyId: number = yield select(searchSelectors.getCompanyId('addons'));\n\n yield put(actions.fetchCompanyAddonManagement({ companyId, shouldResetPageNumber: true }));\n}\n\nfunction* removeCompanyFromAddonManagementSaga(\n action: PayloadAction<RemoveCompanyFromAddonManagementPayload>\n) {\n const { company_id: companyId } = action.payload;\n\n try {\n const res: AxiosResponse = yield call(SavedSearchesService.deleteCompanyInList, action.payload);\n\n if (res.data) {\n const filteredData = pickBy(\n res.data as Dictionary<RemoveCompanyFromAddonManagementResponse>,\n {\n status: false,\n }\n );\n const filteredDataSize = size(filteredData);\n\n if (!filteredDataSize) {\n yield put(actions.removeCompanyFromAddonManagementSuccess({ companyId }));\n const successMessage = 'Company removed successfully!';\n NotificationService.success(successMessage);\n yield put(searchCountActions.decrementAddonCount());\n } else if (filteredDataSize === 1) {\n const listId = Object.keys(filteredData)[0];\n const listName: string[] = yield select(\n selectors.getAdditionalFiltersDataListsNames([listId])\n );\n const dataList = Object.values(filteredData);\n\n let errorMessage = `${dataList[0].message}: ${listName[0]}!`;\n\n if (dataList[0].et_list_id !== null) {\n errorMessage = `${dataList[0].message} with ${listName[0]}!`;\n }\n\n yield put(actions.removeCompanyFromAddonManagementFail(errorMessage));\n NotificationService.error(errorMessage);\n } else {\n const listIds = Object.keys(filteredData);\n const listsNames: string[] = yield select(\n selectors.getAdditionalFiltersDataListsNames(listIds)\n );\n let errorMessage = `User has no right to modify these Watchlists: ${listsNames.join(\n ', '\n )}!`;\n\n yield put(actions.removeCompanyFromAddonManagementFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to remove company from Add-on Management!');\n yield put(actions.removeCompanyFromAddonManagementFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* bulkRemoveAddonSaga(action: PayloadAction<BulkRemoveAddon>) {\n const { selectedCompanies } = action.payload;\n\n const companies = [...selectedCompanies];\n\n const companiesBatch = selectedCompanies.slice(0, BULK_EDIT_COMPANY_LIMIT_SYNCED_TO_ET);\n\n const listOfCompaniesIds = companiesBatch.map(company => company.company_id);\n\n const listOfCompaniesIdsWithAddonManuallyAdded = companiesBatch.reduce((acc: number[], item) => {\n if (item.addon && Object.keys(item.addon).length > 0) {\n acc.push(item.company_id);\n }\n\n return acc;\n }, []);\n\n const listOfCompaniesIdsFromAdditionalFilters: { listId: number; companyIds: number[] }[] =\n yield select(selectors.getListOfCompaniesIdFromAdditionalFilters(listOfCompaniesIds));\n\n const companyProfileName: string = yield select(profileSelectors.getCompanyName);\n\n const addonList: AddonListItem[] = [];\n const companiesList: CompanyListItem[] = [];\n\n listOfCompaniesIdsWithAddonManuallyAdded.forEach(companyId => {\n const addon = companiesBatch.find(company => company.company_id === companyId)?.addon;\n\n const addonCompaniesList = Object.keys(addon ? addon : {});\n\n const normalizedAddonCompaniesList = addonCompaniesList.filter(\n key => key !== companyProfileName\n );\n let addonBool = null;\n let addonCompany = null;\n\n if (\n normalizedAddonCompaniesList.length > 0 &&\n addonCompaniesList.includes(companyProfileName)\n ) {\n addonBool = true;\n addonCompany = normalizedAddonCompaniesList as string[];\n }\n\n addonList.push({\n addon_bool: addonBool,\n addon_company: addonCompany,\n company_id: companyId,\n });\n });\n\n listOfCompaniesIdsFromAdditionalFilters.forEach(company => {\n companiesList.push({\n list_id: company.listId,\n company_id: company.companyIds,\n });\n });\n\n const selectedCompaniesCount: number = yield select(\n bulkActionsSelectors.editFields.selectedCompaniesCount\n );\n\n const payload: BulkRemoveAddonPayload[] = [\n {\n companies_list: companiesList,\n addon_list: addonList,\n },\n ];\n\n try {\n const res: AxiosResponse<BulkWatchlistResponse[]> = yield call(\n CompanyService.bulkRemoveAddon,\n payload\n );\n companies.splice(0, BULK_EDIT_COMPANY_LIMIT_SYNCED_TO_ET);\n const cancelSearch: boolean = yield select(bulkActionsSelectors.editFields.cancel);\n\n if (res.data) {\n const companiesList = res.data;\n const currentResults: CompanyBulkEditingResults[] = yield select(\n bulkActionsSelectors.editFields.results\n );\n const nextResults: CompanyBulkEditingResults[] = [];\n\n yield put(\n editFieldActions.updatePercentage(\n Math.round((BULK_EDIT_COMPANY_LIMIT_SYNCED_TO_ET / selectedCompaniesCount) * 100)\n )\n );\n\n companiesBatch.forEach(company => {\n const { company_id: id, company_url, company_name, raw_url } = company;\n const failedCompany = companiesList.filter(company => company.company_id === id);\n\n const errorMessage = failedCompany[0]?.message;\n\n nextResults.push({\n company_id: id,\n company_url,\n raw_url,\n company_name,\n sync_status: errorMessage === 'Success',\n error_reason: errorMessage === 'Success' ? '' : errorMessage,\n });\n });\n\n const finalResults = [...currentResults, ...nextResults];\n yield put(editFieldActions.saveResults(finalResults));\n }\n\n if (!cancelSearch) {\n if (companies.length) {\n yield put(\n actions.bulkRemoveAddon({\n selectedCompanies: companies,\n })\n );\n } else {\n yield put(editFieldActions.updateProgress(false));\n yield put(editFieldActions.updateCompleted(true));\n yield put(editFieldActions.updatePercentage(100));\n }\n }\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to remove from Add-on!');\n yield put(editFieldActions.updateProgress(false));\n yield put(editFieldActions.updateCompleted(true));\n yield put(editFieldActions.updatePercentage(100));\n\n NotificationService.error(message);\n }\n}\n\nexport default function* companyProfileSaga() {\n yield takeLatest(actions.fetchCompanyAddonManagement, searchCompaniesSaga);\n yield takeLatest(actions.removeFilterTag, removeFilterTagSaga);\n yield takeLatest(actions.bulkRemoveAddon, bulkRemoveAddonSaga);\n yield takeLatest(actions.clearSearch, clearSearchSaga);\n yield takeLatest(actions.setSelectedFilters, setSelectedFiltersSaga);\n yield takeLatest(actions.fetchAdditionalFilters, fetchAddonManagementFiltersSaga);\n yield takeLatest(actions.updateAdditionalFilters, searchCompaniesSaga);\n yield takeLatest(actions.removeCompanyFromAddonManagement, removeCompanyFromAddonManagementSaga);\n}\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\n// models\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { CompanyUserValuesKeys, UpdateCompanyDataFieldKeys } from '@optx/models/Company';\nimport { UpdateFields } from '@optx/models/feature/edit-field/EditFieldRadioProps';\nimport { LastRoundData, CustomValue, UpdateFieldsPayload } from '../state/interfaces';\nimport { EditValue } from '@models/edit-fields';\n// redux\nimport { actions as editFieldActions } from '../state/index';\n\nconst useUpdateFields = ({\n fieldName,\n extraKeys,\n companyId,\n companyUrl,\n personId,\n service,\n successMessage,\n errorMessage,\n isPartner,\n isFromHistory,\n isContact,\n}: UpdateFields) => {\n const dispatch = useDispatch();\n\n const updateField = useCallback(\n (\n value: EditValue,\n fieldKey?: CompanyUserValuesKeys | UpdateCompanyDataFieldKeys,\n lastRoundData?: LastRoundData,\n callback?: (data?: SuccessErrorCallback, showHistory?: boolean) => void,\n rationale?: string,\n entityType?: string,\n extraValues?: Array<EditValue>\n ) => {\n const payload: UpdateFieldsPayload = {\n value,\n companyId: isContact && personId ? personId : companyId,\n fieldKey,\n extraKeys,\n extraValues,\n lastRoundData,\n year: value ? ((value as CustomValue).optionalValue as number) : undefined,\n successMessage,\n errorMessage,\n rationale,\n entityType,\n };\n dispatch(\n editFieldActions.updateFields({\n companyId,\n companyUrl,\n callback,\n value: payload,\n service,\n fieldName,\n isPartner,\n isFromHistory,\n })\n );\n },\n [\n companyId,\n isContact,\n personId,\n extraKeys,\n successMessage,\n companyUrl,\n errorMessage,\n dispatch,\n service,\n fieldName,\n isPartner,\n isFromHistory,\n ]\n );\n\n return { updateField };\n};\n\nexport default useUpdateFields;\n","import React, { useState, useEffect } from 'react';\nimport { Popover } from 'antd';\nimport styled from 'styled-components';\nimport Icon from '@components/common/Icon';\nimport { styledColors } from '@utils/theme/colors';\nimport { TooltipPlacement } from 'antd/lib/tooltip';\n\ninterface EditableCellProps {\n content?: JSX.Element;\n title?: string;\n closePopup?: boolean;\n setClosePopup?: (closePopup: boolean) => void;\n onVisibilityChange?: () => void;\n placement?: TooltipPlacement;\n onVisibilityShow?: () => void;\n actionPendo?: string;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n overlayClassName?: string;\n destroyOnHide?: boolean;\n}\n\nconst PenIcon = styled(Icon)<{ $visible?: boolean }>`\n cursor: pointer;\n visibility: ${props => (props.$visible ? 'visible' : 'unset')};\n\n :hover {\n color: ${styledColors.blue6};\n }\n`;\n\nconst EditableCell: React.FC<EditableCellProps> = ({\n content,\n title,\n closePopup,\n setClosePopup,\n onVisibilityChange,\n placement = 'top',\n onVisibilityShow,\n actionPendo,\n getPopupContainer,\n destroyOnHide = true,\n overlayClassName,\n}) => {\n const [popupVisibility, setPopupVisibility] = useState(false);\n\n const handleClick = (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n event.stopPropagation();\n setPopupVisibility(!popupVisibility);\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n document.body.classList.add('popover-visible');\n };\n\n useEffect(() => {\n if (closePopup) {\n setPopupVisibility(false);\n\n if (setClosePopup) {\n setClosePopup(false);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [closePopup]);\n\n const handleVisibleChange = (visible: boolean) => {\n setPopupVisibility(visible);\n };\n\n useEffect(() => {\n return () => {\n if (popupVisibility) {\n document.body.classList.remove('popover-visible');\n onVisibilityChange && onVisibilityChange();\n } else {\n onVisibilityShow && onVisibilityShow();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [popupVisibility]);\n\n return (\n <Popover\n content={content}\n title={title}\n trigger=\"click\"\n visible={popupVisibility}\n onVisibleChange={handleVisibleChange}\n placement={placement}\n destroyTooltipOnHide={destroyOnHide}\n getPopupContainer={getPopupContainer}\n overlayClassName={overlayClassName}\n >\n <div role=\"presentation\" onClick={handleClick}>\n <PenIcon iconName=\"pen\" $visible={popupVisibility} />\n </div>\n </Popover>\n );\n};\n\nexport default EditableCell;\n","import {\n regexFloatAbbreviation,\n regexIntegerAbbreviation,\n regexFloatAndNegativeAbbreviation,\n regexLinkedinURL,\n numberRegExp,\n urlRegExp,\n} from '../constants/regex';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n\n/**\n * function to validate a string to see if it matches an abbreviated number format\n * allow the value to be an empty string\n * for input fields where the validation is performed as the user types,\n * because the regex checks the string as a whole, we need to manually perform a check for the decimal point,\n * otherwise the regex will prevent user from entering decimal point or return error\n * @param {string} value string value to validate\n */\nexport const validateFloatAbbreviation = (value: string, canBeNegative: boolean = false) => {\n const decimalPointCount = value.split('.').length - 1;\n const decimalPointIndex = value.indexOf('.');\n const regexValidation = canBeNegative\n ? regexFloatAndNegativeAbbreviation\n : regexFloatAbbreviation;\n\n if (\n value === '' ||\n (value[value.length - 1] === '.' && decimalPointCount < 2 && decimalPointIndex > 0) ||\n regexValidation.test(value)\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * function to validate a string to see if it matches an abbreviated number format\n * allow the value to be an empty string\n * doesn't allow decimal numbers\n * @param {string} value string value to validate\n */\nexport const validateIntegerAbbreviation = (value: string) => {\n if (value === '' || regexIntegerAbbreviation.test(value)) {\n return true;\n }\n\n return false;\n};\n\n/**\n * function to validate a string's length\n * @param {string} value the value that needs to be checked\n * @param {number} charLimit a number to check the value's length against\n */\nexport const validateMinChars = (value: string, charLimit: number) => {\n if (value.length >= charLimit) {\n return true;\n }\n\n return false;\n};\n\n/**\n * function to validate a url link\n * @param {string} value the value that need to be checked\n */\n\nexport const validateLinkedinURL = (value: string) => {\n return regexLinkedinURL.test(value.toLowerCase());\n};\n\n/**\n * function to validate if it is number\n * @param {string} value string value to validate\n */\n\nexport const validateOnlyNumbers = (value: string) => {\n if (value === '') return true;\n\n return numberRegExp.test(value);\n};\n\n/**\n * function to validate if it is valid url format\n * @param {string} value string value to validate\n */\n\nexport const validateUrl = (value: string) => {\n if (value === '') return true;\n\n return urlRegExp.test(value);\n};\n\n/**\n * Validates if the given value is a positive number.\n *\n * @param value - The value to be validated.\n * @returns Returns true if the value is a positive number, otherwise returns false.\n */\n\nexport function validatePositiveNumbers(value: any): boolean {\n let finalReturn = true;\n\n if (\n ((value && Number.isNaN(Number(value)) && value !== DEFAULT_EMPTY_VALUE) ||\n (typeof value === 'number' && value < 0)) &&\n !regexFloatAbbreviation.test(value)\n ) {\n finalReturn = false;\n }\n\n return finalReturn;\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Typography } from 'antd';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nconst StyledDefaultCell = styled(Typography.Text)`\n max-width: 100%;\n margin-bottom: 0 !important;\n`;\n\ninterface TableCellDefaultProps {\n value: any;\n}\n\nexport const TableCellDefault: React.FC<TableCellDefaultProps> = ({ value, ...restProps }) => {\n return (\n <StyledDefaultCell {...restProps}>\n {value ? <TruncateTooltip title={value}>{value}</TruncateTooltip> : DEFAULT_CELL_VALUE}\n </StyledDefaultCell>\n );\n};\n\n/**\n *\n * @param value Default cell render for table column.\n */\nconst TableCellDefaultRender = (value: any) => {\n return <TableCellDefault value={value} />;\n};\n\nexport default TableCellDefaultRender;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport { reducer, saga } from './state';\nimport { featureName } from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","import React, { useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport CompanyProfile from '@models/Company';\n// constants\nimport ROUTES from '@optx/constants/routes';\n// redux\nimport {\n selectors as viewTypeSelectors,\n actions as viewTypeActions,\n} from '@features/grid/view-type';\n// components\nimport LongCard from '@features/company/long-card/LongCard';\nimport Styled from '@features/company/long-card/LongCardView.styled';\nimport { selectors as cardSelectors } from '../state';\nimport useHeaderHeight from '../../card-pannel/utils/useHeaderHeight';\n// hooks\nimport useLoadCompanyData from '../../hooks/useLoadCompanyData';\n\ninterface CompanyCardProps {\n company: CompanyProfile;\n}\n\nconst CompanyCard: React.FC<CompanyCardProps> = ({ company }) => {\n const dispatch = useDispatch();\n const activeCard = useSelector(cardSelectors.getProfile);\n const cardRef = React.useRef<HTMLInputElement>(null);\n const isChangedCompanyCard = useSelector(\n viewTypeSelectors.isChangedCompanyCard('advancedSearch')\n );\n // Touches\n const headerHeight = useHeaderHeight(window.location.pathname === ROUTES.myCompanies ? 126 : 64);\n const active = useMemo(() => {\n if (activeCard?.company_id === company.company_id) {\n return true;\n }\n\n return false;\n }, [activeCard, company.company_id]);\n\n const { loadCompanyData } = useLoadCompanyData();\n\n const handleHeightOfCompanyOutReachCards = () => {\n if (window.location.pathname.startsWith('/all-reports')) {\n return 297;\n }\n\n return 0;\n };\n\n const openPannel = (id: number, url: string | null) => {\n dispatch(viewTypeActions.changedCompanyCard({ gridKey: 'advancedSearch', data: false }));\n loadCompanyData(id, url);\n\n const distanceToTop = cardRef?.current?.getBoundingClientRect().top;\n\n if (distanceToTop) {\n window.scrollBy({\n top: distanceToTop - headerHeight - handleHeightOfCompanyOutReachCards(),\n behavior: 'smooth',\n });\n }\n };\n\n // We only want to scroll into view if the card has been selected with the arrows\n useEffect(() => {\n const distanceToTop = cardRef?.current?.getBoundingClientRect().top;\n\n if (active && isChangedCompanyCard && distanceToTop) {\n window.scrollBy({\n top: distanceToTop - headerHeight - handleHeightOfCompanyOutReachCards(),\n behavior: 'smooth',\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [active, isChangedCompanyCard]);\n\n return (\n <div ref={cardRef}>\n <Styled.CompanyCard\n hoverable\n onClick={() => openPannel(company.company_id, company.company_url)}\n $active={active}\n >\n <LongCard company={company} />\n </Styled.CompanyCard>\n </div>\n );\n};\n\nexport default CompanyCard;\n","import React from 'react';\nimport { orderBy } from 'lodash';\n// models\nimport Company, { FinancialFieldType, CompanyUserValuesKeys } from '@optx/models/Company';\nimport { CustomValue } from '@optx/features/company/edit-fields/state/interfaces';\nimport {\n RenderLabelProps,\n RenderLabelOtherProps,\n} from '@optx/models/feature/edit-field/editFields';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport {\n numberPercentageRegex,\n regexNegativeAbbreviation,\n numberRegExp,\n} from '@optx/constants/regex';\nimport {\n ONLY_DIGITS_AND_PERCENTAGE_ERROR_MESSAGE,\n ABBREVIATION_ERROR_MESSAGE,\n ABBREVIATION_AND_OPTIONS_ERROR_MESSAGE,\n message,\n} from '@optx/constants/table/cells';\n//utils\nimport { isOptionChecked } from '@optx/utils/option';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\n/**\n * depending on where a component for editing fields is accessed, we need to display\n * different text for the item used to open the popover\n */\nexport const renderLabel = ({\n isFromGridDropDown,\n isFromHistory,\n dropdownLabel,\n value,\n label,\n useTooltip = true,\n}: RenderLabelProps) => {\n if (isFromHistory) {\n return 'Edit Field';\n }\n\n if (isFromGridDropDown) {\n return dropdownLabel;\n }\n\n if (!useTooltip) {\n return <span>{label}</span>;\n }\n\n return (\n <TruncateTooltip title={value === 'None' ? DEFAULT_EMPTY_VALUE : value}>\n {label}\n </TruncateTooltip>\n );\n};\n\n/**\n * depending on where a component for editing fields is accessed, we need to display\n * different text for the item used to open the popover\n * if the value is 'Other' we need to display the other option\n */\nexport const renderLabelOther = ({\n isFromGridDropDown,\n isFromHistory,\n dropdownLabel,\n value,\n label,\n useTooltip = true,\n extraValue,\n}: RenderLabelOtherProps) => {\n if (isFromHistory) {\n return 'Edit Field';\n }\n\n if (isFromGridDropDown) {\n return dropdownLabel;\n }\n\n if (!useTooltip) {\n return <span>{label}</span>;\n }\n\n return (\n <TruncateTooltip title={renderValueOther(value as string, extraValue as string)}>\n {renderValueOther(value as string, extraValue as string)}\n </TruncateTooltip>\n );\n};\n\n/**\n * Renders a value based on specific conditions.\n *\n * This function takes a primary value and an optional secondary value,\n * and returns a formatted string based on the following rules:\n * - If the primary value is 'None', it returns a default empty value.\n * - If the primary value is 'Other' and a secondary value is provided,\n * it returns the string 'Other:' concatenated with the secondary value.\n * - Otherwise, it returns the primary value.\n *\n * @param {string} value - The primary value to be evaluated.\n * @param {string | null} otherValue - The secondary value to be used if the primary value is 'Other'.\n * @returns {string} - The formatted string based on the provided values.\n */\nexport const renderValueOther = (value: string | null, otherValue: string | null) => {\n return value === 'None' || value === null\n ? DEFAULT_EMPTY_VALUE\n : value === 'Other' && otherValue\n ? otherValue\n : value;\n};\n\n/**\n * validate proprietary info field value\n * for arr and revenue value should be a number\n * for gm % value should be a number, but user can also enter %\n * for ebitda value should be a number or one of the dropdown options\n * user can also leave the input empty\n * @param {string | number} fieldValue input field value\n * @param {string} fieldKey name of the input field\n * @param {SelectOption<string>[] | undefined} options possible dropdown options for input field\n * @param {boolean} showPopupError have posibility to show error message using ant message popup\n * @returns {boolean}\n */\nexport const validateField = (\n fieldValue: string | number,\n fieldKey: string,\n options: SelectOption<string>[] | undefined,\n showPopupError?: boolean\n) => {\n const isFromDropdown = isOptionChecked(fieldValue, options);\n\n if (isFromDropdown) return true;\n\n if (\n ((fieldKey === 'ARR' || fieldKey === 'Revenue' || fieldKey === 'Last Round') &&\n isNaN(Number(fieldValue)) &&\n !regexNegativeAbbreviation.test(fieldValue as string)) ||\n ((fieldKey === 'Capital Raised' ||\n fieldKey === 'Asking Amount' ||\n fieldKey === 'Last Raised Amount') &&\n !numberRegExp.test(fieldValue.toString()))\n ) {\n if (showPopupError === true || showPopupError === undefined) {\n message().error(ABBREVIATION_ERROR_MESSAGE);\n }\n\n return false;\n } else if (\n fieldKey === 'GM %' &&\n typeof fieldValue === 'string' &&\n !numberPercentageRegex.test(fieldValue) &&\n fieldValue !== ''\n ) {\n if (showPopupError === true || showPopupError === undefined) {\n message().error(ONLY_DIGITS_AND_PERCENTAGE_ERROR_MESSAGE);\n }\n\n return false;\n } else if (\n fieldKey === 'EBITDA' &&\n !isFromDropdown &&\n isNaN(Number(fieldValue)) &&\n !regexNegativeAbbreviation.test(typeof fieldValue === 'string' ? fieldValue : '')\n ) {\n if (showPopupError === true || showPopupError === undefined) {\n message().error(ABBREVIATION_AND_OPTIONS_ERROR_MESSAGE);\n }\n\n return false;\n }\n\n return true;\n};\n\n/**\n * function for getting the amount corresponding to the selected year\n * @param {FinancialFieldType[] | null} listValues array with options\n * @param {number} year selected year\n */\nexport const getAmount = (listValues: FinancialFieldType[] | null, year: number) =>\n listValues?.find(item => Number(item.year) === year)?.value;\n\n/**\n *function for getting if the current year is estimated\n * @param {FinancialFieldType[] | null} listValues - list of FinancialFieldType objects\n * @param {number} year - the year to search for\n * @returns {boolean | undefined} - the estimated value of the FinancialFieldType object with the given year\n */\nexport const isYearEstimated = (listValues: FinancialFieldType[] | null, year: number) => {\n const initialIsYearEstimated = year >= new Date().getFullYear();\n\n return listValues?.find(item => Number(item.year) === year)?.estimated ?? initialIsYearEstimated;\n};\n\nexport const updateFinancialValues = (\n draftStateData: Company,\n fieldKey: CompanyUserValuesKeys,\n fieldValues: CustomValue\n) => {\n const financialList = draftStateData[fieldKey] as FinancialFieldType[] | null;\n let newValues: FinancialFieldType[] = [];\n const { value: amount, optionalValue: year, from_source } = fieldValues;\n\n if (financialList === null) {\n newValues.push({\n value: amount as number | string,\n year: year as number,\n from_source: from_source as boolean,\n });\n } else {\n const financialOptionIndex = financialList.findIndex(\n (item: FinancialFieldType) => Number(item.year) === year\n );\n\n if (financialOptionIndex !== -1) {\n newValues = [...financialList];\n newValues[financialOptionIndex].value = amount as string | number;\n newValues[financialOptionIndex].from_source = from_source as boolean;\n\n if (amount === DEFAULT_EMPTY_VALUE) {\n newValues.splice(financialOptionIndex, 1);\n }\n } else {\n newValues = financialList;\n newValues.push({\n value: amount as number | string,\n year: year as number,\n from_source: from_source as boolean,\n });\n const newOrder = orderBy(newValues, 'year', 'desc');\n newValues = newOrder;\n }\n }\n\n if (fieldKey === 'ebitda_list') {\n draftStateData.ebitda_source_db = newValues.length === 0 ? '' : 'pi';\n } else if (fieldKey === 'revenue_list') {\n draftStateData.last_rev_source_db = newValues.length === 0 ? '' : 'pi';\n }\n\n // @ts-ignore\n draftStateData[fieldKey] = newValues;\n};\n","import { COMPANY_DEFAULT_SORT } from '@optx/constants/table/sort/defaultSort';\nimport { GridKeysColumns } from '@optx/models/grid';\nimport { ViewOption } from '@optx/models/search';\nimport { ColumnWidthUserSettings } from '@optx/models/table/Columns';\n\nexport const SORT_DIRECTION_KEYS_COLUMNS = [\n 'advancedSearch',\n 'myCompanies',\n 'lists',\n 'outreach',\n 'pipelineReport',\n];\n\nexport const COLUMN_WIDTH_GRID_NAMES: Record<ColumnWidthUserSettings, GridKeysColumns> = {\n column_widths_addon_mgmt: 'addons',\n column_widths_advanced_search: 'advancedSearch',\n column_widths_all_contacts: 'contacts',\n column_widths_lists: 'lists',\n column_widths_my_companies: 'myCompanies',\n column_widths_sourcing_outreach_detail: 'outreachDetails',\n column_widths_bi_weekly_pipeline_report: 'pipelineReport',\n column_widths_key_check_list: 'checklistResearchInsights',\n};\n\nexport const BASE_OPTX_DEFAULT_VIEW_GRID_KEYS: GridKeysColumns[] = [\n 'advancedSearch',\n 'lists',\n 'myCompanies',\n];\n\nexport const BASE_OPTX_DEFAULT_VIEW: ViewOption = {\n columns: '',\n column_order: '',\n pinned_columns: 'company_url, company_name, score, score_v3',\n count: 0,\n created_at: '',\n is_default: false,\n filters: {},\n sortBy: COMPANY_DEFAULT_SORT,\n search_criteria: 'sort_fields=company_name&sort_orders=asc',\n title: 'OPTX Default',\n unique_id: 'default',\n updated_at: null,\n search_info: {\n filters: [],\n keyword: '',\n type: '',\n },\n};\n\nexport const SESSIONS_SETTINGS_COLUMNS_KEYS: Record<\n GridKeysColumns,\n [string, string, string] | undefined\n> = {\n advancedSearch: ['company_display_columns', 'company_column_order', 'company_pinned_columns'],\n myCompanies: ['my_companies_columns', 'my_companies_column_order', 'my_companies_pinned_columns'],\n lists: ['user_list_display_columns', 'user_list_column_order', 'user_list_pinned_columns'],\n outreachDetails: [\n 'sourcing_outreach_detail_columns',\n 'sourcing_outreach_detail_column_order',\n 'sourcing_outreach_detail_pinned_columns',\n ],\n addons: undefined,\n checklistResearchInsights: undefined,\n contacts: undefined,\n pipelineReport: undefined,\n};\n\nexport const SESSIONS_SETTINGS_COLUMNS_WIDTH_KEYS: Record<GridKeysColumns, string> = {\n addons: 'column_widths_addon_mgmt',\n contacts: 'column_widths_all_contacts',\n checklistResearchInsights: 'column_widths_key_check_list',\n advancedSearch: 'column_widths_advanced_search',\n lists: 'column_widths_lists',\n myCompanies: 'column_widths_my_companies',\n outreachDetails: 'column_widths_sourcing_outreach_detail',\n pipelineReport: 'column_widths_bi_weekly_pipeline_report',\n};\n\nexport const LIST_OF_SAVE_COLUMNS_SORT_GRID = [\n 'advancedSearch',\n 'myCompanies',\n 'lists',\n 'outreachDetails',\n];\n\nexport const GRID_STATE_OPTIONS: Record<GridKeysColumns, number | number[]> = {\n advancedSearch: 0,\n myCompanies: 1,\n lists: 2,\n contacts: 3,\n addons: 4,\n pipelineReport: 5,\n outreachDetails: [6, 0],\n checklistResearchInsights: [7, 8],\n};\n\nexport const GRID_COLUMN_NAMES: Record<\n Exclude<GridKeysColumns, 'checklistResearchInsights'>,\n string\n> = {\n addons: 'Addon',\n advancedSearch: 'Advanced Search',\n contacts: 'Contacts',\n lists: 'Lists',\n myCompanies: 'My Companies',\n outreachDetails: 'OutReachDetailsGrid',\n pipelineReport: 'PipelineReportGrid',\n};\n","import { useLocation } from 'react-router';\n\n/**\n * Custom hook to determine the current grid name based on the URL pathname.\n *\n * This hook uses the `useLocation` hook from `react-router-dom` to access the current URL pathname\n * and returns a string representing the current grid name. The grid name is determined by the\n * following rules:\n *\n * - If the pathname starts with '/user-lists' or '/ss-lists', it returns 'Lists'.\n * - If the pathname starts with '/my-companies', it returns 'My Companies'.\n * - For all other pathnames, it returns 'Advanced Search'.\n *\n * @returns {string} The name of the current grid based on the URL pathname.\n */\nconst useCurrentGridName = () => {\n const { pathname } = useLocation();\n\n if (pathname.startsWith('/user-lists') || pathname.startsWith('/ss-lists')) {\n return 'Lists';\n } else if (pathname.startsWith('/my-companies')) {\n return 'My Companies';\n } else {\n return 'Advanced Search';\n }\n};\n\nexport default useCurrentGridName;\n","/**\n * Default render check for Table cell props equality.\n * If the column is editable, it always re-renders the cell to get updated data.\n * @param {object} prevProps previous props.\n * @param {object} nextProps next props.\n * @returns {boolean} props are equal.\n */\n\nimport Company from '@optx/models/Company';\n\ninterface memoizeCell {\n record: Company;\n value: any;\n}\n\nexport const cellIsEqual = (prevProps: memoizeCell, nextProps: memoizeCell) => {\n return prevProps.value === nextProps.value;\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport { prepareFetchSuccess } from '../../feature/saved-search/actions';\n\n// fetch contacts saved searches actions\nexport const fetchSuggestedSearches = createAction(types.FETCH_SUGGESTED_SEARCHES);\nexport const fetchSuggestedSearchesSuccess = createAction(\n types.FETCH_SUGGESTED_SEARCHES_SUCCESS,\n prepareFetchSuccess\n);\nexport const fetchSuggestedSearchesFail = createAction<string>(types.FETCH_SUGGESTED_SEARCHES_FAIL);\n","export const FETCH_SUGGESTED_SEARCHES = 'FETCH_SUGGESTED_SEARCHES';\nexport const FETCH_SUGGESTED_SEARCHES_SUCCESS = 'FETCH_SUGGESTED_SEARCHES_SUCCESS';\nexport const FETCH_SUGGESTED_SEARCHES_FAIL = 'FETCH_SUGGESTED_SEARCHES_FAIL';\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\nimport createCachedSelector from 're-reselect';\nimport { find as _find } from 'lodash';\n// redux\nimport { getSavedSearchesSelector } from '../../feature/saved-search/selectors';\n\n// specific selectors\nconst selectCompanySuggestedSearchesState = (state: AppState) => state.suggestedSearches;\nconst selectCompanyFilters = (state: AppState) => state.filters;\n\nexport const getSuggestedSearches = createSelector(\n selectCompanySuggestedSearchesState,\n getSavedSearchesSelector\n);\n\nexport const shouldFetch = createSelector(\n selectCompanySuggestedSearchesState,\n state => !state.fetchedAt\n);\n\nexport const shouldFetchSearches = createSelector(\n selectCompanySuggestedSearchesState,\n state => !state.loading && !state.fetchedAt\n);\n\nconst filtersLoaded = createSelector(selectCompanyFilters, state => !!state.fetchedAt);\nexport const shouldInitialFetch = createSelector(\n filtersLoaded,\n shouldFetch,\n (fetchedFilters, shouldFetch) => fetchedFilters && shouldFetch\n);\n\nexport const isLoading = createSelector(\n selectCompanySuggestedSearchesState,\n state => state.loading\n);\n\nexport const getSearch = createCachedSelector(\n selectCompanySuggestedSearchesState,\n (state: AppState, searchId: number) => searchId,\n (state, searchId) => state.byId[searchId]\n)((state, searchId) => searchId);\n\nexport const getSuggestedSearch = (title: string) =>\n createSelector(selectCompanySuggestedSearchesState, state =>\n _find(state.byId, search => search.title === title)\n );\n\nexport const getTotal = createSelector(selectCompanySuggestedSearchesState, state => state.total);\n\nexport const getSuggestedSearchesTitleList = createSelector(\n selectCompanySuggestedSearchesState,\n state => state.allIds.map(id => state.byId[id].title)\n);\n","import { takeLatest, call, put, select } from 'redux-saga/effects';\nimport { FilterSource, PreselectedFilter } from '@optx/models/filters';\nimport { Dictionary } from 'lodash';\nimport * as actions from './actions';\nimport { selectors as filterSourcesSelectors } from '../filters';\nimport { SavedSearchesService } from '../../../services/api';\nimport NotificationService from '../../../services/NotificationService';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\n\nexport function* fetchSuggestedSearchesSaga() {\n try {\n // @ts-ignore\n const res = yield call(SavedSearchesService.getSuggestedSearches);\n\n if (res.data) {\n const filterSources: FilterSource[] = yield select(filterSourcesSelectors.getCompanyFilters);\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getClearedFilter('advancedSearch')\n );\n\n const isAnalyst: boolean = yield select(userInformationSelectors.getIsAnalyst);\n yield put(\n actions.fetchSuggestedSearchesSuccess(\n res.data.lists,\n filterSources,\n clearedFilters,\n res.data.total_list_count,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n isAnalyst\n )\n );\n } else {\n const errorMessage = 'Error fetching suggested searches!';\n yield put(actions.fetchSuggestedSearchesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Error fetching suggested searches!';\n yield put(actions.fetchSuggestedSearchesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* suggestedSearchesSaga() {\n yield takeLatest(actions.fetchSuggestedSearches, fetchSuggestedSearchesSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction, Dictionary } from '@reduxjs/toolkit';\n// models\nimport { SearchSaveResponse } from '@optx/models/search';\nimport { Filter, FilterSource, PreselectedFilter } from '@optx/models/filters';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { SortByRule } from '@optx/models/table/sorting';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport * as actions from './actions';\nimport { fetchFailReducer, fetchReducer } from '../../feature/fetch/reducers';\nimport { ContactsSavedSearchesState } from '@optx/redux/feature/saved-search/interfaces';\nimport {\n initialState,\n fetchSavedSearchesReducer,\n fetchSavedSearchesSuccessReducer,\n} from '../../feature/saved-search/reducers';\n\nconst loadCompaniesByFilterCompletedReducer: CaseReducer = draftState => {\n draftState.loading = false;\n draftState.newOpportunitiesLoading = false;\n};\n\nconst fetchSuggestedSearchesSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<\n Array<SearchSaveResponse> | Dictionary<SearchSaveResponse>,\n any,\n {\n filterSources: Array<FilterSource<Filter<any>>>;\n clearedFilters: Dictionary<PreselectedFilter>;\n total?: number;\n query?: string;\n pagination?: PageInfo;\n sortBy?: Array<SortByRule<any>>;\n isAnalyst?: boolean;\n }\n >\n> = (draftState, action) => {\n const suggestedSearches = (action.payload as Array<SearchSaveResponse>).map(suggestedSearch => {\n // temporary fix to remove duplicates from API response\n // TODO: remove this when API is fixed\n const uniqueFilters = Array.from(new Set(suggestedSearch.search_criteria.split('&'))).join('&');\n\n return {\n ...suggestedSearch,\n // search_criteria: decodeURIComponent(suggestedSearch.search_criteria),\n search_criteria: decodeURIComponent(uniqueFilters),\n ...(suggestedSearch.search_info && {\n search_info: {\n ...suggestedSearch.search_info,\n filters:\n suggestedSearch.search_info?.filters.map(filter => decodeURIComponent(filter)) || [],\n },\n }),\n };\n });\n\n const { filterSources, clearedFilters, total, query, pagination, sortBy, isAnalyst } =\n action.meta;\n\n fetchSavedSearchesSuccessReducer(draftState, {\n payload: suggestedSearches,\n meta: {\n filterSources,\n clearedFilters,\n total,\n query,\n pagination,\n sortBy,\n isAnalyst,\n isSuggestedSearchList: true,\n },\n type: '',\n });\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(searchActions.loadSuggestedSearch, fetchReducer)\n .addCase(searchActions.loadCompaniesByFilterCompleted, loadCompaniesByFilterCompletedReducer)\n .addCase(actions.fetchSuggestedSearches, fetchSavedSearchesReducer)\n .addCase(actions.fetchSuggestedSearchesSuccess, fetchSuggestedSearchesSuccessReducer)\n .addCase(actions.fetchSuggestedSearchesFail, fetchFailReducer)\n);\n\nexport default reducer;\n","import { createAction } from '@reduxjs/toolkit';\nimport { CompanyImport } from '@optx/models/Company';\nimport { SourceScrubList } from '@models/SourceScrubList';\nimport { CompanyWatchList } from '@models/WatchList';\nimport * as types from './types';\n\nexport const loadCompanyList = createAction<{ id: string; isSourceScrub: boolean }>(\n types.LOAD_COMPANY_LIST\n);\nexport const loadCompanyListSuccess = createAction<{ id: string; isSourceScrub: boolean }>(\n types.LOAD_COMPANY_LIST_SUCCESS\n);\n\n// filter the current company list\nexport const filterCompanyList = createAction<string>(types.FILTER_COMPANY_LIST);\nexport const filterCompanyListSuccess = createAction<string>(types.FILTER_COMPANY_LIST_SUCCESS);\n\nexport const clearCompanyList = createAction<void>(types.CLEAR_COMPANY_FILTER);\n\n/**\n * Delete company from current active list.\n */\nexport const deleteCompanyInCurrentList = createAction<number>(types.DELETE_COMPANY_IN_LIST);\n\n/**\n * Save Companies list that have error in the CSV import.\n */\nexport const filterCSVCompanyErrorList = createAction<{ data: CompanyImport; title: string }>(\n types.FILTER_CSV_COMPANY_ERROR_LIST\n);\n\nexport const loadCompanyListDetails = createAction<{ id: string; isSourceScrub: boolean }>(\n types.LOAD_COMPANY_LIST_DETAILS\n);\nexport const loadCompanyListDetailsSuccess = createAction(\n types.LOAD_COMPANY_LIST_DETAILS_SUCCESS,\n (list: SourceScrubList | CompanyWatchList) => ({ payload: list })\n);\nexport const loadCompanyListDetailsFailure = createAction<string>(\n types.LOAD_COMPANY_LIST_DETAILS_FAILURE\n);\nexport const loadCompanyListDetailsReset = createAction(types.LOAD_COMPANY_LIST_DETAILS_RESET);\nexport const resetLoadingState = createAction(types.RESET_LOADING_STATE);\n","import { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n\n/**\n * function used to set default thumbs up/down value for score rationale,\n * using the value returned for optx rationale. if api returns \"-\", it means\n * thumbs upshould be checked, if value is null, no button should be checked,\n * if value is a string, thumbs down button should be checked\n * @param {string | null | undefined} defaultRationaleScore value for score rationale\n */\nexport const getRationaleDefaultValue = (defaultRationaleScore: string | null | undefined) => {\n if (defaultRationaleScore === DEFAULT_CELL_VALUE) {\n return true;\n }\n\n if (typeof defaultRationaleScore === 'string') {\n return false;\n }\n\n return undefined;\n};\n\n/**\n * function to convert string range into array of max and min values\n * @param {string} range string to be converted\n */\nexport const getRangeValues = (range: string) => {\n const rangeValues = [];\n\n if (range.includes('<')) {\n rangeValues.push(Number(range.slice(range.indexOf('<') + 1)));\n } else {\n const dashIndex = range.indexOf('-');\n const firstValue = range.slice(0, dashIndex);\n rangeValues.push(Number(firstValue));\n const secondValue = range.slice(dashIndex + 1);\n rangeValues.push(Number(secondValue));\n }\n\n return rangeValues;\n};\n\n/**\n * function to convert score number into string range of max and min values\n * @param {number} score number to be converted\n */\nexport const getRange = (score: number) => {\n let range = '< 50';\n\n if (score >= 50 && score <= 59) {\n return '50-59';\n } else if (score >= 60 && score <= 69) {\n return '60-69';\n } else if (score >= 70 && score <= 79) {\n return '70-79';\n } else if (score >= 80 && score <= 89) {\n return '80-89';\n } else if (score >= 90 && score <= 100) {\n return '90-100';\n }\n\n return range;\n};\n\n/**\n * function to determine the ratio of values\n * @param {string[]} range array of min, max range values\n * @param {number} score value for comparison\n */\nexport const getValuesRalation = (range: number[], score: number) => {\n let valuesRalation = 'equal';\n\n if (range.length === 1) {\n if (score >= range[0]) {\n valuesRalation = 'lower';\n }\n } else if (score < range[0]) {\n valuesRalation = 'upper';\n } else if (score > range[1]) {\n valuesRalation = 'lower';\n }\n\n return valuesRalation;\n};\n","import { Dictionary } from 'lodash';\nimport { FilterColumns } from '@models/feature/analystsLeaderboard/filters';\n\nexport const tagsOmmitedFilters: Array<FilterColumns> = ['filter_criteria'];\n\nexport const filtersByCriteria: Dictionary<Array<FilterColumns>> = {\n touches: ['touch_type_status', 'touch_type_id'],\n companies_reached: ['companies_reached_status', 'deal_stage_id'],\n stage_changes: ['stage_change_status', 'past_stage_id'],\n pipeline_information: ['pipeline_companies_rank', 'previous_period'],\n};\n","import { LineProps } from 'recharts';\n\nexport const lines: Array<LineProps> = [\n {\n dataKey: 'selectedPeriod',\n stroke: '#096DD9',\n name: 'Selected Period',\n },\n {\n dataKey: 'previousPeriod',\n stroke: '#FA541C',\n name: 'Previous Week',\n },\n];\n","import { Dictionary, forEach } from 'lodash';\nimport { createSelector } from 'reselect';\nimport { GroupedOptionsType, GroupType } from 'react-select';\nimport createCachedSelector from 're-reselect';\nimport queryString from 'query-string';\n// models\nimport { selectors as fetchSelectors } from '@optx/redux/feature/fetch';\nimport { DateRangeOption, SelectOption } from '@optx/models/Option';\nimport { FilterOptions, PreselectedFilter } from '@optx/models/filters';\nimport mapTags from '@optx/utils/filters/mapTags';\nimport { FilterColumns } from '@optx/models/feature/analystsLeaderboard/filters';\n// utils\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\n// Local\n// constants\nimport { AnalystsLeaderboardFiltersState } from './interfaces';\nimport { tagsOmmitedFilters } from './constants';\nimport { lines } from '../../constants/statsChart';\nimport { pipelineCriteria } from '../../constants/custom-criteria';\n\nexport const selectNormalizedFilters = (state: AnalystsLeaderboardFiltersState) => state.byColumn;\nexport const selectSources = (state: AnalystsLeaderboardFiltersState) => state.data;\nexport const selectCommonValues = (state: AnalystsLeaderboardFiltersState) => state.commonValues;\nexport const selectCriteriaValues = (state: AnalystsLeaderboardFiltersState) =>\n state.criteriaValues;\nexport const selectOptions = (state: AnalystsLeaderboardFiltersState) => state.options;\nexport const selectDefaultValues = (state: AnalystsLeaderboardFiltersState) => state.defaultValues;\nexport const selectDefaultCriteriaValues = (state: AnalystsLeaderboardFiltersState) =>\n state.defaultCriteriaValues;\nexport const selectClearValues = (state: AnalystsLeaderboardFiltersState) => state.clearValues;\n\nexport const getSearchCriteria = createSelector(\n selectCommonValues,\n commonValues => commonValues.filter_criteria as string | undefined\n);\n\n/**\n * Select common and current criteria values.\n * This will ommit special criteria like pipeline_information.\n */\nexport const selectValues = createSelector(\n selectCommonValues,\n selectCriteriaValues,\n getSearchCriteria,\n (commonValues, valuesByCriteria, criteria) => {\n let values: Dictionary<PreselectedFilter> = {};\n\n if (!criteria) {\n return values;\n }\n\n const criteriaValues = valuesByCriteria[criteria];\n\n // Join common and current criteria values.\n values = {\n ...commonValues,\n ...criteriaValues,\n };\n\n return values;\n }\n);\n\nexport const getAllValues = createSelector(\n selectCommonValues,\n selectCriteriaValues,\n (commonValues, valuesByCriteria) => {\n const allValues: Dictionary<PreselectedFilter> = {\n ...commonValues,\n };\n\n forEach(valuesByCriteria, (criteriaValues, criteria) => {\n forEach(criteriaValues, (value, filterColumn) => {\n allValues[filterColumn] = value;\n });\n });\n\n return allValues;\n }\n);\n\nexport const isLoading = (state: AnalystsLeaderboardFiltersState) =>\n fetchSelectors.isLoadingSelector(state);\n\nexport const shouldFetch = (state: AnalystsLeaderboardFiltersState) =>\n fetchSelectors.shouldInitialFetchSelector(state);\n\nexport const getFilter = createCachedSelector(\n selectNormalizedFilters,\n (state: AnalystsLeaderboardFiltersState, filterKey: string) => filterKey,\n (filters, filterKey) => filters[filterKey] || null\n)((state, filterKey) => filterKey);\n\n// Multi select filters\nexport const getSelectOptions = createCachedSelector(\n selectOptions,\n (state: AnalystsLeaderboardFiltersState, filterKey: string) => filterKey,\n (filtersOptions, filterKey) => {\n const options = getFilterOptions(filterKey, filtersOptions) as\n | Array<SelectOption>\n | GroupedOptionsType<SelectOption>\n | undefined;\n\n return options || [];\n }\n)((state, filterKey) => filterKey);\n\n/**\n * Should analysts allow selection in analysts multiselect.\n * Special situation when the only option on analysts multiselect is the analyst itself.\n */\nexport const allowAnalystsEditing = createSelector(\n (state: AnalystsLeaderboardFiltersState) => getSelectOptions(state, 'analyst_id'),\n options => {\n return options.length !== 1 || !!(options[0] as GroupType<SelectOption>).options;\n }\n);\n\nexport interface FilterSelectValueInformation {\n filterKey: string;\n criteria?: string;\n}\n\nexport const getSelectValue = createCachedSelector(\n selectValues,\n selectCriteriaValues,\n (state: AnalystsLeaderboardFiltersState, selectInfo: FilterSelectValueInformation) => selectInfo,\n (values, criteriaValues, { filterKey, criteria }) => {\n if (criteria) {\n return (\n (criteriaValues[criteria] &&\n (criteriaValues[criteria][filterKey] as Array<SelectOption>)) ||\n []\n );\n }\n\n return (values[filterKey] as Array<SelectOption>) || [];\n }\n)((state, { filterKey, criteria }) => `${filterKey}${criteria || ''}`);\n\nexport const getRadioValue = createCachedSelector(\n selectValues,\n selectCriteriaValues,\n (state: AnalystsLeaderboardFiltersState, selectInfo: FilterSelectValueInformation) => selectInfo,\n (values, criteriaValues, { filterKey, criteria }) => {\n if (criteria) {\n if (criteria) {\n return (criteriaValues[criteria] && (criteriaValues[criteria][filterKey] as string)) || '';\n }\n }\n\n return (values[filterKey] as string) || '';\n }\n)((state, { filterKey, criteria }) => `${filterKey}${criteria || ''}`);\n\ntype DateRangeValue = [string | null, string | null];\n\nexport const getSingleDateRangesValue = createCachedSelector(\n selectValues,\n (state: AnalystsLeaderboardFiltersState, filterKey: string) => filterKey,\n (values, filterKey) => (values[filterKey] || [null, null]) as DateRangeValue\n)((state, filterKey) => filterKey);\n\nexport const getSingleDateRangesOptions = createCachedSelector(\n selectOptions,\n (state: AnalystsLeaderboardFiltersState, filterKey: string) => filterKey,\n (filtersOptions, filterKey) => {\n const options = getFilterOptions(filterKey, filtersOptions) as\n | Array<DateRangeOption>\n | undefined;\n\n return options || [];\n }\n)((state, filterKey) => filterKey);\n\nfunction getFilterOptions(column: string, filtersOptions: Dictionary<FilterOptions | undefined>) {\n return filtersOptions[column];\n}\n\nexport const isAllTimeDate = createSelector(\n (state: AnalystsLeaderboardFiltersState) => getCurrentDateRangeOption(state, 'startdatetime'),\n option => !!option && option.label?.toLowerCase() === 'all time'\n);\n\nexport const getTags = createSelector(\n selectSources,\n selectValues,\n selectClearValues,\n selectCriteriaValues,\n isAllTimeDate,\n (filterSources, values, clearValues, criteriaValues, isAllTime) => {\n // Include special criteria values like pipeline_information.\n let pipelineValues = criteriaValues[pipelineCriteria];\n\n if (isAllTime) {\n pipelineValues = { ...pipelineValues, previous_period: clearValues.previous_period };\n }\n\n const finalValues: Dictionary<PreselectedFilter> = {\n ...values,\n ...pipelineValues,\n };\n\n const sourcesOptxUserIdLength = filterSources[0]?.data.find(\n item => item.column === 'analyst_id'\n )?.data.length;\n const filterOptxUserIdLength = (values.analyst_id as Array<SelectOption>)?.length;\n\n let tags;\n\n if (sourcesOptxUserIdLength === filterOptxUserIdLength) {\n tags = mapTags(\n { ...finalValues, analyst_id: undefined },\n filterSources,\n clearValues,\n tagsOmmitedFilters\n );\n } else {\n tags = mapTags(finalValues, filterSources, clearValues, tagsOmmitedFilters);\n }\n\n return tags;\n }\n);\n\nexport const getDefaultTags = createSelector(\n selectSources,\n selectValues,\n selectDefaultValues,\n selectCriteriaValues,\n (filterSources, values, defaultValues, criteriaValues) => {\n // Include special criteria values like pipeline_information.\n const pipelineValues = criteriaValues[pipelineCriteria];\n const finalValues: Dictionary<PreselectedFilter> = {\n ...values,\n ...pipelineValues,\n };\n\n const tags = mapTags(finalValues, filterSources, defaultValues, tagsOmmitedFilters);\n\n return tags;\n }\n);\n\nexport const showClearAll = createSelector(getDefaultTags, tags => {\n const tagNotDefault = tags.find(tag => {\n if (tag.isDefault === false && tag.values?.length > 0) {\n return true;\n }\n\n return false;\n });\n\n return !!tagNotDefault;\n});\n\nexport const getCurrentDateRangeOption = createCachedSelector(\n (state: AnalystsLeaderboardFiltersState, filterKey: string) => filterKey,\n getSingleDateRangesOptions,\n getSingleDateRangesValue,\n (filterKey, options, value) => {\n const preselectedValue = options.find(\n option => option.start === value[0] && option.end === value[1]\n );\n\n if (preselectedValue) {\n return preselectedValue;\n }\n\n return null;\n }\n)((state, filterKey) => filterKey);\n\nexport const getSelectedPeriodLabel = createSelector(\n (state: AnalystsLeaderboardFiltersState) => getCurrentDateRangeOption(state, 'startdatetime'),\n option => {\n return option ? (option.label as string) : 'Selected Period';\n }\n);\n\nfunction getNextPeriodLabel(label: string) {\n return label.replace('Last ', 'Previous ');\n}\n\nexport const getChartLines = createCachedSelector(\n (state: AnalystsLeaderboardFiltersState, filterKey: FilterColumns) => filterKey,\n getCurrentDateRangeOption,\n isAllTimeDate,\n (key, option, isAllTime) => {\n const currentLabel = option ? (option.label as string) : '';\n const finalLines = isAllTime ? lines.filter(line => line.dataKey === 'selectedPeriod') : lines;\n\n return finalLines\n .map((line, index) => {\n if (line.dataKey === 'selectedPeriod') {\n return {\n ...line,\n name: currentLabel || 'SELECTED PERIOD',\n };\n }\n\n return {\n ...line,\n name: getNextPeriodLabel(currentLabel) || 'PREVIOUS PERIOD',\n };\n })\n .reverse(); // reverse lines to have current/last period first.\n }\n)((state, filterKey) => filterKey);\n\n/**\n * Check if current filter is a common filter (top filter).\n */\nexport const isCommonFilter = createCachedSelector(\n selectCommonValues,\n (state: AnalystsLeaderboardFiltersState, filterKey: string) => filterKey,\n (commonValues, filterKey) => {\n return Object.prototype.hasOwnProperty.call(commonValues, filterKey);\n }\n)((state, filterKey) => filterKey);\n\nexport const getCommonFiltersQuery = createSelector(\n selectCommonValues,\n selectNormalizedFilters,\n (commonValues, filtersByColumn) => {\n const queryValues = mapFiltersToURLParams(filtersByColumn, commonValues);\n const query = queryString.stringify(queryValues, { arrayFormat: 'comma' });\n\n return query;\n }\n);\n\nexport const getValuesByCriteria = createCachedSelector(\n selectCriteriaValues,\n (state: AnalystsLeaderboardFiltersState, criteria: string) => criteria,\n (criteriaValues, criteria) => {\n return criteriaValues[criteria];\n }\n)((state, criteria) => criteria);\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { FilterSource, PreselectedFilter } from '@optx/models/filters';\nimport { UserInformation } from '@models/user';\n// utils\nimport { normalizeFiltersByColumn } from '@utils/filters/normalize';\nimport { mapPreselectedFilters } from '@utils/filters/preselectedValues';\nimport { mapFiltersOptions } from '@optx/utils/filters/mapFiltersOptions';\nimport { parseFilter } from '@utils/filters/parseFilters';\n// redux\nimport { reducers } from '@redux/feature/fetch';\nimport { actions as userInformationActions } from '@redux/user/information';\n// local\n// models\nimport { Dictionary, forEach } from 'lodash';\nimport { AnalystsLeaderboardFiltersState, UpdateValuePayload, FilterMeta } from './interfaces';\n// redux\nimport * as actions from './actions';\nimport { filtersByCriteria } from './constants';\n\nconst initialState: AnalystsLeaderboardFiltersState = {\n data: [],\n error: '',\n loading: false,\n fetchedAt: null,\n byColumn: {},\n // current values\n criteriaValues: {},\n options: {},\n commonValues: {},\n // default values from API.\n defaultValues: {},\n defaultCommonValues: {},\n defaultCriteriaValues: {},\n // clear values.\n clearValues: {},\n grouped_values: {},\n};\n\nconst fetchSuccess: CaseReducer<\n AnalystsLeaderboardFiltersState,\n PayloadAction<Array<FilterSource>>\n> = (draftState, action) => {\n reducers.fetchSuccessReducer(draftState, action);\n const normalizedByColumn = normalizeFiltersByColumn(action.payload);\n // @ts-ignore for now\n draftState.byColumn = normalizedByColumn;\n const apiValues = mapPreselectedFilters(action.payload);\n const clearValues = mapPreselectedFilters(action.payload, false);\n // Pipeline previous period is required and empty value can't be used as clear value.\n clearValues.previous_period = apiValues.previous_period;\n\n // const defaultClearValues = getCommonValues(clearValues, filtersByCriteria);\n const defaultClearCriteriaValues = getCriteriaValues(clearValues, filtersByCriteria);\n\n draftState.clearValues = clearValues;\n\n const apiCommonValues = getCommonValues(apiValues, filtersByCriteria);\n const apiCriteriaValues = getCriteriaValues(apiValues, filtersByCriteria);\n draftState.commonValues = apiCommonValues;\n draftState.criteriaValues = apiCriteriaValues;\n\n if (draftState.persistedFilter !== undefined) {\n // If there is a persisted filter on API with no previous_period add default value.\n // The filter is required and pipeline information call will fail initially until user changes a filter.\n let persistedFilter = draftState.persistedFilter;\n\n if (!persistedFilter.includes('previous_period')) {\n persistedFilter += '&previous_period=7';\n }\n\n // Load persisted filter if available.\n const [parsedFilters] = parseFilter(persistedFilter, action.payload);\n draftState.commonValues = getCommonValues(parsedFilters, filtersByCriteria);\n const criteriaValues = getCriteriaValues(parsedFilters, filtersByCriteria);\n\n // Merge default criteria values with persisted values.\n forEach(defaultClearCriteriaValues, (defaultValue, criteria) => {\n const mergedValues: Dictionary<PreselectedFilter> = {\n ...defaultValue,\n ...criteriaValues[criteria],\n };\n\n criteriaValues[criteria] = mergedValues;\n });\n\n draftState.criteriaValues = criteriaValues;\n delete draftState.persistedFilter;\n }\n\n draftState.defaultCommonValues = apiCommonValues;\n draftState.defaultCriteriaValues = apiCriteriaValues;\n draftState.defaultValues = apiValues;\n // @ts-ignore weird issue. Same type from method and model and still showing error :(.\n draftState.options = mapFiltersOptions(action.payload);\n draftState.fetchedAt = new Date().toISOString();\n};\n\nfunction getCommonValues(\n values: Dictionary<PreselectedFilter>,\n filtersByCriteria: Dictionary<Array<string>>\n) {\n const commonValues: Dictionary<PreselectedFilter> = {};\n const criteria: Dictionary<boolean> = {};\n\n forEach(filtersByCriteria, filterColumns => {\n if (filterColumns) {\n filterColumns.forEach(column => {\n criteria[column] = true;\n });\n }\n });\n\n forEach(values, (value, key) => {\n if (!criteria[key]) {\n commonValues[key] = value;\n }\n });\n\n return commonValues;\n}\n\nfunction getCriteriaValues(\n values: Dictionary<PreselectedFilter>,\n filtersByCriteria: Dictionary<Array<string>>\n) {\n const criteriaValues: Dictionary<Dictionary<PreselectedFilter>> = {};\n\n forEach(filtersByCriteria, (filterColumns, key) => {\n if (filterColumns) {\n criteriaValues[key] = {};\n\n filterColumns.forEach(column => {\n // the pipeline_companies_rank filter has two options, one of them having the value as \"is_rank_of_5\",\n // but when applying this filter api expects to receive \"true\". this should ideally be fixed from api, but\n // for now will use this workaround.\n if (column === 'pipeline_companies_rank' && values[column] === 'true') {\n criteriaValues[key][column] = 'is_rank_of_5';\n } else {\n criteriaValues[key][column] = values[column];\n }\n });\n }\n });\n\n return criteriaValues;\n}\n\nconst updateValue: CaseReducer<\n AnalystsLeaderboardFiltersState,\n PayloadAction<UpdateValuePayload>\n> = (draftState, action) => {\n const { filterKey, value, criteria } = action.payload;\n\n if (criteria) {\n draftState.criteriaValues[criteria][filterKey] = value;\n } else {\n draftState.commonValues[filterKey] = value;\n }\n};\n\nconst clearAllFilters: CaseReducer<AnalystsLeaderboardFiltersState> = draftState => {\n const { commonValues, defaultCommonValues, defaultCriteriaValues } = draftState;\n\n // reset filters keeping select criteria/card only.\n const currentCriteria = commonValues.filter_criteria;\n draftState.commonValues = defaultCommonValues;\n draftState.commonValues.filter_criteria = currentCriteria;\n draftState.criteriaValues = defaultCriteriaValues;\n};\n\nconst clearFilter: CaseReducer<AnalystsLeaderboardFiltersState, PayloadAction<FilterMeta>> = (\n draftState,\n action\n) => {\n const { filterKey, criteria } = action.payload;\n const { commonValues, clearValues } = draftState;\n const clearValue = clearValues[filterKey];\n\n if (commonValues[filterKey]) {\n // check if is in common\n draftState.commonValues[filterKey] = clearValue;\n } else if (criteria) {\n draftState.criteriaValues[criteria][filterKey] = clearValue;\n } else {\n // is criteria value.\n const currentCriteria = commonValues.filter_criteria as string;\n draftState.criteriaValues[currentCriteria][filterKey] = clearValue;\n }\n};\n\n// External reducers\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccess: CaseReducer<\n AnalystsLeaderboardFiltersState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const persistedFilter = action.payload.settings.session_settings\n ? action.payload.settings.session_settings.analysts_leaderboard_filters\n : undefined;\n\n if (persistedFilter !== undefined) {\n draftState.persistedFilter = persistedFilter;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetch, reducers.fetchReducer)\n .addCase(actions.fetchSuccess, fetchSuccess)\n .addCase(actions.fetchFail, reducers.fetchFailReducer)\n .addCase(actions.updateValue, updateValue)\n .addCase(actions.clearAllFilters, clearAllFilters)\n .addCase(actions.clearFilter, clearFilter)\n // External reducers\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccess)\n);\n\nexport default reducer;\n","export const featureName = 'pipeline-report';\n","import React from 'react';\nimport { Card, Col, Typography } from 'antd';\nimport { CardProps } from 'antd/lib/card';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\n\nconst { Text } = Typography;\n\nconst CompanyCard = styled<React.FC<CardProps & { $active?: boolean }>>(Card)`\n margin-bottom: 20px;\n border-top: 3px solid transparent;\n max-height: 164px;\n\n .ant-card-body {\n padding: 0;\n }\n\n &:hover {\n border-top: 3px solid #0092ff;\n }\n\n .tooltipText {\n width: 240px;\n font-size: 14px;\n background-color: white;\n color: grey;\n text-align: left;\n border-radius: 6px;\n padding: 5px 5px;\n position: absolute;\n visibility: hidden;\n z-index: 1;\n box-shadow: inset 0px 0px 0px #d9d9d9, -1px 0px 6px #d9d9d9;\n }\n ${props =>\n props.$active &&\n css`\n border-top: 3px solid #0092ff;\n box-shadow: 0 1px 2px -2px rgb(0 0 0 / 16%), 0 3px 6px 0 rgb(0 0 0 / 12%),\n 0 5px 12px 4px rgb(0 0 0 / 9%);\n `}\n`;\n\nconst LogoColumn = styled(Col)`\n display: flex;\n align-items: center;\n flex-direction: column;\n width: 79px;\n padding-right: 16px;\n`;\n\nconst EmployeeColumn = styled(Col)`\n display: flex;\n align-items: flex-end;\n text-align: right;\n text-overflow: hidden;\n flex-direction: column;\n min-width: fit-content;\n margin-left: 20px;\n position: relative;\n`;\n\nconst EmployeeChart = styled.span`\n position: absolute;\n bottom: -22px;\n right: 0;\n`;\n\nconst ImageWrapper = styled.div`\n box-shadow: 0px 2px 8px 0px #00000026;\n border-radius: 10px;\n padding: 2px;\n height: 50px;\n width: 55px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n img {\n max-width: 100%;\n max-height: 100%;\n }\n`;\n\nconst IsraelFlagImg = styled.img`\n display: inline-block;\n max-width: 32px;\n margin-left: 5px;\n position: relative;\n top: 2px;\n`;\n\nconst ScoreTrendingWrapper = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 10px;\n\n .score-trending__growth,\n .trending-value {\n gap: 1px;\n }\n\n .score-trending__label {\n font-size: 10px;\n }\n\n .score-trending__growth-score {\n font-size: 18px;\n }\n`;\n\nconst CompanyNameWrapper = styled.div`\n display: flex;\n align-items: baseline;\n`;\n\nconst CompanyName = styled(Text)`\n margin: 0;\n font-size: 16px;\n font-weight: bold;\n max-width: 100%;\n color: #334d6e;\n line-height: 24px;\n`;\n\nconst CompanyProfileLink = styled(Link)`\n margin-left: 5px;\n font-size: 21px;\n line-height: 18px;\n color: #334d6e;\n`;\n\nconst CompanyLocation = styled(Text)`\n line-height: 22px;\n color: #90a0b7;\n\n svg {\n vertical-align: baseline;\n color: #90a0b7;\n width: 16px;\n }\n`;\n\nconst CompanyDetailsWrapper = styled.div`\n min-height: 36px;\n`;\n\nconst CompanyDetails = styled(Text)`\n display: block;\n line-height: 12px;\n margin-top: 2px;\n`;\n\nconst YearLabel = styled(Text)`\n color: #334d6e;\n`;\n\nconst YearValue = styled(Text)`\n color: #90a0b7;\n`;\n\nconst WebsiteIcon = styled.a`\n font-size: 23px;\n margin-left: 5px;\n line-height: 23px;\n align-self: stretch;\n color: #334d6e;\n\n &.not-active {\n color: red;\n }\n`;\n\nconst Description = styled(Text)`\n font-size: 14px;\n line-height: 15px;\n margin: 8px 0;\n position: relative;\n color: #90a0b7;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n height: 31.5px;\n`;\n\nconst Label = styled.span`\n display: block;\n font-size: 12px;\n font-weight: bold;\n`;\nconst Value = styled.span`\n font-size: 16px;\n color: rgb(175, 189, 209);\n font-weight: bold;\n`;\n\nconst DateValue = styled(Value)`\n color: #fa8c16;\n text-transform: uppercase;\n`;\n\nconst CenteredColumn = styled(Col)`\n display: flex;\n align-items: center;\n flex-direction: column;\n overflow: hidden;\n min-width: fit-content;\n`;\n\nconst Styled = {\n CompanyCard,\n LogoColumn,\n ImageWrapper,\n IsraelFlagImg,\n CompanyNameWrapper,\n ScoreTrendingWrapper,\n CompanyName,\n CompanyProfileLink,\n CompanyLocation,\n CompanyDetailsWrapper,\n CompanyDetails,\n YearLabel,\n YearValue,\n WebsiteIcon,\n Description,\n Label,\n Value,\n DateValue,\n CenteredColumn,\n EmployeeColumn,\n EmployeeChart,\n};\n\nexport default Styled;\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\n\nexport const toggleFullScreen = createAction(types.TOGGLE_FULL_SCREEN);\n","export const TOGGLE_FULL_SCREEN = 'TOGGLE_FULL_SCREEN';\n","import { AppState } from '@optx/redux/interfaces';\n\nexport const isFullscreen = (state: AppState) => state.ui && state.ui.fullscreen;\n","import { createReducer } from '@reduxjs/toolkit';\nimport * as actions from './actions';\nimport { toggleReducer } from '../../../feature/toggle/reducers';\n\nconst reducer = createReducer(false, builder =>\n builder.addCase(actions.toggleFullScreen, toggleReducer)\n);\n\nexport default reducer;\n","export { default as useInitialFetch } from './useInitialFetch';\nexport { default as useShouldFetch } from './useShouldFetch';\n","import React from 'react';\nimport { CartesianGridProps, LegendProps, LineProps, XAxisProps, YAxisProps } from 'recharts';\n\n// Grid\nexport const cartesianGridProps: CartesianGridProps = {\n horizontal: false,\n vertical: false,\n};\n\n// Tick\nexport const tickDefaultProps: React.SVGProps<SVGElement> = {\n fill: '#C2CFE0',\n fontSize: 10,\n fontWeight: 600,\n};\n\nexport const xAxisTickDefaultProps: React.SVGProps<SVGElement> = {\n ...tickDefaultProps,\n style: {\n marginRight: 10,\n },\n};\n\nexport const yAxisTickDefaultProps: React.SVGProps<SVGElement> = {\n ...tickDefaultProps,\n fontSize: 12,\n};\n\n// X/Y axis\nexport const defaultAxisLineProps: React.SVGProps<SVGSVGElement> = {\n stroke: '#C2CFE0',\n strokeWidth: 1,\n};\n\nexport const xAxisProps: XAxisProps = {\n padding: { left: 50, right: 50 },\n axisLine: defaultAxisLineProps,\n tickLine: false,\n dataKey: 'name',\n tick: xAxisTickDefaultProps,\n tickMargin: 20,\n};\n\nexport const yAxisProps: YAxisProps = {\n axisLine: defaultAxisLineProps,\n tickLine: false,\n tick: yAxisTickDefaultProps,\n tickMargin: 12,\n};\n\n// Lines\nexport const lineProps: Omit<LineProps, 'dataKey'> = {\n strokeWidth: 3,\n type: 'monotone',\n stroke: '#1890FF',\n};\n\n// Legend\nconst legendWrapperStyles: React.CSSProperties = {\n paddingLeft: 110,\n};\n\nexport const legendProps: LegendProps = {\n align: 'left',\n verticalAlign: 'top',\n height: 40,\n wrapperStyle: legendWrapperStyles,\n iconType: 'circle',\n iconSize: 11,\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { FilterSource } from '@optx/models/filters';\nimport * as types from './types';\n\n// fetch contacts filters actions\nexport const fetchFilters = createAction(types.FETCH_FILTERS);\nexport const fetchFiltersSuccess = createAction<Array<FilterSource>>(types.FETCH_FILTERS_SUCCESS);\nexport const fetchFiltersFail = createAction<string>(types.FETCH_FILTERS_FAIL);\n","export const FETCH_FILTERS = 'contacts/search/FETCH_FILTERS';\nexport const FETCH_FILTERS_SUCCESS = 'contacts/search/FETCH_FILTERS_SUCCESS';\nexport const FETCH_FILTERS_FAIL = 'contacts/search/FETCH_FILTERS_FAIL';\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst selectContactsFiltersState = (state: AppState) => state.contactsFilters;\n\nexport const isLoading = createSelector(selectContactsFiltersState, state => state.loading);\n\nexport const loaded = createSelector(selectContactsFiltersState, state => !!state.fetchedAt);\n\nexport const shouldInitialFetch = createSelector(\n selectContactsFiltersState,\n state => !state.fetchedAt && !state.loading\n);\n\nexport const getFilterSources = createSelector(selectContactsFiltersState, state => state.data);\n\nexport const fetchedFilters = createSelector(\n selectContactsFiltersState,\n state => !!state.fetchedAt\n);\n\nexport const getFiltersMap = createSelector(selectContactsFiltersState, state => state.filters);\n","import { takeLatest, call, put } from 'redux-saga/effects';\nimport { fetchFilters, fetchFiltersSuccess, fetchFiltersFail } from './actions';\nimport { FilterService } from '../../../services/api';\nimport { FilterGroup } from '../../../models/filters';\n\nexport function* fetchContactsFiltersSaga() {\n try {\n // @ts-ignore\n const res = yield call(FilterService.getOptions, FilterGroup.Contacts);\n\n if (res.data) {\n yield put(fetchFiltersSuccess(res.data.filters));\n } else {\n yield put(fetchFiltersFail('Error fetch filters for contacts!'));\n }\n } catch (e: any) {\n yield put(fetchFiltersFail('Error fetch filters for contacts!'));\n }\n}\n\nexport default function* contactsFiltersSaga() {\n yield takeLatest(fetchFilters.type, fetchContactsFiltersSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { FilterSource } from '@optx/models/filters';\nimport * as actions from './actions';\nimport { ContactsFiltersState } from './interfaces';\nimport { fetchReducer, fetchFailReducer, fetchSuccessReducer } from '../../feature/fetch/reducers';\nimport { normalizeFiltersByColumn } from '../../../utils/filters/normalize';\n\n// initial state\nconst initialState: ContactsFiltersState = {\n data: [],\n loading: false,\n error: '',\n fetchedAt: '',\n filters: {},\n preselected: {},\n};\n\n// fetch\nconst fetchFiltersSuccessReducer: CaseReducer<\n ContactsFiltersState,\n PayloadAction<Array<FilterSource>>\n> = (draftState, action) => {\n fetchSuccessReducer(draftState, action);\n draftState.fetchedAt = new Date().toISOString();\n // @ts-ignore - same problem like on search filters\n draftState.filters = normalizeFiltersByColumn(action.payload);\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // fetch contacts filters\n .addCase(actions.fetchFilters, fetchReducer)\n .addCase(actions.fetchFiltersSuccess, fetchFiltersSuccessReducer)\n .addCase(actions.fetchFiltersFail, fetchFailReducer)\n);\n\nexport default reducer;\n","import { AxiosResponse } from 'axios';\nimport { pick } from 'lodash';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport { SalesloftEmails, SalesloftContact } from '@optx/models/Salesloft';\n\n/**\n * parse different types of errors coming from api for adding to salesloft\n * @param {AxiosResponse<any>} error object with error message\n * @param {string} defaultMessage a default message,\n * @param {(url: string) => void)} callback optional callback\n */\nexport const handleSalesloftError = (\n error: AxiosResponse<any>,\n defaultMessage: string,\n callback?: (url: string) => void\n) => {\n let errorMessage = defaultMessage;\n const errorApi = JSON.parse(error.request.responseText);\n\n if (error.status === 424) {\n if (errorApi.errors['424 Failed Dependency'] === 'SalesLoft Application not authorized.') {\n callback && callback('');\n errorMessage = 'Authentication Required';\n } else if (errorApi.errors['424 Failed Dependency'].includes('email')) {\n errorMessage = errorApi.errors['424 Failed Dependency'];\n } else {\n errorMessage = 'Cadence is already in progress for this person';\n }\n } else if (error.status === 400) {\n const errorFieldList = [] as Array<string>;\n Object.keys(errorApi.errors).forEach(errorField => {\n switch (errorField) {\n case 'first_name':\n errorFieldList.push('First Name');\n break;\n case 'last_name':\n errorFieldList.push('Last Name');\n break;\n case 'title':\n errorFieldList.push('Title');\n break;\n case 'primary_email':\n errorFieldList.push('Email');\n break;\n default:\n break;\n }\n });\n }\n\n return errorMessage;\n};\n\n/**\n * compile a string of emails or undefined values, separated by space.\n * the values itself come from email field inputs, some can contain actual email\n * and some can be undefined.\n * the returned value needs to a string of emails separated by commas\n * @param {string} emails string of emails or undefined values, separated by single space\n */\nexport const emailFieldsToString = (emails: string) =>\n emails\n .replace(/undefined/g, '')\n .trim()\n .replaceAll(' ', ',')\n .replace(/,{2,3}/, ',');\n\n/**\n * parse error messages coming from api into more user friendly messages\n * @param {string} message error message to parse\n */\nexport const parseSalesloftErrors = (message: string | null) => {\n if (message && message.includes('SalesLoft Application not authorized')) {\n return 'Not logged in to Sales Loft';\n }\n\n if (message && message.includes('SalesLoft API request failed')) {\n return 'Cadence is already in progress for this person';\n }\n\n return message;\n};\n\n/**\n * validate data for a list of contacts, each contact must have\n * first and last name, title and primary email.\n * return a list of all errors for each contact\n * @param {Partial<CompanyUserContact | SalesloftContact>[]} contacts list of contacts\n * @param {number[] | undefined} contactIds list of contact ids, selected by user\n */\nexport const getContactErrors = (\n contacts: Partial<CompanyUserContact | SalesloftContact>[],\n contactIds?: number[]\n) => {\n const errorMessages: string[] = [];\n let filteredContacts = contacts;\n\n if (contactIds) {\n filteredContacts = contacts.filter(contact => contactIds.includes(contact.person_id as number));\n }\n\n (filteredContacts as CompanyUserContact[]).forEach(contact => {\n const {\n first_name: firstName,\n last_name: lastName,\n full_name: fullName,\n title,\n email,\n } = contact;\n const primaryEmail = (contact as SalesloftContact).primary_email;\n let errorMsg = '';\n\n if (!firstName) {\n errorMsg += 'first name ';\n }\n\n if (!lastName) {\n errorMsg += 'last name ';\n }\n\n if (!title) {\n errorMsg += 'title ';\n }\n\n if (!(email || primaryEmail)) {\n errorMsg += 'email ';\n }\n\n if (errorMsg) {\n if (fullName) {\n errorMessages.push(`${fullName?.concat(\"'s\")} email is missing `);\n } else {\n errorMessages.push(\n `${\n !firstName && !lastName ? 'Contact' : `${firstName!} ${lastName?.concat(\"'s\")}`\n } email is missing `\n );\n }\n }\n });\n\n return errorMessages;\n};\n\n/**\n * format the emails for salesloft\n * @param {string | null} emails comma separated email list\n */\nexport const getSalesloftEmails: (emails: string | null) => SalesloftEmails = emails => {\n const salesloftEmails: SalesloftEmails = {};\n\n if (emails) {\n emails.split(',').forEach((email, index) => {\n switch (index) {\n case 0:\n salesloftEmails.primary_email = email;\n break;\n case 1:\n salesloftEmails.secondary_email = email;\n break;\n case 2:\n salesloftEmails.tertiary_email = email;\n break;\n case 3:\n salesloftEmails.quarternary_email = email;\n break;\n default:\n break;\n }\n });\n }\n\n return salesloftEmails;\n};\n\n/**\n * based on an array of ids, return the contacts selected and only\n * the required properties\n * @param {CompanyUserContact[]} contacts all contacts\n * @param {number[]} contactIds selected contact ids\n */\n// typescript throws error for potentially sending back undefined,\n// but we're the value returned by find method\n// @ts-ignore\nexport const getSelectedContacts: (\n contacts: CompanyUserContact[],\n contactIds: number[]\n) => SalesloftContact[] = (contacts, contactIds) => {\n // eslint-disable-next-line consistent-return\n return contactIds.map(id => {\n const contact = contacts.find(contact => contact.person_id === id);\n\n if (contact) {\n return {\n ...pick(contact, [\n 'first_name',\n 'last_name',\n 'person_id',\n 'title',\n 'phone',\n 'phone_type',\n 'additional_phones',\n 'linkedin',\n ]),\n ...getSalesloftEmails(contact.email),\n };\n }\n\n return null;\n });\n};\n","import { createSelector } from 'reselect';\nimport { AppState } from '@redux/interfaces';\nimport FilterCountCard from '@optx/models/cards/FilterCountCard';\n// models\nimport { CriteriaKeys } from '@optx/models/feature/analystsLeaderboard/CardCriteria';\nimport { SelectOption } from '@optx/models/Option';\nimport { FilterColumns } from '@optx/models/feature/analystsLeaderboard/filters';\nimport format from '@optx/utils/format';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport { selectors as requestSelectors } from '@features/request';\nimport { selectors as localFiltersSelectors } from './filters';\nimport { selectors as localSearchSelectors } from './search';\nimport { selectors as localTouchesAcrossRegionSelectors } from './touchesAcrossRegion';\nimport { selectors as emailStatisticsSelectors } from './emailStatistics';\nimport { selectors as smartTouchScoreSelectors } from './smartTouchScore';\nimport { selectors as additionalStatisticsSelectors } from './additionalsStatistics';\nimport {\n selectors as localPipelineInformationSelectors,\n types as pipelineInformationTypes,\n} from './pipeline-information';\nimport { pipelineCriteria } from '../constants/custom-criteria';\n\nconst selectAnalystsLeaderboard = (state: AppState) => state.analystsLeaderboard;\nconst getFiltersState = (state: AppState) => selectAnalystsLeaderboard(state).filters;\nconst getSearchState = (state: AppState) => selectAnalystsLeaderboard(state).search;\nconst getTouchesAcrossRegionState = (state: AppState) =>\n selectAnalystsLeaderboard(state).touchesAcrossRegion;\nconst getEmailStatisticsState = (state: AppState) =>\n selectAnalystsLeaderboard(state).emailStatistics;\nconst getSmartTouchScoreState = (state: AppState) =>\n selectAnalystsLeaderboard(state).smartTouchScore;\nconst getAdditionalStatisticsState = (state: AppState) =>\n selectAnalystsLeaderboard(state).additionalStatistics;\nconst getPipelineInformationState = (state: AppState) =>\n selectAnalystsLeaderboard(state).pipelineInformation;\n\n// Common\nexport const isLoading = createSelector(\n userInformationSelectors.isLoading,\n isLoadingFilters,\n isLoadingSearch,\n (loadingUserInformation, loadingFilters, loadingSearch) =>\n loadingUserInformation || loadingFilters || loadingSearch\n);\n\n// Filters\nconst getDefaultValues = (state: AppState) =>\n localFiltersSelectors.selectDefaultValues(getFiltersState(state));\n\nconst getCommonValues = (state: AppState) =>\n localFiltersSelectors.selectCommonValues(getFiltersState(state));\n\nconst getAllValues = (state: AppState) =>\n localFiltersSelectors.getAllValues(getFiltersState(state));\n\n/**\n * Get common values and values for current selected criteria.\n * @param state app state.\n */\nconst getFilterValues = (state: AppState) =>\n localFiltersSelectors.selectValues(getFiltersState(state));\n\nconst getNormalizedFilters = (state: AppState) =>\n localFiltersSelectors.selectNormalizedFilters(getFiltersState(state));\n\nfunction isLoadingFilters(state: AppState) {\n return localFiltersSelectors.isLoading(getFiltersState(state));\n}\n\nconst shouldFetchFilters = (state: AppState) =>\n localFiltersSelectors.shouldFetch(getFiltersState(state));\n\nconst getFilter = (state: AppState, filterKey: string) =>\n localFiltersSelectors.getFilter(getFiltersState(state), filterKey);\n\nconst getSelectOptions = (state: AppState, filterKey: string) =>\n localFiltersSelectors.getSelectOptions(getFiltersState(state), filterKey);\n\nconst allowAnalystsEditing = (state: AppState) =>\n localFiltersSelectors.allowAnalystsEditing(getFiltersState(state));\n\nconst getSelectValue = (state: AppState, filterKey: string, criteria?: string) =>\n localFiltersSelectors.getSelectValue(getFiltersState(state), { filterKey, criteria });\n\nconst getRadioValue = (state: AppState, filterKey: string, criteria?: string) =>\n localFiltersSelectors.getRadioValue(getFiltersState(state), { filterKey, criteria });\n\nconst getSingleDateRangesValue = (state: AppState, filterKey: string) =>\n localFiltersSelectors.getSingleDateRangesValue(getFiltersState(state), filterKey);\n\nconst getSingleDateRangesOptions = (state: AppState, filterKey: string) =>\n localFiltersSelectors.getSingleDateRangesOptions(getFiltersState(state), filterKey);\n\nconst getCurrentDateRangeOption = (state: AppState, filterKey: string) =>\n localFiltersSelectors.getCurrentDateRangeOption(getFiltersState(state), filterKey);\n\nconst getChartLines = (state: AppState, filterKey: FilterColumns) =>\n localFiltersSelectors.getChartLines(getFiltersState(state), filterKey);\n\nconst getTags = (state: AppState) => localFiltersSelectors.getTags(getFiltersState(state));\n\nconst showClearAll = (state: AppState) =>\n localFiltersSelectors.showClearAll(getFiltersState(state));\n\nconst isCommonFilter = (state: AppState, filterKey: string) =>\n localFiltersSelectors.isCommonFilter(getFiltersState(state), filterKey);\n\nconst getCommonFiltersQuery = (state: AppState) =>\n localFiltersSelectors.getCommonFiltersQuery(getFiltersState(state));\n\nconst getSelectedPeriodLabel = (state: AppState) =>\n localFiltersSelectors.getSelectedPeriodLabel(getFiltersState(state));\n\nconst isAllTimeDate = (state: AppState) =>\n localFiltersSelectors.isAllTimeDate(getFiltersState(state));\n\nconst getValuesByCriteria = (state: AppState, criteria: string) =>\n localFiltersSelectors.getValuesByCriteria(getFiltersState(state), criteria);\n\nexport const filters = {\n isLoading: isLoadingFilters,\n shouldFetch: shouldFetchFilters,\n getCommonValues,\n getAllValues,\n getDefaultValues,\n getFilterValues,\n getFilter,\n getNormalizedFilters,\n getSelectOptions,\n getSelectValue,\n allowAnalystsEditing,\n getRadioValue,\n getSingleDateRangesValue,\n getSingleDateRangesOptions,\n getCurrentDateRangeOption,\n isAllTimeDate,\n getChartLines,\n getTags,\n showClearAll,\n isCommonFilter,\n getCommonFiltersQuery,\n getSelectedPeriodLabel,\n getValuesByCriteria,\n};\n\n// Search\nexport const getChartInfo = (state: AppState) =>\n localSearchSelectors.getChartInfo(getSearchState(state));\n\nconst getData = (state: AppState) => localSearchSelectors.getData(getSearchState(state));\n\nconst FILTER_CRITERIA_COLUMN: FilterColumns = 'filter_criteria';\n\nexport const getCards = createSelector(\n (state: AppState) =>\n filters.getSelectOptions(state, FILTER_CRITERIA_COLUMN) as Array<SelectOption>,\n getData,\n (criteriaOptions, searchInformation): Array<FilterCountCard> => {\n if (criteriaOptions.length) {\n return criteriaOptions.map(criteriaOption => {\n const { label, value: criteria } = criteriaOption;\n const cardInfo: FilterCountCard = {\n key: criteria,\n title: label,\n };\n const creiteriaInfo = searchInformation && searchInformation[criteria as CriteriaKeys];\n\n if (creiteriaInfo) {\n cardInfo.count = creiteriaInfo.total;\n cardInfo.trending = creiteriaInfo.growth;\n\n cardInfo.options = creiteriaInfo.items.map(item => {\n return {\n label: item.label,\n value: format(item.value, item.format),\n };\n });\n }\n\n return cardInfo;\n });\n }\n\n return [];\n }\n);\n\nfunction isLoadingSearch(state: AppState) {\n return localSearchSelectors.isLoading(getSearchState(state));\n}\n\nexport const search = {\n isLoading: isLoadingSearch,\n getCards,\n getChartInfo,\n getData,\n};\n\n// Touches across region.\nfunction isLoadingTouchesAcrossRegion(state: AppState) {\n return localTouchesAcrossRegionSelectors.isLoading(getTouchesAcrossRegionState(state));\n}\n\nconst getTouchLocations = (state: AppState) =>\n localTouchesAcrossRegionSelectors.getLocations(getTouchesAcrossRegionState(state));\n\nconst getTopTouches = (state: AppState) =>\n localTouchesAcrossRegionSelectors.topTouches(getTouchesAcrossRegionState(state));\n\nexport const touchesAcrossRegion = {\n isLoading: isLoadingTouchesAcrossRegion,\n getLocations: getTouchLocations,\n getTopTouches,\n};\n\n// Emails statistics\nconst getEmailsStatistics = (state: AppState) =>\n emailStatisticsSelectors.selectEmailStatistics(getEmailStatisticsState(state));\n\nconst isFetchingEmailsStatistics = (state: AppState) =>\n emailStatisticsSelectors.isLoading(getEmailStatisticsState(state));\n\nexport const emailStatistics = {\n getEmailsStatistics,\n isFetching: isFetchingEmailsStatistics,\n};\n\n// Smart Touch Score\nconst getSmartTouchScore = (state: AppState) =>\n smartTouchScoreSelectors.selectSmartTouchScore(getSmartTouchScoreState(state));\n\nconst isFetchingSmartTouchScore = (state: AppState) =>\n smartTouchScoreSelectors.isLoading(getSmartTouchScoreState(state));\n\nexport const smartTouchScore = {\n getSmartTouchScore,\n isFetching: isFetchingSmartTouchScore,\n};\n\n// Additional Statistics\nconst getAdditionalStatistics = (state: AppState) =>\n additionalStatisticsSelectors.selectAdditionalStatistics(getAdditionalStatisticsState(state));\n\nexport const additionalStatistics = {\n getAdditionalStatistics,\n};\n\n// pipeline information\n\nconst getPipelineInformation = (state: AppState) =>\n localPipelineInformationSelectors.selectPipelineInfo(getPipelineInformationState(state));\n\nconst selectPipelineCount = (state: AppState) =>\n localPipelineInformationSelectors.selectCount(getPipelineInformationState(state));\n\nconst selectPipelineOtherDealStages = (state: AppState) =>\n localPipelineInformationSelectors.selectOtherDealStages(getPipelineInformationState(state));\n\nconst selectPipelineInfo = (state: AppState) =>\n localPipelineInformationSelectors.selectPipelineInfo(getPipelineInformationState(state));\n\nconst selectSelectedPeriodDate = (state: AppState) =>\n localPipelineInformationSelectors.selectSelectedPeriodDate(getPipelineInformationState(state));\n\nconst selectPreviousPeriodDate = (state: AppState) =>\n localPipelineInformationSelectors.selectPreviousPeriodDate(getPipelineInformationState(state));\n\nconst selectPreviousPeriodName = createSelector(\n (state: AppState) => filters.getSelectValue(state, 'previous_period', pipelineCriteria),\n value => {\n return value.length ? value[0].label : 'Previous Period';\n }\n);\n\nconst isLoadingPipelineInformation = requestSelectors.createLoadingSelector([\n pipelineInformationTypes.fetch.SELECTOR,\n]);\n\nexport const pipelineInformation = {\n isLoading: isLoadingPipelineInformation,\n getPipelineInformation,\n selectCount: selectPipelineCount,\n selectOtherDealStages: selectPipelineOtherDealStages,\n selectPipelineInfo,\n selectSelectedPeriodDate,\n selectPreviousPeriodDate,\n selectPreviousPeriodName,\n};\n","import { createSelector } from 'reselect';\nimport { ColumnType } from 'antd/lib/table';\n// models\nimport { AppState } from '@redux/interfaces';\n// utils\nimport { hasEditPermission } from '@utils/lists';\nimport { sortColumns } from '@utils/table/sorting';\n// redux\nimport { selectors as fetchSelectors } from '@redux/feature/fetch';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { getDefaultScore } from '@redux/user/information/selectors';\n\n// specific selectors\nconst selectListsState = (state: AppState) => state.favoriteLists;\n\nconst selectFavoriteListsState = createSelector(selectListsState, state => state.lists);\n\nexport const isLoading = createSelector(selectFavoriteListsState, fetchSelectors.isLoadingSelector);\n\nexport const isLoadingPublic = createSelector(\n selectFavoriteListsState,\n state => state.loadingPublic\n);\n\nexport const getError = createSelector(selectFavoriteListsState, fetchSelectors.errorSelector);\n\nexport const shouldFetch = createSelector(\n selectFavoriteListsState,\n state => !state.loading && !state.fetchedAt && !state.error\n);\n\nexport const shouldInitialFetch = createSelector(\n userSelectors.loaded,\n shouldFetch,\n (userInfoLoaded, shouldFetch) => userInfoLoaded && shouldFetch\n);\n\nexport const getLists = createSelector(selectFavoriteListsState, state => state.byId);\n\nexport const getAllListIds = createSelector(selectFavoriteListsState, state => state.allIds);\n\nexport const getListsNormalized = createSelector(selectFavoriteListsState, state =>\n state.allIds.map(id => state.byId[id])\n);\n\nexport const getAllWatchlists = createSelector(\n selectFavoriteListsState,\n state => state.allWatchlists\n);\n\nexport const getAllListAccessRightLists = createSelector(selectFavoriteListsState, state =>\n Object.values(state.allWatchlists).filter(list => hasEditPermission(list.share_permission))\n);\n\nexport const getTotal = createSelector(selectFavoriteListsState, state => state.total);\n\nexport const getQuery = createSelector(selectFavoriteListsState, state => state.query);\n\nexport const getSortBy = createSelector(selectFavoriteListsState, state => state.sortBy);\n\nexport const getGridColumns = (defaultColumns: ColumnType<any>[]) =>\n createSelector(getSortBy, getDefaultScore, (sorting, defaultOptxScore) =>\n sortColumns(defaultColumns, sorting, defaultOptxScore)\n );\n\nexport const getPageNumber = createSelector(selectFavoriteListsState, state => state.pageNumber);\n\nexport const getWatchlists = (lists: number[]) => {\n return createSelector(selectFavoriteListsState, state => {\n const allWatchlists = state.allWatchlists;\n\n return lists.map(id =>\n Object.values(allWatchlists).find(watchlist => watchlist.unique_id === id)\n );\n });\n};\n\nexport const isCompleted = createSelector(selectFavoriteListsState, state => state.completed);\nexport const getPercentage = createSelector(selectFavoriteListsState, state => state.percentage);\nexport const getTitle = createSelector(selectFavoriteListsState, state => state.title);\nexport const isCancel = createSelector(selectFavoriteListsState, state => state.cancel);\nexport const showEmptyLists = createSelector(\n selectFavoriteListsState,\n state => state.showEmptyLists\n);\n","import { CompanyNotification } from '@optx/models/Company';\nimport { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\n\n// get company notes actions\nexport const fetchCompanyNotes = createAction<number>(types.FETCH_COMPANY_NOTES);\n\nexport const fetchCompanyNotesSuccess = createAction(\n types.FETCH_COMPANY_NOTES_SUCCESS,\n (companyId: number, notes: Array<CompanyNotification>) => ({\n payload: notes,\n meta: companyId,\n })\n);\n\nexport const fetchCompanyNotesFail = createAction<string>(types.FETCH_COMPANY_NOTES_FAIL);\n\n// add company note actions\nexport const addCompanyNote = createAction<{\n companyId: number;\n title: string;\n noteText: string;\n}>(types.ADD_COMPANY_NOTE);\n\nexport const addCompanyNoteSuccess = createAction<CompanyNotification>(\n types.ADD_COMPANY_NOTE_SUCCESS\n);\n\nexport const addCompanyNoteFail = createAction<string>(types.ADD_COMPANY_NOTE_FAIL);\n\n// delete company note actions\nexport const deleteCompanyNote = createAction<{ companyId: number; noteId: number }>(\n types.DELETE_COMPANY_NOTE\n);\n\nexport const deleteCompanyNoteSuccess = createAction<number>(types.DELETE_COMPANY_NOTE_SUCCESS);\n\nexport const deleteCompanyNoteFail = createAction<string>(types.DELETE_COMPANY_NOTE_FAIL);\n","import { createSelector } from 'reselect';\nimport { getUserId } from '../information/selectors';\nimport { UserListState } from './interfaces';\n\nconst userListState = (state: any) => state.userList as UserListState;\n\nexport const isShareLoading = createSelector(userListState, state => state.share.loading);\nexport const isFieldLoading = createSelector(userListState, state => state.field.loading);\n\nexport const shouldFieldFetch = createSelector(\n userListState,\n state => !state.field.loading && !state.field.fetchedAt\n);\nexport const shouldShareFetch = createSelector(\n userListState,\n state => !state.share.loading && !state.share.fetchedAt\n);\n\nexport const getShareUserListData = createSelector(userListState, state => state.share.data);\nexport const getFieldUserListData = createSelector(userListState, state => state.field.data);\n\nexport const getUserListOptions = createSelector(getFieldUserListData, state =>\n state.map(item => ({\n label: item.label,\n value: item.value.toString(),\n }))\n);\n\nexport const getSeniorDealTeamLeadOptions = createSelector(getFieldUserListData, state => {\n const seniorDealTeamOptions = state.filter(list => typeof list.value !== 'string');\n\n return seniorDealTeamOptions.map(item => ({\n label: item.label,\n value: item.value.toString(),\n }));\n});\n\n/**\n * Get users except current logged in user.\n */\nexport const getUserList = createSelector(getShareUserListData, getUserId, (userList, userId) => {\n return userList.filter(user => user.value !== userId && typeof user.value !== 'string');\n});\n\nexport const getPsgUsers = createSelector(userListState, state =>\n state.psgUsers.data.map(item => ({\n value: item.value.toString(),\n label: item.label,\n }))\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport { UserListPageState } from './interfaces';\n\nexport const fetchUserList = createAction<boolean>(types.FETCH_USER_LIST);\nexport const fetchUserListFieldSuccess = createAction<Array<UserListPageState>>(\n types.FETCH_USER_LIST_FIELD_SUCCESS\n);\nexport const fetchUserListFieldFail = createAction<string>(types.FETCH_USER_LIST_FIELD_FAIL);\n\nexport const fetchPsgUserListFieldSuccess = createAction<Array<UserListPageState>>(\n types.FETCH_PSG_USER_LIST_FIELD_SUCCESS\n);\nexport const fetchPsgUserListFieldFail = createAction<string>(types.FETCH_PSG_USER_LIST_FIELD_FAIL);\n\nexport const fetchUserListShareSuccess = createAction<Array<UserListPageState>>(\n types.FETCH_USER_LIST_SHARE_SUCCESS\n);\nexport const fetchUserListShareFail = createAction<string>(types.FETCH_USER_LIST_SHARE_FAIL);\n","export const FETCH_USER_LIST = 'FETCH_USER_LIST';\nexport const FETCH_USER_LIST_SHARE_SUCCESS = 'FETCH_USER_LIST_SHARE_SUCCESS';\nexport const FETCH_USER_LIST_SHARE_FAIL = 'FETCH_USER_LIST_SHARE_FAIL';\nexport const FETCH_USER_LIST_FIELD_SUCCESS = 'FETCH_USER_LIST_FIELD_SUCCESS';\nexport const FETCH_USER_LIST_FIELD_FAIL = 'FETCH_USER_LIST_FIELD_FAIL';\nexport const FETCH_PSG_USER_LIST_FIELD_SUCCESS = 'FETCH_PSG_USER_LIST_FIELD_SUCCESS';\nexport const FETCH_PSG_USER_LIST_FIELD_FAIL = 'FETCH_PSG_USER_LIST_FIELD_FAIL';\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport * as actions from './actions';\nimport { UserListState, UserListPageState } from './interfaces';\nimport { fetchReducer, fetchSuccessReducer, fetchFailReducer } from '../../feature/fetch/reducers';\n\nexport const initialState: UserListState = {\n share: { data: [], loading: false, error: '', fetchedAt: '' },\n field: { data: [], loading: false, error: '', fetchedAt: '' },\n psgUsers: { data: [], loading: false, error: '', fetchedAt: '' },\n};\n\nconst fetchUserListReducer: CaseReducer<UserListState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n const isShare = action.payload;\n\n if (isShare) {\n fetchReducer(draftState.share);\n } else {\n fetchReducer(draftState.field);\n }\n};\n\nconst fetchUserListFieldSuccessReducer: CaseReducer<\n UserListState,\n PayloadAction<Array<UserListPageState>>\n> = (draftState, action) => {\n fetchSuccessReducer(draftState.field, action);\n draftState.field.fetchedAt = new Date().toISOString();\n};\n\nconst fetchPsgUserListFieldSuccessReducer: CaseReducer<\n UserListState,\n PayloadAction<Array<UserListPageState>>\n> = (draftState, action) => {\n fetchSuccessReducer(draftState.psgUsers, action);\n draftState.field.fetchedAt = new Date().toISOString();\n};\n\nconst fetchPsgUserListFieldFailReducer: CaseReducer<UserListState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n fetchFailReducer(draftState.psgUsers, action);\n};\n\nconst fetchUserListFieldFailReducer: CaseReducer<UserListState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n fetchFailReducer(draftState.field, action);\n};\n\nconst fetchUserListShareFailReducer: CaseReducer<UserListState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n fetchFailReducer(draftState.share, action);\n};\n\nconst fetchUserListShareSuccessReducer: CaseReducer<\n UserListState,\n PayloadAction<Array<UserListPageState>>\n> = (draftState, action) => {\n fetchSuccessReducer(draftState.share, action);\n draftState.share.fetchedAt = new Date().toISOString();\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchUserList, fetchUserListReducer)\n .addCase(actions.fetchUserListFieldSuccess, fetchUserListFieldSuccessReducer)\n .addCase(actions.fetchUserListFieldFail, fetchUserListFieldFailReducer)\n .addCase(actions.fetchPsgUserListFieldSuccess, fetchPsgUserListFieldSuccessReducer)\n .addCase(actions.fetchPsgUserListFieldFail, fetchPsgUserListFieldFailReducer)\n .addCase(actions.fetchUserListShareSuccess, fetchUserListShareSuccessReducer)\n .addCase(actions.fetchUserListShareFail, fetchUserListShareFailReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\nimport * as actions from './actions';\nimport { UserService } from '../../../services/api';\nimport NotificationService from '../../../services/NotificationService';\nimport { UserListPageState } from './interfaces';\n\nexport function* fetchUserListSaga(action: PayloadAction<boolean>) {\n const isShare = action.payload;\n let query;\n\n if (!isShare) {\n query = {\n role: 1,\n status: 'Access,Invitation Sent',\n };\n } else {\n query = {\n status: 'Access,Invitation Sent',\n };\n }\n\n try {\n const res: AxiosResponse<UserListPageState[]> = yield call(UserService.fetchUserList, query);\n\n if (res.data) {\n if (!isShare) {\n yield put(actions.fetchUserListFieldSuccess(res.data));\n } else {\n yield put(actions.fetchUserListShareSuccess(res.data));\n }\n } else {\n const errorMessage = 'Failed to fetch user list!';\n\n if (!isShare) {\n yield put(actions.fetchUserListFieldFail(errorMessage));\n } else {\n yield put(actions.fetchUserListShareFail(errorMessage));\n }\n\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch user list!';\n\n if (!isShare) {\n yield put(actions.fetchUserListFieldFail(errorMessage));\n } else {\n yield put(actions.fetchUserListShareFail(errorMessage));\n }\n\n NotificationService.error(errorMessage);\n }\n\n const customQuery = {\n status: 'Access,Invitation Sent',\n };\n\n try {\n const res: AxiosResponse<UserListPageState[]> = yield call(\n UserService.fetchUserList,\n customQuery,\n true\n );\n\n if (res.data) {\n yield put(actions.fetchPsgUserListFieldSuccess(res.data));\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch user list!';\n yield put(actions.fetchPsgUserListFieldFail(errorMessage));\n\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* userListSaga() {\n yield takeLatest(actions.fetchUserList.type, fetchUserListSaga);\n}\n","import moment from 'moment';\n// models\nimport CompanyTouch, { CompanyTouchesResponse, TouchType } from '@models/company/CompanyTouch';\nimport { TouchesCreateForm, TouchesFinancialPayload } from '@models/api/touches';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@constants/value';\nimport { FILTER_TOUCHES } from '@optx/constants/filters';\n// utils\nimport { DateFormat, formatDate } from '@utils/format';\nimport { CompanyFieldsGroup, BaseField } from '@optx/models/companyFields';\nimport { FinancialField } from '@optx/features/field-factory';\nimport { FinancialYearsChangeLog } from '@optx/features/edit-all-info/state/interfaces';\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\nimport {\n regexNegativeAbbreviation,\n numberPercentageMatchRegex,\n regexAbbreviation,\n} from '@optx/constants/regex';\nimport { parseNumberFromAbbreviation } from '@optx/utils/number';\nimport { roundingPresentationValues } from '@optx/utils/dealPresentation';\n\n/**\n * Format touch note text to include HTML spacings.\n * @param text\n */\nconst formatNotesText = (text: string = '') => text.replace(/\\n/g, '<br />');\n\n/**\n * Format notes text in touches to be HTML friendly.\n * @param data touches response\n */\nexport const formatTouchHistoryNotes = (data: CompanyTouchesResponse) => {\n const { touch_history: touchHistory } = data;\n\n const keys = Object.keys(touchHistory);\n\n keys.forEach(key => {\n (touchHistory[key] as Array<CompanyTouch>).forEach(touch => ({\n ...touch,\n notes: formatNotesText(touch.notes),\n }));\n });\n};\n\nexport const formatLastTouch = (lastTouch: string, format?: DateFormat) => {\n if (lastTouch === 'Never' || !lastTouch) {\n return 'NEVER';\n }\n\n return formatDate(lastTouch, format);\n};\n\n// Sometimes, company score growth is sent as a DEFAULT_EMPTY_VALUE instead of '0'\nexport const formatCompanyScore = (scoreGrowth: string) => {\n if (scoreGrowth === DEFAULT_EMPTY_VALUE) {\n return 0;\n }\n\n return parseInt(scoreGrowth);\n};\n\n/**\n * Format touch touch filters to form initial values.\n * @param values filters response as FinancialsFilter.\n */\n\nconst financialValues = ['revenue', 'ebitda', 'annual_recurring_revenue', 'gm'];\n\nexport const formatInitialValues = (values: Array<CompanyFieldsGroup<BaseField>>) => {\n let initialValues: Partial<TouchesCreateForm> = {};\n values.forEach(value => {\n if (value.data) {\n value.data.forEach(item => {\n initialValues = {\n ...initialValues,\n [item.id]: financialValues.includes(item.id) ? item.data : item.value,\n };\n });\n }\n });\n\n return initialValues;\n};\n\n/**\n * Formats the final values for financial payload\n *\n * @param form - The form data\n * @param initialValues - The initial values of the form\n *\n * @returns The formatted final payload or null if initialValues is null\n */\nexport const formatFinalValues = (\n form: Partial<TouchesCreateForm>,\n initialValues: Partial<TouchesCreateForm> | null,\n financialInput: Array<CompanyFieldsGroup> | null,\n yearChangeLog?: FinancialYearsChangeLog\n) => {\n if (initialValues === null) return null;\n\n let finalPayload: Partial<TouchesFinancialPayload> = {};\n\n financialInput?.forEach(item => {\n if (item.tag && !finalPayload[item.tag]) {\n finalPayload[item.tag] = {};\n }\n\n if (item.data) {\n item.data.forEach((formField: BaseField) => {\n const selectedCat = item.tag ?? formField.tag;\n\n if (!finalPayload[selectedCat]) {\n finalPayload[selectedCat] = {};\n }\n\n let fieldValue;\n\n switch (formField.id) {\n case 'banker':\n fieldValue =\n typeof form[formField.id] === 'boolean'\n ? form[formField.id]?.toString() === 'true'\n : initialValues[formField.id];\n\n break;\n\n case 'customer_type':\n fieldValue =\n form[formField.id] !== undefined ? form[formField.id] : initialValues[formField.id];\n\n if (formField.extra_data) {\n const extraDataKey = 'customer_other_rationale';\n const extraDataValue =\n form[extraDataKey] !== undefined\n ? form[extraDataKey]\n : formField.extra_data[extraDataKey].value;\n\n let customerTypeData = { [extraDataKey as string]: extraDataValue };\n finalPayload[selectedCat] = { ...finalPayload[selectedCat], ...customerTypeData };\n }\n\n break;\n\n // added because disable to 2.7\n case 'raw_url': {\n fieldValue = undefined;\n break;\n }\n\n case 'secondary_urls': {\n // disabled for 2.7\n fieldValue = undefined;\n break;\n // const formValue =\n // form[formField.id] !== undefined ? form[formField.id] : initialValues[formField.id];\n // const normalizedValue = formValue?.filter(url => !!url) || [];\n\n // fieldValue = normalizedValue;\n\n // break;\n }\n\n case 'addon': {\n const formValue = form[formField.id];\n const normalizedValue = Object.keys(formValue || {});\n\n fieldValue = normalizedValue;\n\n break;\n }\n\n default:\n fieldValue =\n // @ts-ignore\n form[formField.id] !== undefined ? form[formField.id] : initialValues[formField.id];\n\n break;\n }\n\n if (fieldValue !== undefined) {\n // @ts-ignore\n finalPayload[selectedCat][formField.id] = fieldValue;\n }\n });\n }\n });\n\n finalPayload = {\n ...finalPayload,\n funding: formatFundingValues(finalPayload.funding as TouchesFinancialPayload['funding']),\n financials: formatFinancialValues(\n finalPayload.financials as TouchesFinancialPayload['financials'],\n yearChangeLog\n ),\n company_id: parseInt(form.companyId ?? '0'),\n };\n\n return finalPayload;\n};\n\n/**\n * Parses the touch history response by updating the count for each touch tab based on the provided payload.\n *\n * @param payload - The CompanyTouchesResponse object containing the touch history response data.\n * @returns An updated CompanyTouchesResponse object with the count for each touch tab updated based on the payload.\n */\nexport const parseTouchHistoryResponse = (payload: CompanyTouchesResponse) => {\n const { tabs } = payload;\n\n const parsedTabs = Object.entries(tabs).map(([name, count]) => ({\n name: name as TouchType,\n count,\n }));\n\n return {\n ...payload,\n tabs: parsedTabs,\n };\n};\n\n/**\n * Returns the touch type for the given request based on the provided touch type and tabs.\n * @param touchType - The touch type to be evaluated.\n * @param tabs - The touch tabs used for evaluation.\n * @returns The touch type for the request, or undefined if touchType is undefined or 'All'.\n */\nexport const getTouchTypeForRequest = (touchType: string | undefined, filterTabs: TouchType[]) => {\n if (touchType === undefined || touchType === 'All') {\n return undefined;\n } else if (touchType === 'Other') {\n return FILTER_TOUCHES.filter(type => !filterTabs.some(tab => tab === type)).join(',');\n }\n\n return touchType;\n};\n\n/**\n * Formats the funding values. Sets default last round data if some\n * last round input in the form was changed.\n *\n * @param fundingFields - The fields from 'Funding / Ownership Structure' section\n *\n * @returns The formatted funding fields\n */\nfunction formatFundingValues(\n fundingFields: TouchesFinancialPayload['funding'] | null\n): TouchesFinancialPayload['funding'] {\n if (!fundingFields) return {};\n\n let {\n last_round,\n last_round_amount,\n last_round_date,\n last_investors,\n capital_raised,\n equity_check,\n ...rest\n } = {\n ...fundingFields,\n };\n\n const hasLastRoundValue = last_round?.label !== DEFAULT_EMPTY_VALUE;\n const hasLastRoundAmountValue = !!last_round_amount;\n const hasLastRoundDateValue = last_round_date !== '';\n const hasLastInvestorsValue = Array.isArray(last_investors) && last_investors.length > 0;\n\n // Last Round Type should be set to Unknown if not provided\n if (\n !hasLastRoundValue &&\n (hasLastRoundAmountValue || hasLastRoundDateValue || hasLastInvestorsValue)\n ) {\n last_round = { label: 'Unknown', value: 0 };\n }\n\n // Last Round Amount should be set to 0 if not provided\n if (\n !hasLastRoundAmountValue &&\n (hasLastRoundValue || hasLastRoundDateValue || hasLastInvestorsValue)\n ) {\n last_round_amount = 0;\n }\n\n // Last Round Date should be set to today if some last round info is provided\n if (\n !hasLastRoundDateValue &&\n (hasLastRoundValue || hasLastRoundAmountValue || hasLastInvestorsValue)\n ) {\n last_round_date = moment().format(ISO_DATE_FORMAT);\n }\n\n if (typeof capital_raised === 'string' && regexAbbreviation.test(capital_raised)) {\n capital_raised = parseNumberFromAbbreviation(capital_raised) as number;\n }\n\n if (typeof last_round_amount === 'string' && regexAbbreviation.test(last_round_amount)) {\n last_round_amount = parseNumberFromAbbreviation(last_round_amount) as number;\n }\n\n if (typeof equity_check === 'string' && regexAbbreviation.test(equity_check)) {\n equity_check = parseNumberFromAbbreviation(equity_check) as unknown as string;\n }\n\n return {\n last_round,\n last_round_amount,\n last_round_date,\n last_investors,\n capital_raised,\n equity_check,\n ...rest,\n };\n}\n\nfunction formatFinancialValues(\n fields: TouchesFinancialPayload['financials'] | null,\n yearChangeLog?: FinancialYearsChangeLog\n): TouchesFinancialPayload['financials'] {\n if (!fields) {\n return {};\n }\n\n if (!yearChangeLog) {\n return fields;\n }\n\n const newFields = { ...fields };\n\n newFields.annual_recurring_revenue = formatFinancialFieldData(\n fields.annual_recurring_revenue,\n yearChangeLog\n );\n\n newFields.revenue = formatFinancialFieldData(fields.revenue, yearChangeLog);\n\n newFields.gm = formatFinancialFieldData(fields.gm, yearChangeLog, true);\n\n newFields.ebitda = formatFinancialFieldData(fields.ebitda, yearChangeLog);\n\n return newFields;\n}\n\nfunction formatFinancialFieldData(\n data: FinancialField[] | null | undefined,\n yearChangeLog: FinancialYearsChangeLog,\n canBePercentage: boolean = false\n) {\n if (!data) return [];\n\n return data.map((financialYear: FinancialField) => {\n const logFinancialYear = yearChangeLog[financialYear.year];\n let normalizedValue = financialYear.value;\n\n const commonCheck =\n typeof normalizedValue === 'string' && normalizedValue !== DEFAULT_EMPTY_VALUE;\n\n if (\n canBePercentage &&\n commonCheck &&\n numberPercentageMatchRegex.test(normalizedValue as string)\n ) {\n normalizedValue = (normalizedValue as string).replace('%', '');\n } else if (\n !canBePercentage &&\n commonCheck &&\n regexNegativeAbbreviation.test(normalizedValue as string)\n ) {\n normalizedValue = roundingPresentationValues(\n parseNumberFromAbbreviation(normalizedValue as string) as number\n );\n }\n\n if (!logFinancialYear) {\n return { ...financialYear, value: normalizedValue };\n }\n\n return {\n ...logFinancialYear,\n value: normalizedValue,\n };\n });\n}\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\n// analyst\nexport const FETCH_ANALYST = createFeatureActionType(featureName, 'FETCH_ANALYST');\nexport const FETCH_ANALYST_SUCCESS = createFeatureActionType(featureName, 'FETCH_ANALYST_SUCCESS');\nexport const FETCH_ANALYST_FAIL = createFeatureActionType(featureName, 'FETCH_ANALYST_FAIL');\n\n// company\nexport const FETCH_COMPANY = createFeatureActionType(featureName, 'FETCH_COMPANY');\nexport const FETCH_COMPANY_SUCCESS = createFeatureActionType(featureName, 'FETCH_COMPANY_SUCCESS');\nexport const FETCH_COMPANY_FAIL = createFeatureActionType(featureName, 'FETCH_COMPANY_FAIL');\n","import { utils as requestUtils } from '@optx/features/request';\nimport { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const fetchFilters = requestUtils.createActionTypes(featureName, 'FETCH_FILTERS');\nexport const clearFilters = createFeatureActionType(featureName, 'CLEAR_FILTERS');\nexport const resetToDefault = createFeatureActionType(featureName, 'RESET_TO_DEFAULT');\nexport const applyFilters = createFeatureActionType(featureName, 'APPLY_FILTERS');\nexport const updateFilters = createFeatureActionType(featureName, 'UPDATE_FILTERS');\nexport const resetFilter = createFeatureActionType(featureName, 'RESET_FILTER');\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const toggleFiltersModal = createFeatureActionType(featureName, 'TOGGLE_FILTERS_MODAL');\nexport const toggleDefaultTable = createFeatureActionType(featureName, 'TOGGLE_DEFAULT_TABLE');\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const FETCH_CARD = createFeatureActionType(featureName, 'FETCH_CARD');\nexport const FETCH_CARD_SUCCESS = createFeatureActionType(featureName, 'FETCH_CARD_SUCCESS');\nexport const FETCH_CARD_FAIL = createFeatureActionType(featureName, 'FETCH_CARD_FAIL');\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport * as search from './search';\nimport * as filters from './filters';\nimport * as ui from './ui';\nimport * as card from './card';\nimport { featureName } from '../../featureName';\n\nconst init = createFeatureActionType(featureName, 'INIT');\n\nexport const types = {\n search,\n filters,\n card,\n ui,\n init,\n};\n","export const FETCH_PRIMARY_CONTACTS = 'FETCH_PRIMARY_CONTACTS';\nexport const FETCH_PRIMARY_CONTACTS_SUCCESS = 'FETCH_PRIMARY_CONTACTS_SUCCESS';\nexport const FETCH_PRIMARY_CONTACTS_FAIL = 'FETCH_PRIMARY_CONTACTS_FAIL';\n\nexport const UPDATE_PRIMARY_CONTACT = 'UPDATE_PRIMARY_CONTACT';\n\nexport const EDITING_PRIMARY_CONTACT = 'EDITING_PRIMARY_CONTACT';\nexport const CANCEL_EDITING_PRIMARY_CONTACT = 'CANCEL_EDITING_PRIMARY_CONTACT';\n\nexport const EDIT_PRIMARY_CONTACT = 'EDIT_PRIMARY_CONTACT';\nexport const EDIT_PRIMARY_CONTACT_SUCCESS = 'EDIT_PRIMARY_CONTACT_SUCCESS';\nexport const EDIT_PRIMARY_CONTACT_FAIL = 'EDIT_PRIMARY_CONTACT_FAIL';\n\nexport const CLEAR_PRIMARY_CONTACTS = 'CLEAR_PRIMARY_CONTACTS';\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { SalesloftEditData } from '@models/Salesloft';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport * as types from './types';\n\nexport const fetchPrimaryContacts = createAction<string>(types.FETCH_PRIMARY_CONTACTS);\nexport const fetchPrimaryContactsSuccess = createAction<CompanyUserContact[]>(\n types.FETCH_PRIMARY_CONTACTS_SUCCESS\n);\nexport const fetchPrimaryContactsFail = createAction<string>(types.FETCH_PRIMARY_CONTACTS_FAIL);\n\nexport const updatePrimaryContacts = createAction<SalesloftEditData>(types.UPDATE_PRIMARY_CONTACT);\n\n// Edit profile contact\nexport const editPrimaryContact = createAction<Partial<CompanyUserContact>>(\n types.EDIT_PRIMARY_CONTACT\n);\nexport const editPrimaryContactSuccess = createAction<Partial<CompanyUserContact>>(\n types.EDIT_PRIMARY_CONTACT_SUCCESS\n);\nexport const editPrimaryContactFail = createAction<string>(types.EDIT_PRIMARY_CONTACT_FAIL);\n\nexport const editingPrimaryContact = createAction<CompanyUserContact>(\n types.EDITING_PRIMARY_CONTACT\n);\nexport const cancelEditingPrimaryContact = createAction(types.CANCEL_EDITING_PRIMARY_CONTACT);\n\nexport const clearPrimaryContacts = createAction(types.CLEAR_PRIMARY_CONTACTS);\n","import { createSelector } from 'reselect';\n// models\nimport { AppState } from '@redux/interfaces';\nimport {\n ProfileEditPrimaryContact,\n ProfileEditPrimaryContactWithSelectOptions,\n} from '@models/Company';\n// constants\nimport { PRESENT_DATE_FORMAT } from '@optx/constants/format/date';\n// utils\nimport { getPhoneNumbers, mapToSelectOptions } from '@utils/contact';\nimport { selectors as companyIndividualSelectors } from '@components/feature/company-individual-edit/state';\n\nconst primaryContactsState = (state: AppState) => state.primaryContacts;\n\nexport const isLoading = createSelector(primaryContactsState, state => state.loading);\nexport const getError = createSelector(primaryContactsState, state => state.error);\nexport const getPrimaryContacts = createSelector(primaryContactsState, state => state.data || []);\nexport const getEditedContact = createSelector(primaryContactsState, state => state.editedContact);\n\nfunction getNames(fullName: string) {\n const names = fullName.split(' ');\n const firstName = names[0];\n const lastName = names.splice(1).join(' ');\n\n return {\n firstName,\n lastName,\n };\n}\n\n// @ts-ignore\nexport const getEditContactInitialValues = createSelector(\n getEditedContact,\n companyIndividualSelectors.companyIndividualEdit.phoneOptions,\n // @ts-ignore\n (editedContact, phoneOptions) => {\n if (!editedContact) {\n return {\n first_name: '',\n last_name: '',\n email: '',\n emails: [],\n additional_phones: [],\n title: '',\n tenure_start_date: '',\n tenure_end_date: '',\n linkedin: '',\n primary_contact: false,\n psg_function: [],\n slack_channel: [],\n portfolio_executive: false,\n } as ProfileEditPrimaryContact;\n }\n\n const data: ProfileEditPrimaryContactWithSelectOptions = {\n first_name: editedContact.first_name,\n last_name: editedContact.last_name,\n email: editedContact.email,\n emails: editedContact.emails,\n additional_phones: getPhoneNumbers(editedContact, phoneOptions),\n title: editedContact.title,\n tenure_start_date: editedContact.tenure_start_date,\n tenure_end_date:\n editedContact.tenure_end_date !== PRESENT_DATE_FORMAT\n ? editedContact.tenure_end_date\n : null,\n linkedin: editedContact.linkedin,\n primary_contact: !(\n // to update when api will send a boolean instead of a string\n // @ts-ignore\n (editedContact.primary_contact === 'False' || editedContact.primary_contact === false)\n ),\n psg_function: mapToSelectOptions(editedContact?.psg_function as string[]),\n slack_channel: mapToSelectOptions(editedContact?.slack_channel as string[]),\n portfolio_executive: editedContact.portfolio_executive,\n };\n\n if (!editedContact.first_name || !editedContact.last_name) {\n const names = getNames(editedContact.full_name);\n\n data.first_name = names.firstName;\n data.last_name = names.lastName;\n }\n\n return data;\n }\n);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport moment from 'moment';\n// models\nimport { CompanyUserContact, ContactPhone } from '@models/api/contacts';\nimport { SalesloftEditData } from '@models/Salesloft';\n// constants\nimport { PRESENT_DATE_FORMAT, ISO_DATE_FORMAT } from '@optx/constants/format/date';\n// utils\nimport { emailFieldsToString } from '@utils/salesloft';\n// redux\nimport { fetchFailReducer, fetchReducer } from '@redux/feature/fetch/reducers';\nimport { findIndex } from 'lodash';\nimport { actions as bulkSalesloftActions } from '@features/bulk-actions/salesloft';\n\nimport { PrimaryContactsState } from './interfaces';\nimport * as actions from './actions';\n\nconst initialState: PrimaryContactsState = {\n error: '',\n data: [],\n loading: false,\n editedContact: null,\n};\n\nconst fetchPrimaryContactsSuccessReducer: CaseReducer<\n PrimaryContactsState,\n PayloadAction<Array<CompanyUserContact>>\n> = (draftState, action) => {\n draftState.loading = false;\n\n draftState.data = action.payload.map(contact => ({\n ...contact,\n ...(contact.tenure_start_date && {\n tenure_start_date: moment(contact.tenure_start_date).format(ISO_DATE_FORMAT),\n }),\n ...(contact.tenure_end_date && {\n tenure_end_date:\n contact.tenure_end_date !== PRESENT_DATE_FORMAT\n ? moment(contact.tenure_end_date).format(ISO_DATE_FORMAT)\n : contact.tenure_end_date,\n }),\n }));\n};\n\nconst addContactSuccessReducer: CaseReducer<\n PrimaryContactsState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n const companyContacts = draftState.data;\n const newContact = {\n ...(action.payload as CompanyUserContact),\n additional_phones: action.payload.phones as ContactPhone[],\n icons: {\n phone: action.payload?.icons?.phone,\n linkedin: action.payload?.linkedin || null,\n email: action.payload?.icons?.email || false,\n salesloft: action.payload?.icons?.salesloft || false,\n },\n primary_contact: !!action.payload.primary_contact,\n };\n\n const mappedContacts = action.payload.primary_contact\n ? companyContacts.map(contact => ({ ...contact, primary_contact: false }))\n : companyContacts;\n\n if (draftState.data && mappedContacts) {\n draftState.data = [...mappedContacts, ...[newContact]];\n }\n};\n\nconst updatePrimaryContactsReducer: CaseReducer<\n PrimaryContactsState,\n PayloadAction<SalesloftEditData>\n> = (draftState, action) => {\n const {\n person_id: personId,\n primary_contact: isPrimaryContact,\n primary_email: primary,\n secondary_email: secondary,\n tertiary_email: tertiary,\n quarternary_email: quarternary,\n tenure_end_date: tenureEndDate,\n tenure_start_date: tenureStartDate,\n } = action.payload;\n let shouldUpdatePrimaryContact = false;\n draftState.data.forEach((contact, index) => {\n if (contact.person_id === personId) {\n if (draftState.data[index].primary_contact !== isPrimaryContact && isPrimaryContact) {\n shouldUpdatePrimaryContact = true;\n }\n\n draftState.data[index] = { ...draftState.data[index], ...action.payload };\n draftState.data[index].full_name = `${action.payload.first_name} ${action.payload.last_name}`;\n\n if (primary) {\n draftState.data[index].email = emailFieldsToString(\n `${primary} ${secondary} ${tertiary} ${quarternary}`\n );\n }\n\n draftState.data[index].additional_phones = action.payload.phones || null;\n\n if (tenureEndDate !== undefined) {\n draftState.data[index].tenure_end_date = tenureEndDate;\n }\n\n if (tenureStartDate !== undefined) {\n draftState.data[index].tenure_start_date = tenureStartDate;\n }\n }\n });\n\n // we should have only one primary contact, if user changes the primary contact\n // then we need to check and reset the previous primary contact\n if (shouldUpdatePrimaryContact) {\n const index = draftState.data.findIndex(\n item => item.primary_contact && item.person_id !== personId\n );\n\n if (index !== -1) {\n draftState.data[index].primary_contact = false;\n }\n }\n};\n\nconst editPrimaryContactSuccessReducer: CaseReducer<\n PrimaryContactsState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n draftState.loading = false;\n const { person_id: personId, primary_contact: isPrimaryContact } = action.payload;\n const primaryContact = draftState.data.find(contact => contact.primary_contact);\n\n if (primaryContact && primaryContact.person_id !== personId && isPrimaryContact) {\n primaryContact.primary_contact = false;\n }\n\n // Find item index using _.findIndex\n const index = findIndex(draftState.data, { person_id: personId });\n\n // Replace item at index using native splice\n draftState.data.splice(index, 1, {\n ...draftState.data[index],\n ...(action.payload as CompanyUserContact),\n full_name: `${action.payload.first_name} ${action.payload.last_name}`,\n additional_phones: action.payload.phones as ContactPhone[],\n is_edited: true,\n icons: {\n ...draftState.data[index]?.icons,\n linkedin: action.payload.linkedin || null,\n },\n });\n};\n\nconst isEditingPrimaryContactReducer: CaseReducer<\n PrimaryContactsState,\n PayloadAction<CompanyUserContact>\n> = (draftState, action) => {\n const additionalProps: Partial<CompanyUserContact> = {};\n if (action.payload.emails.length === 0) additionalProps.emails = [{ email: '' }];\n\n if (!action.payload.phone && action.payload.additional_phones?.length === 0) {\n additionalProps.additional_phones = [{ phone_number: '', phone_type_id: undefined }];\n }\n\n draftState.editedContact = { ...action.payload, ...additionalProps };\n};\n\nconst cancelEditingPrimaryContactReducer: CaseReducer<PrimaryContactsState> = draftState => {\n draftState.editedContact = null;\n draftState.error = '';\n};\n\nconst clearPrimaryContactsReducer: CaseReducer<PrimaryContactsState> = draftState => {\n draftState.data = [];\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchPrimaryContacts, fetchReducer)\n .addCase(actions.fetchPrimaryContactsSuccess, fetchPrimaryContactsSuccessReducer)\n .addCase(actions.fetchPrimaryContactsFail, fetchFailReducer)\n .addCase(actions.updatePrimaryContacts, updatePrimaryContactsReducer)\n .addCase(actions.clearPrimaryContacts, clearPrimaryContactsReducer)\n // Edit profile contact\n .addCase(bulkSalesloftActions.addContactSuccess, addContactSuccessReducer)\n .addCase(actions.editingPrimaryContact, isEditingPrimaryContactReducer)\n .addCase(actions.cancelEditingPrimaryContact, cancelEditingPrimaryContactReducer)\n .addCase(actions.editPrimaryContact, fetchReducer)\n .addCase(actions.editPrimaryContactSuccess, editPrimaryContactSuccessReducer)\n .addCase(actions.editPrimaryContactFail, fetchFailReducer)\n);\n\nexport default reducer;\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\n// models\nimport { CompanyUserContact } from '@models/api/contacts';\n// constants\nimport { CompanyProfileTabs } from '@optx/constants/routes';\n// services\nimport { CompanyService } from '../../../services/api';\nimport NotificationService from '../../../services/NotificationService';\n// utils\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport { actions as touchActions, selectors as touchSelectors } from '@features/company-touches';\nimport { actions as editContactModalActions } from '@redux/ui/modals/edit-profile-contact';\nimport { actions as loaderActions } from '@features/custom-global-loader';\nimport * as types from './types';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\n\nexport function* fetchPrimaryContactsSaga(action: PayloadAction<string>) {\n try {\n const res: AxiosResponse<Array<CompanyUserContact>> = yield call(\n CompanyService.getPrimaryContacts,\n action.payload\n );\n\n if (res.data) {\n yield put(actions.fetchPrimaryContactsSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch primary contacts!';\n yield put(actions.fetchPrimaryContactsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch primary contacts!';\n yield put(actions.fetchPrimaryContactsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* editProfilePrimaryContactSaga(action: PayloadAction<Partial<CompanyUserContact>>) {\n yield put(loaderActions.toggle({ loading: true }));\n\n const editedContact: CompanyUserContact = yield select(selectors.getEditedContact);\n const { tab } = queryString.parse(window.location.search);\n // api sends the phones numbers inside a additional_phones property\n // but we need to send them inside a phones prop\n const finalValues: Partial<CompanyUserContact> = {\n ...action.payload,\n additional_phones: undefined,\n phones: action.payload.additional_phones || [],\n // Add needed information for API call.\n person_id: editedContact!.person_id,\n company_id: editedContact!.company_id,\n };\n\n try {\n const res: AxiosResponse<CompanyUserContact> = yield call(\n CompanyService.editPrimaryContact,\n finalValues\n );\n\n if (res.data) {\n finalValues.linkedin = res.data.linkedin;\n finalValues.tenure_start_date = res.data.tenure_start_date;\n finalValues.tenure_end_date = res.data.tenure_end_date;\n yield put(editContactModalActions.toggle(false));\n }\n\n yield put(actions.editPrimaryContactSuccess(finalValues));\n yield put(actions.cancelEditingPrimaryContact());\n yield put(loaderActions.toggle({ loading: false }));\n\n if (tab === CompanyProfileTabs.RELATIONSHIP_MANAGEMENT) {\n // @ts-ignore\n const pagination = yield select(touchSelectors.search.pagination);\n const initiatorId: string | undefined = yield select(\n // @ts-ignore\n touchSelectors.filters.getCurrentInitiator\n );\n // @ts-ignore\n const touchType: string | undefined = yield select(touchSelectors.filters.getTouchTabFilter);\n\n yield put(\n touchActions.search.fetchTouches({\n companyId: editedContact!.company_id,\n pagination: { ...pagination, pageNumber: 1 },\n initiatorId,\n touchType,\n })\n );\n }\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to edit primary contact!');\n NotificationService.error(message);\n yield put(actions.editPrimaryContactFail(message));\n yield put(loaderActions.toggle({ loading: false }));\n }\n}\n\nexport function* editingPrimaryContactSaga(action: PayloadAction<Partial<CompanyUserContact>>) {\n yield put(editContactModalActions.toggle(true));\n}\n\nexport function* cancelEditingPrimaryContactSaga() {\n yield put(editContactModalActions.toggle(false));\n}\n\nexport default function* primaryContactsSaga() {\n yield takeLatest(types.FETCH_PRIMARY_CONTACTS, fetchPrimaryContactsSaga);\n yield takeLatest(actions.editPrimaryContact, editProfilePrimaryContactSaga);\n yield takeLatest(actions.editingPrimaryContact, editingPrimaryContactSaga);\n yield takeLatest(actions.cancelEditingPrimaryContact, cancelEditingPrimaryContactSaga);\n}\n","import { Dictionary, isEqual } from 'lodash';\nimport { GroupType } from 'react-select';\nimport moment from 'moment';\n// models\nimport {\n PreselectedFilter,\n FilterSource,\n BaseFilter,\n RangeFilter,\n MultiRangeNumberFilter,\n MultiCheckboxFilter,\n MultiSelectFilter,\n FilterGroupDataSection,\n} from '@optx/models/filters';\nimport { FilterTag, FilterTagValue } from '@optx/models/tags';\nimport Option, {\n FormCheckboxOption,\n SelectOption,\n FormCheckableRangeOption,\n LogicOption,\n DateRangeOption,\n} from '@optx/models/Option';\nimport {\n CheckableRangeOption,\n RangeOptionBase,\n SingleCheckboxRangeOption,\n} from '@optx/models/RangeOption';\nimport { OutReachFilterOptions } from '@optx/redux/company-outreach/filters/interfaces';\nimport { ScheduledTouchesFilterTags } from '@optx/redux/scheduled-touches/interfaces';\nimport { SearchStateData } from '@optx/models/search';\nimport { CompanyWatchList } from '@optx/models/WatchList';\n// constants\nimport { FILTER_TAGS_MAX_COUNT } from '@constants/tags';\nimport globalConfig from '@constants/config';\nimport { cardTitles } from '@constants/my-companies';\n// utils\nimport { formatDateInterval } from '@optx/utils/format';\nimport { getMultiSelectOptions } from '@utils/filters/mapFiltersOptions';\nimport { abbreviateNumber } from '../number';\nimport { generateUniqueKey } from '../uuid';\nimport { getRouteAlias } from '@utils/routes';\n// components\nimport predefinedFilters from '@components/common/table/TableSourceScrubLists/utils/predefinedFilters';\nimport { RouteAliases } from '@optx/models/routes';\n\nconst mapTags = (\n filters: Dictionary<PreselectedFilter>,\n sources: Array<FilterSource>,\n defaultFilters: Dictionary<PreselectedFilter>,\n ommitFilters: Array<string> = [],\n defaultIndex?: { [type: string]: number },\n sourcingFilters?: OutReachFilterOptions,\n myCompaniesFilterCards?: Dictionary<SearchStateData>,\n allWatchlists?: Dictionary<CompanyWatchList>,\n location?: Location\n) => {\n const tags: Array<FilterTag> = [];\n\n const pageAlias: RouteAliases | null = getRouteAlias();\n\n /**\n * Companies user is assigned to special case where we don't have a filter linked.\n */\n if (filters.my_assigned_companies) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: '' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'my_assigned_companies',\n label: 'My assigned Companies',\n values,\n isDefault: false,\n stringifiedValues: filters.my_assigned_companies as string,\n uniqueKey: generateUniqueKey(),\n });\n }\n\n /**\n * IVC or Israel Tag is a special case where we don't have a filter linked,\n * but it should display in the general search as a tag.\n */\n\n if (filters.is_in_israel) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'Yes' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'is_in_israel',\n label: 'IVC or Israel',\n values,\n isDefault: false,\n stringifiedValues: filters.is_in_israel as string,\n uniqueKey: generateUniqueKey(),\n });\n }\n /**\n * Special case for Filter Matched only,\n * we don't have a filter linked,\n * but it should display in the general search as a tag.\n */\n\n if (filters.new_date_matched) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'New' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'new_date_matched',\n label: 'Date matched',\n values,\n isDefault: false,\n stringifiedValues: filters.new_date_matched as string,\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.parentcompany) {\n const values: Array<FilterTagValue> = [];\n const formatedValue: string =\n filters.parentcompany instanceof Array\n ? filters.parentcompany.join()\n : (filters.parentcompany as string);\n const value: FilterTagValue = {\n value: formatedValue,\n };\n values.push(value);\n\n tags.push({\n filter: 'parentcompany',\n label: 'Parent Company',\n values,\n isDefault: false,\n stringifiedValues: formatedValue,\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.next_touch_date) {\n const nextTouchDateFilter =\n filters.next_touch_date instanceof Array\n ? (filters.next_touch_date as string[])\n : (filters.next_touch_date as string).split(', ');\n\n const tag = getSSListTouchDateTag(\n nextTouchDateFilter,\n predefinedFilters.number_of_future_touches.next_touch_date as SingleCheckboxRangeOption[],\n 'next_touch_date',\n 'Scheduled Next Touch Date'\n );\n\n tags.push(tag);\n }\n\n if (filters.last_touch_date) {\n const lastTouchDateFilter =\n filters.last_touch_date instanceof Array\n ? (filters.last_touch_date as string[])\n : (filters.last_touch_date as string).split(', ');\n\n const tag = getSSListTouchDateTag(\n lastTouchDateFilter,\n predefinedFilters.number_of_last_touch_over_6_months\n .last_touch_date as SingleCheckboxRangeOption[],\n 'last_touch_date',\n 'Completed Last Touch Date'\n );\n\n tags.push(tag);\n }\n\n // card 1\n\n if (\n myCompaniesFilterCards?.card1?.filter.next_touch_date_days?.[0] ===\n (filters.next_touch_date_days as string[])?.[0] &&\n myCompaniesFilterCards?.card1?.filter.next_touch_date_days?.[1] ===\n (filters.next_touch_date_days as string[])?.[1] &&\n myCompaniesFilterCards?.card1?.filter.last_touch_date_days?.[0] ===\n (filters.last_touch_date_days as string[])?.[0] &&\n myCompaniesFilterCards?.card1?.filter.last_touch_date_days?.[1] ===\n (filters.last_touch_date_days as string[])?.[1]\n ) {\n if (filters.wrt_over_6_wks) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'OVER 6 WEEKS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'wrt_over_6_wks',\n label: cardTitles.card1,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.wrt_over_6_months) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'OVER 6 MONTHS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'wrt_over_6_months',\n label: cardTitles.card1,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.wrt_nothing_scheduled) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'NEVER TOUCHED' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'wst_over_6_wks',\n label: cardTitles.card1,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (\n myCompaniesFilterCards?.[0] &&\n !filters.wrt_nothing_scheduled &&\n !filters.wrt_over_6_months &&\n !filters.wrt_over_6_wks\n ) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: '' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'without_a_recent_touch',\n label: cardTitles.card1,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n }\n\n // card 2\n\n if (\n myCompaniesFilterCards?.card2?.filter.next_touch_date_days?.[0] === filters.next_touch_date_days\n ) {\n if (filters.wst_within_6_wks) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'WITHIN 6 WEEKS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'wst_within_6_wks',\n label: cardTitles.card2,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.wst_over_6_months) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'OVER 6 MONTHS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'wst_over_6_months',\n label: cardTitles.card2,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.wst_over_6_wks) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'OVER 6 WEEKS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'wst_over_6_wks',\n label: cardTitles.card2,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (\n myCompaniesFilterCards?.[1] &&\n !filters.wst_within_6_wks &&\n !filters.wst_over_6_months &&\n !filters.wst_over_6_wks\n ) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: '' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'with_a_scheduled_touch',\n label: cardTitles.card2,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n }\n\n // card 3\n\n if (\n myCompaniesFilterCards?.card3?.filter.next_touch_date_days?.[0] ===\n filters.next_touch_date_days &&\n myCompaniesFilterCards?.card3?.filter.saved_list_id === filters.saved_list_id\n ) {\n if (filters.mfst_8_to_14_days) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: '8 TO 14 DAYS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'mfst_8_to_14_days',\n label: cardTitles.card3,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.mfst_next_7_days) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'NEXT 7 DAYS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'mfst_next_7_days',\n label: cardTitles.card3,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.mfst_next_30_days) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'NEXT 30 DAYS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'mfst_next_30_days',\n label: cardTitles.card3,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.mfst_past_due) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'PAST DUE' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'mfst_past_due',\n label: cardTitles.card3,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (\n myCompaniesFilterCards?.[2] &&\n !filters.mfst_8_to_14_days &&\n !filters.mfst_next_7_days &&\n !filters.mfst_next_30_days &&\n !filters.mfst_past_due\n ) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: '' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'my_favorites_scheduled_touches',\n label: cardTitles.card3,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n }\n\n // card 4\n\n if (\n myCompaniesFilterCards?.card4?.filter.next_touch_date_days?.[0] === filters.next_touch_date_days\n ) {\n if (filters.stn30_8_to_14_days_away) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: '8 TO 14 DAYS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'stn30_8_to_14_days_away',\n label: cardTitles.card4,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.stn30_next_7_days) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'NEXT 7 DAYS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'stn30_next_7_days',\n label: cardTitles.card4,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.stn30_next_30_days) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'NEXT 30 DAYS' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'stn30_next_30_days',\n label: cardTitles.card4,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.stn30_past_due) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'PAST DUE' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'stn30_past_due',\n label: cardTitles.card4,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (\n myCompaniesFilterCards?.[3] &&\n !filters.stn30_8_to_14_days_away &&\n !filters.stn30_next_7_days &&\n !filters.stn30_next_30_days &&\n !filters.stn30_past_due\n ) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: '' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'scheduled_touches_in_the_next_30_days',\n label: cardTitles.card4,\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n }\n\n // watchlist\n\n let watchlists = [];\n\n if (Array.isArray(allWatchlists)) {\n watchlists = allWatchlists.find(list => list.unique_id === Number(filters.saved_list_id));\n }\n\n if (filters.saved_list_id && !location?.pathname?.includes('user-lists')) {\n let showValue =\n filters.saved_list_id === 'favorites'\n ? 'favorites'\n : watchlists?.title\n ? watchlists?.title\n : allWatchlists?.[Number(filters.saved_list_id)]?.title;\n\n if (showValue) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: showValue as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'saved_list_id',\n label: 'List',\n values,\n isDefault: false,\n stringifiedValues: '1',\n uniqueKey: generateUniqueKey(),\n });\n }\n }\n\n /**\n * Is platform company is a special case where we don't have a filter linked,\n * but it should display in the general search as a tag.\n */\n if (filters.is_platform) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: 'Yes' as string,\n };\n values.push(value);\n\n tags.push({\n filter: 'is_platform',\n label: 'Platform Company',\n values,\n isDefault: false,\n stringifiedValues: filters.is_platform as string,\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.similarCompanies && (filters.similarCompanies as SelectOption)?.label) {\n const values: Array<FilterTagValue> = [];\n const value: FilterTagValue = {\n value: (filters.similarCompanies as SelectOption).label,\n };\n\n values.push(value);\n\n tags.push({\n filter: 'similarCompanies',\n label: 'Similar Companies To',\n values,\n isDefault: false,\n stringifiedValues: (filters.similarCompanies as SelectOption).label,\n uniqueKey: generateUniqueKey(),\n });\n }\n\n sources.forEach(source => {\n if (source.data) {\n (source.data as Array<BaseFilter>).forEach(filter => {\n if (ommitFilters.indexOf(filter.column) !== -1) {\n return;\n }\n\n switch (filter.type) {\n case 'range_input': {\n const ranges = filters[filter.column] as Array<FormCheckableRangeOption>;\n\n const values: Array<FilterTagValue> = [];\n const {\n slider_plus: sliderPlus,\n slider_dots: sliderDots,\n is_formatted: isFormatted,\n } = filter as RangeFilter<Array<RangeOptionBase>>;\n\n let lastDot: number;\n\n if (sliderPlus && sliderDots && sliderDots.length) {\n lastDot = sliderDots[sliderDots.length - 1];\n }\n\n ranges?.forEach((range, index) => {\n let [min, max] = range.range as Array<number | string>;\n\n const formatter = isFormatted\n ? (value: string | number | undefined) =>\n abbreviateNumber({ value, maxValue: range.max, dot: lastDot })\n : undefined;\n\n if (range.min !== min || range.max !== max) {\n if (formatter) {\n min = formatter(min);\n max = formatter(max);\n }\n\n values.push({ value: `${min} — ${max}` });\n }\n\n if (index === 0 && range.check) {\n range.check.forEach(item => {\n if (item.checked) {\n values.push({ value: item.label });\n }\n });\n }\n });\n\n if (values.length) {\n const stringifiedValues = values.map(item => item.value).join(', ');\n tags.push({\n filter: filter.column,\n label: filter.label,\n values,\n isDefault: false,\n stringifiedValues,\n uniqueKey: generateUniqueKey(),\n });\n }\n\n break;\n }\n\n case 'checkbox': {\n const checkboxTag = getCheckboxTag(defaultFilters, filters, filter);\n if (checkboxTag) tags.push(checkboxTag);\n\n break;\n }\n\n case 'multi_text': {\n const options = filters[filter.column] as Array<SelectOption<string>>;\n const defaultOptions = defaultFilters[filter.column] as Array<SelectOption<string>>;\n const values: Array<FilterTagValue> = [];\n\n options.forEach((option, index) => {\n if (option.value) {\n values.push({\n value: option.value,\n isDefault: option.value === defaultOptions[index].value,\n });\n }\n });\n\n if (values.length) {\n // handle specific cases\n // geographic range\n if (filter.column === 'geo_range') {\n const [zipCode, range] = options;\n const [defaultZipCode, defaultRange] = defaultOptions;\n const stringifiedValues = `${range.value} miles from ${zipCode.value}`;\n tags.push({\n filter: filter.column,\n label: 'Range',\n values: [\n {\n value: stringifiedValues,\n },\n ],\n isDefault: zipCode === defaultZipCode && range === defaultRange,\n stringifiedValues,\n uniqueKey: generateUniqueKey(),\n });\n\n break;\n }\n\n // handle generic case\n const stringifiedValues = values.map(item => item.value).join(', ');\n const isDefault: boolean = values.some(item => item.isDefault);\n\n tags.push({\n filter: filter.column,\n label: filter.label,\n values: values.map(item => ({ value: item.value })),\n isDefault,\n stringifiedValues,\n uniqueKey: generateUniqueKey(),\n });\n }\n\n break;\n }\n\n case 'logic_checkbox': {\n const options = filters[filter.column] as Array<LogicOption>;\n const defaultOptions = defaultFilters[filter.column] as Array<LogicOption>;\n\n options.forEach((option, index) => {\n if (option.in || option.notIn) {\n const logicOptionValues: Array<FilterTagValue> = [];\n\n if (option.in) {\n logicOptionValues.push({ value: 'In', isDefault: defaultOptions[index].in });\n }\n\n if (option.notIn) {\n logicOptionValues.push({\n value: 'Not In',\n });\n }\n\n const stringifiedValues = logicOptionValues.map(item => item.value).join(', ');\n tags.push({\n filter: filter.column,\n label: option.label,\n values: logicOptionValues,\n stringifiedValues,\n isDefault: defaultOptions[index].notIn,\n optionId: index,\n uniqueKey: generateUniqueKey(),\n });\n }\n });\n\n break;\n }\n\n case 'multiple_range_nr': {\n const options = filters[filter.column] as Array<CheckableRangeOption<number>>;\n const defaultOptions = defaultFilters[filter.column] as Array<\n CheckableRangeOption<number>\n >;\n const values: Array<FilterTagValue> = [];\n\n options.forEach((option, index) => {\n if (option.checked) {\n values.push({ value: option.label, isDefault: defaultOptions[index].checked });\n }\n });\n\n // add values for custom option as well\n if ((filter as MultiRangeNumberFilter).custom) {\n const customOption = filters[\n `${filter.column}_custom`\n ] as CheckableRangeOption<string>;\n\n if (customOption.checked && customOption.max && customOption.min) {\n values.push({ value: `${customOption.min} — ${customOption.max}` });\n }\n }\n\n if (values.length) {\n const stringifiedValues = values.map(item => item.value).join(', ');\n tags.push({\n filter: filter.column,\n label: filter.label,\n values,\n stringifiedValues,\n uniqueKey: generateUniqueKey(),\n });\n }\n\n break;\n }\n\n case 'date_range': {\n const dateRangeTag = getDateRangeTag(defaultFilters, filters, filter);\n if (dateRangeTag) tags.push(dateRangeTag);\n break;\n }\n\n case 'radio': {\n const options = (filter as BaseFilter<Array<Option>>).data;\n const currentValue = filters[filter.column] as string;\n const defaultValue = defaultFilters[filter.column] as string;\n\n options.forEach(option => {\n if (option.value === currentValue) {\n tags.push({\n filter: filter.column,\n label: filter.label,\n values: [{ value: option.name! }],\n stringifiedValues: option.name,\n isDefault: currentValue === defaultValue,\n uniqueKey: generateUniqueKey(),\n });\n }\n });\n\n break;\n }\n\n case 'multi_select': {\n tags.push(getMultiSelectTag(defaultFilters, filters, filter));\n break;\n }\n\n // eslint-disable-next-line no-fallthrough\n case 'single_select': {\n const options = filters[filter.column] as Array<SelectOption> | undefined;\n const defaultOptions = defaultFilters[filter.column] as Array<SelectOption> | undefined;\n\n const tag = mapMultiSelectTag(filter, options, defaultOptions);\n\n if (tag) {\n tags.push({ ...tag, isDefault: tag.values.some(item => item.isDefault) });\n }\n\n break;\n }\n\n case 'endpoint_query': {\n const options = filters[filter.column] as Array<SelectOption> | undefined;\n\n if (options) {\n const values: Array<FilterTagValue> = [];\n\n options.forEach(option => {\n const value: FilterTagValue = {\n value: option.label,\n };\n\n values.push(value);\n });\n\n if (values.length) {\n const stringifiedValues = values.map(item => item.value).join(', ');\n\n tags.push({\n filter: filter.column,\n label: filter.label,\n values,\n isDefault: false,\n stringifiedValues,\n uniqueKey: generateUniqueKey(),\n });\n }\n }\n\n break;\n }\n\n case 'date_range_radio': {\n const value = filters[filter.column] as [string, string];\n const tag = mapDateRangesTag(filter, value, defaultIndex?.date_range_radio);\n\n tags.push(tag);\n\n break;\n }\n\n case 'filter_group_custom': {\n const data = filter.data as FilterGroupDataSection[];\n\n data.forEach(section => {\n switch (section.type) {\n case 'multi_select': {\n tags.push(getMultiSelectTag(defaultFilters, filters, section));\n break;\n }\n\n case 'checkbox': {\n const checkboxTag = getCheckboxTag(defaultFilters, filters, section);\n if (checkboxTag) tags.push(checkboxTag);\n break;\n }\n\n case 'radio': {\n const options = (section as BaseFilter<Array<Option>>).data;\n const currentValue = filters[section.column] as string;\n const defaultValue = defaultFilters[section.column] as string;\n options.forEach(option => {\n if (option.value === currentValue) {\n tags.push({\n filter: section.column,\n label: section.label ? section.label : section.column.replaceAll('_', ' '),\n values: [{ value: option.name! }],\n stringifiedValues: option.name,\n isDefault: currentValue === defaultValue,\n uniqueKey: generateUniqueKey(),\n resetFor: section.reset_for,\n });\n }\n });\n\n break;\n }\n\n case 'date_range': {\n const dateRangeTag = getDateRangeTag(defaultFilters, filters, section);\n if (dateRangeTag) tags.push(dateRangeTag);\n break;\n }\n\n default:\n break;\n }\n });\n\n break;\n }\n\n default:\n break;\n }\n });\n }\n });\n\n if (sourcingFilters?.analyst_id) {\n if (Object.keys(sourcingFilters!).length !== 0) {\n const analystInfo = sourcingFilters!.analyst_id as unknown as Array<SelectOption<string>>;\n const analystNames = analystInfo?.map(list => ({\n value: list.label,\n }));\n\n if (\n analystNames &&\n !isEqual(sourcingFilters?.defaultAnalystId, sourcingFilters?.analyst_id)\n ) {\n tags.push({\n filter: 'analyst_name',\n label: 'Analysts Name',\n values: analystNames,\n uniqueKey: generateUniqueKey(),\n });\n }\n }\n }\n\n if (sourcingFilters?.column_name) {\n if (Object.keys(sourcingFilters).length !== 0) {\n const analystInfo = sourcingFilters.column_name as unknown as SelectOption<string>;\n const sourcingOutReachColumnNames = analystInfo.label;\n\n const values: Array<FilterTagValue> = [];\n const anlystValues: FilterTagValue = {\n value: sourcingOutReachColumnNames,\n };\n\n if (\n sourcingOutReachColumnNames &&\n !isEqual(sourcingFilters.column_name, sourcingFilters.defaultColumnName)\n ) {\n values.push(anlystValues);\n\n tags.push({\n filter: 'column_name',\n label: 'Column Name',\n values,\n uniqueKey: generateUniqueKey(),\n });\n }\n }\n }\n\n if (sourcingFilters?.ddate && sourcingFilters?.dateLabel) {\n if (Object.keys(sourcingFilters).length !== 0) {\n const values: Array<FilterTagValue> = [];\n const columnName = sourcingFilters.ddate;\n const [start, end] = columnName;\n\n const columnValues: FilterTagValue = {\n value: sourcingFilters.dateLabel,\n };\n const customColumnValues: FilterTagValue = {\n value: formatDateInterval(start!, end!),\n };\n\n if (!isEqual(sourcingFilters.ddate, sourcingFilters.defaultDateRange)) {\n if (columnName && sourcingFilters.dateLabel === 'Custom Range') {\n values.push(customColumnValues);\n\n tags.push({\n filter: 'date_range',\n label: 'Custom Range',\n values,\n uniqueKey: generateUniqueKey(),\n });\n } else {\n values.push(columnValues);\n\n tags.push({\n filter: 'date_range',\n label: 'Date Intervals',\n values,\n uniqueKey: generateUniqueKey(),\n });\n }\n }\n }\n }\n\n // do not show default stage tags on MyCompanies page\n const stageTag = tags.find(tag => tag.filter === 'stage');\n const myCompaniesTags = tags.filter(tag => tag.filter !== 'stage');\n const ALL_STAGES_SELECTED = 11;\n\n if (stageTag?.values.length === ALL_STAGES_SELECTED && pageAlias === 'myCompanies') {\n return myCompaniesTags;\n }\n\n return tags;\n};\n\n/**\n * Retrieves the filter tag for the old touch filters needed in sslist in order to\n * show them as tags, but hide them from filter panel\n * @param {string[]} touchDateFilters - The array of touch date filters\n * @param {SingleCheckboxRangeOption[]} defaultTouchDateFilters - The array of default touch date filters\n * @param {string} filterColumn - The filter column for tag\n * @param {string} filterLabel - The tag label\n */\nconst getSSListTouchDateTag = (\n touchDateFilters: string[],\n defaultTouchDateFilters: SingleCheckboxRangeOption[],\n filterColumn: string,\n filterLabel: string\n) => {\n const values: SingleCheckboxRangeOption[] = [];\n\n touchDateFilters.forEach(dateValue => {\n const value = defaultTouchDateFilters.find(filter => filter.value === dateValue);\n\n if (value) values.push(value);\n });\n\n return {\n filter: filterColumn,\n label: filterLabel,\n values: values.map(item => ({ value: item.label })),\n isDefault: false,\n stringifiedValues: values.map(item => item.label).join(', '),\n uniqueKey: generateUniqueKey(),\n };\n};\n\nconst getMultiSelectTag = (\n defaultFilters: Dictionary<PreselectedFilter>,\n filters: Dictionary<PreselectedFilter>,\n filter: BaseFilter<any> | FilterGroupDataSection\n) => {\n const defaultValue = (defaultFilters[filter.column] as string | undefined) ?? [];\n\n let values;\n\n if (!Array.isArray(filters[filter.column])) {\n values = filters[filter.column] ?? [];\n } else {\n values = (filters[filter.column] as Option[]).map((item: Option) => ({\n value: item.label || item.name || item,\n }));\n }\n\n const isDefault =\n Array.isArray(defaultValue) &&\n Array.isArray(values) &&\n (defaultValue?.length === values?.length || values?.length === 0);\n\n return {\n filter: filter.column,\n label: filter.label ? filter.label : filter.column.replaceAll('_', ' '),\n values,\n isDefault,\n stringifiedValues: filters.name,\n uniqueKey: generateUniqueKey(),\n } as FilterTag;\n};\n\nconst getCheckboxTag = (\n defaultFilters: Dictionary<PreselectedFilter>,\n filters: Dictionary<PreselectedFilter>,\n filter: BaseFilter<any> | FilterGroupDataSection\n) => {\n const options = filters[filter.column] as Array<FormCheckboxOption>;\n const defaultOptions = defaultFilters[filter.column] as Array<FormCheckboxOption>;\n const values: Array<FilterTagValue> = [];\n\n options?.forEach((option, index) => {\n if (option.checked) {\n values.push({\n value: option.label,\n isDefault: defaultOptions[index].checked,\n });\n }\n });\n\n // add values for custom option as well\n if ((filter as MultiCheckboxFilter).custom) {\n const customOption = filters[`${filter.column}_custom`] as SingleCheckboxRangeOption<string>;\n\n if (customOption && customOption.checked && customOption.value) {\n values.push({\n value: `${customOption.value.split('_')[0]} — ${customOption.value.split('_')[1]}`,\n });\n }\n }\n\n if (values.length) {\n const stringifiedValues = values.map(item => item.value).join(', ');\n const isDefault: boolean = values.some(item => item.isDefault);\n\n return {\n filter: filter.column,\n label: filter.label ? filter.label : filter.column.replaceAll('_', ' '),\n values: values.map(item => ({ value: item.value })),\n isDefault,\n stringifiedValues,\n uniqueKey: generateUniqueKey(),\n };\n }\n\n return null;\n};\n\nconst getDateRangeTag = (\n defaultFilters: Dictionary<PreselectedFilter>,\n filters: Dictionary<PreselectedFilter>,\n filter: BaseFilter<any> | FilterGroupDataSection\n) => {\n const [start, end] = filters[filter.column] as Array<SelectOption<string>>;\n const [defaultStart, defaultEnd] = defaultFilters[filter.column] as Array<SelectOption<string>>;\n\n if (start.value || end.value) {\n const startValue = start.value\n ? moment(start.value).format(globalConfig.short_date.DATE_FORMAT)\n : '';\n const endValue = end.value ? moment(end.value).format(globalConfig.short_date.DATE_FORMAT) : '';\n const stringifiedValues = `${startValue || ''} — ${endValue || ''}`;\n\n return {\n filter: filter.column,\n label: filter.label ? filter.label : filter.column.replaceAll('_', ' '),\n values: [\n { value: startValue, isDefault: start.value === defaultStart.value },\n { value: endValue, isDefault: end.value === defaultEnd.value },\n ],\n stringifiedValues,\n showString: true,\n isDefault: start.value === defaultStart.value && end.value === defaultEnd.value,\n isDateInterval: true,\n uniqueKey: generateUniqueKey(),\n };\n }\n\n return null;\n};\n/**\n * Map scheduled touches filters to tags.\n * @param filters filters from scheduledTouches page\n */\n\nexport const mapScheduledTouchesTags = (filters: ScheduledTouchesFilterTags) => {\n const tags: Array<FilterTag> = [];\n\n if (filters.rankType && filters.rankType !== 'All') {\n tags.push({\n filter: 'rank_type',\n label: 'Rank Type',\n values: [\n {\n value: filters.rankType,\n },\n ],\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.selectedPeriod && filters.selectedPeriod === 'Custom Range') {\n tags.push({\n filter: 'selected_period',\n label: 'Custom Range',\n values: [\n {\n value: formatDateInterval(filters.selectedDateRange[0]!, filters.selectedDateRange[1]!),\n },\n ],\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (\n filters.selectedPeriod &&\n filters.selectedPeriod !== 'This Week' &&\n filters.selectedPeriod !== 'Custom Range'\n ) {\n tags.push({\n filter: 'selected_period',\n label: 'Date Intervals',\n values: [\n {\n value: filters.selectedPeriod,\n },\n ],\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.stageType && filters.stageType !== 'All') {\n tags.push({\n filter: 'stage_type',\n label: 'Stage Type',\n values: [\n {\n value: filters.stageType,\n },\n ],\n uniqueKey: generateUniqueKey(),\n });\n }\n\n if (filters.touchType && filters.touchType !== 'All') {\n tags.push({\n filter: 'touch_type',\n label: 'Touch Type',\n values: [\n {\n value: filters.touchType,\n },\n ],\n uniqueKey: generateUniqueKey(),\n });\n }\n\n return tags;\n};\n\nconst GROUP_COUNT_DISPLAY = 1;\n\n/**\n * Map multi select value to tag.\n * Grouped tags have following shape:\n * {First Selected Group}, {First option outside first group}, {rest options outside first group}\n * @param filter filter information.\n * @param value current filter value.\n * @param defaultValue filter default value.\n */\nexport function mapMultiSelectTag(\n filter: BaseFilter<Array<Option>>,\n value: Array<SelectOption> | undefined = [],\n defaultValue: Array<SelectOption> | undefined = []\n): FilterTag | null {\n const values: Array<FilterTagValue> = [];\n const valuesDictionary = value.reduce<Dictionary<boolean>>((acumulator, currentValue) => {\n return {\n ...acumulator,\n [currentValue.value]: true,\n };\n }, {});\n let tagIsDefault = true;\n const isGrouped = filter.data.some(item => item.group);\n let groupedOptionsCount = 0;\n const selectedGroups: Array<number> = [];\n const groupedValues: Dictionary<boolean> = {};\n\n // Handle grouped options.\n if (isGrouped) {\n // Find what groups are fully selected.\n const options = getMultiSelectOptions(filter as MultiSelectFilter<Array<Option>>);\n\n options.forEach((option, index) => {\n const groupOptions = (option as GroupType<SelectOption>).options;\n\n if (groupOptions) {\n // grouped options\n if (!groupOptions.some(item => valuesDictionary[item.value] === undefined)) {\n selectedGroups.push(index);\n }\n }\n });\n\n if (selectedGroups.length) {\n selectedGroups.forEach((optionIndex, index) => {\n const group = options[optionIndex] as GroupType<SelectOption>;\n\n if (index < GROUP_COUNT_DISPLAY) {\n const tagValue: FilterTagValue = {\n value: group.label,\n isDefault: false, // TODO: add check for all values in group if they are default.\n };\n\n values.push(tagValue);\n\n groupedOptionsCount += group.options.length;\n\n group.options.forEach(option => {\n groupedValues[option.value] = true;\n });\n }\n });\n }\n }\n\n let displayedOptionsOutsideGroup = 0;\n\n value.forEach(option => {\n const valueIsDefault = !!defaultValue && defaultValue.some(item => item.value === option.value);\n tagIsDefault = tagIsDefault && valueIsDefault;\n\n if (groupedOptionsCount === 0) {\n const tagValue: FilterTagValue = {\n value: option.label,\n isDefault: valueIsDefault,\n };\n\n values.push(tagValue);\n } else if (displayedOptionsOutsideGroup === 0 && !groupedValues[option.value]) {\n // include the first option outside group if any.\n const tagValue: FilterTagValue = {\n value: option.label,\n isDefault: valueIsDefault,\n };\n\n values.push(tagValue);\n displayedOptionsOutsideGroup++;\n }\n });\n\n if (groupedOptionsCount !== 0) {\n const countOptionsLeft = value.length - groupedOptionsCount - displayedOptionsOutsideGroup;\n\n if (countOptionsLeft) {\n const tagValue: FilterTagValue = {\n value: `+${countOptionsLeft} More`,\n isDefault: false,\n };\n\n values.push(tagValue);\n }\n }\n\n // Also check default values against current values for any values not included.\n const defaultValueNotInValues = defaultValue?.some(item => !valuesDictionary[item.value]);\n\n tagIsDefault = tagIsDefault && !defaultValueNotInValues;\n\n const stringifiedValues = values.map(item => item.value).join(', ');\n const tag: FilterTag = {\n filter: filter.column,\n label: filter.label,\n values,\n stringifiedValues,\n uniqueKey: generateUniqueKey(),\n isDefault: tagIsDefault,\n };\n\n return tag;\n}\n\nexport function mapDateRangesTag(\n filter: BaseFilter<Array<DateRangeOption>>,\n value: [string, string],\n defaultIndex?: number\n): FilterTag {\n const options = filter.data;\n const defaultValue = filter.default_value;\n\n const preselectedOption = options.find(option => {\n if (option.start === value[0] && option.end === value[1]) {\n return true;\n }\n\n return false;\n });\n\n if (preselectedOption) {\n const stringifiedValues = preselectedOption.label;\n\n // preselected option\n return {\n filter: filter.column,\n label: filter.label,\n values: [\n {\n value: preselectedOption.label as string,\n },\n ],\n isDefault: defaultValue?.label\n ? preselectedOption.label === defaultValue.label\n : preselectedOption === options[defaultIndex ?? 0],\n stringifiedValues,\n uniqueKey: generateUniqueKey(),\n };\n }\n\n // custom range\n const tagValues: Array<FilterTagValue> = value.map(option => ({\n value: moment(option).format(globalConfig.short_date.DATE_FORMAT),\n }));\n\n const [start, end] = value;\n\n return {\n filter: filter.column,\n label: 'Custom Range',\n values: tagValues,\n isDefault: false,\n showString: true,\n stringifiedValues: formatDateInterval(start, end),\n uniqueKey: generateUniqueKey(),\n isDateInterval: true,\n };\n}\n\n/**\n * Convert tag values to labels.\n * @param values tag values\n * @param maxCount maximum number of showed tag values.\n */\nexport const tagsValue = (tag: FilterTag, maxCount = FILTER_TAGS_MAX_COUNT) => {\n const { values, isDateInterval } = tag;\n\n if (isDateInterval) {\n return `${values[0]?.value} — ${values[1]?.value}`;\n }\n\n if (maxCount >= values.length) {\n return values\n .filter(option => !option.isDefault)\n .map(option => {\n if (option.value && Array.isArray(option.value)) {\n if (option.value.includes(' - ')) {\n return option.value.replace('-', '—');\n }\n\n if (option.value?.includes(' \\u2013 ')) {\n return option.value.replace('\\u2013', '—');\n }\n }\n\n return option.value;\n })\n .join(', ');\n }\n\n const moreCount = values.length - maxCount;\n const displayedValues = values.filter(option => !option.isDefault).slice(0, maxCount);\n const stringifiedValues = `${displayedValues\n .map(option => {\n if (option.value && option.value.includes(' - ')) {\n return option.value.replace('-', '—');\n }\n\n if (option.value && option.value.includes(' \\u2013 ')) {\n return option.value.replace('\\u2013', '—');\n }\n\n return option.value;\n })\n .join(', ')}, ${moreCount} more`;\n\n return stringifiedValues;\n};\n\nexport default mapTags;\n","export const featureName = 'checklist-research-insights';\n","import { CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, values } from 'lodash';\nimport queryString from 'query-string';\nimport { SortByRule } from '@models/table/sorting';\n// models\nimport { SearchSave, SearchSaveResponse, SearchStateData } from '@models/search';\nimport { FilterSource, Filter, PreselectedFilter } from '@models/filters';\nimport { PageInfo } from '@models/table/Pagination';\nimport { ContactsSavedSearchesState } from '@redux/feature/saved-search/interfaces';\nimport { CompanyWatchList } from '@optx/models/WatchList';\n// constants\nimport { customUIViewIds, customUIViews } from '@optx/constants/table/columnDisplay/company-search';\n// utils\nimport { parseFilter } from '@utils/filters/parseFilters';\nimport { generateUniqueKey } from '@utils/uuid';\nimport { removeColumnFromString } from '@utils/columns';\n// constants\nimport SORT_ORDER from '@constants/table/sortOrder';\n// redux\nimport { fetchReducer } from '@redux/feature/fetch/reducers';\nimport mapTags from '@utils/filters/mapTags';\nimport { hasFilters } from '@optx/utils/search';\nimport { CustomUIViewIds, UserInformation } from '@optx/models/user';\n\n// initial state\nexport const initialState: ContactsSavedSearchesState = {\n allIds: [],\n byId: {},\n loading: false,\n error: '',\n fetchedAt: '',\n total: 0,\n query: '',\n pageNumber: 1,\n sortBy: [],\n viewIds: [],\n views: {},\n};\n\n// fetch\nexport const fetchSavedSearchesReducer: CaseReducer<ContactsSavedSearchesState> = draftState => {\n fetchReducer(draftState);\n draftState.allIds = [];\n draftState.byId = {};\n};\n\nexport const mapSortBy = (searchQueryString: string) => {\n const filterParsed = queryString.parse(searchQueryString, {\n arrayFormat: 'comma',\n }) as Dictionary<Array<string>>;\n\n const sorting: Array<SortByRule<any>> = [];\n\n if (filterParsed.sort_fields && filterParsed.sort_orders) {\n if (\n typeof filterParsed.sort_fields === 'string' &&\n typeof filterParsed.sort_orders === 'string'\n ) {\n const sort: SortByRule<any> = {\n desc: filterParsed.sort_orders !== SORT_ORDER.ASCENDING,\n id: filterParsed.sort_fields,\n };\n\n sorting.push(sort);\n } else {\n filterParsed.sort_fields.map((sortItem: string, index: number) =>\n sorting.push({\n id: sortItem,\n desc: filterParsed.sort_orders![index] !== SORT_ORDER.ASCENDING,\n })\n );\n }\n }\n\n return sorting.length ? sorting : undefined;\n};\n\n/**\n * Map SearchSaveResponse to SearchSave.\n * @param savedSeachResponse\n * @param filterSources\n */\nexport const mapSearchSave = (\n savedSeachResponse: SearchSaveResponse,\n clearedFilters: Dictionary<PreselectedFilter>,\n filterSources: Array<FilterSource<Filter<any>>> = [],\n myCompaniesFilterCards?: Dictionary<SearchStateData>,\n allWatchlists?: Dictionary<CompanyWatchList>,\n location?: Location,\n isSavedSearchList?: boolean,\n isSuggestedSearchList?: boolean,\n isAnalyst?: boolean\n) => {\n const [parsedFilters, keySearch] = parseFilter(savedSeachResponse.search_criteria, filterSources);\n\n const options = mapTags(\n parsedFilters,\n filterSources,\n clearedFilters,\n [],\n undefined,\n undefined,\n myCompaniesFilterCards,\n allWatchlists,\n location\n );\n\n // add special tags if text query is pressent on saved search\n const hasQueryFilter = savedSeachResponse.search_criteria.includes('query');\n const hasCompanyQueryFilter = savedSeachResponse.search_criteria.includes('company_name_or_url');\n const keySearchAsCompanyName = parsedFilters.company_name_or_url ?? '';\n const shouldRemoveLastViewedColumn = (isSavedSearchList || isSuggestedSearchList) && !isAnalyst;\n\n const mappedItem: SearchSave = {\n ...savedSeachResponse,\n columns:\n shouldRemoveLastViewedColumn && savedSeachResponse.columns\n ? removeColumnFromString(savedSeachResponse.columns, 'last_viewed')\n : savedSeachResponse.columns,\n column_order:\n shouldRemoveLastViewedColumn && savedSeachResponse.column_order\n ? removeColumnFromString(savedSeachResponse.column_order, 'last_viewed')\n : savedSeachResponse.column_order,\n pinned_columns:\n shouldRemoveLastViewedColumn && savedSeachResponse.pinned_columns\n ? removeColumnFromString(savedSeachResponse.pinned_columns, 'last_viewed')\n : savedSeachResponse.pinned_columns,\n searchKey: (keySearch as string) || (keySearchAsCompanyName as string),\n filters: parsedFilters,\n sortBy: mapSortBy(savedSeachResponse.search_criteria),\n ...(isSavedSearchList\n ? {\n filteredTags: [\n ...(keySearch && hasQueryFilter\n ? [\n {\n filter: 'query',\n label: 'All Company Info',\n values: [\n {\n value: '',\n },\n ],\n isDefault: false,\n stringifiedValues: 'query',\n uniqueKey: generateUniqueKey(),\n },\n ]\n : keySearchAsCompanyName && hasCompanyQueryFilter\n ? [\n {\n filter: 'query',\n label: 'Company Name or URL',\n values: [\n {\n value: '',\n },\n ],\n isDefault: false,\n stringifiedValues: 'query',\n uniqueKey: generateUniqueKey(),\n },\n ]\n : []),\n ...options,\n ],\n }\n : {\n filteredTags: options,\n }),\n };\n\n return mappedItem;\n};\n\nexport const fetchSavedSearchesSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<\n Array<SearchSaveResponse> | Dictionary<SearchSaveResponse>,\n any,\n {\n filterSources: Array<FilterSource<Filter<any>>>;\n clearedFilters: Dictionary<PreselectedFilter>;\n total?: number;\n query?: string;\n pagination?: PageInfo;\n sortBy?: Array<SortByRule<any>>;\n addCustomViews?: boolean;\n defaultCustomUIView?: CustomUIViewIds;\n myCompaniesFilterCards?: Dictionary<SearchStateData>;\n allWatchlists?: Dictionary<CompanyWatchList>;\n location?: Location;\n isSavedSearchList?: boolean;\n isAnalyst?: boolean;\n isSuggestedSearchList?: boolean;\n }\n >\n> = (draftState, action) => {\n const { payload: savedSearchesResponse, meta } = action;\n const {\n filterSources,\n clearedFilters,\n total,\n query,\n pagination,\n sortBy,\n addCustomViews,\n defaultCustomUIView,\n myCompaniesFilterCards,\n allWatchlists,\n location,\n isSavedSearchList,\n isSuggestedSearchList,\n isAnalyst,\n } = meta;\n draftState.allIds = [];\n values(savedSearchesResponse).forEach(savedSeachResponse => {\n const { unique_id: id } = savedSeachResponse;\n\n draftState.allIds.push(id);\n\n draftState.byId[id] = mapSearchSave(\n savedSeachResponse,\n clearedFilters,\n filterSources,\n myCompaniesFilterCards,\n allWatchlists,\n location,\n isSavedSearchList,\n isSuggestedSearchList,\n isAnalyst\n );\n });\n\n // if we are on the last page, push custom UI views and set default property\n if (\n addCustomViews &&\n pagination &&\n total &&\n Math.ceil(total / pagination.pageSize) === pagination.pageNumber\n ) {\n customUIViewIds.forEach(id => {\n draftState.allIds.push(id);\n\n draftState.byId[id] = mapSearchSave(\n { ...customUIViews[id], is_default: defaultCustomUIView === id },\n clearedFilters,\n filterSources\n );\n });\n }\n\n draftState.shouldFetch = false;\n\n draftState.loading = false;\n draftState.fetchedAt = new Date().toISOString();\n draftState.total = total;\n draftState.query = query;\n draftState.sortBy = sortBy;\n\n if (pagination) {\n draftState.pageNumber = pagination.pageNumber;\n }\n};\n\n// create search\nexport const saveSearchSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<\n SearchSaveResponse,\n any,\n {\n filterSources: Array<FilterSource<Filter<any>>>;\n clearedFilters: Dictionary<PreselectedFilter>;\n shouldFetch?: boolean;\n }\n >\n> = (draftState, action) => {\n const {\n payload: searchSaveResponse,\n meta: { filterSources, clearedFilters, shouldFetch },\n } = action;\n const { unique_id: uniqueId } = searchSaveResponse;\n\n if (!draftState.allIds.includes(uniqueId)) {\n draftState.allIds.unshift(uniqueId);\n }\n\n if (!draftState.viewIds.includes(uniqueId)) {\n draftState.viewIds.unshift(uniqueId);\n }\n\n draftState.byId[uniqueId] = mapSearchSave(searchSaveResponse, clearedFilters, filterSources);\n draftState.views[uniqueId] = draftState.byId[uniqueId];\n draftState.loading = false;\n\n draftState.shouldFetch = shouldFetch;\n\n const isCountableForSavedSearch = hasFilters(searchSaveResponse.search_criteria);\n\n if (isCountableForSavedSearch) {\n draftState.total! += 1;\n }\n};\n\n// delete search\nexport const deleteSearchSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<number>\n> = (draftState, action) => {\n const searchId = action.payload;\n const searchIndex = draftState.allIds.indexOf(searchId);\n const viewIndex = draftState.viewIds.indexOf(searchId);\n\n if (searchIndex > -1) {\n draftState.allIds.splice(searchIndex, 1);\n delete draftState.byId[searchId];\n }\n\n if (draftState.viewIds.length) {\n draftState.viewIds.splice(viewIndex, 1);\n delete draftState.views[searchId];\n }\n\n draftState.loading = false;\n draftState.total! -= 1;\n};\n\n// rename search\nexport const renameSearchSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<{ searchId: number | string; title: string }>\n> = (draftState, action) => {\n const { searchId, title } = action.payload;\n draftState.byId[searchId].title = title;\n\n if (draftState.views[searchId]) {\n draftState.views[searchId].title = title;\n }\n\n draftState.loading = false;\n};\n\nexport const fetchUserInformationSuccessReducer: CaseReducer<\n ContactsSavedSearchesState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const query: string | undefined =\n action.payload.settings.session_settings?.saved_contact_searches_filters;\n const pageNumber: number | undefined =\n action.payload.settings.session_settings?.saved_contact_serches_page_number;\n\n if (query) {\n draftState.query = query;\n }\n\n if (pageNumber) {\n draftState.pageNumber = pageNumber;\n }\n};\n","import React from 'react';\n\ninterface DropdownAddContextContext {\n dropdownVisible: boolean;\n setDropdownVisible: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nexport const DropdownAddContext = React.createContext<DropdownAddContextContext>({\n dropdownVisible: false,\n setDropdownVisible: () => {},\n});\n","import { createSelector } from 'reselect';\n//models\nimport { GridKeys } from '@optx/models/grid';\n//utils\nimport { preProcessSearch } from '@utils/search';\n//redux\nimport { selectFeatureState } from '../../selectFeature';\n\nexport const getSearchKey = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => preProcessSearch(state.searchkey[gridKey]));\n","import styled, { css } from 'styled-components';\nimport { Radio, Tag as $Tag } from 'antd';\nimport Icon from '@optx/components/common/Icon';\nimport { IconProps } from '@optx/components/common/Icon/Icon';\nimport { RadioButtonProps } from 'antd/lib/radio/radioButton';\nimport { RadioGroupProps, RadioProps } from 'antd/lib/radio';\n\nconst ContentContainer = styled.div`\n .profile-information__subtitle {\n margin: 22px 0 0 -16px;\n min-width: 390px;\n width: calc(100% + 32px);\n padding-top: 10px;\n border-top: 1px solid #d9d9d9;\n padding: 14px 54px 12px 16px;\n }\n\n .ant-typography {\n padding-bottom: 2px;\n }\n\n .ant-radio-group {\n width: 100%;\n\n .ant-radio-button-wrapper {\n width: 100%;\n }\n }\n`;\n\ninterface RadioButtonProp extends RadioButtonProps {\n checked?: boolean;\n}\n\nconst RadioButton = styled(Radio.Button)<RadioButtonProp>`\n width: 42px !important;\n height: 42px !important;\n border-radius: 100% !important;\n padding: 0 !important;\n border-width: 1px !important;\n\n ${({ checked }) => css`\n &:first-child {\n background: ${checked === true ? '#52C41A' : '#fff'};\n }\n &:last-child {\n background: ${checked === false ? '#F5222D' : '#fff'};\n }\n `}\n\n &::before {\n content: none !important;\n }\n\n span:last-child {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n width: 100%;\n\n .icon {\n margin: 0 !important;\n }\n }\n`;\n\nconst ThumbsIcon = styled(Icon)`\n width: 22px;\n height: 22px;\n color: #e8e8e8;\n`;\n\ninterface ThumbProps extends IconProps {\n checked?: boolean;\n}\n\nconst ThumbsUpIcon = styled(ThumbsIcon)<ThumbProps>`\n ${({ checked }) => css`\n color: ${checked === true ? '#fff' : '#ddd'};\n `}\n`;\n\nconst ThumbsDownIcon = styled(ThumbsIcon)<ThumbProps>`\n ${({ checked }) => css`\n color: ${checked === false ? '#fff' : '#ddd'};\n `}\n`;\n\nconst ScoreContainer = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 80%;\n margin: 15px auto;\n border: 1px solid #dee4ee;\n border-radius: 8px;\n padding: 10px;\n align-items: center;\n`;\n\nconst CustomRadio = styled(Radio)<RadioProps>`\n .ant-radio-inner {\n border-color: #1890ff !important;\n }\n`;\n\ninterface CustomRadioGroupProps extends RadioGroupProps {\n columns: number;\n}\n\nconst CustomRadioGroup = styled(Radio.Group)<CustomRadioGroupProps>`\n display: grid;\n ${({ columns }) => css`\n grid-template-columns: repeat(${columns}, 1fr);\n `}\n\n .ant-radio-wrapper {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n margin-right: 0;\n }\n\n .ant-radio-wrapper::after {\n position: absolute;\n content: '';\n background: #f5f5f5;\n height: 4px;\n width: 100%;\n top: 6px;\n }\n\n .ant-radio {\n z-index: 1;\n }\n`;\n\nconst Wrapper = styled.div`\n .edit-field--container {\n display: flex;\n }\n\n .edit-field--value {\n display: inline-block;\n width: 100%;\n\n span {\n display: flex;\n justify-content: flex-end;\n margin-right: 8px;\n }\n }\n\n &.psg-company {\n .edit-field--value {\n text-overflow: ellipsis;\n overflow: hidden;\n\n span {\n display: inline;\n }\n }\n }\n\n .flex-grow-1 {\n text-align: center;\n max-width: 70px;\n margin-left: auto;\n }\n\n .icon-pen {\n cursor: pointer;\n visibility: hidden;\n }\n\n &:hover {\n .icon-pen {\n visibility: visible;\n }\n }\n`;\n\nconst Tag = styled($Tag)`\n margin-top: 2px;\n margin-bottom: 2px;\n width: max-content;\n white-space: inherit;\n word-break: break-word;\n`;\n\nconst ContainerProfileBanner = styled.div`\n .edit-field--container {\n display: flex;\n justify-content: center;\n align-items: flex-end;\n gap: 5px;\n }\n\n .icon-pen {\n cursor: pointer;\n visibility: hidden;\n margin-bottom: 3px;\n }\n\n &:hover {\n .icon-pen {\n visibility: visible;\n }\n }\n`;\n\nexport default {\n RadioButton,\n ContentContainer,\n ThumbsUpIcon,\n ThumbsDownIcon,\n ScoreContainer,\n CustomRadioGroup,\n CustomRadio,\n Wrapper,\n Tag,\n ContainerProfileBanner,\n};\n","export default 'scheduledTouches';\n","import { HTMLAttributes } from 'react';\nimport { Dictionary } from 'lodash';\n// models\nimport { SortByRule } from '@models/table/sorting';\nimport { GridKeys } from '@optx/models/grid';\nimport { ColumnType, SorterResult, SortOrder } from 'antd/lib/table/interface';\nimport { GridSortMapping } from '@optx/features/grid/sort/state/interfaces';\n// constants\nimport { SORT_DESCENDING_BY_DEFAULT } from '@optx/constants/table/sort/defaultSort';\nimport { SORT_MAPPING } from '@optx/features/grid/sort/constants';\n\nexport interface HeaderCellAttributes extends HTMLAttributes<HTMLElement> {\n 'data-order-priority': number;\n}\n\nexport interface SortColumnsConfig {\n isMultiSort?: boolean;\n sortDirectionsKeys?: Array<string>;\n sortDirections?: Array<SortOrder>;\n}\n\nexport const defaultConfig: SortColumnsConfig = {\n // Reversed sort direction from default in ANTD table.\n sortDirections: ['descend', 'ascend'],\n};\n\n/**\n * Sort table columns.\n * @param columns table columns.\n * @param sorter sorter.\n * @param config Sort columns configuration with multi sort and default sort direction.\n * @param defaultOptxScore decided column which is default.\n * IMPORTANT: Make sure sortOrder is assigned for only one column, meaning that it is in the controlled mode.\n */\nexport const sortColumns = (\n columns: Array<ColumnType<any>>,\n sorter: Array<SortByRule<any>>,\n defaultOptxScore?: string,\n config: SortColumnsConfig = {}\n) => {\n if (!sorter.length) {\n let isControlled = false;\n let multipleScore = false;\n\n // Make sure sortOrder is assigned for only one column, meaning that it is in the controlled mode.\n return columns\n .filter(column => {\n if (column.dataIndex) {\n if (defaultOptxScore === 'il') {\n if (~(column.dataIndex as string).search('il_optx_score')) {\n if (multipleScore && defaultOptxScore !== 'il') {\n return null;\n }\n\n multipleScore = true;\n\n return column;\n }\n\n if (~(column.dataIndex as string).search('score')) {\n if (multipleScore && defaultOptxScore === 'il') {\n return null;\n }\n\n return null;\n }\n\n return column;\n }\n\n if (defaultOptxScore !== 'il') {\n if (\n ~(column.dataIndex as string).search('score') &&\n (column.dataIndex as string).search('score_v3')\n ) {\n if (multipleScore && defaultOptxScore !== 'il') {\n return null;\n }\n\n multipleScore = true;\n\n return column;\n }\n\n if (~(column.dataIndex as string).search('il_optx_score')) {\n if (multipleScore && defaultOptxScore === 'il') {\n return null;\n }\n\n return null;\n }\n\n return column;\n }\n\n return column;\n }\n })\n .map(column => {\n if (!isControlled && column.sorter) {\n const newCol = { ...column };\n newCol.sortOrder = null;\n isControlled = true;\n\n return newCol;\n }\n\n return column;\n });\n }\n\n const mergedConfig: SortColumnsConfig = {\n ...defaultConfig,\n ...config,\n };\n const { isMultiSort, sortDirections, sortDirectionsKeys } = mergedConfig;\n\n let multipleScore = false;\n\n return columns\n .filter(column => {\n if (column.dataIndex) {\n if (defaultOptxScore === 'il') {\n if (~(column.dataIndex as string).search('il_optx_score')) {\n if (multipleScore && defaultOptxScore !== 'il') {\n return null;\n }\n\n multipleScore = true;\n\n return column;\n }\n\n if (~(column.dataIndex as string).search('score')) {\n if (multipleScore && defaultOptxScore === 'il') {\n return null;\n }\n\n return null;\n }\n\n return column;\n }\n\n if (defaultOptxScore !== 'il') {\n if (~(column.dataIndex as string).search('il_optx_score')) {\n if (multipleScore && defaultOptxScore !== 'il') {\n return null;\n }\n\n return null;\n }\n\n if (\n ~(column.dataIndex as string).search('score') &&\n (column.dataIndex as string).search('score_v3')\n ) {\n if (multipleScore && defaultOptxScore === 'il') {\n return null;\n }\n\n multipleScore = true;\n\n return column;\n }\n\n return column;\n }\n\n return column;\n }\n })\n .map((column, columnIndex) => {\n const index = sorter.findIndex(sortItem => {\n if (sortItem.id === 'created_at' && column.dataIndex === 'date') return true;\n\n return sortItem.id === column.dataIndex;\n });\n const columnSort = index !== -1 ? sorter[index] : null;\n const newColumn: ColumnType<any> = { ...column };\n\n // Update default sort direction.\n if (sortDirectionsKeys && sortDirectionsKeys.includes(newColumn.dataIndex as string)) {\n newColumn.sortDirections = sortDirections;\n }\n\n if (column.sorter) {\n if (isMultiSort) {\n /**\n * On multi-sort is important to add multiple option in sorter for all sorted columns,\n * otherwise we get inconsistent sorting response from table.\n */\n newColumn.sorter = { multiple: 1 };\n } else {\n newColumn.sorter = true;\n }\n }\n\n // Update Sorting.\n if (columnSort) {\n newColumn.sortOrder = columnSort.desc ? 'descend' : 'ascend';\n\n return newColumn;\n }\n\n return newColumn;\n });\n};\n\n/**\n * Map ANTD table sorter to sorting rules.\n * @param nextSorting sorting form ANTD table.\n * The sort is array on multisort when clicking on a column included already in sort prior to clicking it.\n * When adding a new column in multi sort or single sort the columnSort is the sorting object.\n * @param sorting current sorting.\n * @param isMultiSort is multiple column sort.\n */\nexport const mapSorting = (\n nextSorting: SorterResult<any> | Array<SorterResult<any>>,\n sorting: Array<SortByRule<any>>,\n keywordSearch?: string | null,\n defaultSort?: Array<SortByRule<any>>,\n isMultiSort?: boolean,\n onlyTwoStates?: boolean\n) => {\n /**\n * Multisort\n * Next sorting is a list when:\n * - new item is added\n * - item is removed and there are two or more items.\n * - item order in sorting has been changed.\n */\n if (Array.isArray(nextSorting)) {\n return {\n sortBy: mapMultiSortList(sorting, nextSorting),\n };\n }\n\n // Only one item in sorting.\n const columnId = nextSorting.field as string;\n\n // if (isMultiSort) {\n // // Toggle item sorting. Don't allow sorting removal.\n // return [{ id: columnId, desc: nextSorting.order === 'descend' }];\n // }\n\n if (keywordSearch && keywordSearch !== '') {\n // Sorting by relevance when we only have sorting by one column and filter by keyword applied\n if (nextSorting?.order) {\n return {\n sortBy: [{ id: columnId, desc: nextSorting?.order === 'descend' }],\n };\n }\n\n if (onlyTwoStates) {\n return {\n sortBy: [{ id: columnId, desc: nextSorting?.order === 'descend' }],\n };\n }\n\n // Handle single sort.\n // New sort item has been clicked and load default order set in columns.\n return { sortBy: defaultSort };\n }\n\n if (\n SORT_DESCENDING_BY_DEFAULT.includes(nextSorting.field as string) &&\n !isMultiSort &&\n !onlyTwoStates\n ) {\n return {\n sortBy: [{ id: columnId, desc: nextSorting.order !== 'ascend' }],\n };\n }\n\n return {\n sortBy: [{ id: columnId, desc: nextSorting?.order === 'descend' }],\n };\n};\n\n/**\n * Map multi sort list.\n * This function also fixes sorting order in antd table.\n * By default the order is taken each time by column order with the last clicked sort item at the end.\n * @param sorting current sorting.\n * @param nextSorting next sorting in grid.\n * @returns next mapped sorting.\n */\nfunction mapMultiSortList(sorting: Array<any>, nextSorting: Array<SorterResult<any>>) {\n let newSorting: Array<SortByRule<any>> = [];\n\n if (sorting.length < nextSorting.length) {\n // Item has been added.\n const item = nextSorting[nextSorting.length - 1];\n\n newSorting = [\n ...sorting,\n {\n id: item.column?.dataIndex as string,\n desc: item.order === 'descend',\n },\n ];\n } else if (sorting.length > nextSorting.length) {\n // Item has been removed.\n const newSortingKeys = nextSorting.reduce<Dictionary<boolean>>((accumulator, sortItem) => {\n const newAccumulator = accumulator;\n newAccumulator[sortItem.column?.dataIndex as string] = true;\n\n return newAccumulator;\n }, {});\n\n newSorting = sorting.filter(item => newSortingKeys[item.id]);\n } else {\n // An item in list have been changed. It is added by default at the end of the list.\n const lastClickedItem = nextSorting[nextSorting.length - 1];\n\n // Kepp the old order of sorting items.\n return sorting.map(item => {\n if (item.id === lastClickedItem.column?.dataIndex) {\n return {\n ...item,\n desc: lastClickedItem.order === 'descend',\n };\n }\n\n return item;\n });\n }\n\n return newSorting;\n}\n\n/**\n * Returns the sorting configuration for the specified grid key.\n * @param gridKey - The key of the grid for which the sorting configuration is to be retrieved.\n * @returns The sorting configuration for the specified grid key, or undefined if not found.\n */\nexport const getSortGrid = (gridKey: GridKeys): GridSortMapping | undefined =>\n SORT_MAPPING.find(gridSort => gridSort.gridKey === gridKey);\n","export const FAVORITE_LIST_ID = 'favorites';\nexport const FAVORITE_LIST_NAME = 'Favorites';\nexport const FAVORITE_LIST_OWNER = 'OPTX';\nexport const FAVORITE_LIST_SELECT_OPTIONS = [\n {\n value: 'recently',\n label: 'Recently accessed',\n },\n {\n value: 'title-asc',\n label: 'Name A to Z',\n },\n {\n value: 'title-desc',\n label: 'Name Z to A',\n },\n {\n value: 'owner',\n label: 'Owner',\n },\n];\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { CompanyUserValue } from '@models/Company';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { APIBoolean } from '@optx/models/api/generic';\n// services\nimport { UserService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { mapCompanyPropName } from '@utils/mapCompanyPropName';\nimport { mapCompanyInfoData } from '@optx/utils/company';\n// redux\nimport {\n actions as auditActions,\n selectors as auditSelectors,\n} from '@features/company/audit-trail/state';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport * as actions from './actions';\nimport { actions as presentantionActions } from '../opportunity-presentation';\n\nexport function* updateCompanyUserValuesSaga(\n action: PayloadAction<CompanyUserValue, any, SuccessErrorCallback>\n) {\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n\n try {\n const { meta: callback } = action;\n const payload = mapCompanyInfoData({\n data: action.payload,\n });\n const res: AxiosResponse = yield call(\n UserService.updateCompanyUserValues,\n payload as unknown as CompanyUserValue\n );\n\n if (res.data) {\n yield put(actions.updateCompanyUserValuesSuccess(action.payload));\n\n yield put(\n actions.updateCompanyEmployeeGrowthPercentage({\n companyId: action.payload.companyId,\n empGrowthPercent: res.data.emp_growth_percent,\n })\n );\n\n callback && callback(true);\n\n NotificationService.success(\n `Company ${mapCompanyPropName(action.payload.fieldKey)} updated successfully!`\n );\n\n yield put(actions.updateCompanyOptxScoreSuccess(res.data));\n yield put(\n actions.updateCompanyTrendingLines({\n employeeCountTrends: res.data?.employee_count_trends,\n optxScoreTrends: res.data?.optx_score_trends,\n newOptxScoreTrends: res.data?.optx_score_v3_trends,\n companyId: action.payload.companyId,\n })\n );\n\n if (action.payload.fieldKey === 'last_rev_update_amount') {\n // To update the score growth, we need to fetch the opportunities again\n yield put(presentantionActions.fetchOpportunityPresentation(action.payload.companyId));\n }\n\n if (action.payload.fieldKey === 'ebitda_amount') {\n // To update the score growth, we need to fetch the opportunities again\n yield put(presentantionActions.fetchOpportunityPresentation(action.payload.companyId));\n }\n\n if (action.payload.isFromHistory) {\n const pagination: PageInfo = yield select(auditSelectors.getPagination);\n const field: string = yield select(auditSelectors.getSearchQuery);\n const optx: APIBoolean = yield select(auditSelectors.getOPTX);\n const internal: APIBoolean = yield select(auditSelectors.getInternal);\n const startDate: string = yield select(auditSelectors.getStartDate);\n const endDate: string = yield select(auditSelectors.getEndDate);\n\n yield put(\n auditActions.fetchChangedCompanyFields({\n companyId: action.payload.companyId,\n pagination,\n field,\n internal,\n optx,\n startDate,\n endDate,\n })\n );\n }\n } else {\n NotificationService.error('Failed to update value!');\n }\n\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n } catch (error: any) {\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n\n NotificationService.error('Failed to update value try catch!');\n }\n}\n\nexport default function* userEnteredValuesSaga() {\n yield takeLatest(actions.updateCompanyUserValues, updateCompanyUserValuesSaga);\n}\n","import { createSelector } from 'reselect';\nimport queryString from 'query-string';\nimport { isEmpty, isEqual } from 'lodash';\n// interface\nimport { AppState } from '@optx/redux/interfaces';\nimport { SelectOption } from '@optx/models/Option';\nimport { SpecialFilterTag } from '@optx/models/tags';\nimport { OutReachFilterOptions } from '@optx/redux/company-outreach/filters/interfaces';\n// utils\nimport { generateUniqueKey } from '@optx/utils/uuid';\nimport mapFiltersToURLParams from '@optx/utils/filters/mapFiltersToURLParams';\nimport mapTags from '@optx/utils/filters/mapTags';\n// redux\nimport { selectors as filtersSelectors } from '@redux/company/filters';\nimport { selectors as filterSourcingOutReachSelectors } from '@redux/company-outreach/filters';\nimport { getSearchKey as searchKey } from '@optx/features/grid/searchkey/state/selectors';\n\n// specific selectors\nconst selectCompaniesOutReachState = (state: AppState) => state.companyOutSourcing;\n\nexport const getFilters = createSelector(\n selectCompaniesOutReachState,\n state => state.filter.filter\n);\nexport const getCustomClearedFilter = createSelector(\n selectCompaniesOutReachState,\n state => state.filter.customClearedfilter\n);\nexport const getClearedFilter = createSelector(\n selectCompaniesOutReachState,\n state => state.filter.clear\n);\n\nexport const getSourcingFilters = createSelector(\n selectCompaniesOutReachState,\n state => state.filter.sourcingOutReachFilterOptions\n);\n\nexport const searchHasValues = createSelector(\n searchKey('outreachDetails'),\n getFilters,\n (searchKey, filter) => !!searchKey || !isEmpty(filter)\n);\n\nexport const getDefaultDateRange = createSelector(\n selectCompaniesOutReachState,\n state => state.filter.dateFilterDefault\n);\n\nexport const getDefaultAnalystId = createSelector(\n selectCompaniesOutReachState,\n state => state.filter.analystIdsFilterDefault\n);\n\nexport const getDefaultColumnName = createSelector(\n selectCompaniesOutReachState,\n state => state.filter.columnNamesFilterDefault\n);\n\nexport const showCustomClearedFilter = createSelector(\n searchKey('outreachDetails'),\n filtersSelectors.getFiltersMap,\n getFilters,\n getCustomClearedFilter,\n getSourcingFilters,\n getDefaultDateRange,\n getDefaultAnalystId,\n getDefaultColumnName,\n (\n searchKey,\n normalizedFilters,\n filter,\n customClearedFilter,\n sourcingFilters,\n dateRange,\n defaultAnalystId,\n defaultColumnName\n ) => {\n if (searchKey) {\n return true;\n }\n\n const normalizedFilter = { ...filter };\n\n if (normalizedFilter.saved_list_id !== undefined) {\n delete normalizedFilter.saved_list_id;\n }\n\n if (normalizedFilter.ddate) {\n const { ddate } = normalizedFilter;\n\n if (isEqual(ddate, dateRange)) {\n delete normalizedFilter.ddate;\n }\n }\n\n const filterURLParams = mapFiltersToURLParams(normalizedFilters, normalizedFilter);\n const filterURL = {\n ...filterURLParams,\n geo_range: undefined,\n };\n const filterQuery = queryString.stringify(filterURL, { arrayFormat: 'comma' });\n\n const customFilterURLParams = mapFiltersToURLParams(normalizedFilters, customClearedFilter);\n const customFilterURL = {\n ...customFilterURLParams,\n geo_range: undefined,\n };\n const customFilterQuery = queryString.stringify(customFilterURL, {\n arrayFormat: 'comma',\n });\n\n if ((sourcingFilters?.analyst_id as unknown as Array<SelectOption<string>>)?.length === 0) {\n return false;\n }\n\n if (sourcingFilters?.ddate === undefined) {\n return false;\n }\n\n const isSourcingFilters =\n !isEqual(sourcingFilters?.analyst_id, defaultAnalystId) ||\n !isEqual(sourcingFilters?.column_name, defaultColumnName) ||\n !isEqual(sourcingFilters?.ddate, dateRange);\n\n return filterQuery !== customFilterQuery || isSourcingFilters;\n }\n);\n\nexport const getLabel = createSelector(selectCompaniesOutReachState, state => state.filter.label);\n\nexport const getTags = createSelector(\n getFilters,\n filtersSelectors.getCompanyFilters,\n getClearedFilter,\n searchKey('outreachDetails'),\n getSourcingFilters,\n getLabel,\n getDefaultDateRange,\n filterSourcingOutReachSelectors.getSourcingFiltersOptionsDate,\n getDefaultAnalystId,\n getDefaultColumnName,\n (\n filter,\n filterSources,\n clearedFilter,\n searchKey,\n sourcingFilters,\n label,\n defaultDateRange,\n optionsDate,\n defaultAnalystId,\n defaultColumnName\n ) => {\n const optionsDateLabel = optionsDate?.find(\n (item: { start: string; end: string }) =>\n (sourcingFilters?.ddate as unknown as [string | null] | undefined)?.includes(item.start) &&\n (sourcingFilters?.ddate as unknown as [string | null] | undefined)?.includes(item.end)\n );\n\n const customSourcingFilter = {\n ...sourcingFilters,\n ddate: sourcingFilters?.ddate,\n dateLabel: label || optionsDateLabel?.label,\n defaultAnalystId,\n defaultColumnName,\n defaultDateRange,\n };\n const tags = mapTags(\n filter,\n filterSources,\n clearedFilter,\n undefined,\n undefined,\n customSourcingFilter as unknown as OutReachFilterOptions\n );\n\n if (searchKey) {\n tags.unshift({\n filter: 'keyword' as SpecialFilterTag,\n uniqueKey: generateUniqueKey(),\n label: 'Keyword',\n values: [\n {\n value: searchKey,\n },\n ],\n });\n }\n\n return tags;\n }\n);\n","import { Dictionary } from 'lodash';\n\nexport const ConvertFromAPIToText: Dictionary<string> = {\n // Recent tocuh\n '6_weeks_to_6_months_ago': 'OVER 6 WKS',\n more_than_6_months_ago: 'OVER 6 MONTHS',\n no_touches: 'NEVER TOUCHED',\n // Future touch\n in_6_weeks_to_6_months: 'OVER 6 WKS',\n in_more_than_6_months: 'OVER 6 MONTHS',\n within_6_weeks: 'WITHIN 6 WKS',\n '8_14_days_away': '8 TO 14 DAYS AWAY',\n past_due: 'PAST DUE',\n next_30_days: 'NEXT 30 DAYS',\n next_7_days: 'NEXT 7 DAYS',\n};\n\nexport const cardTitles: Dictionary<string> = {\n card1: 'Without a Recent Touch',\n card2: 'With a Scheduled Touch',\n card3: 'My Favorites Scheduled Touches',\n card4: 'Scheduled Touches in the Next 30 Days',\n};\n","export const NEXT_STEPS_OPINION_ENDPOINT = '/search/next_steps_opinion';\n\nexport const GET_ET_COMPANIES_ENDPOINT = '/search/get_et_companies';\n\nexport const COMPANY_PRODUCT_CATEGORY_ENDPOINT = '/search/company_product_category';\n\nexport const COMPANY_RATIONALE_ENDPOINT = '/search/rationale';\n\nexport const COMPANY_NAME_ENDPOINT = '/search/company_name';\n\nexport const LAST_INVESTORS_ENDPOINT = '/search/last_investors';\n\nexport const COMPANY_TAG_ENDPOINT = '/search/company_tag';\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { mapScheduledTouchesTags } from '@optx/utils/filters/mapTags';\nimport { ScheduledTouchesFilterTags } from './interfaces';\n\nexport const scheduledTouchesState = (state: AppState) => state.scheduledTouches;\n\nexport const getPagination = createSelector(scheduledTouchesState, state => state.pagination);\nexport const getSortValue = createSelector(scheduledTouchesState, state => state.sortBy);\nexport const getSortBy = createSelector(\n scheduledTouchesState,\n userInformationSelectors.getDefaultScore,\n (state, defaultOptxScore) => {\n const getSort = state.sortBy.split('.');\n\n const sort = getSort.map((item: string) => {\n if (item === 'score') {\n if (defaultOptxScore === 'il') {\n return 'il_optx_score';\n }\n\n return 'score';\n }\n\n if (item === 'il_optx_score') {\n if (defaultOptxScore === 'il') {\n return 'il_optx_score';\n }\n\n return 'score';\n }\n\n return item;\n });\n\n return [\n {\n id: sort[0],\n desc: sort[1] === 'desc',\n },\n ] as SortByRule<string>[];\n }\n);\nexport const getStageType = createSelector(scheduledTouchesState, state => state.stageType);\nexport const getTouchType = createSelector(scheduledTouchesState, state => state.touchType);\nexport const getRankType = createSelector(scheduledTouchesState, state => state.rankType);\nexport const getAllStageTypes = createSelector(\n scheduledTouchesState,\n state => state.dashboard.stages\n);\nexport const getAllTouchTypes = createSelector(\n scheduledTouchesState,\n state => state.dashboard.touchTypes\n);\nexport const getAllRankTypes = createSelector(\n scheduledTouchesState,\n state => state.dashboard.ranks\n);\nexport const getDates = createSelector(scheduledTouchesState, state => state.dashboard.inputDates);\nexport const getCards = createSelector(scheduledTouchesState, state => state.dashboard.cards);\nexport const getTabs = createSelector(scheduledTouchesState, state => state.dashboard.tabs);\nexport const getSelectedTab = createSelector(scheduledTouchesState, state => state.selectedTab);\nexport const getSelectedPeriod = createSelector(\n scheduledTouchesState,\n state => state.selectedPeriod\n);\nexport const getSelectedDate = createSelector(\n scheduledTouchesState,\n state => state.selectedDateRage\n);\n\nexport const getTouches = createSelector(scheduledTouchesState, state => state.touches.data);\nexport const getTotalTouches = createSelector(\n scheduledTouchesState,\n state => state.remainedTouches\n);\nexport const getTabsCount = createSelector(scheduledTouchesState, state => state.count.data?.tabs);\nexport const getCardsCount = createSelector(\n scheduledTouchesState,\n state => state.count.data?.cards\n);\n\nexport const getTags = createSelector(\n getStageType,\n getTouchType,\n getRankType,\n getAllStageTypes,\n getSelectedPeriod,\n getSelectedDate,\n (stageType, touchType, rankType, allStageTypes, selectedPeriod, selectedDateRange) => {\n const stageTypeName = allStageTypes.find(item => item.value === stageType)?.name;\n\n const scheduledTouchesFiltersObject: ScheduledTouchesFilterTags = {\n stageType: stageTypeName || '',\n touchType,\n rankType,\n selectedPeriod,\n selectedDateRange,\n };\n const tags = mapScheduledTouchesTags(scheduledTouchesFiltersObject);\n\n return tags;\n }\n);\n\nexport const showClearedFilter = createSelector(getTags, tags => {\n if (tags.length > 0) {\n return true;\n }\n\n return false;\n});\n\nexport const isDashboardLoading = createSelector(\n scheduledTouchesState,\n state => state.dashboard.loading\n);\nexport const isTouchesLoading = createSelector(\n scheduledTouchesState,\n state => state.touches.loading\n);\nexport const isTouchesCountLoading = createSelector(\n scheduledTouchesState,\n state => state.count.loading\n);\nexport const shouldFetchTouches = createSelector(\n scheduledTouchesState,\n state => !state.touches.loading && !state.touches.fetchedAt\n);\nexport const isLoading = createSelector(\n isDashboardLoading,\n isTouchesLoading,\n isTouchesCountLoading,\n (isDashboardLoading, isTouchesLoading, isTouchesCountLoading) =>\n isDashboardLoading || isTouchesCountLoading || isTouchesLoading\n);\n\nexport const getInsight = createSelector(scheduledTouchesState, state => state.insight);\nexport const getInsightTotal = createSelector(scheduledTouchesState, state => state.insightTotal);\n","import { createSelector } from 'reselect';\nimport { AppState } from '../interfaces';\n\nexport const getRouter = (state: AppState) => state.router;\n\nexport const getLocation = createSelector(getRouter, state => state.location);\n","import { select } from 'redux-saga/effects';\nimport { matchPath } from 'react-router-dom';\nimport * as selectors from './selectors';\n\nexport function* matchesLocation(paths: string[]) {\n const location: Location = yield select(selectors.getLocation);\n\n const matcher = paths.some(path => !!matchPath(location.pathname, path));\n\n return matcher;\n}\n","import { selectors as fetchSelectors } from '@redux/feature/fetch';\nimport { EquityTouchDatabaseMatch } from '@models/equityTouch';\nimport { CompanyIndividualEditState, IndividualEditFieldType } from './interfaces';\n// utils\nimport { getYearsList } from '@utils/date';\n\nexport const isLoading = (state: CompanyIndividualEditState) =>\n fetchSelectors.isLoadingSelector(state);\n\nexport const getError = (state: CompanyIndividualEditState) => fetchSelectors.errorSelector(state);\n\nexport const isSubmitting = (state: CompanyIndividualEditState) => !!state.data && state.loading;\n\nexport const failedLoadingInfo = (state: CompanyIndividualEditState) =>\n !state.data && !!state.error;\nexport const getData = (state: CompanyIndividualEditState) => state.data;\n\nexport const getMultipleOptions =\n (fields: IndividualEditFieldType[]) => (state: CompanyIndividualEditState) => {\n const options: Partial<{\n [key in IndividualEditFieldType]: { value: string; label: string }[];\n }> = {};\n\n fields.forEach(field => {\n options[field] = getSelectOptionsByField(field)(state);\n });\n\n return options;\n };\n\nexport const getSelectOptionsByField =\n (field: IndividualEditFieldType) => (state: CompanyIndividualEditState) => {\n if (!state.data || !state.data[field]) {\n return [];\n }\n\n return state.data[field].received_values.map(item => ({\n value: (item as EquityTouchDatabaseMatch).itemId,\n label: (item as EquityTouchDatabaseMatch).text,\n }));\n };\n\nexport const shouldInitialFetch = (state: CompanyIndividualEditState) =>\n !state.loading && !state.fetchedAt;\n\nexport const getYearFoundedOptions = () => getYearsList();\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const APPLY_VIEW = createFeatureActionType(featureName, 'APPLY_VIEW');\n\nexport const APPLY_VIEW_SUCCESS = createFeatureActionType(featureName, 'APPLY_VIEW_SUCCESS');\n\nexport const RESET_VIEW_TO_SOURCING_ORDER = createFeatureActionType(\n featureName,\n 'RESET_VIEW_TO_SOURCING_ORDER'\n);\n\nexport const CHECK_VIEW = createFeatureActionType(featureName, 'CHECK_VIEW');\n","import { ViewOption } from '@optx/models/search';\nimport { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport { GridPayload, GridKeys } from '@optx/models/grid';\n\nexport const applyView = createAction<GridPayload<ViewOption>>(types.APPLY_VIEW);\n\nexport const applyViewSuccess = createAction<ViewOption>(types.APPLY_VIEW_SUCCESS);\n\nexport const resetViewToSourcingOrder = createAction(types.RESET_VIEW_TO_SOURCING_ORDER);\n\nexport const checkView = createAction<GridKeys>(types.CHECK_VIEW);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n// models\nimport { GridPayload } from '@optx/models/grid';\nimport { ViewOption, ViewSuccess } from '@optx/models/search';\n// constants\nimport { GRID_VIEW_KEYS, VIEW_INITIAL_STATE } from '@optx/constants/grid';\n// utils\nimport { generateGridReducerInitialState } from '@optx/utils/grid';\n// redux\nimport { applyView } from './actions';\nimport { ViewState } from './interfaces';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches';\nimport { actions as searchActions } from '@features/grid/search';\n\nconst initialState: ViewState = generateGridReducerInitialState(GRID_VIEW_KEYS, VIEW_INITIAL_STATE);\n\nconst applyViewReducer: CaseReducer<ViewState, PayloadAction<GridPayload<ViewOption>>> = (\n draftState,\n action\n) => {\n const { gridKey, data } = action.payload;\n\n draftState[gridKey] = { id: data.unique_id, label: data.title };\n};\n\nconst applyViewSuccessReducer: CaseReducer<ViewState, PayloadAction<ViewSuccess>> = (\n draftState,\n action\n) => {\n const { id, label, pageAlias } = action.payload;\n\n if (pageAlias === 'advancedSearch' || pageAlias === null) {\n draftState.advancedSearch.id = id;\n draftState.advancedSearch.label = label;\n }\n\n if (pageAlias === 'myCompanies') {\n draftState.myCompanies.id = id;\n draftState.myCompanies.label = label;\n }\n\n if (pageAlias === 'companyOutReach') {\n draftState.outreachDetails.id = id;\n draftState.outreachDetails.label = label;\n }\n\n if (pageAlias === 'watchList' || pageAlias === 'userLists' || pageAlias === 'sourceScrubLists') {\n draftState.lists.id = id;\n draftState.lists.label = label;\n }\n};\n\n// this is for the case when we rename/delete saved search and access another saved search from the list\n// we want to make sure that previous saved search label that is used in useRefreshView\n// is removed from redux store to not to trigger useRefreshView incorrectly\n\nconst loadSavedSearchReducer: CaseReducer<ViewState> = draftState => {\n draftState.advancedSearch.label = null;\n};\n\nconst reducer = createReducer<ViewState>(initialState, builder => {\n builder.addCase(applyView, applyViewReducer);\n builder.addCase(savedSearchesActions.applyViewSuccess, applyViewSuccessReducer);\n builder.addCase(searchActions.loadSavedSearch, loadSavedSearchReducer);\n});\n\nexport default reducer;\n","import { call, put, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\nimport { Dictionary } from 'lodash';\n// models\nimport { GridPayload } from '@optx/models/grid';\nimport { SearchPayloadRequest } from '@models/api/contacts';\nimport { ViewOption } from '@models/search';\nimport { PreselectedFilter } from '@models/filters';\nimport { UpdateUserSettingsPayload } from '@models/api/user';\nimport { PageInfo } from '@models/table/Pagination';\nimport { SortByRule } from '@models/table/sorting';\n// utils\nimport { mapSortQuery, hasFilters, preProcessSearch } from '@utils/search';\n// redux\nimport {\n selectors as userInformationSelectors,\n actions as userInformationActions,\n} from '@redux/user/information';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as searchKeySelectors } from '@features/grid/searchkey';\nimport { actions as searchActions } from '@features/grid/search';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches';\nimport { actions as columnActions } from '@features/grid/columns';\nimport { searchCompanies, searchCompaniesFail } from '@features/grid/search/state/sagasReusable';\nimport { getFiltersQuery } from '@redux/company/search/search/sagasReusable';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { selectors as searchTypeSelectors } from '@optx/features/grid/search-type';\n\nexport function* applyViewSaga(action: PayloadAction<GridPayload<ViewOption>>) {\n const {\n data: {\n columns,\n column_order: columnOrder,\n pinned_columns: pinnedColumns,\n filters: viewFilters,\n searchKey: viewSearchKey,\n sortBy,\n search_criteria: searchCriteria,\n unique_id: id,\n title,\n search_info: searchInfo,\n },\n gridKey,\n } = action.payload;\n\n console.log('advancedSearchApplyViewSaga action: ', action);\n console.log('advancedSearchApplyViewSaga gridKey function return: ', gridKey);\n\n if (!gridKey) return;\n\n const searchType: string = yield select(searchTypeSelectors.getSearchType('advancedSearch'));\n const pagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const userPageNumber: number = yield select(userInformationSelectors.getResultsPageNumber);\n const isCombinedSearch = searchInfo?.type === 'combined';\n let filter: Dictionary<PreselectedFilter> | undefined;\n let searchKey: string = yield select(searchKeySelectors.getSearchKey('advancedSearch'));\n let isSimilarCompaniesSavedSearch = false;\n\n if (hasFilters(searchCriteria) || id === 'default') {\n const parsedFilters = queryString.parse(searchCriteria, { arrayFormat: 'comma' });\n\n if (parsedFilters.company_id) {\n isSimilarCompaniesSavedSearch = true;\n const viewFiltersCustom = {\n ...viewFilters,\n similarCompanies: {\n label: '',\n value: parsedFilters.company_id.toString(),\n },\n };\n filter = viewFiltersCustom;\n searchKey = viewSearchKey ? preProcessSearch(viewSearchKey) : '';\n } else {\n filter = viewFilters;\n searchKey = viewSearchKey ? preProcessSearch(viewSearchKey) : '';\n }\n }\n\n if (!hasFilters(searchCriteria) && viewSearchKey) {\n filter = yield select(filterSelectors.getFilter('advancedSearch'));\n searchKey = viewSearchKey ? preProcessSearch(viewSearchKey) : '';\n }\n\n yield put(\n columnActions.updateColumn({ columns, columnOrder, pinnedColumns, gridName: 'advancedSearch' })\n );\n\n if (isCombinedSearch || filter || sortBy) {\n const currentSortBy: SortByRule<any>[] = yield select(\n sortSelectors.getSorting('advancedSearch')\n );\n const currentFilter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter('advancedSearch')\n );\n const customClearedFilter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getCustomClearedFilter(gridKey)\n );\n\n let filterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n isCombinedSearch ? customClearedFilter : filter || currentFilter\n );\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n fromSavedList: typeof id === 'number' ? id : undefined,\n listType: searchInfo?.type || '',\n filter: filterQuery,\n pagination: {\n ...pagination,\n pageNumber: 1,\n },\n sortBy: sortBy || currentSortBy,\n };\n\n const sessionSettings: Partial<UpdateUserSettingsPayload> = {};\n\n if (sortBy) {\n const sortQuery = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n sessionSettings.company_sorting = sortQuery;\n }\n\n if (columns !== null) {\n sessionSettings.company_display_columns = columns;\n\n if (columnOrder) {\n sessionSettings.company_column_order = columnOrder;\n }\n }\n\n if (pinnedColumns !== null) {\n sessionSettings.company_pinned_columns = pinnedColumns;\n }\n\n const pageNumberChanged = searchData.pagination.pageNumber !== userPageNumber;\n\n if (pageNumberChanged) {\n sessionSettings.search_results_page_number = searchData.pagination.pageNumber;\n }\n\n const updateSession =\n filter && !sortBy && !columns && !pinnedColumns && !pageNumberChanged\n ? true\n : sessionSettings;\n\n try {\n yield call(\n searchCompanies,\n searchData,\n gridKey,\n filter || currentFilter,\n undefined,\n title,\n updateSession,\n undefined,\n isSimilarCompaniesSavedSearch\n );\n\n if (sortBy) {\n yield put(sortActions.changeSortSuccess({ gridKey, data: sortBy }));\n }\n\n if (isCombinedSearch || id !== 'default') {\n yield put(searchActions.saveSearchTitle({ gridKey, data: title }));\n } else {\n yield put(searchActions.saveSearchTitle({ gridKey, data: '' }));\n }\n\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey: 'advancedSearch',\n data: searchData.pagination,\n })\n );\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n } else {\n yield put(\n userInformationActions.updateUserSettings({\n company_display_columns: columns as string,\n company_column_order: columnOrder as string,\n company_pinned_columns: pinnedColumns as string,\n })\n );\n yield put(\n savedSearchesActions.applyViewSuccess({ id, label: title, pageAlias: 'advancedSearch' })\n );\n yield put(searchActions.saveSearchTitle({ gridKey, data: '' }));\n }\n}\n","import { call, put, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\nimport { Dictionary } from 'lodash';\n// models\nimport { AxiosResponse } from 'axios';\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { ViewOption, SearchStateData } from '@models/search';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { UpdateUserSettingsPayload } from '@optx/models/api/user';\nimport { GridPayload } from '@optx/models/grid';\nimport { GridKeys } from '@models/grid';\nimport { LogicOption } from '@models/Option';\nimport { PageInfo } from '@models/table/Pagination';\nimport { SortByRule } from '@models/table/sorting';\n// constants\nimport { myCompaniesPreselectedFilter } from '@optx/features/grid/filter/state/constants';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { UserService } from '@optx/services/api';\n// utils\nimport { mapSortQuery, hasFilters, preProcessSearch } from '@utils/search';\nimport { processCardList, parseSourceTagFilter } from '@optx/utils/myCompanies';\n// redux\nimport {\n selectors as userInformationSelectors,\n actions as userInformationActions,\n} from '@redux/user/information';\nimport {\n selectors as histogramSelectors,\n actions as histogramActions,\n} from '@features/grid/histograms';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as sortSelectors, actions as sortActions } from '@features/grid/sort';\nimport {\n selectors as filterCardsSelectors,\n actions as filterCardsActions,\n} from '@optx/redux/my-companies/filters-cards';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches';\nimport { actions as columnActions } from '@features/grid/columns';\nimport { getFiltersQuery } from '@redux/company/search/search/sagasReusable';\nimport { searchCompanies, searchCompaniesFail } from '@features/grid/search/state/sagasReusable';\nimport { selectors as paginationSelectors } from '@features/grid/pagination';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { selectors as searchTypeSelectors } from '@optx/features/grid/search-type';\n\nexport function* applyViewSaga(action: PayloadAction<GridPayload<ViewOption>>) {\n const {\n columns,\n column_order: columnOrder,\n pinned_columns: pinnedColumns,\n filters: viewFilters,\n searchKey: viewSearchKey,\n sortBy,\n search_criteria: searchCriteria,\n unique_id: id,\n title,\n search_info: searchInfo,\n } = action.payload.data;\n\n const gridKey: GridKeys = 'myCompanies';\n\n const currentFilter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter(gridKey)\n );\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridKey));\n const pagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const isCombinedSearch = searchInfo?.type === 'combined';\n const userPageNumber: number = yield select(\n userInformationSelectors.getMyCompaniesResultsPageNumber\n );\n let filter: Dictionary<PreselectedFilter> | undefined;\n let searchKey: string = yield select(searchSelectors.getSearchKey(gridKey));\n\n if (hasFilters(searchCriteria) || id === 'default') {\n filter = viewFilters;\n searchKey = viewSearchKey ? preProcessSearch(viewSearchKey) : '';\n }\n\n if (!hasFilters(searchCriteria) && viewSearchKey) {\n filter = yield select(filterSelectors.getClearedFilter(gridKey));\n searchKey = viewSearchKey ? preProcessSearch(viewSearchKey) : '';\n }\n\n yield put(columnActions.updateColumn({ columns, columnOrder, pinnedColumns, gridName: gridKey }));\n\n if (isCombinedSearch || filter || sortBy) {\n const currentSortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting(gridKey));\n const customClearedFilter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getCustomClearedFilter(gridKey)\n );\n const filterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n isCombinedSearch ? customClearedFilter : filter || currentFilter\n );\n const selectedCard: SearchStateData = yield select(filterCardsSelectors.getSelectedCard);\n const subFilter: string = yield select(filterCardsSelectors.getSubFilter);\n const searchCriteria = queryString.parse(action.payload.data.search_criteria, {\n arrayFormat: 'comma',\n }) as Dictionary<string[]>;\n // when applying a view we need to get the specific filters for that card.\n // unfortunately from api all the applied filters are returned for the card, instead of just the specific ones\n const cardFilters: Dictionary<string[]> = {\n source_tag_filter: ['et-1-0'],\n last_touch_date_days: selectedCard.filter?.last_touch_date_days,\n next_touch_date_days: selectedCard.filter?.next_touch_date_days,\n saved_list_id: selectedCard.filter?.saved_list_id,\n n_touch_date_with_past_due: selectedCard.filter?.n_touch_date_with_past_due,\n // hidden and specific filters for first card\n ...(selectedCard.id === 'card1' &&\n (!filterQuery.stage || selectedCard.filter?.stage) && {\n stage: searchCriteria?.stage || selectedCard.filter?.stage,\n }),\n ...(selectedCard.id === 'card1' &&\n selectedCard?.filter?.next_touch_date && {\n next_touch_date: searchCriteria?.next_touch_date,\n }),\n };\n\n if (filterQuery.source_tag_filter.length) {\n (filterQuery.source_tag_filter as string[]).forEach((sourceTagValue: string) => {\n if (\n // @ts-ignore\n sourceTagValue !== selectedCard.filter.source_tag_filter &&\n sourceTagValue !== 'et-1-0'\n ) {\n cardFilters.source_tag_filter.push(sourceTagValue);\n }\n });\n }\n\n // my companies will always show companies that are at least in equity touch\n // if a view is filtering for companies not in equity touch, remove\n // the filter value and display a message\n if (cardFilters.source_tag_filter.includes('et-0-1')) {\n cardFilters.source_tag_filter = cardFilters.source_tag_filter.filter(\n (value: string) => value !== 'et-0-1'\n );\n\n NotificationService.warn('Can only filter for companies that are at least in Equity Touch.');\n }\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n fromSavedList: typeof id === 'number' ? id : undefined,\n listType: searchInfo?.type || '',\n filter: subFilter\n ? {\n ...filterQuery,\n ...cardFilters,\n // @ts-ignore\n ...selectedCard.data[subFilter],\n query: searchKey,\n }\n : { ...filterQuery, ...cardFilters, query: searchKey },\n pagination: {\n ...pagination,\n pageNumber: 1,\n },\n sortBy: sortBy || currentSortBy,\n };\n\n const cardSearchFilter = { ...filterQuery, source_tag_filter: cardFilters.source_tag_filter };\n\n const sessionSettings: Partial<UpdateUserSettingsPayload> = {};\n\n if (sortBy) {\n const sortQuery = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n sessionSettings.my_companies_sorting = sortQuery;\n }\n\n if (columns !== null) {\n sessionSettings.my_companies_columns = columns;\n\n if (columnOrder) {\n sessionSettings.my_companies_column_order = columnOrder;\n }\n }\n\n if (pinnedColumns !== null) {\n sessionSettings.my_companies_pinned_columns = pinnedColumns;\n }\n\n const pageNumberChanged = searchData.pagination.pageNumber !== userPageNumber;\n\n if (pageNumberChanged) {\n sessionSettings.my_companies_results_page_number = searchData.pagination.pageNumber;\n }\n\n const updateSession =\n filter && !sortBy && !columns && !pinnedColumns && !pageNumberChanged\n ? true\n : sessionSettings;\n\n try {\n const selectedCardId: string = yield select(filterCardsSelectors.getSelectedCardId);\n const res: AxiosResponse<Dictionary<SearchStateData>> = yield call(\n UserService.fetchMyCompaniesCards,\n searchKey,\n searchType,\n cardSearchFilter,\n selectedCardId ? (selectedCardId as string) : 'card1'\n );\n\n if (res.data) {\n const cardsList = processCardList(res.data);\n\n yield put(filterCardsActions.fetchMyCompaniesCardsSuccess(cardsList));\n\n // we need to parse the source tag filter to save it in the store\n if (filter) {\n filter = {\n ...filter,\n source_tag_filter: parseSourceTagFilter(\n myCompaniesPreselectedFilter.source_tag_filter as LogicOption[],\n cardFilters.source_tag_filter\n ),\n };\n } else {\n filter = { ...currentFilter };\n }\n\n // @ts-ignore\n yield call(searchCompanies, searchData, gridKey, filter, undefined, title, updateSession);\n\n const allFiltersWithHistograms: string[] = yield select(\n histogramSelectors.allFiltersWithHistograms(gridKey)\n );\n\n yield put(\n histogramActions.fetchHistogramFilters(gridKey, filter || {}, allFiltersWithHistograms)\n );\n }\n\n if (sortBy) {\n yield put(sortActions.changeSortSuccess({ gridKey, data: sortBy }));\n }\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n } else {\n yield put(\n userInformationActions.updateUserSettings({\n my_companies_columns: columns as string,\n my_companies_column_order: columnOrder as string,\n my_companies_pinned_columns: pinnedColumns as string,\n })\n );\n yield put(savedSearchesActions.applyViewSuccess({ id, label: title, pageAlias: gridKey }));\n }\n}\n","import { call, put, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\nimport { Dictionary } from 'lodash';\n// models\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { ViewOption } from '@optx/models/search';\nimport { UpdateUserSettingsPayload } from '@optx/models/api/user';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { GridPayload } from '@optx/models/grid';\n// utils\nimport { mapSortQuery, hasFilters, preProcessSearch } from '@utils/search';\n// redux\nimport { selectors as listsSelectors } from '@redux/lists/details';\nimport {\n selectors as userInformationSelectors,\n actions as userInformationActions,\n} from '@redux/user/information';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { actions as columnActions } from '@features/grid/columns';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { searchCompanies, searchCompaniesFail } from '@features/grid/search/state/sagasReusable';\nimport { getFiltersQuery } from '@redux/company/search/search/sagasReusable';\nimport { selectors as searchTypeSelectors } from '@optx/features/grid/search-type';\n\nexport function* applyViewSaga(action: PayloadAction<GridPayload<ViewOption>>) {\n const {\n columns,\n column_order: columnOrder,\n pinned_columns: pinnedColumns,\n filters: viewFilters,\n searchKey: viewSearchKey,\n sortBy,\n search_criteria: searchCriteria,\n unique_id: id,\n title,\n search_info: searchInfo,\n } = action.payload.data;\n\n const listId: string = yield select(listsSelectors.getRouteListId);\n const isSourceScrubRoute: boolean = yield select(listsSelectors.isSourceScrubRoute);\n const gridKey = 'lists';\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridKey));\n const pagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const isCombinedSearch = searchInfo?.type === 'combined';\n const userSessionSettingsUserListPageNumber: number = yield select(\n userInformationSelectors.getUserListSearchesResultsPageNumber\n );\n let filter: Dictionary<PreselectedFilter> | undefined;\n let searchKey: string = yield select(searchSelectors.getSearchKey(gridKey));\n\n if (hasFilters(searchCriteria) || id === 'default') {\n filter = viewFilters;\n searchKey = viewSearchKey ? preProcessSearch(viewSearchKey) : '';\n }\n\n if (!hasFilters(searchCriteria) && viewSearchKey) {\n filter = yield select(filterSelectors.getClearedFilter(gridKey));\n searchKey = viewSearchKey ? preProcessSearch(viewSearchKey) : '';\n }\n\n yield put(columnActions.updateColumn({ columns, columnOrder, pinnedColumns, gridName: 'lists' }));\n\n if (isCombinedSearch || filter || sortBy) {\n const currentSortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting(gridKey));\n\n if (!filter) {\n filter = yield select(filterSelectors.getFilter(gridKey));\n }\n\n const customClearedFilter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getCustomClearedFilter(gridKey)\n );\n\n // for old saved searches it's possible to have watch list id saved.\n // need to reset the corresponding list id filter, especially for source scrub lists\n filter = {\n ...(isCombinedSearch ? { ...customClearedFilter } : { ...filter }),\n ...(isSourceScrubRoute\n ? { ss_list_id: listId, saved_list_id: undefined }\n : { saved_list_id: listId, ss_list_id: undefined }),\n };\n\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(\n getFiltersQuery,\n filter\n );\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n fromSavedList: typeof id === 'number' ? id : undefined,\n listType: searchInfo?.type || '',\n filter: filterQuery,\n pagination: {\n ...pagination,\n pageNumber: 1,\n },\n sortBy: sortBy || currentSortBy,\n };\n\n const sessionSettings: Partial<UpdateUserSettingsPayload> = {};\n\n if (sortBy) {\n const sortQuery = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n sessionSettings.user_list_sorting = sortQuery;\n }\n\n if (columns !== null) {\n sessionSettings.user_list_display_columns = columns;\n\n if (columnOrder) {\n sessionSettings.user_list_column_order = columnOrder;\n }\n }\n\n if (pinnedColumns !== null) {\n sessionSettings.user_list_pinned_columns = pinnedColumns;\n }\n\n const shouldUpdateUserListPageNumberSettings =\n isSourceScrubRoute &&\n searchData.pagination.pageNumber !== userSessionSettingsUserListPageNumber;\n\n if (shouldUpdateUserListPageNumberSettings) {\n sessionSettings.user_list_search_results_page_number = searchData.pagination.pageNumber;\n }\n\n const updateSession =\n filter && !sortBy && !columns && !pinnedColumns && !shouldUpdateUserListPageNumberSettings\n ? true\n : sessionSettings;\n\n try {\n yield call(searchCompanies, searchData, gridKey, filter, undefined, title, updateSession);\n\n if (sortBy) {\n yield put(sortActions.changeSortSuccess({ gridKey, data: sortBy }));\n }\n\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey,\n data: searchData.pagination,\n })\n );\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n } else {\n yield put(\n userInformationActions.updateUserSettingsForUserList({\n user_list_display_columns: columns as string,\n user_list_column_order: columnOrder as string,\n user_list_pinned_columns: pinnedColumns as string,\n })\n );\n yield put(savedSearchesActions.applyViewSuccess({ id, label: title, pageAlias: 'userLists' }));\n }\n}\n","import { call, put, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\nimport { Dictionary } from 'lodash';\n// models\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { ViewOption } from '@optx/models/search';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { UpdateUserSettingsPayload } from '@optx/models/api/user';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { SelectOption } from '@optx/models/Option';\nimport { GridPayload } from '@optx/models/grid';\n// utils\nimport { mapSortQuery, hasFilters, preProcessSearch } from '@utils/search';\nimport { normalizeViewsColumns } from '@optx/utils/utils';\n// redux\nimport { actions } from '@features/grid/view';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport { selectors as outreachSearchSelectors } from '@redux/company-outreach/search';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as columnSelectors } from '@features/grid/columns';\nimport { selectors as filterSelectors } from '@redux/company-outreach/filters';\nimport {\n actions as savedSearchesActions,\n selectors as savedSearchesSelectors,\n} from '@redux/company/saved-searches';\nimport { actions as columnActions } from '@features/grid/columns';\nimport { getFiltersQuery } from '@redux/company/search/search/sagasReusable';\nimport { selectors as paginationSelectors } from '@features/grid/pagination';\nimport { searchCompanies, searchCompaniesFail } from '@features/grid/search/state/sagasReusable';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\n\nexport function* resetViewToSourcingOrderSaga() {\n const gridKey = 'outreachDetails';\n const { views } = yield select(savedSearchesSelectors.getViews);\n const defaultScoreValue: string = yield select(userInformationSelectors.getDefaultScore);\n const isColumnFetched: boolean = yield select(columnSelectors.isColumnsFetched(gridKey));\n\n if (!isColumnFetched) {\n yield put(columnActions.fetchColumns({ gridName: gridKey }));\n }\n\n const viewData = views.find(\n (view: ViewOption) => view.unique_id.toString() === 'sourcingOrder'\n ) as ViewOption;\n\n const { validatedColumns, validatedColumnsOrder } = normalizeViewsColumns(\n viewData,\n defaultScoreValue\n );\n\n yield put(\n actions.applyView({\n gridKey: gridKey,\n data: {\n ...viewData,\n columns: validatedColumns,\n column_order: validatedColumnsOrder,\n },\n })\n );\n}\n\nexport function* applyViewSaga(action: PayloadAction<GridPayload<ViewOption>>) {\n const {\n columns,\n column_order: columnOrder,\n pinned_columns: pinnedColumns,\n filters: viewFilters,\n searchKey: viewSearchKey,\n sortBy,\n search_criteria: searchCriteria,\n unique_id: id,\n title,\n search_info: searchInfo,\n } = action.payload.data;\n\n const gridKey = 'outreachDetails';\n\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridKey));\n const pagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const isCombinedSearch = searchInfo?.type === 'combined';\n const tableGridQuery: string = yield select(searchSelectors.getTableGridQuery(gridKey));\n const userPageNumber: number = yield select(userInformationSelectors.getResultsPageNumber);\n const analystIdFilter: [string | null, string | null] | SelectOption<string> | undefined =\n yield select(filterSelectors.getSourcingOptitonsFilterValues('analyst_id'));\n const columnNameSourcingOutReachFilter:\n | [string | null, string | null]\n | SelectOption<string>\n | undefined = yield select(filterSelectors.getSourcingOptitonsFilterValues('column_name'));\n let filter: Dictionary<PreselectedFilter> | undefined;\n let searchKey: string = yield select(searchSelectors.getSearchKey(gridKey));\n\n // @ts-ignore\n const listOfAnalystIds: number[] = analystIdFilter?.map(\n (list: { label: string; value: number }) => list.value\n );\n\n const sourcingOutReachColumnName = (columnNameSourcingOutReachFilter as SelectOption<string>)\n ?.value;\n\n if (hasFilters(searchCriteria) || id === 'default') {\n filter = viewFilters;\n searchKey = viewSearchKey ? preProcessSearch(viewSearchKey) : '';\n }\n\n if (!hasFilters(searchCriteria) && viewSearchKey) {\n filter = yield select(outreachSearchSelectors.getClearedFilter);\n searchKey = viewSearchKey ? preProcessSearch(viewSearchKey) : '';\n }\n\n yield put(\n columnActions.updateColumn({ columns, columnOrder, pinnedColumns, gridName: 'outreachDetails' })\n );\n\n if (isCombinedSearch || filter || sortBy) {\n const currentSortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting(gridKey));\n const currentFilter: Dictionary<PreselectedFilter> = yield select(\n outreachSearchSelectors.getFilters\n );\n let filterQuery: Dictionary<string | Array<number | string>> = yield call(\n getFiltersQuery,\n filter || currentFilter\n );\n\n // before we separated watchlist from advanced search page it is possible that\n // some saved searches include the list id\n // if we have old saved searches that include list id, remove it.\n // when applying a view we should not include the list id\n // @ts-ignore\n filterQuery = { ...filterQuery, ss_list_id: undefined, saved_list_id: undefined };\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n fromSavedList: typeof id === 'number' ? id : undefined,\n listType: searchInfo?.type || '',\n analystId: listOfAnalystIds?.toString(),\n tableGridQuery,\n sourcingOutReachColumnName,\n filter: filterQuery,\n pagination: {\n ...pagination,\n pageNumber: 1,\n },\n sortBy: sortBy || currentSortBy,\n };\n\n const sessionSettings: Partial<UpdateUserSettingsPayload> = {};\n\n if (sortBy) {\n const sortQuery = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n sessionSettings.sourcing_outreach_detail_sorting = sortQuery;\n }\n\n if (columns !== null) {\n sessionSettings.sourcing_outreach_detail_columns = columns;\n\n if (columnOrder) {\n sessionSettings.sourcing_outreach_detail_column_order = columnOrder;\n }\n }\n\n if (pinnedColumns !== null) {\n sessionSettings.sourcing_outreach_detail_pinned_columns = pinnedColumns;\n }\n\n const pageNumberChanged = searchData.pagination.pageNumber !== userPageNumber;\n\n if (pageNumberChanged) {\n sessionSettings.search_results_page_number = searchData.pagination.pageNumber;\n }\n\n const updateSession =\n filter && !sortBy && !columns && !pinnedColumns && !pageNumberChanged\n ? true\n : sessionSettings;\n\n try {\n yield call(\n searchCompanies,\n searchData,\n gridKey,\n filter || currentFilter,\n undefined,\n title,\n updateSession\n );\n } catch (error) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n } else {\n yield put(\n savedSearchesActions.applyViewSuccess({ id, label: title, pageAlias: 'companyOutReach' })\n );\n }\n}\n","import { fork, takeLatest, put, select, call } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport { ViewOption, SearchSave } from '@models/search';\nimport { GridKeys, GridPayload } from '@optx/models/grid';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { ColumnKeys } from '@optx/models/table/Columns';\nimport { SortByRule } from '@optx/models/table/sorting';\n// constants\nimport {\n ADVANCED_SEARCH,\n MY_COMPANIES_PENDO,\n GRID_VIEW_VALUES,\n MY_COMPANIES_GRID_VIEW_VALUES,\n} from '@optx/constants/pendoAction';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\nimport { matchView } from '@optx/utils/search';\nimport { removeColumnFromString } from '@utils/columns';\n// redux\nimport * as actions from './actions';\nimport { applyViewSaga as advancedSearchApplyViewSaga } from './sagas/advanced-search/sagas';\nimport { applyViewSaga as myCompaniesApplyViewSaga } from './sagas/my-companies/sagas';\nimport { applyViewSaga as listsApplyViewSaga } from './sagas/lists/sagas';\nimport {\n applyViewSaga as companyOutReachApplyViewSaga,\n resetViewToSourcingOrderSaga,\n} from './sagas/company-outreach/sagas';\nimport { selectors as columnSelectors } from '@features/grid/columns';\nimport {\n actions as savedSearchesActions,\n selectors as savedSearchesSelectors,\n} from '@redux/company/saved-searches';\n\nimport { selectors as searchSelectors } from '@features/grid/search';\n\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { getFiltersQuery } from '@optx/redux/company/search/search/sagasReusable';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\nimport { selectors as sortSelectors } from '@features/grid/sort';\n\nfunction* applyView(action: PayloadAction<GridPayload<ViewOption>>) {\n const { gridKey } = action.payload;\n console.log('switch, gridKey: ', gridKey);\n console.log('switch, action: ', action);\n\n switch (gridKey) {\n case 'advancedSearch':\n yield fork(advancedSearchApplyViewSaga, action);\n sendPendoData(`${ADVANCED_SEARCH}_${GRID_VIEW_VALUES[action.payload.data.title]}`);\n break;\n case 'myCompanies':\n yield fork(myCompaniesApplyViewSaga, action);\n\n if (MY_COMPANIES_GRID_VIEW_VALUES[action.payload.data.title]) {\n sendPendoData(\n `${MY_COMPANIES_PENDO}_${MY_COMPANIES_GRID_VIEW_VALUES[action.payload.data.title]}`\n );\n }\n\n break;\n case 'lists':\n yield fork(listsApplyViewSaga, action);\n break;\n case 'outreachDetails':\n yield fork(companyOutReachApplyViewSaga, action);\n break;\n default:\n break;\n }\n}\n\nfunction* checkViewSaga(action: PayloadAction<GridKeys>) {\n const gridKey = action.payload;\n\n if (gridKey === 'myCompanies') {\n const latestSavedSearches: SearchSave[] = yield select(savedSearchesSelectors.getAllViews);\n const { defaultOptxView } = yield select(savedSearchesSelectors.getViews);\n const filteredSavedSearches: SearchSave[] = latestSavedSearches.filter(\n search => search.search_info.type !== 'combined'\n );\n\n const filter: Dictionary<PreselectedFilter> = yield select(filterSelectors.getFilter(gridKey));\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(\n getFiltersQuery,\n filter\n );\n const sortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting(gridKey));\n const searchKey: string = yield select(searchSelectors.getSearchKey(gridKey));\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridKey));\n\n const columns: string = yield select(columnSelectors.getVisibleColumnString(gridKey));\n const columnOrder: ColumnKeys[] = yield select(columnSelectors.getColumnOrder(gridKey));\n const pinnedColumns: string = yield select(columnSelectors.getPinnedColumnsString(gridKey));\n\n // check Match View\n const { matchedTitle, matchedView } = matchView(\n {\n filter: filterQuery,\n sortBy,\n searchKey,\n searchType,\n pagination: { pageSize: 50, pageNumber: 1 },\n },\n removeColumnFromString(columns, 'date_matched'),\n columnOrder ? removeColumnFromString(columnOrder.join(), 'date_matched') : columnOrder,\n pinnedColumns,\n filteredSavedSearches,\n defaultOptxView,\n gridKey\n );\n const title = matchedTitle;\n const view = matchedView;\n\n if (title) {\n yield put(\n savedSearchesActions.applyViewSuccess({\n id: view ? view.unique_id : '',\n label: title,\n pageAlias: gridKey,\n })\n );\n }\n }\n}\n\nexport default function* viewSaga() {\n yield takeLatest(actions.applyView, applyView);\n yield takeLatest(actions.resetViewToSourcingOrder, resetViewToSourcingOrderSaga);\n yield takeLatest(actions.checkView, checkViewSaga);\n}\n","import { call, takeLatest, put, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport moment from 'moment';\nimport { Dictionary, uniqBy } from 'lodash';\nimport { AxiosResponse } from 'axios';\n// models\nimport { CompanyUserContact, ContactPhone, PhoneType } from '@models/api/contacts';\nimport { SuccessErrorCallback } from '@models/callback';\nimport { LogicOption, SelectOption } from '@models/Option';\nimport {\n UpdateCompanyETData,\n EquityTouchContactPost,\n EquityTouchSubmitField,\n GroupsSubmitField,\n WatchlistsSubmitField,\n EquityTouchCheck,\n} from '@models/equityTouch';\nimport { PreselectedFilter } from '@optx/models/filters';\n// constants\nimport { PRESENT_DATE_FORMAT, ISO_DATE_FORMAT } from '@optx/constants/format/date';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport { actions as loaderActions } from '@features/custom-global-loader';\nimport { selectors as companyEditSelectors } from '@components/feature/company-individual-edit/state';\nimport { selectors as filterSelectors } from '@features/grid/filter';\nimport { actions as listActions } from '@redux/lists/details';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { getErrorMessage } from '@utils/api/errors';\nimport {\n selectors as primaryContactsSelectors,\n actions as primaryContactsActions,\n} from '../primary-contacts';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\n\nexport function* equityTouchAvailabilitySaga(\n action: PayloadAction<string, any, SuccessErrorCallback>\n) {\n const { payload: id, meta: callback } = action;\n\n try {\n const res: AxiosResponse<Dictionary<EquityTouchCheck>> = yield call(\n CompanyService.checkEquityTouchAvailability,\n id\n );\n\n if (res.data) {\n callback && callback(res.data);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to check company in Equity Touch!';\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchEquityTouchFormDataSaga(\n action: PayloadAction<number, any, SuccessErrorCallback>\n) {\n const { payload: id, meta: callback } = action;\n\n try {\n // @ts-ignore\n const res = yield call(CompanyService.fetchEquityTouchFormData, { companyId: id });\n\n if (res.data) {\n yield put(actions.fetchEquityTouchFormDataSuccess({ ...res.data, companyId: id }));\n callback && callback(res.data);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch company from Equity Touch!';\n yield put(actions.fetchEquityTouchFormDataFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* addtoEquityTouchSaga(\n action: PayloadAction<\n {\n id: string;\n formData: Dictionary<\n | string\n | EquityTouchSubmitField\n | GroupsSubmitField\n | EquityTouchContactPost[]\n | WatchlistsSubmitField[]\n >;\n formValues: Dictionary<string | number | boolean | number[] | string[] | null | SelectOption>;\n },\n any,\n SuccessErrorCallback\n >\n) {\n const { meta: callback } = action;\n const postData = action.payload;\n const contacts: EquityTouchContactPost[] = [];\n const editedContactIds: number[] = [];\n const primaryContacts: CompanyUserContact[] = yield select(\n primaryContactsSelectors.getPrimaryContacts\n );\n const selectedContacts: number[] = yield select(selectors.getSelectedContacts);\n // @ts-ignore\n const phoneIds = [...(yield select(companyEditSelectors.companyIndividualEdit.phoneOptions))];\n\n // include the contact data that has been selected from the contacts table\n if (selectedContacts && selectedContacts.length) {\n selectedContacts.forEach((contactId: number) => {\n const contactData = primaryContacts.find(contact => contact.person_id === contactId);\n let phones: ContactPhone[] = [];\n\n if (contactData?.additional_phones && contactData?.additional_phones.length) {\n phones = [...contactData.additional_phones];\n }\n\n if (contactData?.phone && contactData?.phone_type) {\n const phoneId = (phoneIds as SelectOption[]).find(\n phoneItem => phoneItem.label === contactData.phone_type\n );\n\n phones.push({\n phone_number: contactData.phone,\n phone_type: contactData.phone_type as PhoneType,\n is_primary: false,\n phone_type_id: phoneId ? Number(phoneId.value) : undefined,\n });\n }\n\n contacts.push({\n first_name: contactData!.first_name,\n last_name: contactData!.last_name,\n title: contactData!.title,\n phones: phones,\n emails: contactData!.email,\n linkedin: contactData!.linkedin,\n primary_contact: contactData!.primary_contact,\n tenure_start_date: contactData!.tenure_start_date\n ? moment(contactData!.tenure_start_date).format(ISO_DATE_FORMAT)\n : null,\n tenure_end_date:\n contactData!.tenure_end_date && contactData!.tenure_end_date !== PRESENT_DATE_FORMAT\n ? moment(contactData!.tenure_end_date).format(ISO_DATE_FORMAT)\n : contactData!.tenure_end_date === PRESENT_DATE_FORMAT\n ? contactData!.tenure_end_date\n : null,\n person_id: contactData!.person_id as number,\n });\n\n if (contactData!.is_edited) {\n editedContactIds.push(contactData!.person_id as number);\n }\n });\n }\n\n if (contacts.length) {\n postData.formData = {\n ...postData.formData,\n contacts: uniqBy(contacts, (contact: EquityTouchContactPost) => contact.person_id),\n };\n } else {\n postData.formData = { ...postData.formData, contacts: [] };\n }\n\n try {\n const res: AxiosResponse<any> = yield call(CompanyService.addEquityTouch, postData);\n\n if (res.data) {\n if (res.data.errorType !== null) {\n callback && callback({ url: res.data.url, hasError: true });\n let errorMessage =\n 'During operation one ore more errors occurred: Failed to add company to Equity Touch!';\n\n if (res.data.errorType === 'add_contact_failed') {\n errorMessage = 'During operation one ore more errors occurred: Failed to add contact';\n } else if (res.data.errorType === 'contact_custom_fields_failed') {\n errorMessage =\n 'During operation one ore more errors occurred: Failed to add custom field for contact';\n } else if (res.data.errorType === 'add_company_group_failed') {\n errorMessage =\n 'During operation one ore more errors occurred: Failed to add company group';\n }\n\n NotificationService.error(errorMessage);\n } else {\n callback && callback({ url: res.data.url });\n }\n\n const filters: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter('advancedSearch')\n );\n\n // @ts-ignore\n const stageOptions = yield select(companyEditSelectors.companyIndividualEdit.stageOptions);\n // @ts-ignore\n const rankOptions = yield select(companyEditSelectors.companyIndividualEdit.rankOptions);\n // @ts-ignore\n const sectorOptions = yield select(companyEditSelectors.companyIndividualEdit.sectorOptions);\n // @ts-ignore\n const subSectorOptions = yield select(\n // @ts-ignore\n companyEditSelectors.companyIndividualEdit.subSectorOptions\n );\n // @ts-ignore\n const companyOwnerOptions = yield select(\n // @ts-ignore\n companyEditSelectors.companyIndividualEdit.companyOwnerOptions\n );\n\n const updatePayload: UpdateCompanyETData = {\n companyId: Number(action.payload.id),\n formValues: action.payload.formValues,\n contacts,\n fieldsData: {\n stageOptions,\n rankOptions,\n sectorOptions,\n subSectorOptions,\n companyOwnerOptions,\n },\n };\n\n // update data in store\n const filterValues = filters.source_tag_filter as Array<LogicOption>;\n const index = filterValues.findIndex(item => item.value === 'et');\n\n yield put(actions.updateCompanyETData({ updateData: updatePayload, editedContactIds }));\n\n if (filterValues[index].notIn) {\n yield put(listActions.deleteCompanyInCurrentList(Number(action.payload.id)));\n }\n }\n } catch (error: any) {\n let errorMessage = 'Failed to add company to Equity Touch!';\n\n // adding company and contacts to equity touch are two distinct processes in the backend\n // if company is added but contacts are not, check error object, show the\n // confirmation page, but also show error for contacts\n if (error && error.response) {\n const errorData = error.response.data.errors[Object.keys(error.response.data.errors)[0]];\n\n if (errorData.errorType && errorData.errorType === 'contact_failed') {\n callback && callback({ url: errorData.url, hasError: true });\n errorMessage = errorData.msgs;\n } else {\n errorMessage = errorData;\n callback && callback('');\n }\n }\n\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* saveContactSaga(\n action: PayloadAction<Partial<CompanyUserContact>, any, VoidFunction>\n) {\n const { payload: payloadData, meta: callback } = action;\n yield put(loaderActions.toggle({ loading: true }));\n\n try {\n // @ts-ignore\n const res = yield call(CompanyService.editPrimaryContact, payloadData);\n\n if (res.data) {\n payloadData.tenure_start_date = res.data.tenure_start_date;\n payloadData.tenure_end_date = res.data.tenure_end_date;\n\n yield put(primaryContactsActions.updatePrimaryContacts(payloadData));\n\n callback && callback();\n }\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to edit primary contact!');\n yield put(actions.saveContactFail(message));\n NotificationService.error(message);\n }\n\n yield put(loaderActions.toggle({ loading: false }));\n}\n\nexport function* autoSaveSaga(\n action: PayloadAction<Dictionary<\n string | number | boolean | number[] | string[] | null | SelectOption\n > | null>\n) {\n try {\n yield put(userInformationActions.updateUserSettings({ et_form_auto_save: action.payload }));\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to edit primary contact!');\n NotificationService.error(message);\n }\n}\n\nexport default function* equityTouchSaga() {\n yield takeLatest(actions.equityTouchAvailability, equityTouchAvailabilitySaga);\n yield takeLatest(actions.fetchEquityTouchFormData, fetchEquityTouchFormDataSaga);\n yield takeLatest(actions.addToEquityTouch, addtoEquityTouchSaga);\n yield takeLatest(actions.saveContact, saveContactSaga);\n yield takeLatest(actions.autoSave, autoSaveSaga);\n}\n","import { Dictionary } from 'lodash';\nimport { createAction } from '@reduxjs/toolkit';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport * as models from '@models/equityTouch';\nimport { SelectOption } from '@models/Option';\nimport * as types from './types';\n\nexport const equityTouchAvailability = createAction(\n types.CHECK_EQUITY_TOUCH_AVAILABILITY,\n (id: string, callback: (data: Dictionary<models.EquityTouchCheck>) => void) => ({\n payload: id,\n meta: callback,\n })\n);\n\nexport const fetchEquityTouchFormData = createAction(\n types.FETCH_EQUITY_TOUCH_FORM_DATA,\n (id: number, callback: (data: Dictionary<models.EquityTouchFetchedField>) => void) => ({\n payload: id,\n meta: callback,\n })\n);\n\nexport const fetchEquityTouchFormDataSuccess = createAction<\n Dictionary<models.EquityTouchFetchedField>\n>(types.FETCH_EQUITY_TOUCH_FORM_DATA_SUCCESS);\n\nexport const fetchEquityTouchFormDataFail = createAction<string>(\n types.FETCH_EQUITY_TOUCH_FORM_DATA_FAIL\n);\n\nexport const addToEquityTouch = createAction(\n types.ADD_TO_EQUITY_TOUCH,\n (\n id: string,\n formData: Dictionary<\n | string\n | models.EquityTouchSubmitField\n | models.GroupsSubmitField\n | models.WatchlistsSubmitField[]\n >,\n formValues: Dictionary<string | number | boolean | number[] | string[] | null | SelectOption>,\n callback: (data: { url: string; hasError?: boolean } | string) => void\n ) => ({\n payload: { id, formData, formValues },\n meta: callback,\n })\n);\n\nexport const addToEquityTouchSuccess = createAction<\n Dictionary<string | number | boolean | number[] | string[] | null | SelectOption>\n>(types.ADD_TO_EQUITY_TOUCH_SUCCESS);\n\nexport const updateEquityTouchSelectedContacts = createAction<number[]>(\n types.UPDATE_EQUITY_TOUCH_SELECTED_CONTACTS\n);\n\nexport const updateEquityTouchSelectedSalesLoftContacts = createAction<number[]>(\n types.UPDATE_EQUITY_TOUCH_SELECTED_SALESLOFT_CONTACTS\n);\n\nexport const resetAddToEquityTouch = createAction(types.RESET_ADD_TO_EQUITY_TOUCH);\n\nexport const saveContact = createAction(\n types.EQUITY_TOUCH_SAVE_CONTACT,\n (payload: Partial<CompanyUserContact>, callback?: VoidFunction) => ({\n payload,\n meta: callback,\n })\n);\nexport const saveContactFail = createAction<string>(types.EQUITY_TOUCH_SAVE_CONTACT_FAIL);\n\nexport const addContact = createAction<Partial<CompanyUserContact>>(types.EQUITY_TOUCH_ADD_CONTACT);\n\nexport const updateCompanyETData = createAction<models.UpdateCompanyET>(\n types.UPDATE_COMPANY_ET_DATA\n);\n\nexport const updateTemporaryFormValues = createAction<\n Dictionary<string | number | boolean | number[] | string[] | null | SelectOption>\n>(types.UPDATE_TEMPORARY_FORM_VALUES);\n\nexport const autoSave = createAction<Dictionary<\n string | number | boolean | number[] | string[] | null | SelectOption\n> | null>(types.AUTO_SAVE);\n","/**\n * This file builds what we use now as structure for My Companies cards.\n *\n * Currently, we display four cards where:\n * - two of them should display a graph bar and\n * - the other two should display two rows with two columns each.\n *\n * Since both type of cards require different colors for fonts and graphics, it was necessary\n * to create something to map these changes.\n *\n * Both buildValues() and buildGraphicValues() generate structures for the cards content area.\n */\n\nimport { Dictionary, isEmpty, values as _values, keys, each } from 'lodash';\n// models\nimport { LogicOption } from '@optx/models/Option';\nimport { FilterSource } from '@optx/models/filters';\nimport { SearchStateData } from '@models/search';\n// constants\nimport { ConvertFromAPIToText, cardTitles } from '../constants/my-companies';\n// components\nimport {\n MyCompaniesIconType,\n MyCompaniesCardDataProps,\n} from '../components/common/cards/MyCompaniesCard/interface';\n\nconst colorMap: Dictionary<Dictionary<string>> = {\n no_touches: { value: '#90a0b7', graph: '#c2cfe0' },\n more_than_6_months_ago: { value: '#ff4d4f', graph: '#ff7875' },\n in_more_than_6_months: { value: '#ff4d4f', graph: '#ff7875' },\n '6_weeks_to_6_months_ago': { value: '#fa8c16', graph: '#ffa940' },\n in_6_weeks_to_6_months: { value: '#fa8c16', graph: '#ffa940' },\n within_6_weeks: { value: '#13c2c2', graph: '#13c2c2' },\n};\n\nconst icons: Array<MyCompaniesIconType> = [\n 'AlertOutlined',\n 'ClockCircleOutlined',\n 'StarOutlined',\n 'CalendarOutlined',\n];\n\n/**\n * The buildValues() function creates the structure for the card with columns.\n * This function will return the following structure:\n * {\n * label: string;\n * value: number;\n * className: string; (optional)\n * valueProps: string; (optional)\n * }\n */\nconst buildValues = (values: Array<Dictionary<number>>) => {\n return values.map((value: Dictionary<number>, index: number) => {\n return {\n label: ConvertFromAPIToText[keys(value)[0]],\n value: _values(value)[0] || 0,\n valueProps: {\n style: { color: index === 0 ? '#ff4d4f' : '' },\n },\n className: index !== 0 ? 'kpi--default' : '',\n };\n });\n};\n\n/**\n * The buildFilters() function creates the structure for the card subfilters.\n * The label will be sent to the API to filter\n */\nconst buildFilters = (filters: Dictionary<string>) => {\n const filtersArray = [];\n\n for (const filter of Object.entries(filters)) {\n filtersArray.push({\n label: filter[0],\n value: filter[1],\n });\n }\n\n return filtersArray;\n};\n\n/**\n * Get the currentValue and transform into a valid value.\n */\nconst getGraphValue = (value: number) => {\n const graphValueCalc = value === 1 ? 1 : parseFloat(Math.log(value).toFixed(2));\n const currentGraphValue =\n graphValueCalc === -Infinity || graphValueCalc === Infinity ? 0 : graphValueCalc;\n\n return currentGraphValue;\n};\n\n/**\n * Map the values for the cards that use barchart as template.\n */\nconst mapGraphValues = (values: Array<Dictionary<number>>, graphTotal: number) => {\n return values.map((value: Dictionary<number>) => {\n const currentItemKey = keys(value)[0];\n const currentValue = _values(value)[0] || 0;\n const currentGraphValue = getGraphValue(currentValue);\n\n // calc the percentage of each value to use in the bar chart\n const graphValuePercentOfTotal = Math.floor((currentGraphValue * 100) / graphTotal);\n const graphValue = isNaN(graphValuePercentOfTotal) ? 0 : graphValuePercentOfTotal;\n\n return {\n label: ConvertFromAPIToText[currentItemKey],\n value: currentValue,\n valueProps: { style: { color: colorMap[currentItemKey].value } },\n graphValue,\n graphColor: colorMap[currentItemKey].graph,\n };\n });\n};\n\n/**\n * The buildGraphicValues() creates the structure for the card with a bar chart.\n *\n * The rules for bar chart are:\n * - If there is value, the respective color shall be shown in the bar chart;\n * - If it's 0, then the respective color shall not be displayed;\n *\n * For the bar chart, it is being used the <Progress /> component from Ant Design,\n * that's why it is needed to calculate a percentage value in order to fill all props\n * from the Progress component.\n *\n * Note that the value color and the bar chart color are different.\n *\n * The structure returned will be:\n * {\n * label: string;\n * value: number;\n * valueStyle: Dictionary<string>;\n * graphValue: number;\n * graphColor: string;\n * }\n */\nconst buildGraphicValues = (values: Array<Dictionary<number>>) => {\n // calculate the total based on the sum of each graph value\n const graphTotal = values\n .map(value => {\n return getGraphValue(_values(value)[0] || 0);\n })\n .reduce((previousValue, currentValue) => previousValue + currentValue);\n\n return mapGraphValues(values, graphTotal);\n};\n\n/**\n * Map the cards list and construct the card using the new structure.\n */\nconst mapCardsList = (cardsKeys: Array<string>, cardsValues: Array<SearchStateData>) => {\n return cardsValues.map((card, index) => {\n const finalCard: MyCompaniesCardDataProps = {\n id: cardsKeys[index],\n title: card.title,\n filters: buildFilters(card.data),\n secondTitle: `${card.total} ${card.total === 1 ? 'Company' : 'Companies'}`,\n values:\n index === 0 || index === 1 ? buildGraphicValues(card.values) : buildValues(card.values),\n icon: icons[index],\n };\n\n if (index === 0 || index === 1) {\n finalCard.description = 'Touch recency across companies';\n finalCard.variation = 'barchart';\n } else {\n finalCard.variation = 'columns';\n }\n\n if (index === 0) {\n finalCard.colSizeFirstBigger = true;\n }\n\n if (index === 1) {\n finalCard.colSizeFirstBigger = false;\n }\n\n return finalCard;\n });\n};\n\n/**\n * This function getMyCompaniesCardsList() returns an array of cards with the defined specs.\n * For the My Companies Dashboard it needs the use of different icons for each card,\n * different titles, different value for sub-titles, different descriptions (or non-existent) and\n * different content structure (be it chart bar or columns).\n *\n * For some cards there were added a property colSizeFirstBigger to inform the size of each column.\n */\nexport const getMyCompaniesCardsList = (cards: Dictionary<SearchStateData>) => {\n const cardsKeys = keys(cards);\n const cardsValues = _values(cards);\n\n if (cardsKeys.length) {\n const cardsList: Array<MyCompaniesCardDataProps> = mapCardsList(cardsKeys, cardsValues);\n\n return cardsList;\n }\n\n return [];\n};\n\n/**\n * process sub filters for each card\n * @param {Dictionary<SearchStateData>} data card related data coming from api\n */\nexport const processCardList = (data: Dictionary<SearchStateData>) => {\n const cardsList = { ...data };\n\n for (const cardKey in cardsList) {\n if (cardsList) {\n const values = _values(cardsList[cardKey].values);\n\n cardsList[cardKey] = {\n ...cardsList[cardKey],\n values,\n title: cardTitles[cardKey],\n };\n }\n }\n\n return cardsList;\n};\n\n/**\n * parse source tag filter from a an array of values\n * @param {Array<LogicOption>} base object for source tag filter\n * @param {string[]} filterValues values for the filter\n */\nexport const parseSourceTagFilter = (base: Array<LogicOption>, filterValues: string[]) => {\n const values: Dictionary<boolean> = {};\n\n filterValues.forEach(item => {\n values[item] = true;\n });\n\n return base.map((option: any) => {\n const finalOption = { ...option };\n\n if (values[`${option.value}-1-0`]) {\n finalOption.in = true;\n }\n\n if (values[`${option.value}-0-1`]) {\n finalOption.notIn = true;\n }\n\n return finalOption;\n });\n};\n\n/**\n * get corresponding company owner using the current user's display name\n * @param {Array<FilterSource>} filterSources filter data from api\n * @param {string} userName current user display name\n */\nexport const getCompanyOwner = (filterSources: Array<FilterSource>, userName: string) => {\n let companyOwner: Array<{ value: string; label: string }> | undefined;\n\n each(filterSources, (source, index) => {\n each(source.data, (filter, index) => {\n if (filter.column === 'company_owner_id') {\n const owner = filter.data.find(\n (owner: { name: string; value: string }) => owner.name === userName\n );\n\n if (owner) {\n companyOwner = [{ value: owner.value, label: owner.name }];\n }\n\n return false;\n }\n\n return true;\n });\n\n if (companyOwner) {\n return false;\n }\n\n return true;\n });\n\n return companyOwner;\n};\n\nexport const myCompaniesCardsFilters = (\n selectedCard: SearchStateData | null,\n { nextTouchDate = [], lastTouchDateDays = [], stage = [] }\n): Dictionary<string | Array<number | string>> => {\n if (!selectedCard) return {};\n\n if (selectedCard.id === 'card1') {\n return {\n next_touch_date: isEmpty(nextTouchDate) ? selectedCard.filter.next_touch_date : nextTouchDate,\n last_touch_date_days: isEmpty(lastTouchDateDays)\n ? selectedCard.filter.last_touch_date_days\n : lastTouchDateDays,\n stage: isEmpty(stage) ? selectedCard.filter.stage : stage,\n };\n }\n\n return {};\n};\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\nimport createCachedSelector from 're-reselect';\nimport { ColumnType } from 'antd/lib/table';\n// models\nimport { ViewOption } from '@optx/models/search';\nimport { CustomUIViewIds } from '@optx/models/user';\n// constants\nimport { customUIViewIds } from '@optx/constants/table/columnDisplay/company-search';\n// utils\nimport { hasFilters } from '@optx/utils/search';\nimport { sortColumns } from '@optx/utils/table/sorting';\nimport { mapPreselectedFilters } from '@optx/utils/filters/preselectedValues';\n// redux\nimport { getSavedSearchId } from '@redux/ui/modals/save-search/selectors';\nimport { getDefaultScore } from '@optx/redux/user/information/selectors';\nimport { selectors as fetchSelectors } from '../../feature/fetch';\nimport { selectors as filterSelectors } from '../filters';\nimport {\n getSavedSearchesSelector,\n getTitlesSelector,\n getAllViewsSelector,\n} from '../../feature/saved-search/selectors';\nimport { getDefaultOptxView } from '@optx/features/grid/columns/state/selectors';\n\n// specific selectors\nconst selectCompanySavedSearchesState = (state: AppState) => state.companySavedSearches;\n\nexport const isLoading = createSelector(\n selectCompanySavedSearchesState,\n fetchSelectors.isLoadingSelector\n);\n\n// used for triggering a new fetch. it's value is changed\n// directly from a property passed inside an action, like saveSearchSuccess\nexport const getShouldFetch = createSelector(\n selectCompanySavedSearchesState,\n fetchSelectors.getShouldFetch\n);\n\nexport const getError = createSelector(\n selectCompanySavedSearchesState,\n fetchSelectors.errorSelector\n);\n\nexport const getSavedSearches = createSelector(\n selectCompanySavedSearchesState,\n getSavedSearchesSelector\n);\n\nexport const getGridColumns = (defaultColumns: ColumnType<any>[]) =>\n createSelector(getSortBy, getDefaultScore, (sorting, defaultOptxScore) =>\n sortColumns(defaultColumns, sorting, defaultOptxScore)\n );\n\nexport const getAllViews = createSelector(selectCompanySavedSearchesState, getAllViewsSelector);\n\nexport const getFilteredSavedSearches = createSelector(getSavedSearches, searches =>\n searches.filter(\n search =>\n hasFilters(search.search_criteria) ||\n search.searchKey ||\n customUIViewIds.includes(search.unique_id as CustomUIViewIds)\n )\n);\n\nexport const filteredSavedSearchesCount = createSelector(\n getFilteredSavedSearches,\n searches => searches.length\n);\n\nexport const getDefaultSearchId = createSelector(getSavedSearches, searches => {\n const defaultSearch = searches.find(search => search.is_default);\n\n if (defaultSearch) {\n return defaultSearch.unique_id;\n }\n\n return undefined;\n});\n\nexport const shouldFetch = createSelector(\n selectCompanySavedSearchesState,\n state => !state.loading && !state.fetchedAt && !state.error\n);\n\nexport const loaded = createSelector(\n selectCompanySavedSearchesState,\n state => !state.loading && !!state.fetchedAt\n);\n\nexport const shouldInitialFetch = createSelector(\n filterSelectors.filtersLoaded,\n shouldFetch,\n (fetchedFilters, shouldFetch) => fetchedFilters && shouldFetch\n);\n\nexport const getSearch = createCachedSelector(\n selectCompanySavedSearchesState,\n (state: AppState, searchId: number | string) => searchId,\n (state, searchId) => state.byId[searchId]\n)((state, searchId) => searchId);\n\nexport const getAllSearch = createSelector(selectCompanySavedSearchesState, state =>\n state.allIds.map(id => state.byId[id])\n);\n\nexport const getTitles = createSelector(selectCompanySavedSearchesState, getTitlesSelector);\n\nexport const getTotal = createSelector(\n selectCompanySavedSearchesState,\n state => state.allIds.length\n);\n\nexport const getQuery = createSelector(selectCompanySavedSearchesState, state => state.query);\n\nexport const getSortBy = createSelector(\n selectCompanySavedSearchesState,\n state => state.sortBy || []\n);\n\nexport const getPageNumber = createSelector(\n selectCompanySavedSearchesState,\n state => state.pageNumber\n);\n\nexport const getSavedSearchesById = createSelector(\n selectCompanySavedSearchesState,\n state => state.allIds\n);\n\n// we don't have an OPTX Default saved search coming from api,\n// so we make one and add default filters and columns\nexport const getViews = createSelector(\n getAllViews,\n filterSelectors.getCompanyFilters,\n getDefaultOptxView(),\n (searches, filterSources, optxDefault) => {\n const preselectedFilters = mapPreselectedFilters(filterSources);\n const defaultOptxView = { ...optxDefault, filters: preselectedFilters };\n defaultOptxView.filters = preselectedFilters;\n\n let defaultView = defaultOptxView;\n const views: ViewOption[] = [...searches];\n\n views.unshift(defaultView);\n\n let isOptxDefault = true;\n\n searches.forEach(search => {\n if (search.is_default) {\n defaultView = search;\n isOptxDefault = false;\n }\n });\n\n if (isOptxDefault) {\n views[0].is_default = true;\n } else {\n views[0].is_default = false;\n }\n\n return { views, defaultView, defaultOptxView };\n }\n);\n\nexport const getViewData = createSelector(getViews, getSavedSearchId, ({ views }, id) => {\n if (id) {\n return views.find(view => view.unique_id.toString() === id);\n }\n\n return undefined;\n});\n","import { createReducer, CaseReducer, PayloadAction, Dictionary } from '@reduxjs/toolkit';\n// models\nimport { UserInformation } from '@models/user';\nimport { Filter, FilterSource, PreselectedFilter } from '@models/filters';\nimport { SearchSaveResponse } from '@models/search';\nimport { FilterTag } from '@optx/models/tags';\nimport {\n UpdateFieldsPayload,\n EditFieldSuccess,\n} from '@optx/features/company/edit-fields/state/interfaces';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport {\n ContactsSearchState,\n SearchContactsPayload,\n ResetSearchPayload,\n SearchSuccessPayload,\n} from '@redux/contacts/search/search/interfaces';\nimport { GridPayload } from '@models/grid';\nimport { PageInfo } from '@models/table/Pagination';\n// utils\nimport { getContactId } from '@optx/utils/contact';\n// redux\nimport { actions as primaryContactsActions } from '@redux/company/primary-contacts';\nimport { actions as editFieldsActions } from '@optx/features/company/edit-fields/state';\nimport { types as userInformationTypes } from '../../../user/information';\nimport * as actions from './actions';\nimport { saveContactSearchSuccess } from '../../saved-searches/actions';\nimport { fetchReducer, fetchFailReducer } from '../../../feature/fetch/reducers';\nimport { actions as paginationActions } from '@features/grid/pagination';\n\n/**\n * Contacts initial state.\n */\nexport const initialState: ContactsSearchState = {\n loading: false,\n error: '',\n fetchedAt: '',\n byId: {},\n allIds: [],\n pagination: {\n pageNumber: 1,\n pageSize: 50,\n },\n defaultPageSize: 50,\n searchTitle: '',\n};\n\n// search\nconst searchReducer: CaseReducer<\n ContactsSearchState,\n PayloadAction<Partial<SearchContactsPayload> | undefined>\n> = (draftState, action) => {\n fetchReducer(draftState);\n};\n\nconst searchSuccessReducer: CaseReducer<\n ContactsSearchState,\n PayloadAction<SearchSuccessPayload>\n> = (draftState, action) => {\n draftState.loading = false;\n // reset contacts\n draftState.allIds = [];\n draftState.byId = {};\n // update with new data\n action.payload.data.forEach(contact => {\n const id = getContactId(contact);\n draftState.allIds.push(id);\n draftState.byId[id] = contact;\n });\n draftState.searchTitle = action.payload.searchTitle;\n\n draftState.fetchedAt = new Date().toISOString();\n};\n\n// reset\nconst resetReducer: CaseReducer<ContactsSearchState, PayloadAction<ResetSearchPayload>> = (\n draftState,\n action\n) => {\n const { searchTitle } = action.payload;\n draftState.searchTitle = searchTitle;\n\n fetchReducer(draftState);\n};\n\n// external reducers\nconst fetchUserInformationSuccessReducer: CaseReducer<\n ContactsSearchState,\n PayloadAction<UserInformation, typeof userInformationTypes.FETCH_USER_INFORMATION_SUCCESS>\n> = (draftState, action) => {\n const userInfo = action.payload;\n\n if (userInfo.settings.contact_results_per_page) {\n draftState.pagination.pageSize = userInfo.settings.contact_results_per_page;\n }\n\n if (userInfo.settings.session_settings?.contact_results_page_number) {\n draftState.pagination.pageNumber =\n userInfo.settings.session_settings.contact_results_page_number;\n }\n};\n\nconst saveSearchSuccessReducer: CaseReducer<\n ContactsSearchState,\n PayloadAction<\n SearchSaveResponse,\n any,\n {\n filterSources: Array<FilterSource<Filter<any>>>;\n clearedFilters: Dictionary<PreselectedFilter>;\n }\n >\n> = (draftState, action) => {\n draftState.searchTitle = action.payload.title;\n};\n\nconst removeFilterReducer: CaseReducer<ContactsSearchState, PayloadAction<FilterTag>> = (\n draftState,\n action\n) => {\n draftState.loading = true;\n};\n\n// edit contacts fields\n\nconst editUserInformationSuccessReducer: CaseReducer<\n ContactsSearchState,\n PayloadAction<EditFieldSuccess>\n> = (draftState, action) => {\n const { fieldName, value, companyId } = action.payload;\n const personId = (value as UpdateFieldsPayload).companyId;\n\n const user: CompanyUserContact | undefined = draftState.byId[`${personId}-${companyId}`];\n const fieldKeyValue = (value as UpdateFieldsPayload).value;\n\n if (user && fieldName === 'Linkedin Profile') {\n draftState.byId[`${personId}-${companyId}`].linkedin = fieldKeyValue as never;\n }\n};\n\nconst updateLinkedinURLSuccessReducer: CaseReducer<\n ContactsSearchState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n const { linkedin, person_id: personId, company_id: companyId } = action.payload;\n\n const user: CompanyUserContact | undefined = draftState.byId[`${personId}-${companyId}`];\n\n if (user) {\n draftState.byId[`${personId}-${companyId}`].linkedin = linkedin as string;\n }\n};\n\nconst changePaginationReducer: CaseReducer<\n ContactsSearchState,\n PayloadAction<GridPayload<PageInfo>>\n> = (draftState, action) => {\n const { gridKey } = action.payload;\n\n if (gridKey === 'contacts') fetchReducer(draftState);\n};\n\nexport const reducer = createReducer<ContactsSearchState>(initialState, builder =>\n builder\n // search\n .addCase(actions.searchContacts, searchReducer)\n .addCase(actions.searchContactsSuccess, searchSuccessReducer)\n .addCase(actions.searchContactsFail, fetchFailReducer)\n // reset all\n .addCase(actions.reset, resetReducer)\n // external reducers\n .addCase(paginationActions.changePagination, changePaginationReducer)\n // user information\n .addCase(\n userInformationTypes.FETCH_USER_INFORMATION_SUCCESS,\n fetchUserInformationSuccessReducer\n )\n .addCase(saveContactSearchSuccess, saveSearchSuccessReducer)\n .addCase(actions.removeFilter, removeFilterReducer)\n .addCase(editFieldsActions.updateFieldsSuccess, editUserInformationSuccessReducer)\n .addCase(primaryContactsActions.editPrimaryContactSuccess, updateLinkedinURLSuccessReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest, select, fork } from 'redux-saga/effects';\nimport queryString from 'query-string';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { UserInformation } from '@optx/models/user';\nimport { UpdateUserSettingsPayload } from '@optx/models/api/user';\nimport { CompanyUserContact, SearchPayload, SearchPayloadRequest } from '@models/api/contacts';\nimport { SearchSave } from '@models/search';\nimport {\n ResetSearchPayload,\n SearchContactsPayload,\n} from '@redux/contacts/search/search/interfaces';\n// utils\nimport mapFiltersToURLParams from '@optx/utils/filters/mapFiltersToURLParams';\nimport { matchSavedSearches, mapSearchCounterQuery, mapSortQuery } from '@optx/utils/search';\n// services\nimport { Dictionary } from 'lodash';\nimport { BaseFilter } from '@optx/models/filters';\nimport { AxiosResponse } from 'axios';\nimport NotificationService from '../../../../services/NotificationService';\nimport SearchService from '../../../../services/api/SearchService';\n// redux\nimport { getSavedSearches } from '../../saved-searches/selectors';\nimport { actions as searchKeyActions } from '@features/grid/searchkey';\nimport * as actions from './actions';\nimport { getSearchData, getSearchKey } from './selectors';\nimport { actions as searchCountActions } from '@features/grid/search-count';\nimport { selectors as filtersSelectors } from '../../filters';\nimport { SEARCH_CONTACTS, RESET_SEARCH_CONTACTS, REMOVE_FILTER } from './actionTypes';\nimport {\n selectors as userInformationSelectors,\n actions as userInformationActions,\n} from '../../../user/information';\nimport { actions as paginationActions } from '@features/grid/pagination';\n\n/**\n * Update contacts filters for current session.\n */\nfunction* updateFilterSettings(\n payload: SearchPayloadRequest,\n optionalSettings: Partial<UpdateUserSettingsPayload> = {}\n) {\n const newPayload = { ...payload };\n // @ts-ignore\n delete newPayload.sortBy;\n // @ts-ignore\n delete newPayload.pagination;\n\n const queryPayload = mapSearchCounterQuery(\n newPayload.searchKey,\n newPayload.searchType,\n newPayload.filter\n );\n\n const query = queryString.stringify(queryPayload, { arrayFormat: 'comma' });\n const userSettings: UserInformation | null = yield select(\n userInformationSelectors.getUserSettings\n );\n\n try {\n if (\n (userSettings && query !== userSettings.settings.session_settings?.contact_filters) ||\n Object.keys(optionalSettings).length\n ) {\n yield put(\n userInformationActions.updateUserSettings({ contact_filters: query, ...optionalSettings })\n );\n }\n } catch (error: any) {\n NotificationService.error('Failed persisting filters settings!');\n }\n}\n\nexport function* searchContactsSaga(searchTitle?: string) {\n const searchPayload: SearchPayload = yield select(getSearchData);\n const filterMap: Dictionary<BaseFilter> = yield select(filtersSelectors.getFiltersMap);\n const filterURLParam = mapFiltersToURLParams(filterMap, searchPayload.filter);\n const userPageNumber: number = yield select(userInformationSelectors.getContactResultsPageNumber);\n const userSettings: UserInformation | null = yield select(\n userInformationSelectors.getUserSettings\n );\n let payloadRequest: SearchPayloadRequest = {\n ...searchPayload,\n filter: filterURLParam,\n };\n\n const checkUpdateFilters = { ...payloadRequest };\n // @ts-ignore\n delete checkUpdateFilters.sortBy;\n // @ts-ignore\n delete checkUpdateFilters.pagination;\n\n const queryPayload = mapSearchCounterQuery(\n checkUpdateFilters.searchKey,\n checkUpdateFilters.searchType,\n checkUpdateFilters.filter\n );\n\n const query = queryString.stringify(queryPayload, { arrayFormat: 'comma' });\n\n if (userSettings && query !== userSettings.settings.session_settings?.contact_filters) {\n payloadRequest = {\n ...payloadRequest,\n pagination: {\n ...payloadRequest.pagination,\n pageNumber: 1,\n },\n };\n }\n\n try {\n const res: AxiosResponse<CompanyUserContact[]> = yield call(\n SearchService.searchContacts,\n payloadRequest\n );\n\n if (res.data) {\n const savedSearches: Array<SearchSave> = yield select(getSavedSearches);\n let title = '';\n\n if (typeof searchTitle === 'string') {\n title = searchTitle;\n }\n\n if (!title) {\n title = matchSavedSearches(payloadRequest, savedSearches);\n }\n\n yield put(actions.searchContactsSuccess(res.data, title));\n\n if (payloadRequest.pagination.pageNumber !== userPageNumber) {\n yield call(updateFilterSettings, payloadRequest, {\n contact_results_page_number: payloadRequest.pagination.pageNumber,\n });\n } else {\n yield call(updateFilterSettings, payloadRequest);\n }\n\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey: 'contacts',\n data: payloadRequest.pagination,\n })\n );\n } else {\n yield put(actions.searchContactsFail('Search contacts fail!'));\n }\n } catch (e: any) {\n const errorMessage = 'Search contacts fail, Server error!';\n yield put(actions.searchContactsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* searchContactsCountSaga() {\n const searchPayload: SearchPayload = yield select(getSearchData);\n const filterMap: Dictionary<BaseFilter> = yield select(filtersSelectors.getFiltersMap);\n const filterURLParam = mapFiltersToURLParams(filterMap, searchPayload.filter);\n\n const customSearch: SearchPayloadRequest = {\n ...searchPayload,\n filter: filterURLParam,\n };\n\n yield put(searchCountActions.searchCount({ data: customSearch, gridKey: 'contacts' }));\n}\n\nexport function* resetSaga(action: PayloadAction<ResetSearchPayload>) {\n yield put(\n searchKeyActions.setSearchKey({\n data: action.payload.resetTo?.searchKey || '',\n gridKey: 'contacts',\n })\n );\n\n const searchPayload: SearchPayload = yield select(getSearchData);\n const filterMap: Dictionary<BaseFilter> = yield select(filtersSelectors.getFiltersMap);\n const filterURLParam = mapFiltersToURLParams(filterMap, searchPayload.filter);\n const userPageNumber: number = yield select(userInformationSelectors.getContactResultsPageNumber);\n const payloadRequest: SearchPayloadRequest = {\n ...searchPayload,\n filter: filterURLParam,\n pagination: {\n pageNumber: 1,\n pageSize: searchPayload.pagination.pageSize,\n },\n };\n\n const sortQuery = queryString.stringify(mapSortQuery(searchPayload.sortBy), {\n arrayFormat: 'comma',\n });\n\n try {\n const res: AxiosResponse<CompanyUserContact[]> = yield call(\n SearchService.searchContacts,\n payloadRequest\n );\n\n if (res.data) {\n yield put(actions.searchContactsSuccess(res.data, action.payload.searchTitle || ''));\n\n if (payloadRequest.pagination.pageNumber !== userPageNumber) {\n yield fork(updateFilterSettings, payloadRequest, {\n contact_sorting: sortQuery,\n contact_results_page_number: payloadRequest.pagination.pageNumber,\n });\n } else {\n yield fork(updateFilterSettings, payloadRequest, { contact_sorting: sortQuery });\n }\n\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey: 'contacts',\n data: payloadRequest.pagination,\n })\n );\n yield fork(searchContactsCountSaga);\n } else {\n yield put(actions.searchContactsFail('Search contacts fail!'));\n }\n } catch (e: any) {\n const errorMessage = 'Search contacts fail, Server error!';\n yield put(actions.searchContactsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* searchWithCountSaga(\n action: PayloadAction<Partial<SearchContactsPayload> | undefined>\n) {\n const data = action.payload;\n const searchKey: string = yield select(getSearchKey);\n\n if (!data) {\n yield put(searchKeyActions.setSearchKey({ data: searchKey, gridKey: 'contacts' }));\n } else {\n yield put(searchKeyActions.setSearchKey({ data: data?.searchKey || '', gridKey: 'contacts' }));\n }\n\n yield fork(searchContactsSaga);\n yield fork(searchContactsCountSaga);\n}\n\nexport default function* searchContactsSagas() {\n yield takeLatest(SEARCH_CONTACTS, searchWithCountSaga);\n yield takeLatest(REMOVE_FILTER, searchWithCountSaga);\n yield takeLatest(RESET_SEARCH_CONTACTS, resetSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\nimport { OptxScoreRationale } from './interfaces';\n\nexport const sendOptxScoreRationale = createAction<OptxScoreRationale>(\n types.SEND_OPTX_SCORE_RATIONALE\n);\n\nexport const sendNewOptxScoreRationale = createAction<OptxScoreRationale>(\n types.SEND_NEW_OPTX_SCORE_RATIONALE\n);\n\nexport const sendOptxScoreRationaleSuccess = createAction<OptxScoreRationale>(\n types.SEND_OPTX_SCORE_RATIONALE_SUCCESS\n);\n\nexport const sendNewOptxScoreRationaleSuccess = createAction<OptxScoreRationale>(\n types.SEND_NEW_OPTX_SCORE_RATIONALE_SUCCESS\n);\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { EncodedFile, SuccessResponse, UploadFilesPayload } from './interfaces';\n// constants\nimport {\n REMOVE_FILE_ENCODING,\n TOGGLE_DOCUMENT_UPLOAD_MODAL,\n UPDATE_FILE_ENCODING_LIST,\n UPDATE_FILE_LIST,\n UPLOAD_FILES,\n UPLOAD_FILES_ERROR,\n UPLOAD_FILES_SUCCESS,\n FAILED_UPLOAD_FILES,\n} from './types';\n\nexport const toggleModal = createAction(TOGGLE_DOCUMENT_UPLOAD_MODAL);\n\nexport const updateFileList = createAction<UploadFile[]>(UPDATE_FILE_LIST);\nexport const updateFileEncodingList = createAction<EncodedFile>(UPDATE_FILE_ENCODING_LIST);\nexport const removeFileEncoding = createAction<string>(REMOVE_FILE_ENCODING);\n\nexport const uploadFiles = createAction<UploadFilesPayload>(UPLOAD_FILES);\nexport const uploadFilesSuccess = createAction<SuccessResponse[]>(UPLOAD_FILES_SUCCESS);\nexport const uploadFilesError = createAction<string>(UPLOAD_FILES_ERROR);\n\nexport const failedUploadFiles = createAction(FAILED_UPLOAD_FILES);\n","export const TOGGLE_DOCUMENT_UPLOAD_MODAL = 'TOGGLE_DOCUMENT_UPLOAD_MODAL';\n\nexport const UPDATE_FILE_LIST = 'UPDATE_FILE_LIST';\nexport const UPDATE_FILE_ENCODING_LIST = 'UPDATE_FILE_ENCODING_LIST';\nexport const REMOVE_FILE_ENCODING = 'REMOVE_FILE_ENCODING';\n\nexport const UPLOAD_FILES = 'UPLOAD_FILES';\nexport const UPLOAD_FILES_SUCCESS = 'UPLOAD_FILES_SUCCESS';\nexport const UPLOAD_FILES_ERROR = 'UPLOAD_FILES_ERROR';\n\nexport const FAILED_UPLOAD_FILES = 'FAILED_UPLOAD_FILES';\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst selectDocumentUploadTouchModal = (state: AppState) =>\n state.ui.modals.documentUploadTouchModal;\n\nexport const isOpen = createSelector(selectDocumentUploadTouchModal, state => state.open);\n\nexport const fileList = createSelector(selectDocumentUploadTouchModal, state => state.files);\n\nexport const encodedFileList = createSelector(\n selectDocumentUploadTouchModal,\n state => state.encodedFiles\n);\n\nexport const getUploading = createSelector(\n selectDocumentUploadTouchModal,\n state => state.uploading\n);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n// models\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { DocumentUploadModalState, EncodedFile } from './interfaces';\n// redux\nimport { toggleReducer } from '@redux/feature/toggle/reducers';\nimport * as actions from './actions';\n\nconst initialState: DocumentUploadModalState = {\n error: '',\n open: false,\n uploading: false,\n files: [],\n encodedFiles: [],\n};\n\nconst toggleModalReducer: CaseReducer<DocumentUploadModalState, PayloadAction> = (\n draftState,\n action\n) => {\n draftState.open = toggleReducer(draftState.open);\n};\n\nconst updateFileListReducer: CaseReducer<DocumentUploadModalState, PayloadAction<UploadFile[]>> = (\n draftState,\n action\n) => {\n const uniqueFiles = action.payload.filter(\n (file, index, self) => index === self.findIndex(t => t.name === file.name)\n );\n\n draftState.files = uniqueFiles;\n};\n\nconst updateFileEncodingListReducer: CaseReducer<\n DocumentUploadModalState,\n PayloadAction<EncodedFile>\n> = (draftState, action) => {\n draftState.encodedFiles = [...draftState.encodedFiles, action.payload];\n};\n\nconst removeFileEncodingReducer: CaseReducer<DocumentUploadModalState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.encodedFiles = draftState.encodedFiles.filter(\n encodedFile => encodedFile.name !== action.payload\n );\n};\n\nconst uploadFilesReducer: CaseReducer<DocumentUploadModalState> = draftState => {\n draftState.uploading = true;\n};\n\nconst uploadFilesSuccessReducer: CaseReducer<DocumentUploadModalState> = draftState => {\n draftState.uploading = false;\n};\n\nconst uploadFilesErrorReducer: CaseReducer<DocumentUploadModalState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.uploading = false;\n draftState.error = action.payload;\n};\n\nconst failedUploadFilesReducer: CaseReducer<DocumentUploadModalState> = draftState => {\n draftState.uploading = false;\n draftState.files.splice(0, 1);\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.toggleModal, toggleModalReducer)\n .addCase(actions.updateFileList, updateFileListReducer)\n .addCase(actions.updateFileEncodingList, updateFileEncodingListReducer)\n .addCase(actions.removeFileEncoding, removeFileEncodingReducer)\n .addCase(actions.uploadFiles, uploadFilesReducer)\n .addCase(actions.uploadFilesSuccess, uploadFilesSuccessReducer)\n .addCase(actions.uploadFilesError, uploadFilesErrorReducer)\n .addCase(actions.failedUploadFiles, failedUploadFilesReducer)\n);\n\nexport default reducer;\n","import { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { all, call, put, select, takeLatest } from 'redux-saga/effects';\nimport { Dictionary } from 'lodash';\n// models\nimport {\n DocumentUploadResponse,\n EncodedFile,\n SuccessResponse,\n UploadFilesPayload,\n} from './interfaces';\nimport { RouteAliases } from '@optx/models/routes';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { TouchCompany } from '../company-touches/interfaces';\nimport CompanyTouch from '@optx/models/company/CompanyTouch';\nimport { TouchesDocumentUploadPayload } from '@optx/features/company-touches/state/interfaces';\n// services\nimport { CompanyService } from '@optx/services/api';\nimport NotificationService from '@optx/services/NotificationService';\n// utils\nimport { getRouteAlias } from '@optx/utils/routes';\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport { selectors as filesSelectors, actions as filesActions } from '@redux/company/files';\nimport { selectors as documentUploadTouchSelectors } from '@redux/ui/modals/add-document-upload-touch';\nimport { selectors as companyTouchesSelectors } from '@redux/ui/modals/company-touches';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport * as actions from './actions';\n\nfunction* uploadFilesSaga(action: PayloadAction<UploadFilesPayload>): Generator<any, any, any> {\n const files: UploadFile[] = yield select(documentUploadTouchSelectors.fileList);\n const filterOptions: Dictionary<string[]> = yield select(filesSelectors.getOptions);\n const encodedFiles: EncodedFile[] = yield select(documentUploadTouchSelectors.encodedFileList);\n const userName: string = yield select(userInformationSelectors.getFullName);\n const userId: number | null = yield select(userInformationSelectors.getUserId);\n const { company_id: touchCompanyId }: TouchCompany = yield select(\n companyTouchesSelectors.getTouchCompany\n );\n const profileCompanyId: number = yield select(profileSelectors.getCompanyId);\n\n const failedFiles: DocumentUploadResponse[] = [];\n const successFiles: SuccessResponse[] = [];\n var touchId: number | null = action.payload.touchId || null;\n var isMultiple = files.length > 1;\n var callOptionsEndpoint: boolean = false;\n\n let companyId: number;\n\n if (touchCompanyId === -1) {\n companyId = profileCompanyId;\n } else {\n companyId = touchCompanyId;\n }\n\n const pageAlias: RouteAliases | null = getRouteAlias(companyId);\n\n if (userId && files.length !== 0) {\n try {\n const encodedFile = encodedFiles.find(encodedFile => encodedFile.name === files[0]?.name);\n\n let payload: TouchesDocumentUploadPayload = {\n company_id: companyId,\n author_user_id: userId,\n author: userName,\n touch_id: null,\n title: files[0]?.name,\n notes: action.payload.notes,\n files_data: true,\n is_multiple: isMultiple,\n data: [\n {\n filename_with_extension: files[0]?.name,\n encoded_content: encodedFile?.base64Encoding || '',\n },\n ],\n };\n\n const res: AxiosResponse<DocumentUploadResponse> = yield call(\n CompanyService.touchesDocumentUpload,\n payload\n );\n\n if (res.data?.success && res.data.payload) {\n touchId = res.data?.payload.touchId as number | null;\n\n const slicedFiles = files.slice(1) as undefined | UploadFile[];\n const newArray = slicedFiles\n ? slicedFiles.map(file => {\n return { ...file, touch_id: touchId };\n })\n : [];\n let progressiveCalls: AxiosResponse<DocumentUploadResponse>[] = [];\n\n if (newArray.length !== 0) {\n progressiveCalls = yield all(\n newArray.map((file, index) => {\n const encodedFile = encodedFiles.find(encodedFile => encodedFile.name === file.name);\n let payload: TouchesDocumentUploadPayload = {\n company_id: companyId,\n author_user_id: userId,\n author: userName,\n touch_id: file.touch_id as number,\n title: file.name,\n notes: action.payload.notes,\n files_data: true,\n is_multiple: true,\n data: [\n {\n filename_with_extension: file.name,\n encoded_content: encodedFile?.base64Encoding || '',\n },\n ],\n };\n\n return call(CompanyService.touchesDocumentUpload, payload);\n })\n );\n }\n\n const mappedProgressiveCalls = progressiveCalls.map(item => item.data);\n const combinedData = [res.data, ...mappedProgressiveCalls];\n combinedData.map(item => {\n if (item.success) {\n if (item.payload)\n successFiles.push({\n payload: {\n ...(item.payload as CompanyTouch),\n initiatorname: userName,\n touchId: item.payload.touchId,\n },\n files: item.files,\n });\n } else {\n failedFiles.push(item);\n }\n });\n\n if (failedFiles.length !== 0) {\n const errorMessage = `Failed to create Document Upload Touch for ${failedFiles\n .map(item => item.error_message)\n .join('\\n')}`;\n NotificationService.error(errorMessage);\n yield put(actions.uploadFilesError(errorMessage));\n }\n\n if (successFiles.length !== 0) {\n if (pageAlias === 'companyProfile') {\n if (filterOptions) {\n const combinedOptions = Object.values(filterOptions).flat();\n successFiles.forEach(item => {\n const name = item.files?.name;\n\n if (!combinedOptions.includes(name!.split('.').pop() as string)) {\n callOptionsEndpoint = true;\n\n return;\n }\n });\n } else {\n callOptionsEndpoint = true;\n }\n }\n\n if (callOptionsEndpoint) {\n yield put(filesActions.fetchFilesFilters());\n }\n\n const successMessage = 'Document Upload Touch successfully created/added!';\n NotificationService.success(successMessage);\n yield put(actions.uploadFilesSuccess(successFiles));\n }\n } else {\n if (res.data.error_message === 'Request body error. Required field is missing: touch_id') {\n const errorMessage = res?.data?.error_message;\n NotificationService.error(errorMessage as string);\n yield put(actions.uploadFilesError(errorMessage as string));\n } else if (touchId === null) {\n const errorMessage =\n res?.data?.error_message || 'Failed to create Document Upload Touch!';\n NotificationService.error(errorMessage);\n yield put(actions.failedUploadFiles());\n\n if (files.length !== 1) {\n yield put(\n actions.uploadFiles({\n notes: action.payload.notes,\n })\n );\n }\n } else {\n const errorMessage =\n res?.data?.error_message || 'Failed to create Document Upload Touch!';\n NotificationService.error(errorMessage);\n yield put(actions.failedUploadFiles());\n\n if (files.length !== 1) {\n yield put(\n actions.uploadFiles({\n notes: action.payload.notes,\n })\n );\n }\n }\n }\n } catch (e: any) {\n const errorMessageCatch = getErrorMessage(e, 'Failed to create Document Upload Touch!');\n NotificationService.error(errorMessageCatch);\n\n actions.uploadFilesError(e);\n }\n }\n}\n\nexport default function* addDocumentUploadTouchSaga() {\n yield takeLatest(actions.uploadFiles, uploadFilesSaga);\n}\n","import { createSelector } from 'reselect';\nimport queryString from 'query-string';\n// models\nimport { FiltersState } from '../interfaces';\nimport { SpecialFilterTag } from '@optx/models/tags';\n// utils\nimport mapFiltersToURLParams from '@optx/utils/filters/mapFiltersToURLParams';\nimport mapTags from '@optx/utils/filters/mapTags';\nimport { generateUniqueKey } from '@optx/utils/uuid';\n\nexport const loaded = (state: FiltersState) => !!state.fetchedAt;\n\nexport const getFilter = (state: FiltersState) => state.filter;\n\nexport const sources = (state: FiltersState) => state.data;\n\nexport const getDefaultFilter = (state: FiltersState) => state.preselected;\n\nexport const getClearedFilter = (state: FiltersState) => state.clear;\n\nexport const getNormalizedFilters = (state: FiltersState) => state.normalized;\n\nexport const getSearchKey = (state: FiltersState, searchKey: string) => searchKey;\n\nexport const filterQuery = (state: FiltersState) => {\n const { normalized, filter } = state;\n\n return queryString.stringify(mapFiltersToURLParams(normalized, filter), {\n arrayFormat: 'comma',\n });\n};\n\nexport const getFilters = (state: FiltersState) => {\n const { normalized, filter, values } = state;\n\n return { normalized, filter, values };\n};\n\nexport const getValues = (state: FiltersState) => {\n const { values } = state;\n\n return values;\n};\n\nexport const getTags = createSelector(\n getValues,\n sources,\n getClearedFilter,\n getSearchKey,\n (values, filterSources, clearedFilter, searchKey) => {\n const tags = mapTags(values, filterSources, clearedFilter, [], {\n date_range_radio: 0,\n });\n\n if (searchKey) {\n tags.unshift({\n filter: 'keyword' as SpecialFilterTag,\n uniqueKey: generateUniqueKey(),\n label: 'Keyword',\n isDefault: false,\n values: [\n {\n value: searchKey,\n },\n ],\n });\n }\n\n return tags;\n }\n);\n\nexport const isClearedFilter = createSelector(getTags, tags => {\n const tagNotDefault = tags.find(tag => {\n if (tag.isDefault === false && tag.values?.length > 0) {\n return true;\n }\n\n return false;\n });\n\n return !!tagNotDefault;\n});\n","import { createSelector } from 'reselect';\n// models\nimport Company from '@optx/models/Company';\n// redux\nimport { selectors as loaderSelectors } from '@optx/features/request';\nimport { featureName } from '../../featureName';\nimport { ChecklistResearchInsightState } from '../interfaces';\nimport * as localFilters from './filters';\nimport * as localSearch from './search';\nimport * as localCards from './cards';\nimport { getSearchCount } from '@optx/features/grid/search-count/state/selectors';\nimport { types } from '../types';\nimport { getSearchKey } from '@optx/features/grid/searchkey/state/selectors';\n\ntype StateSlice = Record<typeof featureName, ChecklistResearchInsightState>;\n\nexport const selectFeatureState = (state: StateSlice) => state[featureName];\n\nconst selectFiltersState = createSelector(selectFeatureState, state => state.filters);\nconst selectUIState = createSelector(selectFeatureState, state => state.ui);\nconst selectSearchState = createSelector(selectFeatureState, state => state.search);\nconst selectCardState = createSelector(selectFeatureState, state => state.cards);\n\n// filters\nconst isLoadingFilters = loaderSelectors.createLoadingSelector([\n types.filters.fetchFilters.SELECTOR,\n]);\n\nconst filters = {\n isLoading: isLoadingFilters,\n selectFilter: createSelector(selectFiltersState, localFilters.getFilter),\n selectDefaultFilter: createSelector(selectFiltersState, localFilters.getDefaultFilter),\n selectClearedFilter: createSelector(selectFiltersState, localFilters.getClearedFilter),\n selectNormalizedFilters: createSelector(selectFiltersState, localFilters.getNormalizedFilters),\n filterQuery: createSelector(selectFiltersState, localFilters.filterQuery),\n getFilters: createSelector(selectFiltersState, localFilters.getFilters),\n sources: createSelector(selectFiltersState, localFilters.sources),\n isCLearedFilter: createSelector(\n selectFiltersState,\n getSearchKey('checklistResearchInsights'),\n (state, searchKey) => {\n return localFilters.isClearedFilter(state, searchKey);\n }\n ),\n getTags: createSelector(\n selectFiltersState,\n getSearchKey('checklistResearchInsights'),\n (state, searchKey) => {\n return localFilters.getTags(state, searchKey);\n }\n ),\n loaded: createSelector(selectFiltersState, localFilters.loaded),\n searchKey: createSelector(\n selectFiltersState,\n getSearchKey('checklistResearchInsights'),\n (state, searchKey) => {\n return localFilters.getSearchKey(state, searchKey);\n }\n ),\n};\n\n// ui\nconst ui = {\n defaultTableView: createSelector(selectUIState, state => state.defaultTableView),\n isLoading: loaderSelectors.createLoadingSelector([types.filters.fetchFilters.SELECTOR]),\n};\n\n// search\nconst search = {\n getData: createSelector(selectSearchState, localSearch.getData),\n getLoading: createSelector(selectSearchState, localSearch.getLoading),\n getError: createSelector(selectSearchState, localSearch.getError),\n getCount: getSearchCount('checklistResearchInsights'),\n};\n\n// cards\nconst cards = {\n getScore: createSelector(selectCardState, localCards.getScore),\n getSoftware: createSelector(selectCardState, localCards.getSoftware),\n getPsgFit: createSelector(selectCardState, localCards.getPsgFit),\n};\n\nexport const pageLoading = createSelector(\n ui.isLoading,\n filters.isLoading,\n search.getLoading,\n (isLoading, filters, search) => isLoading || filters || search\n);\n\nexport const getCompanyById = (companyId: number) =>\n createSelector(search.getData, companies => {\n const findCompany = (companies as Company[]).find(\n (company: Company) => company.company_id === companyId\n );\n\n return findCompany;\n });\n\nexport const selectors = {\n filters,\n ui,\n search,\n cards,\n};\n","// models\nimport { SearchState } from '../interfaces';\n\nexport const getData = (state: SearchState) => state.data;\nexport const getLoading = (state: SearchState) => state.loading;\nexport const getError = (state: SearchState) => state.error;\n","import { CardsState } from '../interfaces';\n\nexport const getScore = (state: CardsState) => state.score;\nexport const getPsgFit = (state: CardsState) => state.psgFit;\nexport const getSoftware = (state: CardsState) => state.software;\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const FETCH_COLUMNS = createFeatureActionType(featureName, 'FETCH_COLUMNS');\nexport const FETCH_COLUMNS_SUCCESS = createFeatureActionType(featureName, 'FETCH_COLUMNS_SUCCESS');\nexport const FETCH_COLUMNS_ERROR = createFeatureActionType(featureName, 'FETCH_COLUMNS_ERROR');\nexport const SAVE_COLUMNS = createFeatureActionType(featureName, 'SAVE_COLUMNS');\nexport const SAVE_COLUMN_WIDTH = createFeatureActionType(featureName, 'SAVE_COLUMN_WIDTH');\nexport const RESET_COLUMN_WIDTHS = createFeatureActionType(featureName, 'RESET_COLUMN_WIDTHS');\nexport const UPDATE_COLUMN = createFeatureActionType(featureName, 'UPDATE_COLUMN');\nexport const ADD_REMOVE_DATE_MATCHED = createFeatureActionType(\n featureName,\n 'ADD_REMOVE_DATE_MATCHED'\n);\nexport const APPLY_COMPANY_COLLUMN_SETTINGS = createFeatureActionType(\n featureName,\n 'APPLY_COMPANY_COLLUMN_SETTINGS'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport {\n ADD_REMOVE_DATE_MATCHED,\n APPLY_COMPANY_COLLUMN_SETTINGS,\n FETCH_COLUMNS,\n FETCH_COLUMNS_SUCCESS,\n RESET_COLUMN_WIDTHS,\n SAVE_COLUMNS,\n SAVE_COLUMN_WIDTH,\n UPDATE_COLUMN,\n} from './types';\nimport {\n ColumnDisplay,\n ColumnDisplayPayload,\n ColumnUpdate,\n DateMatchedActions,\n FetchColumn,\n ResetColumnWidthsPayload,\n} from './interfaces';\nimport { ColumnWidth } from '@optx/models/table/Columns';\nimport { CompanyFiltersMeta } from '@optx/models/search';\n\nexport const fetchColumns = createAction<FetchColumn>(FETCH_COLUMNS);\n\nexport const fetchColumnsSuccess = createAction<ColumnDisplayPayload>(FETCH_COLUMNS_SUCCESS);\n\nexport const saveColumns = createAction<ColumnDisplay>(SAVE_COLUMNS);\n\nexport const saveColumnWidth = createAction<ColumnWidth<string>>(SAVE_COLUMN_WIDTH);\n\nexport const resetColumnWidths = createAction<ResetColumnWidthsPayload>(RESET_COLUMN_WIDTHS);\n\nexport const updateColumn = createAction<ColumnUpdate>(UPDATE_COLUMN);\n\nexport const addRemoveDateMatched = createAction<DateMatchedActions>(ADD_REMOVE_DATE_MATCHED);\n\nexport const applyCompanyCollumnSettings = createAction<\n Omit<CompanyFiltersMeta, 'searchOrigin' | 'isAnalystOrIsAdmin'>\n>(APPLY_COMPANY_COLLUMN_SETTINGS);\n","import { createAction } from '@reduxjs/toolkit';\nimport {\n EditField,\n EditFieldFail,\n EditFieldSuccess,\n UpdateVerifyCompanyPayload,\n} from './interfaces';\nimport * as types from './types';\n\nexport const updateFields = createAction<EditField>(types.updateEditFields);\nexport const updateVerifyCompanySoftware = createAction<UpdateVerifyCompanyPayload>(\n types.updateVerifyCompanySoftware\n);\nexport const updateVerifyCompanySoftwareSuccess = createAction<UpdateVerifyCompanyPayload>(\n types.updateVerifyCompanySoftwareSuccess\n);\nexport const updateVerifyCompanySoftwareFail = createAction<string>(\n types.updateVerifyCompanySoftwareFail\n);\nexport const updateFieldsSuccess = createAction<EditFieldSuccess>(types.updateEditFieldsSuccess);\nexport const updateFieldsFail = createAction<EditFieldFail>(types.updateEditFieldFail);\n","export const updateEditFields = 'edit-fields/UPDATE_EDIT_FIELDS';\nexport const updateVerifyCompanySoftware = 'edit-fields/UPDATE_VERIFY_COMPANY_SOFTWARE';\nexport const updateVerifyCompanySoftwareSuccess =\n 'edit-fields/UPDATE_VERIFY_COMPANY_SOFTWARE_SUCCESS';\nexport const updateVerifyCompanySoftwareFail = 'edit-fields/UPDATE_VERIFY_COMPANY_SOFTWARE_FAIL';\nexport const updateEditFieldsSuccess = 'edit-fields/UPDATE_EDIT_FIELDS_SUCCESS';\nexport const updateEditFieldFail = 'edit-fields/UPDATE_EDIT_FIELDS_FAIL';\n","import { createSelector } from 'reselect';\nimport { GridKeys } from '@optx/models/grid';\nimport { selectFeatureState } from '../../selectFeature';\n\nexport const getView = (gridKey: GridKeys) => {\n return createSelector(selectFeatureState, state => state.view[gridKey]);\n};\n\nexport const getViewId = (gridKey: GridKeys) => {\n return createSelector(selectFeatureState, state => state.view[gridKey]?.id);\n};\n\nexport const getViewLabel = (gridKey: GridKeys) => {\n return createSelector(selectFeatureState, state => state.view[gridKey].label);\n};\n","import moment from 'moment';\n// models\nimport { ChartDataInterval, ChartIntervalKeys } from '@optx/models/charts/data';\nimport { ScoreGrowthState } from './interfaces';\n// constants\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\n\nexport const getData = (state: ScoreGrowthState) => {\n const psgDateMoment = moment(state.psgDate, ISO_DATE_FORMAT);\n const data = Object.keys(state.data).reduce((acc: any, item: string) => {\n const scoreData = state.data[item as ChartIntervalKeys] as ChartDataInterval;\n // eslint-disable-next-line no-param-reassign\n acc[item] = {\n ...scoreData,\n data: scoreData.data.filter((item: any) => {\n const itemDateMoment = moment(item.date, ISO_DATE_FORMAT);\n\n if (psgDateMoment.isSame(itemDateMoment)) {\n if (item.is_psg) {\n return item;\n }\n\n return false;\n } else if (item.is_psg) {\n return false;\n } else {\n return item;\n }\n }),\n };\n\n return acc;\n }, {});\n\n return data;\n};\n\nexport const getPSGDate = (state: ScoreGrowthState) => state.psgDate;\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n// models\nimport { ChartData } from '@optx/models/charts/data';\n// constants\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\n// redux\nimport { fetchFailReducer, fetchReducer } from '@redux/feature/fetch/reducers';\nimport { actions as companyEditFields } from '@features/company/edit-fields/state';\nimport * as actions from './actions';\nimport { ScoreGrowthState } from './interfaces';\nimport { EditFieldSuccess } from '@optx/features/company/edit-fields/state/interfaces';\n\nconst initialState: ScoreGrowthState = {\n data: INITIAL_STATE_CHART,\n psgDate: null,\n loading: false,\n error: '',\n};\n\nconst fetchScoreGrowthSuccessReducer: CaseReducer<\n ScoreGrowthState,\n PayloadAction<{ data: ChartData; psgDate: string | null }>\n> = (draftState, action) => {\n const { data, psgDate } = action.payload;\n\n draftState.data = data;\n draftState.psgDate = psgDate;\n\n draftState.loading = false;\n};\n\nconst updateFieldsSuccessReducer: CaseReducer<ScoreGrowthState, PayloadAction<EditFieldSuccess>> = (\n draftState,\n action\n) => {\n const { psg_date: psgDate } = action.payload;\n\n if (psgDate) {\n draftState.psgDate = psgDate;\n }\n};\n\nexport const reducer = createReducer<ScoreGrowthState>(initialState, builder =>\n builder\n .addCase(actions.fetchScoreGrowth, fetchReducer)\n .addCase(actions.fetchScoreGrowthSuccess, fetchScoreGrowthSuccessReducer)\n .addCase(actions.fetchScoreGrowthFail, fetchFailReducer)\n .addCase(companyEditFields.updateFieldsSuccess, updateFieldsSuccessReducer)\n);\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { ScoreGrowth } from '@optx/models/Company';\nimport { ChartData, ChartDataPSGDate, ChartIntervalKeys } from '@optx/models/charts/data';\n// constants\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\nimport { parseLineGraphDataWithoutPosition } from '@optx/utils/charts';\nimport { stripUrlSlashes } from '@optx/utils/url';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\nimport * as actions from './actions';\n\nexport function* fetchScoreGrowthSaga(action: PayloadAction<ScoreGrowth>) {\n const { company_url: url } = action.payload;\n\n const defaultOptxScore: string = yield select(userSelectors.getDefaultScore);\n\n try {\n const res: AxiosResponse<ChartDataPSGDate> = yield call(\n CompanyService.getScoreGrowth,\n {\n ...action.payload,\n company_url: url ? stripUrlSlashes(url) : '',\n },\n defaultOptxScore\n );\n const psgDate = res.data.psg_date as string | null;\n\n // @ts-ignore\n delete res.data.psg_date;\n const growthList = res.data as ChartData;\n\n if (growthList[Object.keys(growthList)[0] as ChartIntervalKeys].data.length) {\n yield put(\n actions.fetchScoreGrowthSuccess({\n data: parseLineGraphDataWithoutPosition(growthList),\n psgDate,\n })\n );\n } else {\n yield put(actions.fetchScoreGrowthSuccess({ data: INITIAL_STATE_CHART, psgDate }));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch Score Growth!');\n yield put(actions.fetchScoreGrowthFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* scoreGrowthSaga() {\n yield takeLatest(actions.fetchScoreGrowth, fetchScoreGrowthSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport Company from '@models/Company';\nimport * as types from './types';\n\n// fetch actions\nexport const fetchFavorites = createAction(types.FETCH_FAVORITES);\nexport const fetchFavoritesSuccess = createAction<Company[]>(types.FETCH_FAVORITES_SUCCESS);\nexport const fetchFavoritesFail = createAction<string>(types.FETCH_FAVORITES_FAIL);\n\n// add actions\nexport const addFavorite = createAction(\n types.ADD_FAVORITE,\n (companyId: number, callback?: () => void) => ({\n payload: {\n companyId,\n },\n meta: callback,\n })\n);\nexport const addFavoriteSuccess = createAction<number>(types.ADD_FAVORITE_SUCCESS);\nexport const addFavoriteFail = createAction<string>(types.ADD_FAVORITE_FAIL);\n\n// delete actions\nexport const deleteFavorite = createAction<number>(types.DELETE_FAVORITE);\nexport const deleteFavoriteSuccess = createAction<number>(types.DELETE_FAVORITE_SUCCESS);\nexport const deleteFavoriteFail = createAction<string>(types.DELETE_FAVORITE_FAIL);\n","export const FETCH_FAVORITES = 'favorites/FETCH_FAVORITES';\nexport const FETCH_FAVORITES_SUCCESS = 'favorites/FETCH_FAVORITES_SUCCESS';\nexport const FETCH_FAVORITES_FAIL = 'favorites/FETCH_FAVORITES_FAIL';\n\nexport const ADD_FAVORITE = 'favorites/ADD_FAVORITE';\nexport const ADD_FAVORITE_SUCCESS = 'favorites/ADD_FAVORITE_SUCCESS';\nexport const ADD_FAVORITE_FAIL = 'favorites/ADD_FAVORITE_FAIL';\n\nexport const DELETE_FAVORITE = 'favorites/DELETE_FAVORITE';\nexport const DELETE_FAVORITE_SUCCESS = 'favorites/DELETE_FAVORITE_SUCCESS';\nexport const DELETE_FAVORITE_FAIL = 'favorites/DELETE_FAVORITE_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\n// redux\nimport { fetchReducer, fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport Company from '@optx/models/Company';\nimport { actions as editFieldActions } from '@features/bulk-actions/edit-fields';\nimport { CompanyBulkEditingResults } from '@optx/models/bulkActions';\nimport { CompanyFavoritesState } from './interfaces';\nimport * as actions from './actions';\n\nexport const initialState: CompanyFavoritesState = {\n allIds: [],\n byId: {},\n loading: false,\n error: '',\n fetchedAt: null,\n};\n\nconst fetchFavoritesSuccessReducer: CaseReducer<CompanyFavoritesState, PayloadAction<Company[]>> = (\n draftState,\n action\n) => {\n draftState.allIds = [];\n draftState.byId = {};\n\n const companies = action.payload;\n companies.forEach(company => {\n const id = company.company_id;\n draftState.allIds.push(id);\n draftState.byId[id] = company;\n });\n draftState.loading = false;\n draftState.fetchedAt = new Date().toISOString();\n};\n\nconst addFavoriteSuccessReducer: CaseReducer<\n CompanyFavoritesState,\n PayloadAction<number>\n> = draftState => {\n draftState.loading = false;\n};\n\nconst deleteFavoriteSuccessReducer: CaseReducer<CompanyFavoritesState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n const companyId = action.payload;\n const companyNameIdx = draftState.allIds.findIndex(id => id === companyId);\n draftState.allIds.splice(companyNameIdx, 1);\n delete draftState.byId[companyId];\n draftState.loading = false;\n};\n\nconst bulkDeleteFavoriteSuccessReducer: CaseReducer<\n CompanyFavoritesState,\n PayloadAction<CompanyBulkEditingResults[]>\n> = (draftState, action) => {\n const companies = action.payload;\n companies.map(item => {\n const companyNameIdx = draftState.allIds.findIndex(id => id === item.company_id);\n\n if (companyNameIdx !== -1) {\n draftState.allIds.splice(companyNameIdx, 1);\n delete draftState.byId[item.company_id];\n\n return true;\n }\n\n return true;\n });\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // fetch\n .addCase(actions.fetchFavorites, fetchReducer)\n .addCase(actions.fetchFavoritesSuccess, fetchFavoritesSuccessReducer)\n .addCase(actions.fetchFavoritesFail, fetchFailReducer)\n // add\n .addCase(actions.addFavorite, fetchReducer)\n .addCase(actions.addFavoriteSuccess, addFavoriteSuccessReducer)\n .addCase(actions.addFavoriteFail, fetchFailReducer)\n // delete\n .addCase(actions.deleteFavorite, fetchReducer)\n .addCase(actions.deleteFavoriteSuccess, deleteFavoriteSuccessReducer)\n .addCase(actions.deleteFavoriteFail, fetchFailReducer)\n .addCase(editFieldActions.saveResults, bulkDeleteFavoriteSuccessReducer)\n);\n\nexport default reducer;\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, put, takeLatest, select } from 'redux-saga/effects';\n// constants\nimport { FAVORITE_LIST_ID } from '@constants/lists';\n// models\nimport Company from '@models/Company';\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// services\nimport { UserService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport { getFilterListId } from '@redux/lists/details/selectors';\nimport { deleteCompanyInCurrentList } from '@redux/lists/details/actions';\nimport { AxiosResponse } from 'axios';\nimport {\n fetchFavoritesSuccess,\n fetchFavoritesFail,\n fetchFavorites,\n deleteFavoriteSuccess,\n deleteFavorite,\n deleteFavoriteFail,\n addFavoriteFail,\n addFavorite,\n addFavoriteSuccess,\n} from './actions';\nimport * as favoritesSelectors from './selectors';\n\nexport function* fetchFavoritesSaga() {\n try {\n const res: AxiosResponse<Company[]> = yield call(UserService.getFavorites);\n\n if (res.data) {\n yield put(fetchFavoritesSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch Favorites!!!';\n yield put(fetchFavoritesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch Favorites! Server Error!';\n yield put(fetchFavoritesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* addFavoriteSaga(\n action: PayloadAction<{ companyId: number }, any, SuccessErrorCallback>\n) {\n const { companyId } = action.payload;\n const callback = action.meta;\n\n try {\n const res: AxiosResponse<any> = yield call(UserService.addFavorite, companyId);\n\n if (res.data) {\n yield put(addFavoriteSuccess(companyId));\n NotificationService.success('Company added to favorites!');\n callback && callback();\n yield put(fetchFavorites());\n } else {\n const errorMessage = 'Failed to add company to favorites!';\n yield put(addFavoriteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to add company to favorites! Server Error!';\n yield put(addFavoriteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* deleteFavoriteSaga(action: PayloadAction<number>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<any> = yield call(UserService.deleteFavorite, companyId);\n\n if (res.data) {\n // remove company from grid if favorites list is selected\n const currentListId: string = yield select(getFilterListId);\n\n if (currentListId === FAVORITE_LIST_ID || !currentListId) {\n const company: Company = yield select(state =>\n favoritesSelectors.getCompanyById(state, companyId)\n );\n yield put(deleteCompanyInCurrentList(company.company_id));\n }\n\n yield put(deleteFavoriteSuccess(companyId));\n NotificationService.success('Company removed from favorites!');\n } else {\n const errorMessage = 'Failed to delete company from favorites!';\n yield put(deleteFavoriteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to delete company from favorites! Server Error!';\n yield put(deleteFavoriteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* favoritesSaga() {\n yield takeLatest(fetchFavorites, fetchFavoritesSaga);\n yield takeLatest(addFavorite, addFavoriteSaga);\n yield takeLatest(deleteFavorite, deleteFavoriteSaga);\n}\n","import { SelectOption } from '@models/Option';\n\nexport const psgFunctionOptions: SelectOption<string>[] = [\n { label: 'CEO', value: 'CEO' },\n { label: 'COO', value: 'COO' },\n { label: 'Corporate Development', value: 'Corporate Development' },\n { label: 'CTO', value: 'CTO' },\n { label: 'Customer Success/Support', value: 'Customer Success/Support' },\n { label: 'Executive Chairman', value: 'Executive Chairman' },\n { label: 'Finance', value: 'Finance' },\n { label: 'HR', value: 'HR' },\n { label: 'Legal', value: 'Legal' },\n { label: 'Marketing', value: 'Marketing' },\n { label: 'President/COO', value: 'President/COO' },\n { label: 'Product', value: 'Product' },\n { label: 'Sales', value: 'Sales' },\n { label: 'Technology', value: 'Technology' },\n];\n\nexport const slackChannelOptions: SelectOption<string>[] = [\n { label: 'psg-ceo', value: 'psg-ceo' },\n { label: 'psg-cfo', value: 'psg-cfo' },\n { label: 'psg-executive_teams', value: 'psg-executive_teams' },\n { label: 'psg-gtm', value: 'psg-gtm' },\n { label: 'psg-hr', value: 'psg-hr' },\n { label: 'psg-techleader', value: 'psg-techleader' },\n];\n\nexport const CONTACT_SELECT_LIMIT = 20;\n","export const STATE_KEY = 'analystsLeaderboard';\nexport const FEATURE = `[${STATE_KEY}]`;\n","import moment, { Moment } from 'moment';\nimport { cloneDeep } from 'lodash';\n// models\nimport {\n ChartBarIntervalKeys,\n ChartBarItem,\n ChartBars,\n ChartData,\n ChartIntervalKeys,\n ChartItem,\n SocialMediaChartData,\n} from '@models/charts/data';\n// constants\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\n\n/**\n * check whether or not a date is part of an interval of time,\n * starting from the present. for instance, inside the last 3 months\n * @param {string} date the date to be checked\n * @param {string} numberOfMonths the period of time in months\n */\nexport const checkIntervalDate = (date: string, numberOfMonths: number) => {\n const firstDate = new Date(date);\n const months = new Date();\n months.setMonth(months.getMonth() - numberOfMonths);\n\n if (firstDate.getTime() - months.getTime() > 0) {\n return true;\n }\n\n return false;\n};\n\n/**\n * check whether or not to show data for a time interval\n * if the data inside a time period doesn't cover the whole interval\n * don't show it and return empty array for that time period\n * @param {ChartData} growthList the data coming from API\n */\nexport const clearIntervalData = (growthList: ChartData) => {\n const data = { ...growthList };\n\n for (const intervalKey of Object.keys(data)) {\n if (\n intervalKey === '6M' &&\n checkIntervalDate(data[intervalKey as ChartIntervalKeys].data[0].date, 3)\n ) {\n data['6M'].data = [];\n data['1Y'].data = [];\n data['2Y'].data = [];\n break;\n } else if (\n intervalKey === '1Y' &&\n checkIntervalDate(data[intervalKey as ChartIntervalKeys].data[0].date, 6)\n ) {\n data['1Y'].data = [];\n data['2Y'].data = [];\n break;\n } else if (\n intervalKey === '2Y' &&\n checkIntervalDate(data[intervalKey as ChartIntervalKeys].data[0].date, 12)\n ) {\n data['2Y'].data = [];\n break;\n }\n }\n\n return data;\n};\n\n/**\n * calculate the quarter based on a date\n * @param intervalStartDate the date used to return quarter\n */\nexport const getInitialIntervalQuarter = (intervalStartDate: Date) => {\n let quarter = '';\n\n for (let i = 0; i < 12; i++) {\n if (intervalStartDate.getMonth() === i) {\n quarter = `Q${Math.ceil((i + 1) / 3)} ${moment(intervalStartDate).format('YY')}`;\n break;\n }\n }\n\n return quarter;\n};\n\n/**\n * add empty labels that will be displayed inside the graph\n * the graph's timeline should show all the months/quarters from the time period\n * if the data doesn't start from the first month/quarter, add empty labels at the beginning\n * @param {ChartItem[]} intervalData all data for a time period\n * @param {number} numberOfMonths the time period, calculated using months\n */\nexport const addEmptyLabels = (intervalData: ChartItem[], numberOfMonths: number) => {\n const data = [...intervalData];\n const intervalStartDate = new Date();\n intervalStartDate.setMonth(intervalStartDate.getMonth() - numberOfMonths);\n\n // we are displaying labels manually.\n // we need to check if we have to add empty labels and if so\n // we need to recalculate the points position, because from API,\n // the points always start from 0, but we need to take into account\n // the time period for which we have no data\n const initialQuarter = getInitialIntervalQuarter(intervalStartDate);\n let distinctMonths = 0;\n\n // to check whether or not we need to add empty labels and recalculate point positions,\n // for year intervals we check the starting quarter and for months, instead of checking\n // the starting month, we check the number of distinct months inside the data, to avoid\n // having the first point starting from a different position other than 0\n if (numberOfMonths < 12) {\n data.forEach((point, index) => {\n if (\n index < data.length - 1 &&\n moment(point.date).format('M') !== moment(data[index + 1].date).format('M')\n ) {\n distinctMonths++;\n }\n });\n }\n\n if (\n (numberOfMonths > 6 && intervalData[0].quarter !== initialQuarter) ||\n (numberOfMonths < 12 && distinctMonths < numberOfMonths - 1)\n ) {\n const startDate = moment(new Date()).subtract(numberOfMonths, 'months');\n const totalDays = moment(intervalData[intervalData.length - 1].date).diff(startDate, 'days');\n\n data.forEach((point, index) => {\n if (index <= data.length - 1) {\n data[index].position = (moment(point.date).diff(startDate, 'days') * 100) / totalDays;\n }\n });\n\n // also add the start date for the period, used as a start point for\n // displaying the labels\n data.unshift({\n date: moment(intervalStartDate).format(ISO_DATE_FORMAT),\n quarter: '',\n });\n }\n\n return data;\n};\n\n/**\n * parse data coming from api, for each particular time period\n * @param {ChartData} growthList data coming from api\n */\nexport const parseLineGraphDataWithPosition = (growthList: ChartData) => {\n const data = clearIntervalData(growthList);\n Object.keys(data).forEach(intervalKey => {\n const intervalData = data[intervalKey as ChartIntervalKeys].data;\n\n switch (intervalKey) {\n case '3M':\n if (intervalData.length) {\n data[intervalKey as ChartIntervalKeys].data = addEmptyLabels(intervalData, 3);\n }\n\n break;\n case '6M':\n if (intervalData.length) {\n data[intervalKey as ChartIntervalKeys].data = addEmptyLabels(intervalData, 6);\n }\n\n break;\n case '1Y':\n if (intervalData.length) {\n data[intervalKey as ChartIntervalKeys].data = addEmptyLabels(intervalData, 12);\n }\n\n break;\n case '2Y':\n if (intervalData.length) {\n data[intervalKey as ChartIntervalKeys].data = addEmptyLabels(intervalData, 24);\n }\n\n break;\n\n default:\n break;\n }\n });\n\n return data;\n};\n\n/**\n * calculate individual graph points position\n * @param {ChartData} growthList graph data\n */\nexport const parseLineGraphDataWithoutPosition = (growthList: ChartData) => {\n const data: ChartData = clearIntervalData(growthList);\n\n Object.keys(data).forEach(intervalKey => {\n const key = intervalKey as ChartIntervalKeys;\n let intervalData = data[key].data;\n\n if (intervalData.length) {\n const numberOfMonths = getNoOfMonths(key);\n intervalData = addEmptyLabels(intervalData, numberOfMonths);\n // used to calculate the position on the graph, using milliseconds\n // get the milliseconds for the whole interval,\n // calculate the position proportionally\n const latestDate = moment(intervalData[intervalData.length - 1].date);\n let formattedDate: Moment | string = moment(intervalData[0].date);\n let updatedDate: string | null = null;\n\n if (!formattedDate.isValid()) {\n const [day, month, year] = intervalData[0].date.split('.');\n const dateNew = new Date(+year, +month - 1, +day);\n formattedDate = moment(dateNew).format(ISO_DATE_FORMAT);\n updatedDate = `${year}-${month}-${day}`;\n }\n\n const totalNumberOfMilliseconds = latestDate.diff(formattedDate);\n intervalData.forEach((dataPoint, index) => {\n if (index === 0 && updatedDate) {\n intervalData[index].date = updatedDate;\n }\n\n const diff = latestDate.diff(dataPoint.date);\n intervalData[index].position =\n ((totalNumberOfMilliseconds - diff) * 100) / totalNumberOfMilliseconds || 0;\n });\n }\n\n data[key].data = intervalData;\n });\n\n return data;\n};\n\n/**\n * find and return the first item in the array that has data\n * @param {ChartItem[]} data the data belonging to a time period\n */\nexport const getFirstValidDate = (data: ChartItem[]) => {\n return data.find(item => item.quarter !== '');\n};\n\n/**\n * function to add empty bars for graph with time periods\n * for this type of graph, for each month/quarter there is only one corresponding value,\n * so we can tell exactly how many empty months/quarters we need to\n * add depending on the number of items returned from api\n * @param {ChartBarItem[]} intervalData all data for a time period\n * @param {number} numberOfMonths the time period, calculated using months\n * @param {boolean} isMonth check whether the data is represented with months or quarters\n */\nexport const addEmptyBars = (\n intervalData: ChartBarItem[],\n numberOfMonths: number,\n isMonth?: boolean,\n isYear?: boolean\n) => {\n let data = intervalData;\n const intervalStartDate = new Date();\n intervalStartDate.setMonth(intervalStartDate.getMonth() - numberOfMonths);\n // label will be used to extract the month/quarter\n // ex. month: \"Nov 20\", ex. quarter: \"Q4 20\"\n const label = intervalData[0].x_axis;\n\n // different calculation depending on whether we're displaying by month or quarter or year\n if (isMonth) {\n const oldestMonth = Number(moment(label, 'MMM YY').format('M'));\n\n // check if we need to add empty labels\n if (oldestMonth !== intervalStartDate.getMonth()) {\n let startMonth = oldestMonth - 1;\n let currentYear = Number(moment(label, 'MMM YY').format('YYYY'));\n\n for (let i = numberOfMonths - intervalData.length; i > 0; i--) {\n // check if the time period required to add empty labels spans two consecutive years\n if (startMonth === 0) {\n startMonth = 12;\n currentYear -= 1;\n }\n\n data = [\n {\n x_axis: moment(`${currentYear} ${startMonth} 1`, 'YYYY M D').format('MMM YY'),\n round_data: null,\n total_investment: null,\n },\n ...data,\n ];\n startMonth -= 1;\n }\n }\n } else if (isYear) {\n data = [];\n let currentYear = Number(moment(label.toString().slice(-2), 'YY').format('YYYY'));\n const currentDate = new Date().getFullYear();\n\n // generate data for each year from interval data to the current year\n if (currentYear < currentDate) {\n for (let i = currentYear; i <= currentYear; i++) {\n if (i === currentYear) {\n data.push({\n x_axis: i.toString(),\n total_investment: intervalData[0].total_investment,\n round_data: intervalData[0].round_data,\n });\n } else {\n data.push({\n x_axis: i.toString(),\n total_investment: null,\n round_data: null,\n });\n }\n }\n } else if (currentYear >= currentDate - numberOfMonths / 12) {\n // generate data for the last three years\n for (let i = currentYear - 2; i <= currentYear; i++) {\n if (i === currentYear) {\n data.push({\n x_axis: i.toString(),\n total_investment: intervalData[0].total_investment,\n round_data: intervalData[0].round_data,\n });\n } else {\n data.push({\n x_axis: i.toString(),\n total_investment: null,\n round_data: null,\n });\n }\n }\n }\n } else if (numberOfMonths / 3 - intervalData.length > 0) {\n let currentYear = Number(moment(label.toString().slice(-2), 'YY').format('YYYY'));\n let startQuarter = Number(label.toString().charAt(1)) - 1;\n\n // check if starting point should be from a new year\n if (startQuarter === 1) {\n startQuarter = 4;\n currentYear -= 1;\n }\n\n for (let i = numberOfMonths / 3 - intervalData.length; i > 0; i--) {\n if (startQuarter === 0) {\n startQuarter = 4;\n currentYear -= 1;\n }\n\n data = [\n {\n x_axis: `Q${startQuarter} ${moment(currentYear.toString(), 'YYYY').format('YY')}`,\n round_data: null,\n total_investment: null,\n },\n ...data,\n ];\n startQuarter -= 1;\n }\n }\n\n return data;\n};\n\n/**\n * function to check and add empty labels for each time period\n * @param {ChartBars} chartData data from API\n */\nexport const parseBarData = (chartData: ChartBars) => {\n let data = chartData;\n\n Object.keys(data ?? {}).forEach(intervalKey => {\n const intervalData = data[intervalKey as ChartBarIntervalKeys].data;\n\n switch (intervalKey) {\n case '3M':\n if (intervalData.length) {\n data = { ...data, '3M': { data: addEmptyBars(intervalData, 3, true) } };\n }\n\n break;\n case '6M':\n if (intervalData.length) {\n data = { ...data, '6M': { data: addEmptyBars(intervalData, 6, true) } };\n }\n\n break;\n case '1Y':\n if (intervalData.length) {\n data = { ...data, '1Y': { data: addEmptyBars(intervalData, 12) } };\n }\n\n break;\n case '2Y':\n if (intervalData.length) {\n data = { ...data, '2Y': { data: addEmptyBars(intervalData, 24) } };\n }\n\n break;\n\n case 'ALL':\n if (intervalData.length === 1) {\n data = { ...data, ALL: { data: addEmptyBars(intervalData, 36, false, true) } };\n }\n\n break;\n\n default:\n break;\n }\n });\n\n return data;\n};\n\n/**\n * return number of months for time interval\n * @param {ChartBarIntervalKeys} intervalKey chart data object key\n */\n// eslint-disable-next-line consistent-return\nexport const getNoOfMonths = (intervalKey: ChartBarIntervalKeys) => {\n switch (intervalKey) {\n case '3M':\n return 2;\n case '6M':\n return 5;\n case '1Y':\n return 11;\n case '2Y':\n default:\n return 23;\n }\n};\n\n/**\n * we are not displaying a label (tick) for each point, instead we are displaying\n * a label for each month/quarter, so we are creating and setting them manually\n * @param {ChartData} data chart data\n * @param {ChartIntervalKeys} key interval property name\n */\nexport const getChartTicks = (data: ChartData, key: ChartIntervalKeys) => {\n const tickList = [] as string[];\n let acc = 1;\n\n if (key === '1Y' || key === '2Y') {\n acc = 3;\n }\n\n for (let i = 0; i <= getNoOfMonths(key)!; i += acc) {\n const firstDate = data[key].data[0].date;\n\n if (key === '1Y' || key === '2Y') {\n const quarter = `Q${Math.ceil(Number(moment(firstDate).add(i, 'months').format('M')) / 3)}`;\n const year = `${moment(firstDate, ISO_DATE_FORMAT).add(i, 'months').format('YY')}`;\n\n tickList.push(`${quarter} ${year}`);\n } else {\n tickList.push(moment(firstDate).add(i, 'months').format('MMM YY'));\n }\n }\n\n return tickList;\n};\n\n/**\n * function to calculate values for inverted points to display the chart reversed\n * @param {SocialMediaChartData} data chart data coming from api\n */\nexport const parseReversedValues = (data: SocialMediaChartData) => {\n const chartData: SocialMediaChartData = cloneDeep(data);\n Object.keys(chartData).forEach(key => {\n if (chartData[key as ChartIntervalKeys].data.length) {\n const maxValue = Math.max(\n ...chartData[key as ChartIntervalKeys].data.map(item => item.value),\n 0\n );\n chartData[key as ChartIntervalKeys].lowest_rank = maxValue;\n\n chartData[key as ChartIntervalKeys].data.forEach((chartPoint, index) => {\n chartData[key as ChartIntervalKeys].data[index].reversedValue =\n chartPoint.value === null ? null : maxValue - chartPoint.value;\n });\n }\n });\n\n return chartData;\n};\n","import React from 'react';\nimport { Tag, Typography } from 'antd';\nimport { TagProps } from 'antd/lib/tag';\nimport Overflow from 'rc-overflow';\n// models\nimport { FilterTag } from '@optx/models/tags';\n// constants\nimport { FILTER_CARDS, FILTER_WITH_LABEL_ONLY } from '@optx/constants/filters';\n\nconst { Text } = Typography;\n\ninterface FilterTagValueProps extends TagProps {\n item: FilterTag;\n}\n\nconst FilterTagValue: React.FC<FilterTagValueProps> = ({ item, ...props }) => {\n const isMyCompanyFilterCard = FILTER_CARDS.includes(item.label) && item.stringifiedValues === '';\n\n const hasLabelOnly = FILTER_WITH_LABEL_ONLY.includes(item.label) && item.stringifiedValues === '';\n\n const labelOnly = isMyCompanyFilterCard || hasLabelOnly;\n\n return (\n <Overflow.Item component=\"span\">\n <Tag {...props}>\n <Text style={{ color: '#595959', textTransform: 'uppercase' }}>\n {labelOnly ? `${item.label}` : `${item.label}: `}\n </Text>\n <Text style={{ color: '#1890FF' }}>{labelOnly ? '' : item.stringifiedValues || ' - '}</Text>\n </Tag>\n </Overflow.Item>\n );\n};\n\nexport default FilterTagValue;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Tag, Typography, Popover } from 'antd';\nimport { FilterTag } from '@optx/models/tags';\nimport FilterTagValue from './FilterTagValue';\n\nconst { Text } = Typography;\n\nconst TagMoreFilters = styled(Tag)`\n cursor: pointer;\n flex: 0;\n`;\n\nconst TagMoreFiltersText = styled(Text)`\n color: #1890ff;\n`;\n\ninterface FilterMoreTagsProps {\n items: FilterTag[];\n closable?: (item: FilterTag) => boolean;\n onClose: (item: FilterTag) => () => void;\n toggleFiltersModal?: () => void;\n}\n\nconst FilterTagMore: React.FC<FilterMoreTagsProps> = ({\n items,\n closable,\n onClose,\n toggleFiltersModal,\n}) => {\n return (\n <>\n {items.length && (\n <Popover\n overlayClassName=\"ant-popover-tags\"\n placement=\"bottom\"\n content={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <>\n {items.map(option => (\n <div key={option.uniqueKey}>\n <FilterTagValue\n key={option.uniqueKey}\n item={option}\n onClose={onClose(option)}\n closable={closable ? closable(option) : true}\n />\n </div>\n ))}\n </>\n }\n >\n <TagMoreFilters className=\"tag-more-filters\" onClick={toggleFiltersModal}>\n <TagMoreFiltersText>\n {`${items.length} more ${items.length === 1 ? 'filter' : 'filters'}`}\n </TagMoreFiltersText>\n </TagMoreFilters>\n </Popover>\n )}\n </>\n );\n};\n\nexport default FilterTagMore;\n","import React, { useCallback } from 'react';\nimport Overflow from 'rc-overflow';\nimport styled from 'styled-components';\nimport { Tag } from 'antd';\nimport { TagProps } from 'antd/lib/tag';\nimport { CloseOutlined } from '@ant-design/icons';\n// models\nimport { SpecialFilterKey } from '@optx/models/filters';\nimport { TagOption } from '@optx/models/tags';\n// hooks\nimport useFilterSearch from '@hooks/filters/useSpecialFilter';\n// redux\nimport { useDispatch } from 'react-redux';\nimport { actions as tagsActions } from '@redux/company/tags';\n\nconst StyledTag = styled(Tag)`\n cursor: pointer;\n`;\n\ninterface CompanyTagValueProps extends TagProps {\n item: TagOption;\n companyId?: number;\n isNewTab?: boolean;\n}\n\nconst CompanyTagValue: React.FC<CompanyTagValueProps> = ({\n item,\n companyId = 0,\n isNewTab,\n ...props\n}) => {\n const dispatch = useDispatch();\n\n const { loadCompaniesByFilter } = useFilterSearch('company_tag' as SpecialFilterKey);\n\n // when a tag is clicked\n const handleTagClick = (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n loadCompaniesByFilter(event.currentTarget.innerText, isNewTab);\n };\n\n const deleteTag = useCallback(\n event => {\n event.stopPropagation();\n dispatch(\n tagsActions.deleteCompanyTag({\n companyId,\n id: Number.parseInt(item!.value as string),\n label: item!.label,\n })\n );\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dispatch]\n );\n\n return (\n <Overflow.Item component=\"span\">\n <StyledTag color=\"blue\" onClick={handleTagClick} {...props} className={item.className}>\n {item.label}\n {item.closable && <CloseOutlined onClick={deleteTag} />}\n </StyledTag>\n </Overflow.Item>\n );\n};\n\nexport default CompanyTagValue;\n","import React from 'react';\nimport { Tag } from 'antd';\n\ninterface CompanyTagMoreProps {\n count: number;\n isNewTab?: boolean;\n onTagMoreClick?: VoidFunction;\n}\n\nconst CompanyTagMore: React.FC<CompanyTagMoreProps> = ({ count, isNewTab, onTagMoreClick }) => {\n return (\n <Tag\n color=\"blue\"\n style={{ cursor: isNewTab ? 'default' : 'pointer' }}\n onClick={onTagMoreClick && onTagMoreClick}\n >\n {`${count} more ${count === 1 ? 'tag' : 'tags'}`}\n </Tag>\n );\n};\n\nexport default CompanyTagMore;\n","import React from 'react';\nimport { Tag } from 'antd';\nimport { TagProps } from 'antd/lib/tag';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n// models\nimport { SpecialFilterKey } from '@optx/models/filters';\n// utils\nimport { searchInNewTab } from '@optx/utils/search';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\n\ninterface IsProfolioTagProps extends TagProps {\n isPortfolio: boolean;\n newTab?: boolean;\n}\n\nconst filterKey: SpecialFilterKey = 'is_platform';\n\nconst IsProfolioTag: React.FC<IsProfolioTagProps> = ({\n isPortfolio,\n newTab,\n onClick,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const clearedFilter = useSelector(filterSelectors.getClearedFilter('advancedSearch'));\n const sources = useSelector(filterSourcesSelectors.getFiltersMap);\n const { advancedSearchPathname } = useUserRole();\n\n if (!isPortfolio) {\n return null;\n }\n\n const handleClick = (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n if (newTab) {\n searchInNewTab(clearedFilter, sources, filterKey, '1', {}, advancedSearchPathname);\n } else {\n history.push(advancedSearchPathname);\n dispatch(\n searchActions.loadCompaniesByFilter(filterKey, { gridKey: 'advancedSearch', data: '1' })\n );\n onClick && onClick(event);\n }\n };\n\n return <Tag className=\"special-tag show-child\" onClick={handleClick} {...restProps} />;\n};\n\nexport default IsProfolioTag;\n","import React from 'react';\nimport { Tag } from 'antd';\nimport { TagProps } from 'antd/lib/tag';\nimport { useDispatch, useSelector } from 'react-redux';\n// utils\nimport { searchInNewTab } from '@optx/utils/search';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\n\ninterface IsSoftwareTagProps extends TagProps {\n isSoftware: boolean;\n newTab?: boolean;\n}\n\nconst IsSoftwareTag: React.FC<IsSoftwareTagProps> = ({\n isSoftware,\n newTab,\n onClick,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n const clearedFilter = useSelector(filterSelectors.getClearedFilter('advancedSearch'));\n const sources = useSelector(filterSourcesSelectors.getFiltersMap);\n const { advancedSearchPathname } = useUserRole();\n\n if (!isSoftware) {\n return null;\n }\n\n const handleClick = (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n if (newTab) {\n searchInNewTab(clearedFilter, sources, 'is_software', '1', {}, advancedSearchPathname);\n } else {\n dispatch(\n searchActions.loadCompaniesByFilter('is_software', { gridKey: 'advancedSearch', data: '1' })\n );\n\n onClick && onClick(event);\n }\n };\n\n return (\n <Tag className=\"special-tag show-child\" onClick={handleClick} {...restProps}>\n Software\n </Tag>\n );\n};\n\nexport default IsSoftwareTag;\n","import React from 'react';\nimport { Tag } from 'antd';\nimport { TagProps } from 'antd/lib/tag';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n// models\nimport { FormCheckableRangeOption } from '@models/Option';\n// utils\nimport { searchInNewTab } from '@optx/utils/search';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\n\ninterface IsPSGCompanyTagProps extends TagProps {\n isCompany: boolean;\n newTab?: boolean;\n}\n\nconst IsPSGCompanyTag: React.FC<IsPSGCompanyTagProps> = ({\n isCompany,\n newTab,\n onClick,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const clearedFilter = useSelector(filterSelectors.getClearedFilter('advancedSearch'));\n const sources = useSelector(filterSourcesSelectors.getFiltersMap);\n const filter = useSelector(filterSelectors.getFilter('advancedSearch'));\n const scoreType = useSelector(userInformationSelectors.getDefaultScore);\n const { advancedSearchPathname } = useUserRole();\n\n if (!isCompany) {\n return null;\n }\n\n const handleClick = (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n const filterKey = scoreType === 'us' ? 'score' : 'il_optx_score';\n\n const filterValue = (filter[filterKey] as FormCheckableRangeOption[]).map(option => {\n const check = option.check?.map(checkbox =>\n checkbox.value === 'is_psg_only' ? { ...checkbox, checked: true } : checkbox\n );\n\n return { ...option, check };\n });\n\n if (newTab) {\n searchInNewTab(clearedFilter, sources, filterKey, filterValue, {}, advancedSearchPathname);\n } else {\n history.push(advancedSearchPathname);\n dispatch(\n searchActions.loadCompaniesByFilter(filterKey, {\n gridKey: 'advancedSearch',\n data: filterValue,\n })\n );\n\n onClick && onClick(event);\n }\n };\n\n return (\n <Tag className=\"special-tag show-child\" onClick={handleClick} {...restProps}>\n PSG Portfolio Company\n </Tag>\n );\n};\n\nexport default IsPSGCompanyTag;\n","import React from 'react';\nimport { Tag } from 'antd';\nimport { TagProps } from 'antd/lib/tag';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n// models\nimport { SelectOption } from '@models/Option';\n// utils\nimport { searchInNewTab } from '@utils/search';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\n\nconst diversityKey = 'diversity';\n\ninterface DiversityTagsProps extends TagProps {\n diversityTags: Array<string> | null;\n newTab?: boolean;\n}\n\nconst DiversityTags: React.FC<DiversityTagsProps> = ({\n diversityTags,\n newTab,\n onClick,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const clearedFilter = useSelector(filterSelectors.getClearedFilter('advancedSearch'));\n const sources = useSelector(filterSourcesSelectors.getFiltersMap);\n const { advancedSearchPathname } = useUserRole();\n\n if (!diversityTags) {\n return null;\n }\n\n const handleClick = (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n if (newTab) {\n const filterValue = event.currentTarget.innerText;\n\n const option: SelectOption = sources[diversityKey].data.find(\n (option: SelectOption) => option.value === filterValue\n );\n\n if (option) {\n searchInNewTab(clearedFilter, sources, diversityKey, [option], {}, advancedSearchPathname);\n }\n } else {\n history.push(advancedSearchPathname);\n dispatch(searchActions.loadDiversityFilter(event.currentTarget.innerText));\n onClick && onClick(event);\n }\n };\n\n return (\n <>\n {diversityTags.map((tag, index) => (\n <Tag className=\"special-tag\" onClick={handleClick} {...restProps} key={index}>\n {tag}\n </Tag>\n ))}\n </>\n );\n};\n\nexport default DiversityTags;\n","import React from 'react';\nimport AsyncCreatable from 'react-select/async-creatable';\nimport classNames from 'classnames';\nimport { OptionsType, InputActionMeta, ValueType, GroupedOptionsType } from 'react-select';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { MultiSelectAsyncProps } from './interfaces';\n// hooks\nimport { useAsyncSelect } from './AsyncSelect';\n// components\nimport {\n DropdownIndicator,\n MultiValueRemove,\n MultiValueLabel,\n ValueContainer,\n Option,\n} from './components';\n// styles\nimport './style.scss';\n\ntype AsyncCreatableMultiSelectProps = MultiSelectAsyncProps & {\n disableValueRemove?: boolean;\n className?: string;\n wrapperClassName?: string;\n selectRef?:\n | string\n | ((instance: AsyncCreatable<SelectOption> | null) => void)\n | React.RefObject<AsyncCreatable<SelectOption>>\n | null\n | undefined;\n onMenuClose?: VoidFunction;\n onTagClick?: (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => void;\n onInputChange?: (newValue: string, actionMeta: InputActionMeta) => void;\n /**\n * Children nodes added before tags in the same container.\n */\n tagsChildrenStart?: React.ReactNode;\n /**\n * Children nodes added after tags in the same container.\n */\n tagsChildrenEnd?: React.ReactNode;\n value?: OptionsType<SelectOption>;\n bodyDisplay?: boolean;\n validateCreateOption?: (value: string) => boolean;\n};\n\nconst AsyncCreatableMultiSelect: React.FC<AsyncCreatableMultiSelectProps> = ({\n loadOptions,\n onChange,\n onInputChange,\n preDefinedSelectedValues,\n disableValueRemove,\n tagsChildrenStart,\n tagsChildrenEnd,\n className,\n wrapperClassName,\n onMenuClose,\n selectRef,\n bodyDisplay,\n onTagClick,\n value,\n validateCreateOption,\n}) => {\n const { selectedOption, listSelectedItems, MultiValueContainer, handleChange } = useAsyncSelect({\n onChange,\n preDefinedSelectedValues,\n onTagClick,\n value,\n });\n\n return (\n <div className={classNames('multiselect-wrapper', wrapperClassName)}>\n <AsyncCreatable\n ref={selectRef}\n className={className}\n value={selectedOption}\n onChange={handleChange}\n onInputChange={onInputChange}\n isMulti\n hideSelectedOptions={false}\n isClearable={false}\n loadOptions={loadOptions}\n cacheOptions\n components={{\n MultiValueContainer,\n MultiValueLabel,\n // Temporary empty value until things are changed.\n MultiValueRemove: disableValueRemove ? () => null : MultiValueRemove,\n ValueContainer,\n DropdownIndicator,\n Option: props =>\n disableValueRemove ? <Option {...props} disabled /> : <Option {...props} />,\n }}\n classNamePrefix=\"multiselect-select\"\n placeholder=\"search\"\n onMenuClose={onMenuClose}\n isValidNewOption={\n validateCreateOption\n ? (\n inputValue: string,\n value: ValueType<SelectOption<string>>,\n options:\n | OptionsType<SelectOption<string>>\n | GroupedOptionsType<SelectOption<string>>\n ) => {\n return (\n // adding a custom validation function for isValidNewOption prop removes existing check for\n // preventing option from appearing both as an option and as a creatable option.\n // before calling the validation function we need to check for existing option\n !(options as SelectOption[]).some(option => option.value === inputValue.trim()) &&\n validateCreateOption(inputValue)\n );\n }\n : undefined\n }\n />\n {bodyDisplay && (\n <div className=\"multiselect-list__body\">\n {tagsChildrenStart}\n {listSelectedItems}\n {tagsChildrenEnd}\n </div>\n )}\n </div>\n );\n};\n\nexport default AsyncCreatableMultiSelect;\n","import React, { useState, useMemo, useEffect } from 'react';\nimport classnames from 'classnames';\nimport { ActionMeta, OptionsType, ValueType } from 'react-select';\nimport { Tag } from 'antd';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { SelectedList } from './interfaces';\n// constants\nimport { SELECT_NONE } from './constants';\n\ninterface UseAsyncSelectProps {\n onChange: (values: OptionsType<SelectOption>, actionMeta: ActionMeta<SelectOption>) => void;\n preDefinedSelectedValues: OptionsType<SelectOption> | undefined;\n onTagClick?: (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => void;\n /**\n * Allow value manual control from parent.\n */\n value?: OptionsType<SelectOption>;\n allowSelectNone?: boolean;\n}\n\nexport const useAsyncSelect = ({\n onChange,\n preDefinedSelectedValues,\n onTagClick,\n value,\n allowSelectNone,\n}: UseAsyncSelectProps) => {\n const [selectedOption, setSelectedOption] = useState<OptionsType<SelectOption>>();\n const [selectedList, setSelectedList] = useState<Array<SelectedList>>();\n\n useEffect(() => {\n // If is controlled.\n if (value) {\n setSelectedOption(value);\n } else if (!selectedList?.length && preDefinedSelectedValues) {\n // if there are options already selected, set them.\n setSelectedOption(preDefinedSelectedValues);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [preDefinedSelectedValues, value]);\n\n /**\n * removeSelectedItem - called when a selected option is removed.\n * @param optionValue\n */\n const removeSelectedItem = (optionValue: SelectOption) => {\n const newSelectedList: Array<SelectedList> = selectedList || [];\n let selectedFilter: Array<SelectedList> = [...newSelectedList];\n\n selectedFilter = newSelectedList\n .filter(item => {\n return item.value !== optionValue.value;\n })\n .map(item => item);\n\n setSelectedList([...selectedFilter]);\n };\n\n /**\n * customMultiValueContainer - replace the plugin's original function.\n */\n const MultiValueContainer: React.FC = ({ innerProps, children, data }: any) => {\n const newSelectedList: Array<SelectedList> = selectedList || [];\n\n const selectedFilter = newSelectedList.filter(item => {\n return item.value === data.value;\n });\n // fixes the cannot update a component while rendering a different component warning\n useEffect(() => {\n if (!selectedFilter.length) {\n newSelectedList.push({\n value: data.value,\n label: data.label,\n children,\n });\n\n setSelectedList([...newSelectedList]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return <div {...innerProps}>{children}</div>;\n };\n\n /**\n * handleChange - called whenever a option is selected or removed.\n * @param optionValue\n * @param optionAction\n */\n const handleChange = (\n optionValue: ValueType<SelectOption>,\n actionMeta: ActionMeta<SelectOption>\n ) => {\n const newSelectedOption: OptionsType<SelectOption> = optionValue\n ? (optionValue as OptionsType<SelectOption>)\n : [];\n\n if (actionMeta.action === 'select-option' && allowSelectNone) {\n if (actionMeta.option === SELECT_NONE) {\n setSelectedOption([]);\n setSelectedList([]);\n\n return onChange && onChange([], actionMeta);\n }\n\n const isNoneSelected = newSelectedOption.find(\n (val: SelectOption) => val.value === SELECT_NONE.value\n );\n\n if (isNoneSelected) {\n const options: OptionsType<SelectOption> = newSelectedOption.filter(\n (val: SelectOption) => val.value !== SELECT_NONE.value\n );\n\n removeSelectedItem(isNoneSelected);\n setSelectedOption(options);\n\n return onChange && onChange(options, actionMeta);\n }\n }\n\n // If option is removed\n if (actionMeta.action === 'remove-value' || actionMeta.action === 'deselect-option') {\n // @ts-ignore\n const removedValue: SelectOption = actionMeta.removedValue || actionMeta.option;\n\n removeSelectedItem(removedValue);\n setSelectedOption(newSelectedOption);\n } else if (!value) {\n // If we don't control value update selection.\n setSelectedOption(newSelectedOption);\n }\n\n return onChange && onChange(newSelectedOption, actionMeta);\n };\n\n /**\n * listSelectedItems - list all selected values below the dropdown.\n */\n const listSelectedItems = useMemo(() => {\n return selectedList?.map(item => {\n const tagClassName = classnames('multiselect-list__body-tag', {\n 'multiselect-list__body-tag__none': allowSelectNone && item.value === SELECT_NONE.value,\n });\n\n return (\n <Tag color=\"blue\" className={tagClassName} key={item.value} onClick={onTagClick}>\n {item.children}\n </Tag>\n );\n });\n }, [selectedList, onTagClick, allowSelectNone]);\n\n return {\n selectedOption,\n handleChange,\n MultiValueContainer,\n listSelectedItems,\n };\n};\n","import React, { useCallback, useRef } from 'react';\nimport { Button } from 'antd';\nimport classNames from 'classnames';\nimport { useDispatch } from 'react-redux';\nimport AsyncCreatable from 'react-select/async-creatable';\nimport { OptionsType, ActionMeta, InputActionMeta } from 'react-select';\n// models\nimport { SpecialFilterKey } from '@optx/models/filters';\nimport { SelectOption } from '@optx/models/Option';\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// constants\nimport { OPTXChromePlugin, companyPageTop } from '@optx/constants/pendoActions';\nimport { COMPANY_TAG_ENDPOINT } from '@constants/asyncEndpoints';\n// utils\nimport { isNotOnlyEmptySpaces } from '@optx/utils/string';\n// redux\nimport { actions as tagsActions } from '@redux/company/tags';\n// hooks\nimport { useToggle } from '@optx/common/hooks/modal';\nimport useFilterSearch from '@optx/common/hooks/filters/useSpecialFilter';\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\n// components\nimport { PlusOutlined } from '@ant-design/icons';\nimport AsyncCreatableMultiSelect from '@optx/components/common/select/AsyncCreatableMultiSelect';\n// styles\nimport './style.scss';\n\ninterface AddTagsProps {\n companyId: number;\n value: SelectOption[];\n isCollapsed?: boolean;\n}\n\nconst AddTags: React.FC<AddTagsProps> = ({ companyId, value, isCollapsed }) => {\n const addTagRef = useRef(null);\n const [showAddButton, toggleShowAddButton] = useToggle(false);\n const { loadCompaniesByFilter } = useFilterSearch('company_tag' as SpecialFilterKey);\n useOnClickOutside(addTagRef, () => toggleShowAddButton());\n\n // when a tag is clicked\n const handleTagClick = (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n loadCompaniesByFilter(event.currentTarget.innerText, true);\n };\n\n const dispatch = useDispatch();\n const addTag = useCallback(\n (companyId: number, tag: string) =>\n dispatch(tagsActions.addCompanyTag({ companyId, name: tag })),\n [dispatch]\n );\n\n const deleteTag = useCallback(\n (companyId: number, tagId: number, label?: string) =>\n dispatch(tagsActions.deleteCompanyTag({ companyId, id: tagId, label })),\n [dispatch]\n );\n\n const onChange = (\n values: OptionsType<SelectOption<string | number>>,\n actionMeta: ActionMeta<SelectOption<string | number>>\n ) => {\n switch (actionMeta.action) {\n case 'select-option':\n\n // eslint-disable-next-line no-fallthrough\n case 'create-option': {\n const option = values[values.length - 1];\n addTag(companyId, option.label);\n\n toggleShowAddButton();\n break;\n }\n\n case 'remove-value': {\n const { removedValue } = actionMeta;\n deleteTag(companyId, Number.parseInt(removedValue!.value as string), removedValue!.label);\n break;\n }\n\n default:\n break;\n }\n };\n\n const { loadOptions } = useAsyncSearch({\n endpoint: COMPANY_TAG_ENDPOINT,\n });\n\n const selectRef = useRef<AsyncCreatable<SelectOption> | null>(null);\n\n const handleClick = () => {\n const chromeExtensionExists = document.getElementsByClassName('extension-tabs').length;\n\n if (chromeExtensionExists) {\n window.pendo.track(OPTXChromePlugin.companyPage.descriptions.addTag);\n } else {\n window.pendo.track(companyPageTop.addTagButton);\n }\n\n toggleShowAddButton();\n\n // focus select after is shown.\n setTimeout(() => {\n if (selectRef.current) {\n selectRef.current.focus();\n }\n }, 0);\n };\n\n const handleMenuClose = () => {\n if (!showAddButton) {\n toggleShowAddButton();\n }\n };\n\n const handleInputChange = (newValue: string, { action }: InputActionMeta) => {\n switch (action) {\n case 'input-change': {\n // This prevents a bug where the query is called without the last letter of previous query\n // eg: If user writes 'auto', query is 'auto'. If the second time user writes 'auto', query will be 'aut'.\n // This seems to fix above problem;\n loadOptionsAfterInputChange(newValue, () => {});\n break;\n }\n\n default:\n break;\n }\n };\n\n const loadOptionsAfterInputChange = (query: string, callback: SuccessErrorCallback) => {\n loadOptions(query, options => {\n const callbackResult = callback(options);\n\n return callbackResult;\n });\n };\n\n if (!showAddButton) {\n return (\n <Button\n className={classNames('btn--add-tag', isCollapsed === false && 'not-collapsed__btn')}\n type=\"primary\"\n ghost\n onClick={handleClick}\n icon={<PlusOutlined />}\n size=\"small\"\n >\n Add Tag\n </Button>\n );\n }\n\n return (\n <div\n ref={addTagRef}\n className={classNames('btn--add-tag', isCollapsed === false && 'not-collapsed')}\n >\n <AsyncCreatableMultiSelect\n loadOptions={loadOptionsAfterInputChange}\n onChange={onChange}\n value={value}\n onInputChange={handleInputChange}\n selectRef={selectRef}\n onMenuClose={handleMenuClose}\n onTagClick={handleTagClick}\n closeMenuOnSelect\n wrapperClassName=\"company-tags\"\n bodyDisplay={false}\n disableValueRemove\n validateCreateOption={isNotOnlyEmptySpaces}\n />\n </div>\n );\n};\n\nexport default AddTags;\n","import { Tag } from 'antd';\nimport { TagProps } from 'antd/lib/tag';\nimport styled, { css } from 'styled-components';\n\nconst OverflowTagsWrapper = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin-left: 0;\n\n .special-tag {\n font-size: 12px;\n background: #d6e4ff;\n /* Dark BLue */\n color: #334d6e;\n }\n`;\n\nconst TagsWrapper = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n margin-left: 0;\n flex-wrap: wrap;\n\n .special-tag {\n font-size: 12px;\n background: #d6e4ff;\n /* Dark BLue */\n color: #334d6e;\n }\n .ant-tag {\n margin: 5px 5px 0px 0px;\n }\n`;\n\nconst StyledTag = styled<React.FC<TagProps & { $notTruncated?: boolean }>>(Tag)`\n cursor: pointer;\n ${props =>\n props.$notTruncated &&\n css`\n cursor: pointer;\n margin: 5px 10px 5px 0 !important;\n `}\n`;\n\nexport const Styled = {\n OverflowTagsWrapper,\n TagsWrapper,\n StyledTag,\n};\n","import React from 'react';\n// models\nimport Company from '@optx/models/Company';\n// utils\nimport { getIsPsgCompany, getTags } from '@optx/utils/company';\n// components\nimport { TagOption } from '@optx/models/tags';\nimport IsPortfolioTag from './IsPortfolioTag';\nimport IsSoftwareTag from './IsSoftwareTag';\nimport DiversityTags from './DiversityTags';\nimport CompanyTagValue from './CompanyTagValue';\nimport AddTags from './AddTags';\nimport IsPSGCompanyTag from './IsPSGCompanyTag';\nimport IsAIMlTag from './IsAIMl';\n// styles\nimport { Styled } from './CompanyTags.styles';\n\ninterface CompanyTagsProps {\n company: Company;\n newTab?: boolean;\n isAdd?: boolean;\n closable?: boolean;\n isCollapsed?: boolean;\n}\n\nconst CompanyTags: React.FC<CompanyTagsProps> = ({\n company,\n newTab,\n isAdd = false,\n closable,\n isCollapsed,\n}) => {\n const companyProfileTags = getTags(company.specialties);\n\n const companyTag = company.cs_tags\n ? company.cs_tags\n .split('|')\n .slice(1)\n .map(item => ({\n label: item,\n value: item,\n closable: false,\n }))\n .sort((a, b) => a.label.localeCompare(b.label))\n : [];\n\n const allTags = closable ? [...companyProfileTags, ...companyTag] : companyTag;\n\n const uniqueTags = Array.from(new Set(allTags.map(item => item.label))).map(item => ({\n label: item,\n value: allTags.find(a => a.label === item)?.value,\n closable: allTags.find(a => a.label === item)?.closable,\n }));\n\n return (\n <Styled.TagsWrapper>\n <IsPSGCompanyTag newTab={newTab} isCompany={getIsPsgCompany(company)} />\n\n <IsSoftwareTag newTab={newTab} isSoftware={company.is_software} />\n\n <IsAIMlTag newTab={newTab} isAiMl={company.is_ai_ml} />\n\n <IsPortfolioTag newTab={newTab} isPortfolio={company.is_platform}>\n Platform Company\n </IsPortfolioTag>\n\n <DiversityTags newTab={newTab} diversityTags={company.diversity} />\n\n {uniqueTags &&\n uniqueTags.map((item: TagOption) => {\n return <CompanyTagValue key={item.value} item={item} companyId={company.company_id} />;\n })}\n\n {isAdd && (\n <AddTags\n value={uniqueTags.map(item => ({\n label: item.label,\n value: item.label,\n disabled: true,\n }))}\n companyId={company.company_id as number}\n isCollapsed={isCollapsed}\n />\n )}\n </Styled.TagsWrapper>\n );\n};\n\nexport default React.memo(CompanyTags);\n","import React, { Context, useContext, useRef } from 'react';\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\nimport { Typography } from 'antd';\nimport { countBy, pickBy } from 'lodash';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// constants\nimport { COMPANY_TAG_ENDPOINT } from '@constants/asyncEndpoints';\n// redux\nimport { useSelector } from 'react-redux';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport { selectors as searchSelectors } from '@features/grid/search';\n// components\nimport './style.scss';\nimport MultiSelectAsync from '@optx/shared/view/molecules/Select/AsyncMultiSelect';\nimport CompanyTagValue from './CompanyTagValue';\n\ninterface BulkAddTagsProps {\n context: Context<BulkEditFieldContext>;\n}\n\nconst BulkAddTags: React.FC<BulkAddTagsProps> = ({ context }) => {\n const addTagRef = useRef(null);\n const { setSelectedData, gridName } = useContext(context);\n const companiesTagInMyCompaniesPage = useSelector(searchSelectors.getCompanies('myCompanies'));\n const companiesTagInMyHomePage = useSelector(searchSelectors.getCompanies('advancedSearch'));\n const getSeletedCompanies = useSelector(\n bulkActionsSelectors.selectedCompanies.getSelectedCompanies(gridName)\n );\n const companiesTagInMyWatchList = useSelector(searchSelectors.getCompanies('lists'));\n\n const handleCompaniesTag = () => {\n if (gridName === 'advancedSearch') {\n return companiesTagInMyHomePage;\n }\n\n if (gridName === 'myCompanies') {\n return companiesTagInMyCompaniesPage;\n }\n\n if (gridName === 'lists') {\n return companiesTagInMyWatchList;\n }\n\n return [];\n };\n\n const companiesTagsFiltered = getSeletedCompanies\n .map((_, index) => {\n return handleCompaniesTag().filter(\n company => company.company_id === getSeletedCompanies[index].company_id\n );\n })\n .flat();\n\n const arrayOfTags = companiesTagsFiltered.map(item => item.cs_tags.split('|').slice(1)).flat();\n const occurrencesOfTags = countBy(arrayOfTags);\n\n for (const tag in occurrencesOfTags) {\n if (occurrencesOfTags[tag] > companiesTagsFiltered.length) {\n occurrencesOfTags[tag] = companiesTagsFiltered.length;\n }\n }\n\n const tagNames = Object.keys(\n pickBy(occurrencesOfTags, (value, key) => value === getSeletedCompanies.length)\n );\n\n const tagsFiltered = tagNames.filter(item => item !== '' && /\\S/.test(item));\n\n const tagsMapped = tagsFiltered.map(item => {\n return {\n label: item,\n value: item,\n };\n });\n\n const { loadOptions } = useAsyncSearch({\n endpoint: COMPANY_TAG_ENDPOINT,\n });\n\n return (\n <div ref={addTagRef}>\n <div>\n <Typography.Text className=\"ant-modal-title\">Existing Sharing Tags</Typography.Text>\n </div>\n <div className=\"d-flex flex-wrap\" style={{ marginBottom: '5%', rowGap: '8px' }}>\n {tagsMapped.map((item, index) => (\n <CompanyTagValue key={index} item={item} />\n ))}\n </div>\n <div style={{ marginBottom: '2%' }}>\n <Typography.Text className=\"ant-modal-title\">Add new Tags</Typography.Text>\n </div>\n <MultiSelectAsync\n onChange={option => {\n // @ts-ignore\n setSelectedData(option as SelectOption);\n }}\n isCreatable\n loadOptions={loadOptions}\n menuIsOpen\n className=\"bulk-action-multiselect\"\n maxMenuHeight={200}\n />\n </div>\n );\n};\n\nexport default BulkAddTags;\n","import React from 'react';\nimport Overflow from 'rc-overflow';\nimport { TagProps } from 'antd/lib/tag';\n// models\nimport { ListTag } from '@optx/models/tags';\n// constants\nimport appRoutes from '@constants/routes';\n// styles\nimport ListTagStyled from '@features/tags/tags/ListTag.styles';\n\ninterface ListTagValueeProps extends TagProps {\n item: ListTag;\n isNewTab?: boolean;\n}\n\nconst ListTagValue: React.FC<ListTagValueeProps> = ({ item, isNewTab, ...props }) => {\n // when a tag is clicked\n const handleTagClick = (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n window.open(appRoutes.userLists.list.replace(':id', item.list_id as string), '_blank');\n };\n\n return (\n <Overflow.Item component=\"span\">\n <ListTagStyled color=\"cyan\" onClick={handleTagClick} {...props}>\n {item.title}\n </ListTagStyled>\n </Overflow.Item>\n );\n};\n\nexport default ListTagValue;\n","import React from 'react';\nimport { Tag } from 'antd';\n\ninterface ListTagMoreProps {\n count: number;\n onTagMoreClick?: VoidFunction;\n}\n\nconst ListTagMore: React.FC<ListTagMoreProps> = ({ count, onTagMoreClick }) => {\n return (\n <Tag color=\"cyan\" onClick={onTagMoreClick && onTagMoreClick}>{`${count} more ${\n count === 1 ? 'list' : 'lists'\n }`}</Tag>\n );\n};\n\nexport default ListTagMore;\n","import { createAction } from '@reduxjs/toolkit';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { FilterTag } from '@optx/models/tags';\nimport { SearchContactsPayload, ResetTo } from './interfaces';\nimport * as types from './actionTypes';\n\n// search\nexport const searchContacts = createAction<Partial<SearchContactsPayload> | undefined>(\n types.SEARCH_CONTACTS\n);\n\n// reset search\nconst prepareSearchContactsSuccess = (data: Array<CompanyUserContact>, searchTitle?: string) => ({\n payload: {\n data,\n searchTitle,\n },\n});\n\nexport const searchContactsSuccess = createAction(\n types.SEARCH_CONTACTS_SUCCESS,\n prepareSearchContactsSuccess\n);\n\nexport const searchContactsFail = createAction<string>(types.SEARCH_CONTACTS_FAIL);\n\n// reset search\nconst prepareReset = (clearFilter: boolean, resetTo?: ResetTo, searchTitle?: string) => ({\n payload: {\n clearFilter,\n resetTo,\n searchTitle,\n },\n});\n\nexport const removeFilter = createAction<FilterTag>(types.REMOVE_FILTER);\n\nexport const reset = createAction(types.RESET_SEARCH_CONTACTS, prepareReset);\n","export const FETCH_COMPANY_PROFILE = 'FETCH_COMPANY_PROFILE';\nexport const FETCH_COMPANY_PROFILE_SUCCESS = 'FETCH_COMPANY_PROFILE_SUCCESS';\nexport const FETCH_COMPANY_PROFILE_FAIL = 'FETCH_COMPANY_PROFILE_FAIL';\n\nexport const BACK_TO_RESULTS = 'BACK_TO_RESULTS';\n\nexport const RESET_COMPANY_PROFILE = 'RESET_COMPANY_PROFILE';\n\nexport const SET_SELECTED_DESCRIPTION = 'SET_SELECTED_DESCRIPTION';\n\nexport const VIEW_SIMILAR_COMPANIES_ON_GRID = 'VIEW_SIMILAR_COMPANIES_ON_GRID';\n\n// AI Description\nexport const REGENERATE_AI_DESCRIPTION = 'REGENERATE_AI_DESCRIPTION';\nexport const REGENERATE_AI_DESCRIPTION_SUCCESS = 'REGENERATE_AI_DESCRIPTION_SUCCESS';\nexport const REGENERATE_AI_DESCRIPTION_FAIL = 'REGENERATE_AI_DESCRIPTION_FAIL';\n\nexport const OPINION_AI_DESCRIPTION = 'OPINION_AI_DESCRIPTION';\nexport const OPINION_AI_DESCRIPTION_SUCCESS = 'OPINION_AI_DESCRIPTION_SUCCESS';\nexport const OPINION_AI_DESCRIPTION_FAIL = 'OPINION_AI_DESCRIPTION_FAIL';\n\n// relationship summary\nexport const AI_RELATIONSHIP_SUMMARY = 'AI_RELATIONSHIP_SUMMARY';\nexport const AI_RELATIONSHIP_SUMMARY_SUCCESS = 'AI_RELATIONSHIP_SUMMARY_SUCCESS';\nexport const AI_RELATIONSHIP_SUMMARY_FAIL = 'AI_RELATIONSHIP_SUMMARY_FAIL';\n","export const featureName = 'companyEditAllForm';\n","export const FIELD_REQUIRED_ERROR = 'Field is required!';\n","import { GroupedOptionsType, GroupType, OptionsType, OptionTypeBase } from 'react-select';\n// models\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport { SalesloftContact } from '@optx/models/Salesloft';\n\n/**\n * Check if select options are grouped.\n * @param options select options.\n */\n\nexport function hasGroups(options: OptionsType<any> | GroupedOptionsType<any> | undefined) {\n return options && options.some(option => (option as GroupType<any>).options);\n}\n\n/**\n * filter dropdown options\n * @param {string} input field value\n * @param {OptionTypeBase | undefined} option dropdown value to be checked\n */\nexport const filterOption = (input: string, option: OptionTypeBase | undefined) => {\n if (typeof option?.children === 'string') {\n return option?.children.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n }\n\n if (option?.children?.props?.group?.text) {\n return option?.children.props.group.text.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n }\n\n if (option?.children?.props?.className === 'truncate-tooltip') {\n return option.children.props.children?.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n }\n\n return false;\n};\n\n/**\n * special case for filter dropdown options for contact selects\n * @param {string} input field value\n * @param {OptionTypeBase | undefined} option drodpdown value to be checked\n */\nexport const contactFilterOption = (input: string, option: OptionTypeBase | undefined) => {\n const fullName = `${option?.children.props.contact.first_name} ${option?.children.props.contact.last_name}`;\n\n return fullName.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n};\n\n/**\n * check dropdown options\n * @param {string} showKey field value\n * @param {(item: string) => boolean} filterLabel handle label filtering\n * @param {OptionTypeBase} option dropdown value to be checked\n */\nexport const checkOption = (\n showKey: string,\n filterLabel: (item: string) => boolean,\n option: OptionTypeBase\n) => {\n return (\n (showKey === 'value' && filterLabel(option.label)) ||\n option.label === '' ||\n option.label === null\n );\n};\n\n/**\n * Reorders the selected contact ids to ensure that the primary contact is always first in the list.\n * @param {number[]} selectedContactIds - An array of selected contact ids.\n * @param {CompanyUserContact[]} contacts - An array of company contacts.\n * @returns {number[]} The reordered array of selected contact ids.\n */\nexport const reorderPrimaryContact = (\n selectedContactIds: number[],\n contacts: CompanyUserContact[] | SalesloftContact[]\n) => {\n const primaryContactId = (contacts as CompanyUserContact[]).find(\n contacts => contacts.primary_contact\n )?.person_id;\n\n if (primaryContactId && selectedContactIds.includes(primaryContactId)) {\n const rearrangedIds = [\n primaryContactId,\n ...selectedContactIds.filter(id => id !== primaryContactId),\n ];\n\n return rearrangedIds;\n }\n\n return selectedContactIds;\n};\n","import React, { useEffect, useState } from 'react';\nimport Overflow from 'rc-overflow';\nimport styled from 'styled-components';\n// utils\nimport { tagsValue } from '@optx/utils/filters/mapTags';\n// components\nimport { FilterTagValue, FilterTagMore } from '@optx/features/tags/tags';\nimport { FilterTag } from '@optx/models/tags';\n\ninterface FilterTagsOverflowProps {\n options: FilterTag[];\n closable?: (item: FilterTag) => boolean;\n isFullWidth?: boolean;\n multipleValue: boolean;\n onClick?: () => void;\n onClose: (item: FilterTag) => () => void;\n}\n\nconst NormalWrapper = styled.div`\n max-width: 100%;\n width: 100%;\n`;\n\nconst FullWrapper = styled.div`\n max-width: 100%;\n width: 100%;\n display: flex;\n justify-content: flex-end;\n`;\n\nconst FilterTagsOverflow: React.FC<FilterTagsOverflowProps> = props => {\n const {\n options,\n closable = () => true,\n isFullWidth = false,\n multipleValue,\n onClick,\n onClose,\n } = props;\n const [activeOptions, setActiveOptions] = useState<FilterTag[]>([]);\n const [clearedFilters, setClearFilters] = useState<string[]>([]);\n\n let Wrapper = null;\n\n if (isFullWidth) {\n Wrapper = FullWrapper;\n } else {\n Wrapper = NormalWrapper;\n }\n\n const onCloseAction = (tag: FilterTag) => {\n if (tag.resetFor?.length) {\n setClearFilters(tag.resetFor);\n }\n\n onClose(tag)();\n };\n\n useEffect(() => {\n const filteredOptions = options.filter(item => !clearedFilters.includes(item.filter));\n setActiveOptions(filteredOptions);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [clearedFilters]);\n\n useEffect(() => {\n setActiveOptions(options);\n setClearFilters([]);\n }, [options]);\n\n return (\n <Wrapper>\n <Overflow\n data={\n activeOptions &&\n activeOptions.map((item: FilterTag) => ({\n ...item,\n stringifiedValues: multipleValue ? tagsValue(item, 2) : item.stringifiedValues,\n }))\n }\n renderRawItem={(item: FilterTag) => (\n <FilterTagValue\n item={item}\n key={item.uniqueKey}\n onClose={() => onCloseAction(item)}\n onClick={onClick}\n closable={item.closable ?? closable(item)}\n className=\"keep-space-sequence\"\n />\n )}\n renderRest={items => (\n <FilterTagMore\n items={items}\n onClose={onClose}\n toggleFiltersModal={onClick}\n closable={closable}\n />\n )}\n maxCount=\"responsive\"\n />\n </Wrapper>\n );\n};\n\nexport default FilterTagsOverflow;\n","import React from 'react';\nimport Overflow from 'rc-overflow';\nimport styled from 'styled-components';\n// models\nimport { TagOption } from '@optx/models/tags';\nimport Company from '@optx/models/Company';\n// utils\nimport { getIsPsgCompany, getTags } from '@optx/utils/company';\n// components\nimport {\n CompanyTagMore,\n CompanyTagValue,\n IsPortfolioTag,\n IsSoftwareTag,\n IsPSGCompanyTag,\n AddTags,\n} from '@optx/features/tags/tags';\nimport PSGFit from '@optx/components/pages/CompanyProfile/ProfileBanner/PSGFit';\nimport IsAIMlTag from '../tags/IsAIMl';\n\nconst OverflowTagsWrapper = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin-left: 0;\n\n .special-tag {\n font-size: 12px;\n background: #d6e4ff;\n /* Dark BLue */\n color: #334d6e;\n }\n`;\n\nconst NormalWrapper = styled.div`\n max-width: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n flex: 1;\n`;\n\ninterface CompanyTagsOverflowProps {\n company: Company;\n companyId?: number | boolean;\n isNewTab?: boolean;\n isAdd?: boolean;\n closable?: boolean;\n onTagMoreClick?: VoidFunction;\n isCollapsed?: boolean;\n showPSGFit?: boolean;\n}\n\ninterface Tag {\n label: string;\n value: string;\n closable: boolean;\n className: string;\n}\n\nconst CompanyTagsOverflow: React.FC<CompanyTagsOverflowProps> = ({\n company,\n companyId,\n isNewTab = false,\n isAdd = false,\n closable = false,\n onTagMoreClick,\n isCollapsed,\n showPSGFit,\n}) => {\n const companyProfileTags = getTags(company.specialties);\n\n const companyTag: Tag[] = company.cs_tags\n ? company.cs_tags\n .split('|')\n .slice(1)\n .filter(item => item !== 'Â' && /\\S/.test(item))\n .map(item => ({\n label: item,\n value: item,\n closable: false,\n className: '',\n }))\n .sort((a, b) => a.label.localeCompare(b.label))\n : [];\n\n const diversityTags: Tag[] = company.diversity\n ? company.diversity.map(item => ({\n label: item,\n value: item,\n closable: false,\n className: 'special-tag show-child',\n }))\n : [];\n\n const allTags = closable\n ? [...diversityTags, ...companyProfileTags, ...companyTag]\n : [...diversityTags, ...companyTag];\n\n let uniqueTags = Array.from(new Set(allTags.map(item => item.label))).map(item => ({\n label: item,\n value: allTags.find(a => a.label === item)?.value,\n closable: allTags.find(a => a.label === item)?.closable,\n className: allTags.find(a => a.label === item)?.className,\n type: 'regular',\n }));\n\n /**\n * Add Platform | Software | PSG Company tags to overflow container\n */\n\n if (company.is_platform) {\n uniqueTags.unshift({\n label: 'Platform',\n value: 'Platform',\n closable: false,\n className: 'special-tag',\n type: 'platform',\n });\n }\n\n if (company.is_ai_ml) {\n uniqueTags.unshift({\n label: 'AI / ML',\n value: 'AI / ML',\n closable: false,\n className: 'special-tag ',\n type: 'companyAiMl',\n });\n }\n\n if (company.is_software) {\n uniqueTags.unshift({\n label: 'Software',\n value: 'Software',\n closable: false,\n className: 'special-tag ',\n type: 'software',\n });\n }\n\n if (getIsPsgCompany(company)) {\n uniqueTags.unshift({\n label: 'PSG Company',\n value: 'PSG Company',\n closable: false,\n className: 'special-tag',\n type: 'psgCompany',\n });\n }\n\n return (\n <OverflowTagsWrapper>\n <NormalWrapper>\n <Overflow\n data={uniqueTags && (uniqueTags as TagOption[])}\n renderRawItem={item => {\n switch (item.type) {\n case 'software':\n return (\n <Overflow.Item component=\"span\">\n <IsSoftwareTag newTab={isNewTab} isSoftware={company.is_software} />\n </Overflow.Item>\n );\n case 'companyAiMl':\n return (\n <Overflow.Item component=\"span\">\n <IsAIMlTag newTab={isNewTab} isAiMl={company.is_ai_ml} />\n </Overflow.Item>\n );\n case 'platform':\n return (\n <Overflow.Item component=\"span\">\n <IsPortfolioTag newTab={isNewTab} isPortfolio={company.is_platform}>\n Platform Company\n </IsPortfolioTag>\n </Overflow.Item>\n );\n case 'psgCompany':\n return (\n <Overflow.Item component=\"span\">\n <IsPSGCompanyTag newTab={isNewTab} isCompany={true} />\n </Overflow.Item>\n );\n case 'regular':\n default:\n return (\n <CompanyTagValue\n companyId={companyId as number}\n item={item}\n key={item.value}\n isNewTab={isNewTab}\n />\n );\n }\n }}\n renderRest={items => (\n <CompanyTagMore\n count={items.length}\n isNewTab={isNewTab}\n onTagMoreClick={onTagMoreClick}\n />\n )}\n maxCount=\"responsive\"\n style={{ justifyContent: 'flex-start' }}\n suffix={\n isAdd && (\n <div className=\"add-tags-suffix\">\n <AddTags\n value={uniqueTags.map(item => ({\n label: item.label,\n value: item.label,\n disabled: true,\n }))}\n companyId={companyId as number}\n isCollapsed={isCollapsed}\n />\n {showPSGFit && <PSGFit isFromHistory={false} />}\n </div>\n )\n }\n />\n </NormalWrapper>\n </OverflowTagsWrapper>\n );\n};\n\nexport default CompanyTagsOverflow;\n","import { FC, memo } from 'react';\nimport Overflow from 'rc-overflow';\nimport styled from 'styled-components';\n// models\nimport { ListTag } from '@optx/models/tags';\n// components\nimport { ListTagMore, ListTagValue } from '@optx/features/tags/tags';\nimport { orderTags } from '@optx/utils/orderTags';\n\nconst OverflowTagsWrapper = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin-left: 0;\n\n &.list-tags__custom-styling {\n margin-top: 5px;\n }\n\n .special-tag {\n font-size: 12px;\n background: #d6e4ff;\n color: #006d75;\n }\n`;\n\nconst NormalWrapper = styled.div`\n max-width: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n flex: 1;\n margin: 0;\n`;\n\ninterface ListTagsOverflowProps {\n tags: ListTag[] | null;\n onTagMoreClick?: VoidFunction;\n className?: string;\n}\n\nconst ListTagsOverflow: FC<ListTagsOverflowProps> = ({ tags, onTagMoreClick, ...rest }) => {\n if (!tags) return null;\n\n return (\n <OverflowTagsWrapper {...rest}>\n <NormalWrapper>\n <Overflow\n data={\n tags &&\n orderTags(tags)?.map((item: ListTag) => ({\n ...item,\n label: item.title,\n value: item.title,\n }))\n }\n renderRawItem={item => <ListTagValue item={item} />}\n renderRest={items => <ListTagMore count={items.length} onTagMoreClick={onTagMoreClick} />}\n maxCount=\"responsive\"\n style={{ justifyContent: 'flex-start' }}\n />\n </NormalWrapper>\n </OverflowTagsWrapper>\n );\n};\n\nexport default memo(ListTagsOverflow);\n","import { FC, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { ListTag } from '@optx/models/tags';\n// constants\nimport appRoutes from '@constants/routes';\n// utils\nimport { orderTags } from '@optx/utils/orderTags';\n// redux\nimport { actions as columnActions, selectors as columnSelectors } from '@features/grid/columns';\n// components\nimport { ListTagsOverflow } from '@optx/features/tags/overflow-tags';\n// styles\nimport ListTagStyled from '@features/tags/tags/ListTag.styles';\ninterface ListTagsCollapsableProps {\n tags: ListTag[] | null;\n}\n\nconst ListTagsCollapsable: FC<ListTagsCollapsableProps> = ({ tags }) => {\n const [collapsed, setCollapsed] = useState<boolean>(true);\n const dispatch = useDispatch();\n const shouldFetchColumns = useSelector(columnSelectors.isColumnsFetched('advancedSearch'));\n\n const onTagMoreClick = () => {\n setCollapsed(false);\n };\n\n const handleTagClick = (item: ListTag) => {\n if (!shouldFetchColumns) {\n dispatch(\n columnActions.fetchColumns({\n gridName: 'advancedSearch',\n })\n );\n }\n\n window.open(appRoutes.userLists.list.replace(':id', item.list_id as string), '_blank');\n };\n\n return (\n <div className=\"tags-collapsable__wrapper\">\n {collapsed ? (\n <ListTagsOverflow\n tags={tags}\n className={`list-tags__custom-styling ${collapsed ? 'collapsed' : ''}`}\n onTagMoreClick={onTagMoreClick}\n />\n ) : (\n orderTags(tags)?.map((item: ListTag, index: number) => (\n <ListTagStyled key={index} color=\"cyan\" onClick={() => handleTagClick(item)}>\n {item.title}\n </ListTagStyled>\n ))\n )}\n </div>\n );\n};\n\nexport default ListTagsCollapsable;\n","import React from 'react';\nimport { Typography } from 'antd';\nimport styled from 'styled-components';\nimport { styledColors } from '@utils/theme/colors';\nimport { useSelector } from 'react-redux';\nimport selectedCompanies from '@features/bulk-actions/state/selectors/selectedCompanies';\nimport { SelectedCompaniesGrids } from '@optx/models/bulkActions';\n\nconst CountWrapper = styled(Typography.Text)`\n font-weight: bold;\n color: ${styledColors.blue6};\n margin-left: 20px;\n`;\n\ninterface SelectedCountProps {\n type: SelectedCompaniesGrids;\n}\n\nexport const SelectedCount: React.FC<SelectedCountProps> = React.memo(({ type }) => {\n const selectedCompaniesCount = useSelector(selectedCompanies.getSelectedCompanies(type)).length;\n\n if (!selectedCompaniesCount) return null;\n\n return (\n <CountWrapper>\n {selectedCompaniesCount} {selectedCompaniesCount > 1 ? 'Companies' : 'Company'} selected\n </CountWrapper>\n );\n});\n","/* eslint-disable max-len */\nimport { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { has, Dictionary } from 'lodash';\n// individual actions\nimport { actions as updateIndividualStageActions } from '@components/feature/company-individual-edit/state/stage';\nimport { actions as updateIndividualPipelineRankActions } from '@components/feature/company-individual-edit/state/pipelineRank';\nimport { actions as updateIndividualCompanyOwnerActions } from '@components/feature/company-individual-edit/state/companyOwner';\n// models\nimport { EditCompanyStageActionPayload } from '@optx/components/feature/company-individual-edit/state/stage/interfaces';\nimport { EditCompanyPipelineRank } from '@optx/components/feature/company-individual-edit/state/pipelineRank/interfaces';\nimport { EditCompanyOwnerSuccess } from '@optx/components/feature/company-individual-edit/state/companyOwner/interfaces';\nimport {\n SelectedCompanies,\n SalesloftCompanyContacts,\n SelectedCompaniesGrids,\n} from '@models/bulkActions';\nimport { UserInformation } from '@optx/models/user';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { actions as salesloftBulkActions } from '@features/bulk-actions/salesloft';\nimport { getSalesloftEmails } from '@optx/utils/salesloft';\nimport { getEmailsFromString } from '@optx/utils/equityTouch';\nimport { actions as leadSourceActions } from '@optx/components/feature/company-individual-edit/state/leadSource';\nimport * as bulkEtActions from '@features/bulk-actions/equity-touch/state/actions';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { actions as seniorAdvisorActions } from '@optx/components/feature/company-individual-edit/state/seniorAdviserThesis';\nimport { actions as fundActions } from '@optx/components/feature/company-individual-edit/state/fund';\nimport { EditLeadSource } from '@components/feature/company-individual-edit/state/leadSource/interfaces';\nimport { EditSeniorAdvisor } from '@components/feature/company-individual-edit/state/seniorAdviserThesis/interfaces';\nimport { EditCompanyFund } from '@optx/components/feature/company-individual-edit/state/fund/interfaces';\nimport {\n SelectedCompaniesState,\n SelectedCompaniesPayload,\n FetchBulkEditDataSuccess,\n BulkUpdateDataSuccess,\n} from './interfaces';\nimport { Addon } from '@optx/models/Company';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { showRationaleForStage } from '@optx/utils/helpers';\nimport { combineCompaniesFromAllPages } from '@optx/utils/bulk-actions';\n// redux\nimport * as actions from './actions';\nimport { updateFieldsSuccess } from '@optx/features/company/edit-fields/state/actions';\n\nconst updateState = (\n state: SelectedCompaniesState,\n payload: BulkUpdateDataSuccess,\n key: SelectedCompaniesGrids,\n field: string\n) => {\n const label = payload.changedValue === 'None' ? DEFAULT_EMPTY_VALUE : payload.changedValue;\n combineCompaniesFromAllPages(state, key)\n .filter(item => payload.updatedCompaniesIds.includes(item.company_id))\n .map(item => {\n if (field === 'product_category' && Array.isArray(label)) {\n const categories = label.map(data => ({\n category: data,\n is_valid: true,\n }));\n // eslint-disable-next-line no-param-reassign\n item[field] = [...categories];\n } else {\n // eslint-disable-next-line no-param-reassign\n item[field as 'company_owner' | 'stage' | 'pipeline_rank'] = label as string;\n\n if (field === 'stage') {\n if (showRationaleForStage(label as string)) {\n // eslint-disable-next-line no-param-reassign\n item.stage_rationale = (payload.extraOptions as Dictionary<string>)\n .stage_rationale as string;\n } else {\n // eslint-disable-next-line no-param-reassign\n item.stage_rationale = null;\n }\n } else if (field === 'addon') {\n const currentAddons = item[field];\n\n // eslint-disable-next-line no-param-reassign\n item[field] = { ...currentAddons, ...(label as Addon) };\n }\n }\n\n return item;\n });\n};\n\nconst updateIndividualStageState = (\n state: SelectedCompaniesState,\n payload: EditCompanyStageActionPayload,\n key: SelectedCompaniesGrids,\n field: string\n) => {\n combineCompaniesFromAllPages(state, key)\n .filter(item => item.company_id === payload.companyId)\n .map(item => {\n // eslint-disable-next-line no-param-reassign\n item[field as 'stage'] = payload.companyStageText;\n\n return item;\n });\n};\n\nconst updateIndividualPipelineRankState = (\n state: SelectedCompaniesState,\n payload: EditCompanyPipelineRank,\n key: SelectedCompaniesGrids,\n field: string\n) => {\n combineCompaniesFromAllPages(state, key)\n .filter(item => item.company_id === payload.companyId)\n .map(item => {\n // eslint-disable-next-line no-param-reassign\n (item[field as 'pipeline_rank'] as string | number) = payload.pipelineRankText;\n\n return item;\n });\n};\n\nconst updateIndividualCompanyOwnerState = (\n state: SelectedCompaniesState,\n payload: EditCompanyOwnerSuccess,\n key: SelectedCompaniesGrids,\n field: string\n) => {\n combineCompaniesFromAllPages(state, key)\n .filter(item => item.company_id === payload.companyId)\n .map(item => {\n // eslint-disable-next-line no-param-reassign\n item[field as 'company_owner'] =\n payload.companyOwnerData && payload.companyOwnerData.company_owner_name\n ? payload.companyOwnerData.company_owner_name\n : null;\n\n return item;\n });\n};\n\nconst updateIndividualLeadSourceState = (\n state: SelectedCompaniesState,\n payload: EditLeadSource,\n key: SelectedCompaniesGrids,\n field: string\n) => {\n combineCompaniesFromAllPages(state, key)\n .filter(item => item.company_id === payload.companyId)\n .map(item => {\n // eslint-disable-next-line no-param-reassign\n item[field as 'lead_source'] = payload.leadSourceName;\n\n return item;\n });\n};\n\nconst updateIndividualSeniorAdvisorState = (\n state: SelectedCompaniesState,\n payload: EditSeniorAdvisor,\n key: SelectedCompaniesGrids,\n field: string\n) => {\n combineCompaniesFromAllPages(state, key)\n .filter(item => item.company_id === payload.companyId)\n .map(item => {\n // eslint-disable-next-line no-param-reassign\n item[field as 'senior_advisor_thesis'] = payload.seniorAdvisorName;\n\n return item;\n });\n};\n\nconst updateIndividualFundState = (\n state: SelectedCompaniesState,\n payload: EditCompanyFund,\n key: SelectedCompaniesGrids,\n field: string\n) => {\n combineCompaniesFromAllPages(state, key)\n .filter(item => item.company_id === payload.companyId)\n .map(item => {\n // eslint-disable-next-line no-param-reassign\n item[field as 'fund'] = payload.fundName;\n\n return item;\n });\n};\n\nconst updateEtContactsState = (\n state: SelectedCompaniesState,\n payload: Partial<CompanyUserContact>,\n key: SelectedCompaniesGrids\n) =>\n combineCompaniesFromAllPages(state, key)\n .filter(company => company.company_id === payload.company_id)\n .map(stateItem => {\n if (stateItem.contacts?.length) {\n const contacts = stateItem.contacts.map(item => {\n if (item.person_id === payload.person_id) {\n const changedContact = {\n ...item,\n ...payload,\n primary_email: payload.email ? payload.email : '',\n ...getSalesloftEmails(payload.email as string),\n additional_phones: payload.phones || null,\n };\n\n return changedContact;\n }\n\n return item;\n });\n\n // eslint-disable-next-line no-param-reassign\n stateItem.contacts = contacts;\n } else {\n // eslint-disable-next-line no-param-reassign\n stateItem.contacts = [\n {\n ...payload,\n additional_phones: payload.phones || null,\n },\n ];\n }\n\n return stateItem;\n });\n\nconst updateContactsState = (\n state: SelectedCompaniesState,\n payload: Partial<CompanyUserContact>,\n key: SelectedCompaniesGrids\n) => {\n combineCompaniesFromAllPages(state, key)\n .filter(item => item.company_id === payload.company_id)\n .map(item => {\n if (item.contacts?.length) {\n if (payload.primary_contact) {\n const primaryContactIndex = item.contacts.findIndex(el => el.primary_contact === true);\n\n if (primaryContactIndex !== -1) {\n // eslint-disable-next-line no-param-reassign\n item.contacts[primaryContactIndex].primary_contact = false;\n }\n }\n\n item.contacts.push({\n ...payload,\n ...getSalesloftEmails(payload.email as string),\n primary_contact: !!payload.primary_contact,\n });\n } else {\n // eslint-disable-next-line no-param-reassign\n item.contacts = [{ ...payload, primary_contact: !!payload.primary_contact }];\n }\n\n return item;\n });\n};\n\nconst updateCompanyState = (\n company: SelectedCompanies,\n fieldName: string,\n companyId: number,\n value: any\n) => {\n if (company.company_id && company.company_id === companyId) {\n if (fieldName !== 'product_category') {\n return {\n ...company,\n [fieldName]: value.value[fieldName !== 'addon' ? 'label' : 'optionalValue'],\n };\n } else {\n const categories = value.value.split(',').map((category: any) => ({\n category,\n is_valid: true,\n }));\n\n return {\n ...company,\n [fieldName]: categories,\n };\n }\n }\n\n return company;\n};\n\nconst initialState: SelectedCompaniesState = {\n advancedSearch: [],\n lists: [],\n myCompanies: [],\n outreachDetails: [],\n addons: [],\n updatedCompaniesIds: [],\n checklistResearchInsights: [],\n changedValue: '',\n editFieldKey: '',\n};\n\nconst selectCompaniesReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<SelectedCompaniesPayload>\n> = (draftState, action) => {\n const { gridName, pageNumber, pageSize, selectedCompanies } = action.payload;\n\n if (pageNumber) {\n draftState[gridName][pageNumber] = [...selectedCompanies];\n }\n\n if (pageSize && selectedCompanies.length > 0) {\n const totalCompanies = selectedCompanies.length;\n const totalPages = Math.ceil(totalCompanies / pageSize);\n\n for (let i = 0; i < totalPages; i++) {\n const start = i * pageSize;\n const end = start + pageSize;\n\n draftState[gridName][i + 1] = selectedCompanies.slice(start, end);\n }\n }\n};\n\nconst deselectCompaniesReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<{ gridName: SelectedCompaniesGrids }>\n> = (draftState, action) => {\n const { gridName } = action.payload;\n\n if (draftState[gridName]) {\n Object.keys(draftState[gridName]).forEach(pageNumber => {\n draftState[gridName][Number(pageNumber)] = [];\n });\n }\n};\n\nconst bulkUpdateDataSuccessReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<BulkUpdateDataSuccess>\n> = (draftState, { payload }) => {\n if (Object.keys(draftState.advancedSearch).length !== 0) {\n updateState(draftState, payload, 'advancedSearch', payload.editFieldKey);\n }\n\n if (Object.keys(draftState.lists).length !== 0) {\n updateState(draftState, payload, 'lists', payload.editFieldKey);\n }\n\n if (Object.keys(draftState.myCompanies).length !== 0) {\n updateState(draftState, payload, 'myCompanies', payload.editFieldKey);\n }\n\n if (Object.keys(draftState.outreachDetails).length !== 0) {\n updateState(draftState, payload, 'outreachDetails', payload.editFieldKey);\n }\n};\n\nconst bulkUpdateIndividualStageReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<EditCompanyStageActionPayload>\n> = (draftState, { payload }) => {\n if (Object.keys(draftState.advancedSearch).length !== 0) {\n updateIndividualStageState(draftState, payload, 'advancedSearch', 'stage');\n }\n\n if (Object.keys(draftState.lists).length !== 0) {\n updateIndividualStageState(draftState, payload, 'lists', 'stage');\n }\n\n if (Object.keys(draftState.myCompanies).length !== 0) {\n updateIndividualStageState(draftState, payload, 'myCompanies', 'stage');\n }\n};\n\nconst bulkUpdateIndividualPipelineRankReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<EditCompanyPipelineRank>\n> = (draftState, { payload }) => {\n if (Object.keys(draftState.advancedSearch).length !== 0) {\n updateIndividualPipelineRankState(draftState, payload, 'advancedSearch', 'pipeline_rank');\n }\n\n if (Object.keys(draftState.lists).length !== 0) {\n updateIndividualPipelineRankState(draftState, payload, 'lists', 'pipeline_rank');\n }\n\n if (Object.keys(draftState.myCompanies).length !== 0) {\n updateIndividualPipelineRankState(draftState, payload, 'myCompanies', 'pipeline_rank');\n }\n};\n\nconst bulkUpdateIndividualCompanyOwnerSuccessReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<EditCompanyOwnerSuccess>\n> = (draftState, { payload }) => {\n if (Object.keys(draftState.advancedSearch).length !== 0) {\n updateIndividualCompanyOwnerState(draftState, payload, 'advancedSearch', 'company_owner');\n }\n\n if (Object.keys(draftState.lists).length !== 0) {\n updateIndividualCompanyOwnerState(draftState, payload, 'lists', 'company_owner');\n }\n\n if (Object.keys(draftState.myCompanies).length !== 0) {\n updateIndividualCompanyOwnerState(draftState, payload, 'myCompanies', 'company_owner');\n }\n};\n\nconst bulkUpdateIndividualLeadSourceReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<EditLeadSource>\n> = (draftState, { payload }) => {\n if (Object.keys(draftState.advancedSearch).length !== 0) {\n updateIndividualLeadSourceState(draftState, payload, 'advancedSearch', 'lead_source');\n }\n\n if (Object.keys(draftState.lists).length !== 0) {\n updateIndividualLeadSourceState(draftState, payload, 'lists', 'lead_source');\n }\n\n if (Object.keys(draftState.myCompanies).length !== 0) {\n updateIndividualLeadSourceState(draftState, payload, 'myCompanies', 'lead_source');\n }\n};\n\nconst bulkUpdateIndividualSeniorAdvisorReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<EditSeniorAdvisor>\n> = (draftState, { payload }) => {\n if (Object.keys(draftState.advancedSearch).length !== 0) {\n updateIndividualSeniorAdvisorState(\n draftState,\n payload,\n 'advancedSearch',\n 'senior_advisor_thesis'\n );\n }\n\n if (Object.keys(draftState.lists).length !== 0) {\n updateIndividualSeniorAdvisorState(draftState, payload, 'lists', 'senior_advisor_thesis');\n }\n\n if (Object.keys(draftState.myCompanies).length !== 0) {\n updateIndividualSeniorAdvisorState(draftState, payload, 'myCompanies', 'senior_advisor_thesis');\n }\n};\n\nconst bulkUpdateIndividualFundReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<EditCompanyFund>\n> = (draftState, { payload }) => {\n if (Object.keys(draftState.advancedSearch).length !== 0) {\n updateIndividualFundState(draftState, payload, 'advancedSearch', 'fund');\n }\n\n if (Object.keys(draftState.lists).length !== 0) {\n updateIndividualFundState(draftState, payload, 'lists', 'fund');\n }\n\n if (Object.keys(draftState.myCompanies).length !== 0) {\n updateIndividualFundState(draftState, payload, 'myCompanies', 'fund');\n }\n};\n\nconst fetchBulkEditDataSuccessReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<FetchBulkEditDataSuccess>\n> = (draftState, action) => {\n const { gridName, dataFields, field } = action.payload;\n\n Object.keys(draftState[gridName]).forEach(pageNumber => {\n draftState[gridName][Number(pageNumber)].forEach((company, index) => {\n const currentItem = draftState[gridName][Number(pageNumber)][index];\n const { company_id: id } = company;\n draftState[gridName][Number(pageNumber)][index] = {\n ...currentItem,\n [field]: dataFields[id][field],\n };\n });\n });\n};\n\nconst fetchCompaniesContactsSuccessReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<{\n contacts: SalesloftCompanyContacts[];\n selectedCompanies: SelectedCompanies[];\n gridName: SelectedCompaniesGrids;\n }>\n> = (draftState, action) => {\n const { contacts, gridName } = action.payload;\n\n contacts.forEach(contact => {\n const { company_id: id, contacts } = contact;\n\n Object.keys(draftState[gridName]).forEach(pageNumber => {\n const companies = draftState[gridName][Number(pageNumber)];\n\n const index = companies.findIndex(company => company.company_id === id);\n\n if (index !== -1) {\n companies[index].contacts = contacts.map(contact => ({\n ...contact,\n company_id: companies[index].company_id,\n email: contact.primary_email,\n emails: getEmailsFromString(contact.primary_email),\n ...getSalesloftEmails(contact.primary_email as string | null),\n }));\n }\n });\n });\n};\n\nconst addContactSuccessReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, { payload }) => {\n if (Object.keys(draftState.advancedSearch).length !== 0) {\n updateContactsState(draftState, payload, 'advancedSearch');\n }\n\n if (Object.keys(draftState.lists).length !== 0) {\n updateContactsState(draftState, payload, 'lists');\n }\n\n if (Object.keys(draftState.myCompanies).length !== 0) {\n updateContactsState(draftState, payload, 'myCompanies');\n }\n};\n\nconst updateContactSuccessReducer: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, { payload }) => {\n if (Object.keys(draftState.advancedSearch).length !== 0) {\n updateEtContactsState(draftState, payload, 'advancedSearch');\n }\n\n if (Object.keys(draftState.lists).length !== 0) {\n updateEtContactsState(draftState, payload, 'lists');\n }\n\n if (Object.keys(draftState.myCompanies).length !== 0) {\n updateEtContactsState(draftState, payload, 'myCompanies');\n }\n};\n\n// External reducers\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccess: CaseReducer<\n SelectedCompaniesState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const persistedFilter = action.payload.settings.session_settings\n ? action.payload.settings.session_settings.et_form_auto_save\n : undefined;\n\n if (persistedFilter !== null && persistedFilter !== undefined) {\n if (\n has(persistedFilter, 'Company Name') ||\n !has(persistedFilter, 'grid') ||\n !has(persistedFilter, 'companiesData')\n ) {\n return;\n }\n\n const gridName = persistedFilter.grid as 'advancedSearch' | 'lists' | 'myCompanies';\n draftState[gridName][1] = persistedFilter.companiesData as SelectedCompanies[];\n }\n};\n\nconst updateFieldsSuccessReducer: CaseReducer<SelectedCompaniesState> = (draftState, action) => {\n const fieldName = action.payload.value.fieldKey;\n const companyId = action.payload.companyId;\n const value = action.payload.value;\n\n const updateCompanies = (companiesObject: { [pageNumber: number]: SelectedCompanies[] }) => {\n Object.keys(companiesObject).forEach(pageNumber => {\n // eslint-disable-next-line no-param-reassign\n companiesObject[Number(pageNumber)] = companiesObject[Number(pageNumber)].map(company =>\n updateCompanyState(company, fieldName, companyId, value)\n );\n });\n };\n\n if (Object.keys(draftState.advancedSearch).length !== 0) {\n updateCompanies(draftState.advancedSearch);\n }\n\n if (Object.keys(draftState.lists).length !== 0) {\n updateCompanies(draftState.lists);\n }\n\n if (Object.keys(draftState.myCompanies).length !== 0) {\n updateCompanies(draftState.myCompanies);\n }\n\n if (Object.keys(draftState.outreachDetails).length !== 0) {\n updateCompanies(draftState.outreachDetails);\n }\n\n if (Object.keys(draftState.addons).length !== 0) {\n updateCompanies(draftState.addons);\n }\n\n return draftState;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.selectCompanyIds, selectCompaniesReducer)\n .addCase(actions.deselectCompanyIds, deselectCompaniesReducer)\n .addCase(actions.fetchBulkEditDataSuccess, fetchBulkEditDataSuccessReducer)\n .addCase(actions.bulkUpdateDataSuccess, bulkUpdateDataSuccessReducer)\n .addCase(updateIndividualStageActions.addCompanyStage, bulkUpdateIndividualStageReducer)\n .addCase(\n updateIndividualPipelineRankActions.addCompanyPipelineRank,\n bulkUpdateIndividualPipelineRankReducer\n )\n .addCase(\n salesloftBulkActions.fetchCompaniesContactsSuccess,\n fetchCompaniesContactsSuccessReducer\n )\n .addCase(salesloftBulkActions.addContactSuccess, addContactSuccessReducer)\n .addCase(\n updateIndividualCompanyOwnerActions.addCompanyOwnerSuccess,\n bulkUpdateIndividualCompanyOwnerSuccessReducer\n )\n .addCase(leadSourceActions.addLeadSource, bulkUpdateIndividualLeadSourceReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccess)\n .addCase(seniorAdvisorActions.addSeniorAdviser, bulkUpdateIndividualSeniorAdvisorReducer)\n .addCase(fundActions.addFund, bulkUpdateIndividualFundReducer)\n .addCase(bulkEtActions.updateBulkContactSuccess, updateContactSuccessReducer)\n .addCase(updateFieldsSuccess, updateFieldsSuccessReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { Dictionary } from 'lodash';\n// models\nimport { PayloadAction } from '@reduxjs/toolkit';\n// services\nimport { getErrorMessage } from '@utils/api/errors';\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport * as actions from './actions';\nimport { FetchBulkEditData } from './interfaces';\n\nfunction* fetchBulkEditDataSuccessSaga(action: PayloadAction<FetchBulkEditData>) {\n const { companyIds, gridName, field } = action.payload;\n const defaultErrorMessage = 'Failed to fetch bulk edit data!';\n\n try {\n const res: AxiosResponse<\n Dictionary<{\n fund: string;\n rationale: string;\n }>\n > = yield call(CompanyService.getBulkEditData, companyIds);\n\n if (res.data) {\n yield put(actions.fetchBulkEditDataSuccess({ gridName, dataFields: res.data, field }));\n } else {\n NotificationService.error(defaultErrorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, defaultErrorMessage);\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* selectedCompaniesSaga() {\n yield takeLatest(actions.fetchBulkEditData, fetchBulkEditDataSuccessSaga);\n}\n","import queryString from 'query-string';\nimport { SortByRule } from '@models/table/sorting';\n\n/**\n * Parse sorting from stringified to array\n * @param {string} sortQuery\n */\nexport const parseSorting = (sortQuery: string) => {\n const sortBy: Array<SortByRule<any>> = [];\n let isMultiSort = false;\n const parsedSort = queryString.parse(sortQuery, { arrayFormat: 'comma' });\n\n if (typeof parsedSort.sort_fields === 'string') {\n sortBy.push({\n id: parsedSort.sort_fields,\n desc: parsedSort.sort_orders === 'desc',\n });\n } else {\n parsedSort.sort_fields?.forEach((field, index) => {\n sortBy.push({\n id: field as string,\n desc: parsedSort.sort_orders![index] === 'desc',\n });\n });\n isMultiSort = true;\n }\n\n return { sortBy, isMultiSort };\n};\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectors } from '../state';\n\nimport { actions } from '../state/leadSource';\n\nexport default function useLeadSourceEditableField(leadSource: string | null) {\n const dispatch = useDispatch();\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.leadSourceOptions),\n ];\n const initialSelectValue = leadSource\n ? selectOptions.filter(option => leadSource === option.label)\n : selectOptions[0];\n\n const addLeadSource = useCallback(\n (companyId: number, leadSourceName: string, leadSourceId: string) =>\n dispatch(\n actions.addLeadSource({\n companyId,\n leadSourceName,\n leadSourceId,\n })\n ),\n [dispatch]\n );\n\n const value = leadSource;\n\n return { addLeadSource, initialSelectValue, value, selectOptions };\n}\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectors } from '../state';\n\nimport { actions } from '../state/seniorAdviserThesis';\n\nexport default function useSeniorAdvisorThesisEditableField(seniorAdvisor: string | null) {\n const dispatch = useDispatch();\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.seniorAdvisorOptions),\n ];\n const initialSelectValue = seniorAdvisor\n ? selectOptions.filter(option => seniorAdvisor === option.label)\n : selectOptions[0];\n\n const addSeniorAdvisor = useCallback(\n (companyId: number, seniorAdvisorName: string, seniorAdvisorId: string) =>\n dispatch(\n actions.addSeniorAdviser({\n companyId,\n seniorAdvisorName,\n seniorAdvisorId,\n })\n ),\n [dispatch]\n );\n\n const value = seniorAdvisor;\n\n return { addSeniorAdvisor, initialSelectValue, value, selectOptions };\n}\n","import { useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\n// redux\nimport { actions, selectors } from '@redux/company/active';\n\ninterface useActiveEdiableFieldFunction {\n (isFromHistory?: boolean): {\n loading: boolean;\n companyId: number | null;\n addCompanyActive(companyId: number, isBusiness: boolean): void;\n };\n}\n\nconst useActiveEditableField: useActiveEdiableFieldFunction = isFromHistory => {\n const loading = useSelector(selectors.isLoading);\n const companyId = useSelector(selectors.getCurrentCompany);\n const dispatch = useDispatch();\n\n const addCompanyActive = useCallback(\n (companyId: number, active: boolean) =>\n dispatch(actions.addCompanyActive({ companyId, active, isFromHistory })),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dispatch]\n );\n\n return { loading, companyId, addCompanyActive };\n};\n\nexport default useActiveEditableField;\n","export const toggleReducer = (draftState: boolean) => !draftState;\n","import { pick } from 'lodash';\n\n/**\n * @typedef PassThroughFunction\n * @param {Object} props main component props.\n * @param {String} node node name inside the main component.\n * @param {Object} instance reference to main component instance (this - usually the class component instance).\n * @returns {Object} main component or primitive component props.\n */\n\nexport interface PassTroughFunction<TProps, TNode, TInstance = any> {\n (prop: TProps, nodeName: TNode, instance?: TInstance): object;\n}\n\nexport interface PassThroughProps<TProps = any, TNodeKey = string> {\n passThrow?: PassTroughFunction<TProps, TNodeKey>;\n}\n\n/**\n * Get pass through function.\n * @param {Array|Function} option pass through option.\n * It can be an array to filter a single component props, and receive only the props declared in option.\n * Also it can be a function for more complex components built with multiple smaller ones and filter props\n * for each one of them based on node name.\n * This could be used to inject props not available in some sub-components and make\n * something(ex: render in a specific color...) based on their values.\n * It can also be used to inject new props for default components.\n * @returns {PassThroughFunction} pass through function\n */\nexport const getPassThrough = <TProps extends object = {}, TNode = string, TInstance = any>(\n option: Array<string> | PassTroughFunction<TProps, TNode> = []\n) => {\n return (props: TProps, node: TNode, instance?: TInstance) => {\n return Array.isArray(option) ? pick(props, option) : option(props, node, instance);\n };\n};\n\nexport default getPassThrough;\n","import React from 'react';\nimport { LegendValueFormatter } from 'recharts';\n// styles\nimport { LegendText } from './styles';\n\nconst LegendFormatter: LegendValueFormatter = (value, _entry) => (\n <LegendText>{(value as string).toUpperCase()}</LegendText>\n);\n\nexport default LegendFormatter;\n","import React from 'react';\nimport {\n CartesianGrid,\n Legend,\n Line,\n LineChart as RechartsLineChart,\n LineChartProps as RechartsLineChartProps,\n LineProps,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n// utils\nimport { getPassThrough, PassThroughProps } from '@utils/componentFactory';\n// props configuration\nimport {\n xAxisProps,\n yAxisProps,\n lineProps as defaultLineProps,\n legendProps,\n cartesianGridProps,\n} from './config';\n// components\nimport LegendFormatter from './LegendFormatter';\nimport EmptyChart from '../EmptyChart/EmptyChart';\n\ninterface LineChartFactoryProps {\n XAxisNode?: typeof XAxis | (() => JSX.Element);\n YAxisNode?: typeof YAxis | (() => JSX.Element);\n TooltipNode?: typeof Tooltip | (() => JSX.Element);\n LegendNode?: typeof Legend | (() => JSX.Element);\n LineNode?: typeof Line | (() => JSX.Element);\n CartesianGridNode?: typeof CartesianGrid | (() => JSX.Element);\n EmptyChartNode?: typeof EmptyChart | (() => JSX.Element);\n}\n\ninterface LineChartProps extends RechartsLineChartProps {\n lines: Array<LineProps>;\n}\n\nexport type PassThroughPrimitives = Record<keyof LineChartFactoryProps, string>;\n\n/**\n * Main primitive names that compose LineChart component.\n */\nexport const primitives: PassThroughPrimitives = {\n XAxisNode: 'XAxisNode',\n YAxisNode: 'YAxisNode',\n TooltipNode: 'TooltipNode',\n LegendNode: 'LegendNode',\n LineNode: 'LineNode',\n CartesianGridNode: 'CartesianGridNode',\n EmptyChartNode: 'EmptyChartNode',\n};\n\nexport const lineChartFactory = ({\n XAxisNode = XAxis,\n YAxisNode = YAxis,\n TooltipNode = Tooltip,\n LegendNode = Legend,\n LineNode = Line,\n CartesianGridNode = CartesianGrid,\n EmptyChartNode = EmptyChart,\n passThrow,\n}: LineChartFactoryProps & PassThroughProps<any, keyof LineChartFactoryProps> = {}) => {\n const passProps = getPassThrough(passThrow);\n\n const LineChart = (props: LineChartProps) => {\n const { data, lines, ...restProps } = props;\n\n if (!data || !data.length) {\n return <EmptyChartNode />;\n }\n\n return (\n <RechartsLineChart data={data} margin={{ bottom: 20 }} {...restProps}>\n <CartesianGridNode {...cartesianGridProps} {...passProps(props, 'CartesianGridNode')} />\n <XAxisNode {...xAxisProps} {...passProps(props, 'XAxisNode')} />\n <YAxisNode {...yAxisProps} {...passProps(props, 'YAxisNode')} />\n <TooltipNode {...passProps(props, 'TooltipNode')} />\n {data && data.length && (\n <LegendNode\n formatter={LegendFormatter}\n {...legendProps}\n {...passProps(props, 'LegendNode')}\n />\n )}\n {lines.map(lineProps => (\n <LineNode\n key={lineProps.dataKey as string}\n {...defaultLineProps}\n {...lineProps}\n {...passProps(props, 'LineNode')}\n />\n ))}\n </RechartsLineChart>\n );\n };\n\n return LineChart;\n};\n\nexport default lineChartFactory();\n","import React, { FC } from 'react';\n\ninterface Normalize {\n value: number | null;\n min: number;\n max: number;\n scaleMin: number;\n scaleMax: number;\n}\n\ninterface NormalizeDataset {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n}\n\ninterface TrendingLineProps {\n points: Array<number | null>;\n color: string;\n svgWidth?: number;\n svgHeight?: number;\n viewBoxWidth?: number;\n viewBoxHeight?: number;\n padding?: number;\n}\n\nconst normalize = ({ value, min, max, scaleMin = 0, scaleMax = 1 }: Normalize) => {\n // If the `min` and `max` are the same value, it means our dataset is flat.\n // For now, let's assume that flat data should be aligned to the bottom.\n if (min === max) {\n return scaleMin;\n }\n\n if (value === null) {\n return scaleMin + scaleMax * 2;\n }\n\n return scaleMin + ((value - min) * (scaleMax - scaleMin)) / (max - min);\n};\n\nconst normalizeDataset = (\n data: Array<number | null>,\n { minX, maxX, minY, maxY }: NormalizeDataset\n) => {\n // For the X axis, we want to normalize it based on its index in the array.\n // For the Y axis, we want to normalize it based on the element's value.\n //\n // X axis is easy: just evenly-space each item in the array.\n // For the Y axis, we first need to find the min and max of our array,\n // and then normalize those values between 0 and 1.\n const numbersData = data.filter(point => !Number.isNaN(point)) as number[];\n const boundariesX = { min: 0, max: data.length - 1 };\n const boundariesY = {\n min: Math.min(...numbersData),\n max: Math.max(...numbersData),\n };\n\n const areAllPointsEqual = numbersData.every((val, i, arr) => val === arr[0]);\n const normalizedData = data.map((point, index) => ({\n x: normalize({\n value: index,\n min: boundariesX.min,\n max: boundariesX.max,\n scaleMin: minX,\n scaleMax: maxX,\n }),\n y: normalize({\n value: point,\n min: boundariesY.min,\n max: boundariesY.max,\n scaleMin: areAllPointsEqual ? minY / 2 : minY,\n scaleMax: maxY,\n }),\n }));\n\n return normalizedData;\n};\n\nconst TrendingLine: FC<TrendingLineProps> = ({\n svgWidth = 50,\n svgHeight = 15,\n viewBoxWidth = 50,\n viewBoxHeight = 15,\n points = [],\n padding = 1,\n color,\n}) => {\n let isPositive = false;\n const invalidPoints = points.every(point => point === null || point === 0);\n const areAllPointsEqual = points.every((val, i, arr) => val === arr[0]);\n const pointsTrend = points.filter(point => point !== null) as number[];\n const { 0: first, length, [length - 1]: last } = pointsTrend;\n const normalizedPoints = normalizeDataset(\n points.filter(point => point !== null),\n {\n minX: padding,\n maxX: viewBoxWidth - padding,\n minY: viewBoxHeight - padding,\n maxY: padding,\n }\n )\n .map(({ x, y }, i) => {\n if (pointsTrend.length < 5) {\n // if we don't have 5 points, skip rendering line for missing points\n return `${(svgWidth / pointsTrend.length) * (i + 1)},${y}`;\n }\n\n return `${x},${y}`;\n })\n .join(' ');\n\n switch (true) {\n case length === 1:\n isPositive = true;\n break;\n\n case length > 1: {\n if (first < last) {\n isPositive = true;\n break;\n }\n\n if (areAllPointsEqual) {\n isPositive = true;\n break;\n }\n\n isPositive = false;\n break;\n }\n\n default:\n isPositive = false;\n break;\n }\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${viewBoxWidth} ${viewBoxHeight}`}\n >\n {!invalidPoints && (\n <polyline\n points={normalizedPoints}\n stroke={isPositive ? color : '#D9D9D9'}\n strokeWidth=\"2\"\n fill=\"none\"\n />\n )}\n </svg>\n );\n};\n\nexport default TrendingLine;\n","import { SpecialCriteria } from '@models/feature/analystsLeaderboard/SpecialCriteria';\n\nexport const pipelineCriteria: SpecialCriteria = 'pipeline_information';\n","export const CHECK_EQUITY_TOUCH_AVAILABILITY = 'CHECK_EQUITY_TOUCH_AVAILABILITY';\n\nexport const FETCH_EQUITY_TOUCH_FORM_DATA = 'FETCH_EQUITY_TOUCH_FORM_DATA';\nexport const FETCH_EQUITY_TOUCH_FORM_DATA_SUCCESS = 'FETCH_EQUITY_TOUCH_FORM_DATA_SUCCESS';\nexport const FETCH_EQUITY_TOUCH_FORM_DATA_FAIL = 'FETCH_EQUITY_TOUCH_FORM_DATA_FAIL';\n\nexport const ADD_TO_EQUITY_TOUCH = 'ADD_TO_EQUITY_TOUCH';\nexport const ADD_TO_EQUITY_TOUCH_SUCCESS = 'ADD_TO_EQUITY_TOUCH_SUCCESS';\n\nexport const ADD_TO_EQUITY_TOUCH_UPDATE_SEARCH = 'ADD_TO_EQUITY_TOUCH_UPDATE_SEARCH';\n\nexport const UPDATE_EQUITY_TOUCH_SELECTED_CONTACTS = 'UPDATE_EQUITY_TOUCH_SELECTED_CONTACTS';\nexport const UPDATE_EQUITY_TOUCH_SELECTED_SALESLOFT_CONTACTS =\n 'UPDATE_EQUITY_TOUCH_SELECTED_SALESLOFT_CONTACTS';\n\nexport const RESET_ADD_TO_EQUITY_TOUCH = 'RESET_ADD_TO_EQUITY_TOUCH';\n\nexport const EQUITY_TOUCH_SAVE_CONTACT = 'EQUITY_TOUCH_SAVE_CONTACT';\nexport const EQUITY_TOUCH_SAVE_CONTACT_FAIL = 'EQUITY_TOUCH_SAVE_CONTACT_FAIL';\nexport const EQUITY_TOUCH_ADD_CONTACT = 'EQUITY_TOUCH_ADD_CONTACT';\n\nexport const UPDATE_COMPANY_ET_DATA = 'UPDATE_COMPANY_ET_DATA';\nexport const AUTO_SAVE = 'AUTO_SAVE';\nexport const UPDATE_TEMPORARY_FORM_VALUES = 'UPDATE_TEMPORARY_FORM_VALUES';\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n//models\nimport Company from '@optx/models/Company';\nimport { FieldOptions, ServiceType } from '@optx/features/company/edit-fields/state/interfaces';\nimport { FinancialFields } from '@optx/models/Financial';\n//constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n//redux\nimport { getFinancialFilterOptions } from '@optx/redux/company/filters/selectors';\n//components\nimport { EditFieldFinancial } from '@optx/features/company/edit-fields/components';\n\ninterface TableCellEditFinancialFieldProps {\n company: Company;\n fieldKey: 'revenue_list' | 'ebitda_list' | 'annual_recurring_revenue' | 'gross_margin_list';\n filterName: FinancialFields;\n service: ServiceType;\n isFromGrid: boolean;\n extraKeys?: string[];\n fieldName: FieldOptions;\n customFinancialYear?: number;\n actionPendo?: string;\n}\n\nexport const TableCellEditFinancialField: React.FC<TableCellEditFinancialFieldProps> = ({\n company,\n fieldKey,\n fieldName,\n service,\n filterName,\n isFromGrid,\n customFinancialYear,\n actionPendo,\n}) => {\n const financialOptions = useSelector(getFinancialFilterOptions(filterName));\n\n const handleFieldListValues = () => {\n if ((fieldName === 'ARR' || fieldName === 'GM %') && company[fieldKey]) {\n const fieldListValues = company[fieldKey]?.filter(\n item => item.value !== '' && item.value !== DEFAULT_CELL_VALUE\n );\n\n return fieldListValues || null;\n }\n\n return company[fieldKey];\n };\n\n return (\n <EditFieldFinancial\n companyId={company.company_id}\n companyUrl={company.company_url}\n fieldListValues={handleFieldListValues()}\n fieldKey={fieldKey}\n options={financialOptions}\n service={service}\n fieldName={fieldName}\n isFromGrid={isFromGrid}\n customFinancialYear={customFinancialYear}\n actionPendo={actionPendo}\n />\n );\n};\n\nexport default React.memo(TableCellEditFinancialField);\n","import styled from 'styled-components';\n\nexport const TableYearTitleContainer = styled.div`\n display: flex;\n .edit-icon {\n display: none;\n }\n :hover .edit-icon {\n display: inline-block;\n margin-left: 3rem;\n font-size: 20px;\n color: #1890ff;\n }\n`;\n","import React from 'react';\nimport { EditOutlined } from '@ant-design/icons';\nimport { useDispatch } from 'react-redux';\n// redux\nimport { actions } from '@redux/company/opportunity-presentation';\n// components\nimport { TableYearTitleContainer } from './TableYearTitle.styled';\n\ninterface TableYearTitleProps {\n year: number;\n estimated: boolean;\n actionPendo?: string;\n}\n\nconst TableYearTitle: React.FC<TableYearTitleProps> = ({ year, estimated, actionPendo }) => {\n const dispatch = useDispatch();\n\n const handlePopoverLabel = () => {\n return `${year} ${estimated ? 'Estimated' : 'Actual'}`;\n };\n\n return (\n <TableYearTitleContainer>\n <span className=\"financial-value financial-value-row\">{handlePopoverLabel()}</span>\n <EditOutlined\n onClick={() => {\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n dispatch(actions.editAddYearsOpenModal({ year }));\n }}\n className=\"edit-icon\"\n ></EditOutlined>\n </TableYearTitleContainer>\n );\n};\n\nexport default React.memo(TableYearTitle);\n","import React from 'react';\nimport { ColumnType } from 'antd/lib/table';\n// models\nimport { AllFinancialYearsType, FinancialKeys, TableColumnType } from '@optx/models/Financial';\n// utils\nimport { companyPageProprietaryInfo } from './utils';\n// components\nimport { TableCellFinancialValue } from '@optx/shared/view/organims/Table/columns';\nimport TableYearTitle from '@components/pages/CompanyProfile/ProfileTabs/DealPresentation/components/TableYearTitle';\n\nconst initialColumn = {\n title: '',\n dataIndex: 'name',\n fixed: true,\n width: 130,\n};\n\n// Function to add a year-estimated objects to the initial data\nexport const addToUniqueYears = (\n data: AllFinancialYearsType[],\n year: number,\n estimated: boolean\n) => {\n data.push({ year, estimated });\n};\n\nexport const createColumn = (data: AllFinancialYearsType[]) => {\n const columns: ColumnType<TableColumnType>[] = [initialColumn];\n\n if (data.length > 0) {\n data.forEach((dataItem: AllFinancialYearsType) => {\n columns.push({\n title: () => {\n return (\n <TableYearTitle\n year={dataItem.year}\n estimated={dataItem.estimated}\n actionPendo={companyPageProprietaryInfo(dataItem.year, 'Type' as FinancialKeys)}\n />\n );\n },\n dataIndex: `${dataItem.year}${dataItem.estimated ? '_estimated' : '_actual'}`,\n key: `${dataItem.year}${dataItem.estimated ? '_estimated' : '_actual'}`,\n width: 210,\n render: (value: number, record) => (\n <TableCellFinancialValue\n value={value}\n payload={{\n key: record.name as FinancialKeys,\n year: dataItem.year,\n estimated: dataItem.estimated,\n user: `${record[dataItem.year + '_source_info']}`,\n date: `${record[dataItem.year + '_date']}`,\n }}\n title={`Edit \"${record.name}\" value`}\n growth={\n record[\n `${dataItem.year}${dataItem.estimated ? '_estimated_growth' : '_actual_growth'}`\n ] as number\n }\n actionPendo={companyPageProprietaryInfo(\n dataItem.year,\n (record.name as FinancialKeys).replace(/GM %/g, 'GM%')\n )}\n />\n ),\n });\n });\n }\n\n if (data.length === 0) {\n columns.push({\n title: '',\n dataIndex: 'no_data',\n });\n }\n\n return columns;\n};\n\n/**\n * Rounds a given number to the nearest integer\n *\n * @param {number} value - The number to round\n *\n * @returns {number} The rounded number\n */\nexport const roundingPresentationValues = (value: number) => {\n const power = Math.pow(10, 0);\n\n return Math.round(value * power) / power;\n};\n","import { createSelector } from 'reselect';\nimport { ListsAndSearchesState } from './interfaces';\nimport featureName from '../featureName';\n\nconst listsAndSearchesState = (state: Record<typeof featureName, ListsAndSearchesState>) =>\n state[featureName];\n\nexport const pageSize = createSelector(listsAndSearchesState, state => state.pageSize);\n","import { fork } from 'redux-saga/effects';\n// redux\nimport { sagas as paginationSagas } from '../pagination';\n\nexport default function* listsAndSearchesSagas() {\n yield fork(paginationSagas);\n}\n","import { combineReducers } from 'redux';\n// models\nimport { ListsAndSearchesState } from './interfaces';\n// reducers\nimport paginationReducer from '../pagination';\n\nconst reducer = combineReducers<ListsAndSearchesState>({\n pageSize: paginationReducer,\n});\n\nexport default reducer;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from './state';\nimport featureName from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","import { FormikValues } from 'formik';\n\n/**\n * function that get Form data from autosave storage for a specific company\n * @param companyId company ID\n * @returns the stored string with values or null\n */\nexport const getSavedValues = (keyPrefix: string, companyId: number) => {\n return window.localStorage.getItem(`${keyPrefix}${companyId}`);\n};\n\n/**\n * function that saves Form data to autosave storage for a specific company\n * @param companyId company ID\n * @param values form values that will be saved (formik.values)\n */\nexport const saveValues = (keyPrefix: string, companyId: number, values: FormikValues) => {\n window.localStorage.setItem(`${keyPrefix}${companyId}`, JSON.stringify(values));\n};\n\n/**\n * function that deletes Form data from autosave storage for a specific company\n * @param companyId company ID\n */\nexport const deleteSavedValues = (keyPrefix: string, companyId: number) => {\n window.localStorage.removeItem(`${keyPrefix}${companyId}`);\n};\n","import styled from 'styled-components';\n\nconst FitCellInnerTextContainer = styled.span`\n margin-left: 15px;\n`;\n\nconst TableCellInner = styled.span`\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst TextareaWrapper = styled.div`\n textarea {\n width: 320px;\n }\n`;\n\nexport const Styled = {\n FitCellInnerTextContainer,\n TableCellInner,\n TextareaWrapper,\n};\n","import queryString from 'query-string';\nimport { Dictionary } from 'lodash';\nimport { CompanyUserContact, SearchPayloadRequest } from '@models/api/contacts';\nimport { SearchAutocomplete } from '@optx/models/search-autocomplete';\nimport { SearchType } from '@optx/models/api/search';\nimport { GeoRangePayload } from '../../redux/geo-range/interfaces';\n\nimport ApiClient, { API_URL } from './axios-client';\nimport { mapSearchQuery, mapSearchCounterQuery } from '../../utils/search';\nimport { cleanPayload } from '@utils/api/cleanPayload';\n\nclass SearchService {\n static client: ApiClient = new ApiClient(`${API_URL}/search`);\n\n static searchSource?: SearchType;\n\n static get searchHeaders() {\n if (SearchService.searchSource) {\n return {\n headers: {\n 'search-source': SearchService.searchSource,\n },\n };\n }\n\n return {};\n }\n\n // company\n static searchCompanyCount = (\n searchKey: string,\n searchType: string,\n filter: Dictionary<string | Array<string | number>>,\n fromSavedList?: number | string,\n listType?: string,\n savedSearchId?: string | number\n ) => {\n const payload = mapSearchCounterQuery(\n searchKey,\n searchType,\n filter,\n undefined,\n undefined,\n listType\n );\n\n if (savedSearchId) {\n payload.list_id = savedSearchId;\n }\n\n if (fromSavedList) {\n payload.from_saved_list = fromSavedList;\n\n if (listType === 'combined') {\n payload.combined_search_id = fromSavedList;\n }\n }\n\n if (payload.search_title === '') {\n delete payload.search_title;\n }\n\n const updatedPayload = cleanPayload(payload);\n\n return SearchService.client.post<number>('/count', updatedPayload, SearchService.searchHeaders);\n };\n\n static searchCompanies = (searchData: SearchPayloadRequest, addSearchHeader = true) => {\n const performanceTesting = localStorage.getItem('performance_testing');\n const payload = mapSearchQuery(searchData, undefined, performanceTesting);\n\n if (searchData.listType === 'combined') {\n payload.combined_search_id = searchData.fromSavedList;\n }\n\n const updatedPayload = cleanPayload(payload);\n\n return SearchService.client.post(\n '',\n updatedPayload,\n addSearchHeader ? SearchService.searchHeaders : {}\n );\n };\n\n // contacts\n static searchContacts(searchData: SearchPayloadRequest) {\n const payload = mapSearchQuery(searchData, undefined, null, false);\n\n return SearchService.client.get<Array<CompanyUserContact>>(\n `/contacts?${queryString.stringify(payload, { arrayFormat: 'comma' })}`\n );\n }\n\n static searchContactsCounter = (\n searchKey: string,\n searchType: string,\n filter: Dictionary<string | Array<string | number>>\n ) => {\n const payload = mapSearchCounterQuery(searchKey, searchType, filter);\n\n return SearchService.client.get<boolean>(\n `/count_contacts?${queryString.stringify(payload, { arrayFormat: 'comma' })}`\n );\n };\n\n static getCompanySearchAutocomplete() {\n return SearchService.client.get<Array<SearchAutocomplete>>('/recent');\n }\n\n /**\n * This endpoint exists to calculate the postal code using the calc \"country + zip\" of\n * different countries than USA. It was implemented as a GET, but in reality it's\n * value it's not used in the UI.\n */\n static getGeoRangeOptions(payload: GeoRangePayload) {\n const query = queryString.stringify(payload, { arrayFormat: 'comma' });\n\n return SearchService.client.get(`/postal_code?${query}`);\n }\n\n static getIsUrlAvailable = (url: string) => {\n const payload = { url };\n\n return SearchService.client.get(`/is_url_available?${queryString.stringify(payload)}`);\n };\n\n static getSimilarCompaniesByURL = (url: string) => {\n const payload = { url };\n\n return SearchService.client.get(`/get_similar_urls?${queryString.stringify(payload)}`);\n };\n}\n\nexport default SearchService;\n","export const SORT_ORDER = {\n ASCENDING: 'asc',\n DESCENDING: 'desc',\n};\n\nexport default SORT_ORDER;\n","// const\nimport { regexDateInterval } from '@optx/constants/regex';\n\n/**\n * Cleans and transforms a given payload object by applying a series of rules to its properties.\n *\n * This function iterates over each property of the input `payload` object and applies the following transformations:\n * 1. Removes properties that are arrays with no elements or arrays with a single `null` element.\n * 2. Converts arrays associated with keys matching a date interval pattern into comma-separated strings.\n * 3. Converts numeric elements within arrays to strings.\n *\n * The resulting object only includes properties with non-null, non-undefined, non-empty values,\n * or values that are explicitly `0` or `false`.\n *\n * @param {Record<string, any>} payload - The input object containing key-value pairs to be cleaned and transformed.\n * @returns {Record<string, string | number | string[]>} - A new object with cleaned and transformed properties.\n */\nexport const cleanPayload = (\n payload: Record<string, any>\n): Record<string, string | number | string[]> => {\n const updatedPayload: Record<string, string | number | string[]> = {};\n\n for (const key in payload) {\n if (payload.hasOwnProperty(key)) {\n let propertyValue = payload[key];\n\n // first check to remove empty array or array with 1 item null\n if (\n Array.isArray(payload[key]) &&\n (payload[key].length === 0 || (payload[key].length === 1 && payload[key][0] === null))\n ) {\n propertyValue = null;\n\n // second check change array to string for date upper/lower filters\n } else if (Array.isArray(payload[key]) && regexDateInterval.test(key)) {\n propertyValue = payload[key].join();\n\n // third check to convert number to strings from arrays\n } else if (\n key === 'analyst_id' &&\n Array.isArray(payload[key]) &&\n payload[key].length === 1 &&\n payload[key][0] === 'All'\n ) {\n propertyValue = 'All';\n } else if (Array.isArray(payload[key])) {\n propertyValue = payload[key].map((value: any) => {\n if (typeof value === 'number') {\n return value.toString();\n }\n\n return value;\n });\n }\n\n if (propertyValue || propertyValue === 0 || propertyValue === false) {\n updatedPayload[key] = propertyValue;\n }\n }\n }\n\n return updatedPayload;\n};\n","import { FormValues } from '../models';\nimport { AddCompanyState } from '../state/interfaces';\n\nexport const FORM_INITIAL_VALUES: FormValues = {\n companyName: '',\n primaryUrl: '',\n\n alternativeName: '',\n secondaryUrl: '',\n\n primaryAddress: '',\n primaryAddressSecondLine: '',\n city: {\n label: '',\n value: '',\n },\n state: {\n label: '',\n value: '',\n },\n zipCode: '',\n country: {\n label: '',\n value: '',\n },\n\n hasSecondaryAddress: false,\n\n secondaryAddress: '',\n secondaryAddressSecondLine: '',\n secondaryCity: {\n label: '',\n value: '',\n },\n secondaryCountry: {\n label: '',\n value: '',\n },\n secondaryState: {\n label: '',\n value: '',\n },\n secondaryZipCode: '',\n\n sector: {\n label: '',\n value: '',\n },\n subSector: {\n label: '',\n value: '',\n },\n productCategory: [],\n ftes: null,\n\n companyOwner: {\n label: '',\n value: '',\n },\n etCheck: null,\n isAddon: {\n label: 'No',\n value: 0,\n },\n\n stage: {\n label: '',\n value: '',\n },\n stageRationale: null,\n fund: {\n label: '',\n value: '',\n },\n addonFor: [],\n\n rank: {\n label: '',\n value: '',\n },\n source: {\n label: '',\n value: '',\n },\n rationale: '',\n opportunityType: {\n label: '',\n value: '',\n },\n description: '',\n};\n\nexport const FORM_TOTAL_STEPS = 4; // this doesn't include the last completed step\n\nexport const STATE_INITIAL_VALUES: AddCompanyState = {\n loading: false,\n similarCompanies: null,\n addedCompany: null,\n urlData: null,\n};\n\nexport const MODAL_WRAPPER_TITLE = 'Add New Company';\n\nexport const VIEW_AND_CLOSE = 'View Company and Close';\n","import { Dictionary } from 'lodash';\n// models\nimport { FilterSource, Filter, PreselectedFilter } from '@models/filters';\nimport { PageInfo } from '@models/table/Pagination';\nimport { SearchSaveResponse, SearchStateData } from '@models/search';\nimport { SortByRule } from '@models/table/sorting';\nimport { CustomUIViewIds } from '@optx/models/user';\nimport { CompanyWatchList } from '@optx/models/WatchList';\n\nexport const prepareFetchSuccess = (\n searchSaveResponses: Dictionary<SearchSaveResponse>,\n filterSources: Array<FilterSource<Filter<any>>>,\n clearedFilters: Dictionary<PreselectedFilter>,\n total?: number,\n query?: string,\n pagination?: PageInfo,\n sortBy?: Array<SortByRule<any>>,\n addCustomViews?: boolean,\n defaultCustomUIView?: CustomUIViewIds,\n isAnalyst?: boolean,\n myCompaniesFilterCards?: Dictionary<SearchStateData>,\n allWatchlists?: Dictionary<CompanyWatchList>,\n location?: Location\n) => ({\n payload: searchSaveResponses,\n meta: {\n filterSources,\n clearedFilters,\n total,\n query,\n pagination,\n sortBy,\n addCustomViews,\n defaultCustomUIView,\n isAnalyst,\n myCompaniesFilterCards,\n allWatchlists,\n location,\n },\n});\n\n// save search\nexport const prepareSaveSearch = (title: string, filters: Dictionary<PreselectedFilter>) => ({\n payload: {\n title,\n filters,\n },\n});\n\nexport const prepareSaveSearchSuccess = (\n searchSaveResponses: SearchSaveResponse,\n filterSources: Array<FilterSource<Filter<any>>>,\n clearedFilters: Dictionary<PreselectedFilter>,\n shouldFetch?: boolean,\n myCompaniesFilterCards?: Dictionary<SearchStateData>\n) => ({\n payload: searchSaveResponses,\n meta: { filterSources, clearedFilters, shouldFetch, myCompaniesFilterCards },\n});\n\n// rename search\nexport const renameSearchPrepare = (\n searchId: number | string,\n newTitle: string,\n viewId?: string | number\n) => ({\n payload: {\n searchId,\n title: newTitle,\n viewId,\n },\n});\n\n// add search id and title to store when appyling a saved search\nexport const prepareSavedSearch = (searchId: number | string, title: string) => ({\n payload: {\n searchId,\n title,\n },\n});\n","export const LONG_CARD_TITLE = 'Long Card View';\nexport const TABLE_VIEW_TITLE = 'Table View';\nexport const FULLSCREEN_TITLE = 'Full Screen';\nexport const COLUMNS_SOURCE_MANEGEMENT_TITLE = 'Columns and Source Management';\nexport const ADD_NEW_COMPANY_MENU_TITLE = 'Add New Company';\nexport const EXPORT_SAVE_TITLE = 'Export/Save Search';\nexport const EXPORT_TITLE = 'Export Search';\nexport const EXPORT_SORTING_TITLE = 'Export/Sorting';\nexport const SAVE_TITLE = 'Save Search';\n","import { Dictionary } from 'lodash';\nimport { Filter, FilterSource } from '@optx/models/filters';\n\n/**\n * Normalize filter data into a dictionary with filter column as keys and filter data as value.\n * All filter data containing options with number values are converted to\n * string to work properly when used with formik library.\n * @param sources\n *\n */\nexport function normalizeFiltersByColumn(sources: Array<FilterSource>): Dictionary<Filter> {\n const normalizedFilters: Dictionary<Filter> = {};\n\n sources.forEach(source => {\n if (source.data) {\n source.data.forEach(filter => {\n normalizedFilters[filter.column] = filter;\n\n if (filter.type === 'filter_group_custom') {\n filter.data.forEach((section: Filter<any>) => {\n normalizedFilters[section.column] = section;\n });\n }\n });\n }\n });\n\n return normalizedFilters;\n}\n","import React from 'react';\nimport { Menu, MenuProps } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport { useSelector, useDispatch } from 'react-redux';\n// constants\nimport appRoutes from '@constants/routes';\nimport { MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\n// redux\nimport { actions as columnActions } from '@features/grid/columns';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\n\ninterface ResetColumnWidthsMenuProps extends MenuItemProps {\n checklistResearchColumnType?: 'analyst' | 'company';\n}\n\nexport const ResetColumnWidthsMenu = ({\n onClick,\n checklistResearchColumnType,\n ...restProps\n}: ResetColumnWidthsMenuProps) => {\n const dispatch = useDispatch();\n\n const searchView = useSelector(viewTypeSelectors.searchView('advancedSearch'));\n const myCompaniesView = useSelector(viewTypeSelectors.searchView('myCompanies'));\n const listView = useSelector(viewTypeSelectors.searchView('lists'));\n const companyOutReachView = useSelector(viewTypeSelectors.searchView('outreachDetails'));\n\n const { advancedSearchPathname } = useUserRole();\n\n const handleClick: MenuProps['onClick'] = info => {\n if (window.location.pathname === advancedSearchPathname) {\n dispatch(columnActions.resetColumnWidths({ settings: 'column_widths_advanced_search' }));\n } else if (window.location.pathname.startsWith('/user-lists')) {\n dispatch(columnActions.resetColumnWidths({ settings: 'column_widths_lists' }));\n } else if (window.location.pathname.startsWith('/profile')) {\n dispatch(columnActions.resetColumnWidths({ settings: 'column_widths_addon_mgmt' }));\n } else if (window.location.pathname.startsWith('/contacts')) {\n dispatch(columnActions.resetColumnWidths({ settings: 'column_widths_all_contacts' }));\n } else if (window.location.pathname.startsWith('/all-reports/checklist-research-insights')) {\n dispatch(\n columnActions.resetColumnWidths({\n settings: 'column_widths_key_check_list',\n checklistResearchColumnType: checklistResearchColumnType,\n })\n );\n } else if (window.location.pathname === appRoutes.myCompanies) {\n dispatch(columnActions.resetColumnWidths({ settings: 'column_widths_my_companies' }));\n\n sendPendoData(`${MY_COMPANIES_PENDO}_ColumnsandSourceManagement_ResetColumnWidths`);\n } else if (window.location.pathname === appRoutes.reports.pipelineReport) {\n dispatch(\n columnActions.resetColumnWidths({ settings: 'column_widths_bi_weekly_pipeline_report' })\n );\n }\n\n if (window.location.pathname.startsWith('/all-reports/sourcing-outreach')) {\n dispatch(\n columnActions.resetColumnWidths({ settings: 'column_widths_sourcing_outreach_detail' })\n );\n }\n\n onClick && onClick(info);\n };\n\n if (window.location.pathname === advancedSearchPathname && searchView === 'long-card') {\n return null;\n }\n\n if (window.location.pathname.startsWith('/user-lists') && listView === 'long-card') {\n return null;\n }\n\n if (window.location.pathname.startsWith('/ss-lists') && listView === 'long-card') {\n return null;\n }\n\n if (\n window.location.pathname.startsWith('/all-reports/sourcing-outreach') &&\n companyOutReachView === 'long-card'\n ) {\n return null;\n }\n\n if (window.location.pathname === appRoutes.myCompanies && myCompaniesView === 'long-card') {\n return null;\n }\n\n return (\n <Menu.Item onClick={handleClick} {...restProps}>\n Reset column widths\n </Menu.Item>\n );\n};\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const updateMyWatchlistTabsPagination = createFeatureActionType(\n featureName,\n 'UPDATE_MY_WATCHLISTS_TABS_PAGINATION'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { WatchlistsTabsPaginationActions } from '@optx/models/WatchList';\nimport * as types from './types';\n\nexport const updateMyWatchlistTabsPagination = createAction<WatchlistsTabsPaginationActions>(\n types.updateMyWatchlistTabsPagination\n);\n","import { takeLatest, call, all, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport {\n WatchlistsTabsPaginationActions,\n WatchlistsTabsPaginationActionsKeys,\n} from '@optx/models/WatchList';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { SortByRule } from '@optx/models/table/sorting';\n// redux\nimport { searchLists, selectors as watchlistSelector } from '@redux/favorite-lists/lists';\nimport {\n searchSourceScrubLists,\n selectors as sourceScrubSelectors,\n} from '@redux/user/source-scrub-lists';\nimport {\n searchSavedSearches,\n selectors as savedCompanySearchesSelectors,\n} from '@redux/company/saved-searches';\nimport {\n searchSavedSearches as contactSearchSavedSearches,\n selectors as savedContactSearchesSelectors,\n} from '@redux/contacts/saved-searches';\nimport * as actions from './actions';\n\n// when we change page size in one tab, make requests\n// and update the rest of the tabs\nfunction* listsAndSearchesPaginationActions(\n action: WatchlistsTabsPaginationActionsKeys,\n pagination: PageInfo\n) {\n switch (action) {\n case 'watchlists': {\n const query: string = yield select(watchlistSelector.getQuery);\n const sortBy: Array<SortByRule<any>> = yield select(watchlistSelector.getSortBy);\n yield call(searchLists, { query, pagination, sortBy: sortBy || [], showEmptyLists: false });\n break;\n }\n\n case 'sourceScrub': {\n const query: string = yield select(sourceScrubSelectors.getQuery);\n const sortBy: Array<SortByRule<any>> = yield select(sourceScrubSelectors.getSort);\n yield call(searchSourceScrubLists, { query, pagination, sortBy: sortBy || [] });\n\n break;\n }\n\n case 'companySearches': {\n const query: string = yield select(savedCompanySearchesSelectors.getQuery);\n yield call(searchSavedSearches, { query, pagination });\n break;\n }\n\n case 'contactSearches': {\n const query: string = yield select(savedContactSearchesSelectors.getQuery);\n yield call(contactSearchSavedSearches, { query, pagination });\n break;\n }\n\n default:\n break;\n }\n}\n\nfunction* updateMyWatchlistTabsPaginationSaga(\n action: PayloadAction<WatchlistsTabsPaginationActions>\n) {\n const { actions, pagination } = action.payload;\n yield all(actions.map(action => call(listsAndSearchesPaginationActions, action, pagination)));\n}\n\nexport default function* contactsSavedSearchesSaga() {\n yield takeLatest(actions.updateMyWatchlistTabsPagination, updateMyWatchlistTabsPaginationSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { UserInformation } from '@optx/models/user';\nimport { UpdateUserSettingsPayload } from '@optx/models/api/user';\n// redux\nimport { actions as userInformationActions } from '@redux/user/information';\n\nconst initialState: number = 50;\n\n// external actions reducers\nconst fetchUserInformationSuccessReducer: CaseReducer<number, PayloadAction<UserInformation>> = (\n draftState,\n action\n) => action.payload.settings.lists_and_searches_results_per_page || 50;\n\nconst updatePageSizeReducer: CaseReducer<\n number,\n PayloadAction<Partial<UpdateUserSettingsPayload>>\n> = (draftState, action) => {\n const pageSize = action.payload.lists_and_searches_results_per_page;\n\n if (pageSize) {\n return pageSize;\n }\n\n return draftState;\n};\n\nconst reducer = createReducer<number>(initialState, builder =>\n builder\n // external reducers\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n .addCase(userInformationActions.updateUserSettingsSuccess, updatePageSizeReducer)\n .addCase(userInformationActions.updateUserSettingsFromAutoSaveSuccess, updatePageSizeReducer)\n .addCase(userInformationActions.updateUserSettingsForSSListSuccess, updatePageSizeReducer)\n .addCase(\n userInformationActions.updateUserSettingsForFavoritesListSuccess,\n updatePageSizeReducer\n )\n .addCase(userInformationActions.updateUserSettingsForUserListSuccess, updatePageSizeReducer)\n .addCase(\n userInformationActions.updateUserSettingsForSavedContactSearchesSuccess,\n updatePageSizeReducer\n )\n .addCase(\n userInformationActions.updateUserSettingsForSuggestedSearchesSuccess,\n updatePageSizeReducer\n )\n);\n\nexport default reducer;\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { AddTagPayload, DeleteTagPayload, SuccessCompanyTag } from './interfaces';\n// redux\nimport * as types from './types';\n\n// add company tag\nexport const addCompanyTag = createAction<AddTagPayload>(types.ADD_COMPANY_TAG);\nexport const addCompanyTagSuccess = createAction<SuccessCompanyTag>(types.ADD_COMPANY_TAG_SUCCESS);\n// delete company tag\nexport const deleteCompanyTag = createAction<DeleteTagPayload>(types.DELETE_COMPANY_TAG);\nexport const deleteCompanyTagSuccess = createAction<DeleteTagPayload>(\n types.DELETE_COMPANY_TAG_SUCCESS\n);\n","// add tag\nexport const ADD_COMPANY_TAG = 'company/tags/ADD_COMPANY_TAG';\nexport const ADD_COMPANY_TAG_SUCCESS = 'company/tags/ADD_COMPANY_TAG_SUCCESS';\n// delete tag\nexport const DELETE_COMPANY_TAG = 'company/tags/DELETE_COMPANY_TAG';\nexport const DELETE_COMPANY_TAG_SUCCESS = 'company/tags/DELETE_COMPANY_TAG_SUCCESS';\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { UserService, CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\nimport { getErrorMessage } from '@utils/api/errors';\nimport { AxiosResponse } from 'axios';\nimport { AddTagPayload, DeleteTagPayload, SuccessCompanyTag } from './interfaces';\nimport * as actions from './actions';\n\nexport function* addTagSaga(action: PayloadAction<AddTagPayload>) {\n try {\n const res: AxiosResponse<SuccessCompanyTag> = yield call(\n UserService.addCompanyTag,\n action.payload\n );\n\n if (res.data) {\n yield put(actions.addCompanyTagSuccess({ ...res.data, companyId: action.payload.companyId }));\n NotificationService.success('Add tag success!');\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to add tag!');\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* deleteTagSaga(action: PayloadAction<DeleteTagPayload>) {\n const { id, companyId } = action.payload;\n\n try {\n yield call(CompanyService.deleteTag, id as number, companyId);\n yield put(actions.deleteCompanyTagSuccess(action.payload));\n NotificationService.success('Delete tag success!');\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to delete tag!');\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* tagsSaga() {\n yield takeLatest(actions.addCompanyTag, addTagSaga);\n yield takeLatest(actions.deleteCompanyTag, deleteTagSaga);\n}\n","const LOWER_SUFFIX = '_lower';\nconst UPPER_SUFFIX = '_upper';\n\n/**\n * Get lower range filter key.\n * @param column filter column\n */\nexport const lowerRangeKey = (column: string) => `${column}${LOWER_SUFFIX}`;\n\n/**\n * Get upper range filter key.\n * @param column filter column\n */\nexport const upperRangeKey = (column: string) => `${column}${UPPER_SUFFIX}`;\n","import { useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { selectors, actions } from '../../../redux/user/information';\nimport useInitialFetch from '../fetch/useInitialFetch';\n\n// separate user information initialization for readability\nconst useFetchUserInformation = () => {\n const shouldFetch = useSelector(selectors.shouldFetch);\n const dispatch = useDispatch();\n const fetchUserInformation = useCallback(\n () => dispatch(actions.fetchUserInformation()),\n [dispatch]\n );\n useInitialFetch(shouldFetch, fetchUserInformation);\n};\n\nexport default useFetchUserInformation;\n","import { useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { selectors, actions } from '@redux/company/filters';\nimport { useShouldFetch } from '../fetch';\n\nconst useInitFilters = () => {\n const shouldFetch = useSelector(selectors.shouldFetchCompanyFilters);\n const dispatch = useDispatch();\n const fetchFilters = useCallback(() => dispatch(actions.fetchCompanyFilters()), [dispatch]);\n useShouldFetch(shouldFetch, fetchFilters);\n};\n\nexport default useInitFilters;\n","import { useSelector, useDispatch } from 'react-redux';\nimport { useInjectReducer } from 'redux-injectors';\nimport { useCallback } from 'react';\nimport {\n actions as displayColumnModalActions,\n selectors as displayColumnModalSelectors,\n} from '../../../redux/ui/modals/display-column';\nimport uiReducer from '../../../redux/ui';\n\nconst useDisplayColumnModal = (): [boolean, VoidFunction] => {\n useInjectReducer({\n key: 'ui',\n reducer: uiReducer,\n });\n const open = useSelector(displayColumnModalSelectors.displayDialog);\n const dispatch = useDispatch();\n const toggle = useCallback(\n () => dispatch(displayColumnModalActions.toggleDisplayColumnDialog()),\n [dispatch]\n );\n\n return [open, toggle];\n};\n\nexport default useDisplayColumnModal;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useCallback } from 'react';\nimport reducer, { saga, selectors, actions } from '../../../redux/favorites';\nimport { useInitialFetch } from '../fetch';\n\nconst useInjectFavorites = () => {\n useInjectReducer({\n key: 'favorites',\n reducer,\n });\n useInjectSaga({ key: 'favorites', saga });\n};\n\nconst useInitialFetchFavorites = () => {\n const dispatch = useDispatch();\n const shouldFetch = useSelector(selectors.shouldInitialFetch);\n const fetchFavorites = useCallback(() => dispatch(actions.fetchFavorites()), [dispatch]);\n\n useInitialFetch(shouldFetch, fetchFavorites);\n};\n\nconst useFavorites = () => {\n useInjectFavorites();\n useInitialFetchFavorites();\n};\n\nexport default useFavorites;\n","import { useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga, selectors, actions } from '../../../redux/user-management';\nimport useInitialFetch from '../fetch/useInitialFetch';\n\nconst useFetchUserManagement = () => {\n useInjectReducer({\n key: 'userManagement',\n reducer,\n });\n useInjectSaga({ key: 'userManagementSaga', saga });\n\n const shouldFetch = useSelector(selectors.shouldFetch);\n const dispatch = useDispatch();\n const fetchUserManagement = useCallback(\n () => dispatch(actions.fetchUserManagement()),\n [dispatch]\n );\n useInitialFetch(shouldFetch, fetchUserManagement);\n};\n\nexport default useFetchUserManagement;\n","import { useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { selectors, actions } from '../../../redux/user/user-list';\nimport useInitialFetch from '../fetch/useInitialFetch';\n\nconst useFetchUserList = (isShare: boolean = false) => {\n const shouldFetch = useSelector(\n isShare ? selectors.shouldShareFetch : selectors.shouldFieldFetch\n );\n\n const dispatch = useDispatch();\n const fetchUserList = useCallback(\n () => dispatch(actions.fetchUserList(isShare)),\n [dispatch, isShare]\n );\n useInitialFetch(shouldFetch, fetchUserList);\n};\n\nexport default useFetchUserList;\n","import { useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { selectors, actions } from '@redux/favorite-lists/lists';\nimport { getRouteAlias } from '@optx/utils/routes';\nimport { RouteAliases } from '@optx/models/routes';\nimport { getQuery } from '@redux/favorite-lists/lists/selectors';\n\nconst useFetchFavoriteLists = () => {\n const pageAlias: RouteAliases | null = getRouteAlias();\n const showEmptyLists = useSelector(selectors.showEmptyLists);\n const dispatch = useDispatch();\n const query = useSelector(getQuery);\n\n const isAdvancedSearchPage = pageAlias === 'advancedSearch';\n const isWatchListPage = pageAlias === 'watchList';\n const isAllReportsPage = pageAlias === 'allReports';\n const isTouchManagementPage = pageAlias === 'touchManagement';\n\n useEffect(() => {\n if (showEmptyLists === null) {\n if (isWatchListPage) {\n dispatch(\n actions.fetchFavoriteLists({ query: query || '', fetchAll: true, showEmptyLists: false })\n );\n } else {\n !isAdvancedSearchPage &&\n !isTouchManagementPage &&\n dispatch(\n actions.fetchFavoriteLists({ query: query || '', fetchAll: true, showEmptyLists: true })\n );\n }\n } else if (showEmptyLists && isWatchListPage) {\n dispatch(\n actions.fetchFavoriteLists({ query: query || '', fetchAll: true, showEmptyLists: false })\n );\n } else if (\n !showEmptyLists &&\n !isWatchListPage &&\n !isAdvancedSearchPage &&\n !isAllReportsPage &&\n !isTouchManagementPage\n ) {\n dispatch(\n actions.fetchFavoriteLists({ query: query || '', fetchAll: true, showEmptyLists: true })\n );\n }\n\n // only on watchlist page we call different endpoint by query.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isWatchListPage, showEmptyLists]);\n};\n\nexport default useFetchFavoriteLists;\n","import { useSelector, useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport { selectors as companyFiltersSelectors } from '../../../redux/company/filters';\nimport { selectors, actions } from '../../../redux/company/suggested-searches';\nimport { useShouldFetch } from '../fetch';\n\nconst useFetchSuggestedSearches = () => {\n const dispatch = useDispatch();\n const filtersLoaded = useSelector(companyFiltersSelectors.filtersLoaded);\n const shouldFetchSearches = useSelector(selectors.shouldFetchSearches);\n const fetchSuggestedSearches = useCallback(\n () => dispatch(actions.fetchSuggestedSearches()),\n [dispatch]\n );\n\n useShouldFetch(filtersLoaded && shouldFetchSearches, fetchSuggestedSearches);\n};\n\nexport default useFetchSuggestedSearches;\n","import { useSelector, useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport { selectors, actions } from '../../../redux/company/saved-searches';\nimport { selectors as companyFiltersSelectors } from '../../../redux/company/filters';\nimport { useShouldFetch } from '../fetch';\n\nconst useFetchSavedSearches = () => {\n const dispatch = useDispatch();\n const filtersLoaded = useSelector(companyFiltersSelectors.filtersLoaded);\n const shouldFetchSearches = useSelector(selectors.shouldFetch);\n const fetchSavedSearches = useCallback(\n () => dispatch(actions.initializeSavedSearchesAndViews()),\n [dispatch]\n );\n\n // load saved searches after filters in order to map proper data using filters.\n useShouldFetch(filtersLoaded && shouldFetchSearches, fetchSavedSearches);\n};\n\nexport default useFetchSavedSearches;\n","import { useSelector, useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport { getUserId } from '@redux/user/information/selectors';\nimport { selectors, actions } from '../../../redux/contacts/saved-searches';\nimport { selectors as contactsFiltersSelectors } from '../../../redux/contacts/filters';\nimport { useShouldFetch } from '../fetch';\n\nconst useFetchContactsSavedSearches = () => {\n const dispatch = useDispatch();\n const filtersLoaded = useSelector(contactsFiltersSelectors.loaded);\n const shouldFetchSearches = useSelector(selectors.shouldFetch);\n const query = useSelector(selectors.getQuery);\n const userId = useSelector(getUserId);\n\n const fetchSavedSearches = useCallback(\n () => {\n userId && dispatch(actions.fetchContactSavedSearches(query));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dispatch, userId]\n );\n\n // Load saved searches after contacts filters are loaded.\n useShouldFetch(filtersLoaded && shouldFetchSearches && !!userId, fetchSavedSearches);\n};\n\nexport default useFetchContactsSavedSearches;\n","import { useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { selectors, actions } from '../../../redux/contacts/filters';\nimport { useShouldFetch } from '../fetch';\n\nconst useInitContactFilters = () => {\n const shouldFetch = useSelector(selectors.shouldInitialFetch);\n const dispatch = useDispatch();\n const fetchFilters = useCallback(() => dispatch(actions.fetchFilters()), [dispatch]);\n useShouldFetch(shouldFetch, fetchFilters);\n};\n\nexport default useInitContactFilters;\n","// redux\nimport { useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport { actions } from '../../../redux/company/funding-rounds';\n\ninterface useInitCompanyFundingRoundsFunction {\n (): {\n fetchCompanyFundingRounds(companyId: number): void;\n };\n}\n\nconst useInitCompanyFundingRounds: useInitCompanyFundingRoundsFunction = () => {\n const dispatch = useDispatch();\n\n const fetchCompanyFundingRounds = useCallback(\n (companyId: number) => dispatch(actions.getCompanyFundingRounds(companyId)),\n [dispatch]\n );\n\n return { fetchCompanyFundingRounds };\n};\n\nexport default useInitCompanyFundingRounds;\n","import { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { AppState } from '@optx/redux/interfaces';\n// redux\nimport {\n selectors as companyListsSelectors,\n actions as companyListsActions,\n} from '@redux/favorite-lists/company-lists';\n//hooks\nimport { useIsChromePlugin } from '../useIsChromePlugin';\n\n/**\n * Initialize watch lists inclusing company.\n * @param companyId company identifier.\n * @param shouldInitialize if should initialize to allow postponing call until a rule is accomplished.\n */\nconst useInitWatchListsIncludingCompany = (\n companyId: number,\n shouldInitialize: boolean = false\n) => {\n const dispatch = useDispatch();\n const { isChromePlugin } = useIsChromePlugin();\n\n const listsIncludingCompany = useSelector((state: AppState) =>\n companyListsSelectors.getCompanyLists(state, companyId)\n );\n const isLoading = useSelector(companyListsSelectors.isLoading);\n\n useEffect(() => {\n if (shouldInitialize && !isLoading && !listsIncludingCompany && !isChromePlugin) {\n dispatch(companyListsActions.fetchListsExcludingCompany(companyId));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldInitialize, isLoading, listsIncludingCompany, companyId, dispatch]);\n\n return {\n listsIncludingCompany,\n };\n};\n\nexport default useInitWatchListsIncludingCompany;\n","import { useSelector, useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport _ from 'lodash';\n// redux\nimport { selectors, actions } from '@redux/favorite-lists/lists';\n// hooks\nimport { useShouldFetch } from '../fetch';\n\nconst useInitFetchFavoriteLists = () => {\n const dispatch = useDispatch();\n const shouldFetch = useSelector(selectors.shouldInitialFetch);\n const getAllWatchlists = useSelector(selectors.getAllWatchlists);\n const allWatchlistIsEmpty = _.isEmpty(getAllWatchlists);\n\n const fetchFilters = useCallback(\n () => dispatch(actions.initialFetchFavoritesLists()),\n [dispatch]\n );\n\n useShouldFetch(shouldFetch && allWatchlistIsEmpty, fetchFilters);\n};\n\nexport default useInitFetchFavoriteLists;\n","import { useSelector, useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\nimport { isEmpty } from 'lodash';\n// redux\nimport { selectors, actions } from '@redux/favorite-lists/lists-popup';\n// hooks\nimport { useShouldFetch } from '../fetch';\n\nconst useInitFetchFavoriteListsPopup = () => {\n const dispatch = useDispatch();\n const shouldFetch = useSelector(selectors.shouldInitialFetch);\n const getAllWatchlists = useSelector(selectors.getAllWatchlists);\n const allWatchlistIsEmpty = isEmpty(getAllWatchlists);\n const fetchFiltersPopup = useCallback(\n () => dispatch(actions.initialFetchFavoritesListsPopup()),\n [dispatch]\n );\n\n useShouldFetch(shouldFetch && allWatchlistIsEmpty, fetchFiltersPopup);\n};\n\nexport default useInitFetchFavoriteListsPopup;\n","import React from 'react';\nimport { LoadIcon32 } from '../../LoadingIcon';\nimport { Styled } from './Loader.styles';\n\ninterface FixedLoaderProps {\n loading?: boolean;\n isAbsolute?: boolean;\n}\n\nconst FixedLoader: React.FC<FixedLoaderProps> = ({ loading, children, isAbsolute = false }) => {\n const isChromePlugin = window.location.pathname.startsWith('/chrome-extension-new');\n\n if (loading) {\n return (\n <Styled.Loader\n className={isAbsolute ? 'loading' : 'loading fixed'}\n $isChromePlugin={isChromePlugin}\n >\n {children || <LoadIcon32 />}\n </Styled.Loader>\n );\n }\n\n return null;\n};\n\nexport default FixedLoader;\n","import { PreselectedFilter, BaseFilter } from '@optx/models/filters';\nimport { Dictionary, cloneDeep } from 'lodash';\nimport { LogicOption } from '@optx/models/Option';\n\n/**\n * Inject filter or filter option from specific source filters into other filters.\n * @param filterSources all filter sources.\n * @param destinationFilters original filters where we want to inject the new filter or filter option.\n * @param sourceFilters source filter containing filter or filter option we want to inject.\n * @param filterKey key of the filter to be injected.\n * @param optionId option identifier in filter to be injected.\n * @returns a clone of destination filters with filter or filter option from source injected.\n */\nexport const injectFilter = (\n filterSources: Dictionary<BaseFilter<any>>,\n destinationFilters: Dictionary<PreselectedFilter>,\n sourceFilters: Dictionary<PreselectedFilter>,\n filterKey: string,\n optionId?: string | number\n) => {\n // clone all current filters\n const newFilters = cloneDeep(destinationFilters);\n const filterSource: BaseFilter<any> | undefined = filterSources[filterKey];\n\n if (optionId !== undefined) {\n // handle case when only a specific option from filter is removed.\n switch (filterSource.type) {\n case 'logic_checkbox': {\n const itemIndex = optionId as number;\n const sourceFilterOption = (sourceFilters[filterKey] as Array<LogicOption>)[itemIndex];\n (newFilters[filterKey] as Array<LogicOption>)[itemIndex] = { ...sourceFilterOption };\n\n break;\n }\n\n default:\n break;\n }\n } else {\n // is platform/portfolio is not a defined filter, is a special case to search by specific tag.\n if (filterKey === 'is_platform') {\n newFilters[filterKey] = undefined;\n } else {\n newFilters[filterKey] = sourceFilters[filterKey];\n }\n\n if (filterKey === 'geo_range') {\n newFilters.geo_country = sourceFilters.geo_country;\n }\n\n if (filterSource) {\n switch (filterSource.type) {\n case 'multiple_range_nr': {\n // handle custom checkbox case\n const customCheckKey = `${filterKey}_custom`;\n newFilters[customCheckKey] = sourceFilters[customCheckKey];\n\n break;\n }\n\n case 'checkbox': {\n // handle custom checkbox range case\n const customCheckKey = `${filterKey}_custom`;\n newFilters[customCheckKey] = sourceFilters[customCheckKey];\n\n break;\n }\n\n default:\n break;\n }\n }\n }\n\n if (\n filterKey === 'country' &&\n Array.isArray(destinationFilters.europe_tier) &&\n destinationFilters.europe_tier.length\n ) {\n return {\n ...newFilters,\n europe_tier: [],\n };\n }\n\n return newFilters;\n};\n","export const ADD_TOUCH_LOCALSTORAGE_KEY_PREFIX = 'add_touch_form_autosave_';\nexport const EDIT_ALL_LOCALSTORAGE_KEY_PREFIX = 'edit_all_form_autosave_';\nexport const SAVE_FREQUENCY_IN_MILLISECONDS = 60000;\n","// using postMessage the plugin sends it's version number to the application\n// and the value is saved in localstorage\nconst pluginVersion = 'optx_plugin_version';\n\nexport const getPluginVersion = () => {\n return localStorage.getItem(pluginVersion);\n};\n\nexport const setPluginVersion = (value: string) => {\n localStorage.setItem(pluginVersion, value);\n};\n\nexport const checkPluginVersion = (version: number) => {\n const pluginVersion = getPluginVersion();\n\n return pluginVersion !== null && parseFloat(pluginVersion) >= version;\n};\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport {\n TOGGLE_ADD_RESEARCH_RATIONALE,\n TOGGLE_ADD_RESEARCH_RATIONALE_SUCCESS,\n CHANGE_FIELDS,\n CHANGE_RATIONALE,\n REVERT_FIELDS_CHANGES,\n SUBMIT_RESEARCH_RATIONALE,\n SUBMIT_RESEARCH_RATIONALE_SUCCESS,\n} from './actionsTypes';\nimport {\n AddResearchRationale,\n AddResearchRationaleSuccess,\n ChangeFieldsPayload,\n SaveResearchRationaleResponse,\n} from './interfaces';\n\nexport const toggleAddResearchRationale = createAction<AddResearchRationale>(\n TOGGLE_ADD_RESEARCH_RATIONALE\n);\n\nexport const toggleAddResearchRationaleSuccess = createAction<AddResearchRationaleSuccess>(\n TOGGLE_ADD_RESEARCH_RATIONALE_SUCCESS\n);\n\nexport const changeFields = createAction<ChangeFieldsPayload>(CHANGE_FIELDS);\nexport const changeRationale = createAction<ChangeFieldsPayload>(CHANGE_RATIONALE);\n\nexport const revertFieldsChanges = createAction<ChangeFieldsPayload>(REVERT_FIELDS_CHANGES);\n\nexport const submitResearchRationale = createAction(SUBMIT_RESEARCH_RATIONALE);\nexport const submitResearchRationaleSuccess = createAction<SaveResearchRationaleResponse>(\n SUBMIT_RESEARCH_RATIONALE_SUCCESS\n);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport classnames from 'classnames';\n// utils\nimport { getDateColor } from '@utils/text';\nimport { normalizeNegativeSignValues } from '@optx/utils/utils';\n// redux\nimport { selectors as profileSelectors } from '@redux/company/profile';\n\ninterface KeyPerformanceIndicatorProps {\n value: number | string;\n label: string;\n formatValue?: (value: number | string) => string;\n className?: string;\n valueProps?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;\n isInvalidValue?: boolean;\n}\n\nconst KeyPerformanceIndicator: React.FC<KeyPerformanceIndicatorProps> = ({\n value,\n label,\n formatValue,\n className,\n valueProps,\n isInvalidValue = false,\n}) => {\n let formattedValue = value;\n const company = useSelector(profileSelectors.getProfile);\n const lastTouchDate = company?.last_touch_date;\n\n if (formatValue) {\n formattedValue = formatValue(value);\n }\n\n const kpiClassName = classnames('kpi', className, {\n 'kpi--positive': typeof value === 'number' && value > 0,\n 'kpi--negative': typeof value === 'number' && value < 0,\n });\n\n const valueClassName = valueProps && valueProps.className;\n\n return (\n <div className={kpiClassName}>\n <span\n {...valueProps}\n style={\n // eslint-disable-next-line no-nested-ternary\n label === 'Most Recent Touch' || label === 'Last Touch'\n ? isInvalidValue\n ? { color: `${getDateColor(lastTouchDate)}` }\n : { color: `${getDateColor(value)}` }\n : undefined\n }\n className={classnames('kpi__value', valueClassName)}\n >\n {normalizeNegativeSignValues(formattedValue.toString())}\n </span>\n <span className=\"kpi__label\">{label}</span>\n </div>\n );\n};\n\nexport default React.memo(KeyPerformanceIndicator);\n","export const LOAD_COMPANY_LIST = 'lists/LOAD_COMPANY_LIST';\nexport const LOAD_COMPANY_LIST_SUCCESS = 'lists/LOAD_COMPANY_LIST_SUCCESS';\n\nexport const FILTER_COMPANY_LIST = 'lists/FILTER_COMPANY_LIST';\nexport const FILTER_COMPANY_LIST_SUCCESS = 'lists/LIST_FILTER_COMPANY_LIST_SUCCESS';\n\nexport const CLEAR_COMPANY_FILTER = 'lists/CLEAR_COMPANY_FILTER';\nexport const DELETE_COMPANY_IN_LIST = 'lists/DELETE_COMPANY_IN_LIST';\n\nexport const FILTER_CSV_COMPANY_ERROR_LIST = 'FILTER_CSV_COMPANY_ERROR_LIST';\n\nexport const LOAD_COMPANY_LIST_DETAILS = 'lists/LOAD_COMPANY_LIST_DETAILS';\nexport const LOAD_COMPANY_LIST_DETAILS_SUCCESS = 'lists/LOAD_COMPANY_LIST_DETAILS_SUCCESS';\nexport const LOAD_COMPANY_LIST_DETAILS_FAILURE = 'lists/LOAD_COMPANY_LIST_DETAILS_FAILURE';\nexport const LOAD_COMPANY_LIST_DETAILS_RESET = 'lists/LOAD_COMPANY_LIST_DETAILS_RESET';\n\nexport const RESET_LOADING_STATE = 'lists/RESET_LOADING_STATE';\n","import { LoadingOutlined } from '@ant-design/icons';\nimport styled from 'styled-components';\n\nconst LoadingIcon = styled(LoadingOutlined)`\n font-size: 42px;\n height: 42px;\n color: #4ce1b6;\n`;\n\nconst LoadingIconWrapper = styled.div`\n height: 180px;\n display: flex;\n justify-content: center;\n vertical-align: center;\n`;\n\nconst ChartHeaderWrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n`;\n\nconst ChartTitleWrapper = styled.div`\n margin-right: 20px;\n`;\n\nconst Styles = {\n LoadingIcon,\n LoadingIconWrapper,\n ChartHeaderWrapper,\n ChartTitleWrapper,\n};\n\nexport default Styles;\n","import moment from 'moment';\n/**\n * Checks how old a date is and returns a color or empty string\n * @param {string} date - date\n */\n\nexport const getDateColor = (\n date: string | null | number | undefined,\n canBePastDueDate?: boolean\n) => {\n if (!date) {\n return '';\n }\n\n if (canBePastDueDate) {\n const today = moment(new Date());\n const targetDate = moment(date);\n\n return today.isAfter(targetDate, 'day') ? '#F5222D' : '#13C2C2';\n }\n\n const sixWeeks = 1000 * 60 * 60 * 24 * 7 * 6;\n const sixMonths = 1000 * 60 * 60 * 24 * 183;\n const today = new Date();\n const targetDate = new Date(date);\n const dateDiff = today.getTime() - targetDate.getTime();\n let color = '';\n\n if (dateDiff > sixMonths) {\n color = '#FA541C';\n } else if (dateDiff > sixWeeks) {\n color = '#FA8C16';\n } else {\n color = '#13C2C2';\n }\n\n return color;\n};\n\n/**\n * Check for dropdown option with negative ranges that are displayed between parentheses\n * @param {string} value value to be checked\n * @returns boolean\n */\nexport const checkForNegativeSelectedOption = (value: string | number | null | undefined) =>\n typeof value === 'string' && value.startsWith('(');\n\n/**\n * Returns an object with a color property if the checkFunction returns true\n * for the given value, otherwise returns an empty object.\n * @param value - The string to be highlighted.\n * @param color - The color to be used for highlighting. Defaults to '#f5222d'.\n * @param checkFunction - The function used to determine if the value should be\n * highlighted. Defaults to checkForNegativeSelectedOption.\n * @returns An object with a color property if the checkFunction returns true\n * for the given value, otherwise returns an empty object.\n */\nexport const highlightText = (\n value: string | undefined,\n color: string = '#f5222d',\n checkFunction: (\n value: string | number | null | undefined\n ) => boolean = checkForNegativeSelectedOption\n) => (checkFunction(value) ? { color } : {});\n","import { utils as requestUtils } from '@features/request';\nimport featureName from '../featureName';\n\nexport const fetchEmployeeGrowth = requestUtils.createActionTypes(featureName, 'FETCH');\n","export default 'employee-growth';\n","import { createAction } from '@reduxjs/toolkit';\nimport { ChartData } from '@optx/models/charts/data';\nimport * as types from './types';\n\nexport const fetchEmployeeGrowth = createAction<number>(types.fetchEmployeeGrowth.REQUEST);\n\nexport const fetchEmployeeGrowthSuccess = createAction<ChartData>(\n types.fetchEmployeeGrowth.SUCCESS\n);\n\nexport const fetchEmployeeGrowthFail = createAction<string>(types.fetchEmployeeGrowth.FAILURE);\n","import { EmployeeGrowthState } from './interfaces';\n\nexport const getData = (state: EmployeeGrowthState) => state.data;\n","import { createReducer } from '@reduxjs/toolkit';\n// constants\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\n// redux\nimport { fetchFailReducer, fetchReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\nimport * as actions from './actions';\nimport { EmployeeGrowthState } from './interfaces';\n\nconst initialState: EmployeeGrowthState = {\n data: INITIAL_STATE_CHART,\n loading: false,\n error: '',\n};\n\nexport const reducer = createReducer<EmployeeGrowthState>(initialState, builder =>\n builder\n .addCase(actions.fetchEmployeeGrowth, fetchReducer)\n .addCase(actions.fetchEmployeeGrowthSuccess, fetchSuccessReducer)\n .addCase(actions.fetchEmployeeGrowthFail, fetchFailReducer)\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { ChartData, ChartIntervalKeys } from '@optx/models/charts/data';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\nimport { parseLineGraphDataWithPosition } from '@optx/utils/charts';\n// redux\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\nimport * as actions from './actions';\n\nexport function* fetchEmployeeGrowthSaga(action: PayloadAction<number>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<ChartData> = yield call(CompanyService.getEmployeeGrowth, companyId);\n const growthList = res.data;\n\n if (growthList[Object.keys(growthList)[0] as ChartIntervalKeys].data.length) {\n yield put(actions.fetchEmployeeGrowthSuccess(parseLineGraphDataWithPosition(growthList)));\n } else {\n yield put(actions.fetchEmployeeGrowthSuccess(INITIAL_STATE_CHART));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch Employee Growth!');\n yield put(actions.fetchEmployeeGrowthFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* employeeGrowthSaga() {\n yield takeLatest(actions.fetchEmployeeGrowth, fetchEmployeeGrowthSaga);\n}\n","import featureName from '../../featureName';\nimport { BulkActionsState } from '../interfaces';\n\ntype StateSlice = Record<typeof featureName, BulkActionsState>;\n\nexport const selectFeatureState = (state: StateSlice) => state[featureName];\n","import styled from 'styled-components';\n\nconst GrayButton = styled.button`\n padding: 5px 0;\n background: #fff;\n width: 216px;\n font-size: 16px;\n color: $gray-7;\n border: 1px solid $gray-5;\n`;\n\nexport default {\n GrayButton,\n};\n","import React from 'react';\nimport Styled from './GrayRectangleBtn.styles';\n\ninterface GrayRectangleBtnProps {\n text: string;\n}\n\nconst GrayRectangleBtn: React.FC<GrayRectangleBtnProps> = ({ text }) => {\n return <Styled.GrayButton type=\"button\">{text}</Styled.GrayButton>;\n};\n\nexport default GrayRectangleBtn;\n","import React from 'react';\nimport GrayRectangle from '../../common/buttons/GrayRectangleBtn';\n\ninterface EmptyChartProps {\n className?: string;\n text?: string;\n width?: string | number;\n}\n\nconst EmptyChart: React.FC<EmptyChartProps> = ({ className, text = 'No History', width }) => {\n return (\n <div className={`${className} profile-chart-card__empty`} style={{ width }}>\n <GrayRectangle text={text} />\n </div>\n );\n};\n\nEmptyChart.defaultProps = {\n className: 'profile-chart-card__no-data',\n width: 'calc(100% - 84px)',\n};\n\nexport default EmptyChart;\n","// check if application is loaded inside an iframe\nexport const isInIframe = window.self !== window.top;\n","import React from 'react';\nimport { GlobalOutlined } from '@ant-design/icons';\nimport Company from '@optx/models/Company';\nimport styled from 'styled-components';\nimport { Cell } from '../../../../../models/table/Cell';\n// constants\nimport { ADVANCED_SEARCH, MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// utils\nimport { createSendPendoAction, sendPendoData } from '@optx/utils/utils';\n// hooks\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\n\nconst CompanyLink = styled.a`\n &.not-active {\n color: red;\n }\n color: #c2cfe0;\n font-size: 22px;\n line-height: 1;\n\n > svg {\n width: auto;\n height: auto;\n }\n`;\n\nconst TableCellCompanyURL: React.FC<Cell<Company>> = ({ record }) => {\n const { raw_url: rawUrl, url_status: status } = record;\n const urlStatus = status === 'active';\n const currentGridName = useCurrentGridName();\n\n const handlePendoAction = () => {\n createSendPendoAction(sendPendoData, currentGridName, `${ADVANCED_SEARCH}_Row_WebsiteIcon`);\n\n if (currentGridName === 'My Companies') {\n sendPendoData(`${MY_COMPANIES_PENDO}_WebsiteIcon`);\n }\n };\n\n return (\n <>\n {rawUrl && (\n <CompanyLink\n href={rawUrl}\n title={rawUrl}\n onClick={() => handlePendoAction()}\n className={urlStatus ? undefined : 'not-active'}\n target=\"_blank\"\n >\n <GlobalOutlined />\n </CompanyLink>\n )}\n </>\n );\n};\n\nexport default React.memo(TableCellCompanyURL);\n","import styled from 'styled-components';\nimport PopoverComponent from '@optx/shared/view/molecules/Popover';\nimport { Tag as AntTag } from 'antd';\n\nconst Popover = styled(PopoverComponent)`\n max-width: 500px;\n width: 500px;\n\n padding-left: 0;\n\n &.ant-popover-placement-right {\n .ant-popover-arrow {\n margin-left: -10px;\n }\n }\n\n &.ant-popover-placement-rightTop,\n &.ant-popover-placement-leftTop {\n .ant-popover-arrow {\n top: 51px;\n }\n }\n`;\n\ninterface PopoverTitleProps {\n fullWidth?: boolean;\n}\n\nconst PopoverTitle = styled.span<PopoverTitleProps>`\n font-style: normal;\n font-weight: 600;\n font-size: 14px;\n line-height: 22px;\n /* Gray / gray-9 */\n color: #262626;\n\n margin-right: 4px;\n\n display: inline-block;\n max-width: ${({ fullWidth }) => (fullWidth ? '100%' : '50%')};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst PopoverTitleWrapper = styled.div`\n width: 100%;\n width: 100%;\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n\n .parent-company-tag {\n margin-left: auto;\n max-width: 40%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .enabled-tag {\n &:hover {\n cursor: pointer;\n }\n }\n\n & a {\n display: flex;\n font-size: 18px;\n color: #262626; /* Gray / gray-9 */\n }\n\n & a:hover {\n color: #1890ff;\n }\n`;\n\nconst PopoverContentDescription = styled.p.attrs((props: { isMarginItem?: boolean }) => props)`\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n margin-bottom: 0px;\n /* Gray / gray-8 */\n color: #595959;\n\n & a {\n color: #595959;\n }\n\n & a:hover {\n color: #1890ff;\n }\n\n &:last-of-type {\n margin: ${props => (props.isMarginItem ? '22px 0px' : '0px 0px 22px 0')};\n }\n`;\n\nconst TagsWrapper = styled.div`\n padding-bottom: 12px;\n .ant-tag--special {\n margin: 5px 8px 0 0;\n font-size: 12px;\n background: #d6e4ff;\n /* Dark BLue */\n color: #334d6e;\n }\n`;\n\ninterface TagProps {\n left?: number;\n}\n\nconst Tag = styled(AntTag)<TagProps>`\n margin: 5px 8px 0 0;\n font-size: 12px;\n position: ${({ left }) => (left ? 'absolute' : 'static')};\n left: ${({ left }) => `${left}px` || 'unset'};\n`;\n\nconst SubTitle = styled.span`\n font-weight: 600;\n`;\n\nconst TagContainer = styled.span`\n display: inline-flex;\n flex-wrap: wrap;\n height: 27px;\n overflow-y: hidden;\n max-width: 100%;\n position: relative;\n padding-right: 70px;\n`;\n\nexport default {\n Popover,\n PopoverTitle,\n PopoverContentDescription,\n PopoverTitleWrapper,\n TagsWrapper,\n Tag,\n SubTitle,\n TagContainer,\n};\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable react/jsx-wrap-multilines */\nimport React, { ReactNode } from 'react';\nimport { Link } from 'react-router-dom';\nimport Truncate from 'react-truncate';\nimport { useSelector } from 'react-redux';\nimport { Tag } from 'antd';\n// models\nimport { CompanyProfile } from '@optx/models/Company';\nimport { ReferrerUrlOrigin } from '@optx/models/routes';\n// constants\nimport { DEFAULT_CELL_VALUE, DEFAULT_NEXT_TOUCH } from '@constants/table/cells';\nimport globalConfig from '@optx/constants/config';\n// utils\nimport { getCompanyProfileURL, stringifyReferrerUrlParam } from '@optx/utils/routes';\nimport { searchInNewTab } from '@optx/utils/search';\nimport { formatLastTouch } from '@optx/utils/touches';\nimport { getCompanyAddress } from '@optx/utils/company';\n// redux\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\n// components\nimport Icon from '@components/common/Icon';\nimport { PoweredByAITag } from '@optx/components/common/powered-by-ai-tag';\nimport { CompanyTagsOverflow, ListTagsOverflow } from '@optx/features/tags/overflow-tags';\nimport { MultipleDate } from '@components/common/MultipleDate';\nimport Styled from './CustomTooltip.styled';\n\ninterface CustomTooltipProps {\n company: CompanyProfile;\n pathName: string;\n children: ReactNode | ReactNode[];\n onVisibleChange?: (visible: boolean) => void;\n}\n\nconst CustomTooltip: React.FC<CustomTooltipProps> = ({\n children,\n company,\n pathName,\n onVisibleChange,\n}) => {\n const {\n raw_url: rawUrl,\n company_description: companyDescription,\n company_name: companyName,\n company_id: companyId,\n parentcompany: parentCompany,\n is_in_et: isOnEquityTouch,\n company_owner: companyOwner,\n last_touch_date: lastTouchDate,\n next_touch_date: nextTouchDate,\n street,\n city,\n state,\n country,\n } = company;\n\n const clearedFilter = useSelector(filterSelectors.getClearedFilter('advancedSearch'));\n const sources = useSelector(filterSourcesSelectors.getFiltersMap);\n const companyWatchLists =\n company.et_watchlists && company.regular_watchlists\n ? [...company.et_watchlists, ...company.regular_watchlists]\n : company.et_watchlists\n ? company.et_watchlists\n : company.regular_watchlists;\n\n const { advancedSearchPathname } = useUserRole();\n\n const handleParentCompanyClick = () => {\n // some parent companies have ' dba ' in their names\n // in that case we only search for name after ' dba '\n // ex: 'Football1x2, Ltd. dba 1X2 Network'\n const [firstPart, secondPart] = company.parentcompany.split(' dba ');\n\n searchInNewTab(\n clearedFilter,\n sources,\n 'query',\n secondPart || firstPart,\n {\n referrer: ReferrerUrlOrigin.parentCompanySearch,\n },\n advancedSearchPathname\n );\n };\n\n return (\n <Styled.Popover\n arrowPointAtCenter\n placement=\"right\"\n onVisibleChange={onVisibleChange}\n title={\n <Styled.PopoverTitleWrapper>\n <Styled.PopoverTitle fullWidth={parentCompany === DEFAULT_CELL_VALUE}>\n {companyName}\n </Styled.PopoverTitle>\n <Link\n to={getCompanyProfileURL(companyId, stringifyReferrerUrlParam(pathName))}\n target=\"_blank\"\n >\n <Icon iconName=\"open-in-new\" />\n </Link>\n\n {parentCompany === 'unknown' ? (\n <Tag color=\"red\" className=\"parent-company-tag\">\n {parentCompany}\n </Tag>\n ) : (\n parentCompany !== DEFAULT_CELL_VALUE && (\n <Tag\n color=\"red\"\n onClick={handleParentCompanyClick}\n className=\"parent-company-tag enabled-tag\"\n >\n {parentCompany}\n </Tag>\n )\n )}\n </Styled.PopoverTitleWrapper>\n }\n content={\n <>\n {(street !== DEFAULT_CELL_VALUE ||\n city !== DEFAULT_CELL_VALUE ||\n state !== DEFAULT_CELL_VALUE ||\n country !== DEFAULT_CELL_VALUE) && (\n <Styled.PopoverContentDescription>\n <Styled.SubTitle>Address: </Styled.SubTitle>\n {getCompanyAddress(company, DEFAULT_CELL_VALUE)}\n </Styled.PopoverContentDescription>\n )}\n {rawUrl && (\n <Styled.PopoverContentDescription>\n <Styled.SubTitle>URL: </Styled.SubTitle>\n\n <a href={rawUrl} title={rawUrl} target=\"__blank\">\n {rawUrl}\n </a>\n </Styled.PopoverContentDescription>\n )}\n {typeof isOnEquityTouch === 'boolean' && (\n <Styled.PopoverContentDescription>\n <Styled.SubTitle>In EquityTouch: </Styled.SubTitle>\n {isOnEquityTouch ? 'Yes' : 'No'}\n </Styled.PopoverContentDescription>\n )}\n {companyOwner && (\n <Styled.PopoverContentDescription>\n <Styled.SubTitle>Company Owner: </Styled.SubTitle>\n {companyOwner}\n </Styled.PopoverContentDescription>\n )}\n {lastTouchDate && (\n <Styled.PopoverContentDescription>\n <Styled.SubTitle>Last Touch Date: </Styled.SubTitle>\n {formatLastTouch(lastTouchDate, 'monthDayYear')}\n </Styled.PopoverContentDescription>\n )}\n {nextTouchDate && (\n <Styled.PopoverContentDescription>\n <Styled.SubTitle>Scheduled Touch Date: </Styled.SubTitle>\n {typeof nextTouchDate === 'string' ? (\n nextTouchDate\n ) : (\n <MultipleDate\n dates={nextTouchDate}\n emptyValue={DEFAULT_NEXT_TOUCH}\n format={globalConfig.grid_date.DATE_FORMAT}\n />\n )}\n </Styled.PopoverContentDescription>\n )}\n {companyDescription && (\n <Styled.PopoverContentDescription isMarginItem>\n <Styled.SubTitle>Description: </Styled.SubTitle>\n {company.is_ai_powered && <PoweredByAITag />}\n <br />\n <Truncate lines={4} ellipsis={<span>...</span>}>\n {companyDescription}\n </Truncate>\n </Styled.PopoverContentDescription>\n )}\n <CompanyTagsOverflow company={company} isNewTab />\n <ListTagsOverflow tags={companyWatchLists} className=\"list-tags__custom-styling\" />\n </>\n }\n >\n {/* Popover children must be an element that accepts events, not components, in this case we wrap it with span */}\n <span>{children}</span>\n </Styled.Popover>\n );\n};\n\nexport default React.memo(CustomTooltip);\n","import { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n// components\nimport Icon from '@components/common/Icon';\n\nconst LinkOpenInNewTab = styled(Link)`\n color: #000;\n\n &:hover {\n color: $blue-6;\n }\n`;\n\nconst OpenInNewTabIcon = styled(Icon)`\n margin-left: 10px;\n width: auto;\n height: auto;\n`;\n\nconst CompanyLink = styled(Link)`\n font-weight: 600;\n color: $blue-6;\n\n display: block;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-top: 5px;\n max-width: 100%;\n`;\n\nexport const Styled = {\n LinkOpenInNewTab,\n OpenInNewTabIcon,\n CompanyLink,\n};\n","import React from 'react';\n// models\nimport { CompanyProfile } from '@optx/models/Company';\nimport { Cell } from '@models/table/Cell';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\nimport { ADVANCED_SEARCH, MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\n// hooks\nimport useReferrerProfileLink from '@hooks/useReferrerLink';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\n// components\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport CustomTooltip from './CustomTooltip';\nimport { Styled } from './TableCellName.styled';\n\nconst TableCellName: React.FC<Cell<CompanyProfile>> = ({ value, record }) => {\n const { referrerUrl, referrer } = useReferrerProfileLink(record.company_id);\n const currentGridName = useCurrentGridName();\n\n const handlePendoAction = () => {\n if (currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_Row_Company_Profile_Popout`);\n } else if (currentGridName === 'My Companies') {\n sendPendoData(`${MY_COMPANIES_PENDO}_CompanyProfileLink`);\n }\n };\n\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <Styled.LinkOpenInNewTab to={referrerUrl} target=\"_blank\">\n <Styled.OpenInNewTabIcon iconName=\"open-in-new\" onClick={() => handlePendoAction()} />\n </Styled.LinkOpenInNewTab>\n }\n hideActionOnChildrenHover\n >\n <CustomTooltip company={record} pathName={referrer}>\n <Styled.CompanyLink to={referrerUrl}>\n {value || <>{DEFAULT_CELL_VALUE}</>}\n </Styled.CompanyLink>\n </CustomTooltip>\n </InlineEdit>\n );\n};\n\nexport default React.memo(TableCellName);\n","import React from 'react';\n// models\nimport { CompanyProfile } from '@optx/models/Company';\nimport { Cell } from '@models/table/Cell';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n// hooks\nimport useReferrerProfileLink from '@hooks/useReferrerLink';\n// components\nimport { Styled } from './TableCellName.styled';\n\nconst TableCellNameLink: React.FC<Cell<CompanyProfile>> = ({ value, record }) => {\n const { referrerUrl } = useReferrerProfileLink(record.company_id);\n\n return (\n <Styled.CompanyLink to={referrerUrl}>{value || <>{DEFAULT_CELL_VALUE}</>}</Styled.CompanyLink>\n );\n};\n\nexport default React.memo(TableCellNameLink);\n","import { createSelector } from 'reselect';\nimport createCachedSelector from 're-reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst selectCompanyNotes = (state: AppState) => state.notes.companyNotes;\n\nexport const isLoading = createSelector(selectCompanyNotes, state => state.loading);\n\nexport const makeSelectIsLoadingCompanyNotes = () =>\n createSelector(selectCompanyNotes, state => state.loading);\n\nexport const getCompanyNotesError = createSelector(selectCompanyNotes, state => state.error);\n\nexport const makeSelectCompanyNotesError = () =>\n createSelector(selectCompanyNotes, state => state.error);\n\nexport const shouldFetch = createCachedSelector(\n selectCompanyNotes,\n (state: AppState, companyId: number) => companyId,\n (state, companyId) => companyId !== -1 && !state.loading && !state.companyNotes[companyId]\n)((state, companyId) => companyId);\n\nexport const makeSelectShouldFetch = (companyId: number) =>\n createSelector(selectCompanyNotes, state => !state.loading && !state.companyNotes[companyId]);\n\nexport const getCompanyNotes = createCachedSelector(\n selectCompanyNotes,\n (state: AppState, companyId: number) => companyId,\n (state, companyId) => {\n const noteIds = state.companyNotes[companyId];\n const { notesById } = state;\n\n if (noteIds) {\n return noteIds.map(noteId => notesById[noteId]);\n }\n\n return [];\n }\n)((state, companyId) => companyId);\n\nexport const makeSelectGetCompanyNotes = (companyId: number) =>\n createSelector(selectCompanyNotes, state => {\n const noteIds = state.companyNotes[companyId];\n const { notesById } = state;\n\n if (noteIds) {\n return noteIds.map(noteId => notesById[noteId]);\n }\n\n return [];\n });\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { CompanyNotification } from '@optx/models/Company';\nimport * as actions from './actions';\nimport { actions as searchNotesActions } from '../search';\nimport { fetchReducer, fetchFailReducer } from '../../../feature/fetch/reducers';\nimport { CompanyNotesState } from './interfaces';\n\nconst initialState: CompanyNotesState = {\n error: '',\n loading: false,\n companyNotes: {},\n notesById: {},\n};\n\nconst fetchCompanyNotesSuccessReducer: CaseReducer<\n CompanyNotesState,\n PayloadAction<Array<CompanyNotification>, any, number>\n> = (draftState, action) => {\n const companyId = action.meta;\n const notes = action.payload;\n\n draftState.loading = false;\n draftState.companyNotes[companyId] = [];\n\n notes.forEach(note => {\n draftState.companyNotes[companyId].push(note.note_unique_id);\n draftState.notesById[note.note_unique_id] = note;\n });\n};\n\nconst addCompanyNoteSuccessReducer: CaseReducer<\n CompanyNotesState,\n PayloadAction<CompanyNotification>\n> = (draftState, action) => {\n const note = action.payload;\n\n if (Object.keys(draftState.companyNotes).length) {\n draftState.companyNotes[note.company_id] = [\n note.note_unique_id,\n ...draftState.companyNotes[note.company_id],\n ];\n }\n\n if (Object.keys(draftState.companyNotes).length) {\n draftState.notesById[note.note_unique_id] = note;\n }\n\n draftState.loading = false;\n};\n\nconst deleteCompanyNoteSuccessReducer: CaseReducer<CompanyNotesState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n\n if (draftState.notesById[action.payload]) {\n const note = draftState.notesById[action.payload];\n const companyNotes = draftState.companyNotes[note.company_id];\n const noteIndex = companyNotes.findIndex(noteId => noteId === note.note_unique_id);\n\n delete draftState.notesById[action.payload];\n companyNotes.splice(noteIndex, 1);\n }\n};\n\nconst updateNoteReducer: CaseReducer<\n CompanyNotesState,\n PayloadAction<CompanyNotification, any, string>\n> = (draftState, action) => {\n const { payload: note, meta: text } = action;\n const currentNote = draftState.notesById[note.note_unique_id];\n\n if (currentNote) {\n currentNote.note_text = text;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchCompanyNotes, fetchReducer)\n .addCase(actions.fetchCompanyNotesSuccess, fetchCompanyNotesSuccessReducer)\n .addCase(actions.fetchCompanyNotesFail, fetchFailReducer)\n .addCase(actions.addCompanyNote, fetchReducer)\n .addCase(actions.addCompanyNoteSuccess, addCompanyNoteSuccessReducer)\n .addCase(actions.addCompanyNoteFail, fetchFailReducer)\n .addCase(actions.deleteCompanyNote, fetchReducer)\n .addCase(actions.deleteCompanyNoteSuccess, deleteCompanyNoteSuccessReducer)\n .addCase(actions.deleteCompanyNoteFail, fetchFailReducer)\n .addCase(searchNotesActions.updateNote, updateNoteReducer)\n);\n\nexport default reducer;\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { each } from 'lodash';\nimport { AxiosResponse } from 'axios';\nimport { CompanyNotification } from '@optx/models/Company';\nimport { noteSorting } from '@optx/models/Notes';\nimport * as actions from './actions';\nimport { actions as notesSearchActions } from '../search';\nimport { selectors as profileNotesSelectors, actions as profileNotesActions } from '../profile';\nimport * as profileNotesModels from '../profile/interfaces';\n// services\nimport { UserService } from '../../../../services/api';\nimport NotificationService from '../../../../services/NotificationService';\n\nconst getPinId = (notes: profileNotesModels.ProfileNotes, noteId: number) => {\n let id;\n const allNotes = notes.pinned_notes.concat(notes.unpinned_notes);\n\n each(allNotes, note => {\n if (note.unique_id === noteId) {\n id = note.pin_id;\n\n return false;\n }\n\n return true;\n });\n\n return id;\n};\n\nexport function* addCompanyNoteSaga(\n action: PayloadAction<{\n companyId: number;\n title: string;\n noteText: string;\n }>\n) {\n const { companyId, title, noteText } = action.payload;\n\n try {\n const res: AxiosResponse<CompanyNotification> = yield call(\n UserService.createCompanyNote,\n companyId,\n title,\n noteText\n );\n\n if (res.data) {\n const sorting: noteSorting = yield select(profileNotesSelectors.getSorting);\n yield put(actions.addCompanyNoteSuccess(res.data));\n yield put(notesSearchActions.resetSearch());\n yield put(profileNotesActions.fetchProfileNotes({ companyId, sorting }));\n\n NotificationService.success(`Create note for ${title} success!`);\n } else {\n const errorMessage = `Create note for ${title} fail!`;\n yield put(actions.addCompanyNoteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = `Create note for ${title} fail, Server error!!`;\n yield put(actions.addCompanyNoteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchCompanyNotesSaga(action: PayloadAction<number>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<CompanyNotification[]> = yield call(UserService.getNotes, companyId);\n\n if (res.data) {\n yield put(actions.fetchCompanyNotesSuccess(companyId, res.data));\n } else {\n const errorMessage = 'Get company notes fail!';\n yield put(actions.fetchCompanyNotesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Get company notes fail, Server error!';\n yield put(actions.fetchCompanyNotesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* deleteCompanyNoteSaga(\n action: PayloadAction<{ companyId: number; noteId: number }>\n) {\n const { companyId, noteId } = action.payload;\n\n try {\n const res: AxiosResponse<number> = yield call(UserService.deleteCompanyNote, noteId);\n\n if (res.data) {\n const notes: profileNotesModels.ProfileNotes = yield select(\n profileNotesSelectors.getProfileNotes\n );\n const pinId = getPinId(notes, Number(noteId));\n\n yield put(actions.deleteCompanyNoteSuccess(noteId));\n yield put(notesSearchActions.resetSearch());\n\n if (pinId) {\n yield put(profileNotesActions.deleteProfileNote({ companyId, pinId }));\n }\n\n NotificationService.success('Delete note success!');\n } else {\n const errorMessage = 'Delete note fail!';\n yield put(actions.deleteCompanyNoteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Delete note fail, Server Error!';\n yield put(actions.deleteCompanyNoteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companyNotesSaga() {\n yield takeLatest(actions.addCompanyNote, addCompanyNoteSaga);\n yield takeLatest(actions.fetchCompanyNotes, fetchCompanyNotesSaga);\n yield takeLatest(actions.deleteCompanyNote, deleteCompanyNoteSaga);\n}\n","// models\nimport { SelectedCompaniesState } from '@optx/features/bulk-actions/selected-companies/state/interfaces';\nimport { SelectedCompanies, SelectedCompaniesGrids } from '@optx/models/bulkActions';\n\n/**\n * Combines selected companies from all pages into a single array.\n *\n * This function takes the state of selected companies and a specific grid name,\n * then aggregates all selected companies from each page of the grid into one array.\n *\n * @param {SelectedCompaniesState} state - The state object containing selected companies data.\n * @param {SelectedCompaniesGrids} gridName - The name of the grid from which to combine companies.\n * @returns {SelectedCompanies[]} An array of all selected companies from all pages.\n */\n\nexport const combineCompaniesFromAllPages = (\n state: SelectedCompaniesState,\n gridName: SelectedCompaniesGrids\n): SelectedCompanies[] => {\n const companiesByPage = state[gridName];\n const allCompanies: SelectedCompanies[] = [];\n\n if (companiesByPage) {\n Object.values(companiesByPage).forEach(companies => {\n allCompanies.push(...companies);\n });\n }\n\n return allCompanies;\n};\n","import { CompanyNotification } from '@optx/models/Company';\nimport { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport * as models from './interfaces';\n\nexport const searchNotes = createAction<models.NotesSearchQuery | undefined>(\n types.SEARCH_COMPANY_NOTES\n);\n\nexport const searchNotesSuccess = createAction(\n types.SEARCH_COMPANY_NOTES_SUCCESS,\n (notes: Array<CompanyNotification>, queryData: models.NotesSearchQuery) => ({\n payload: notes,\n meta: queryData,\n })\n);\n\nexport const searchNotesFail = createAction<string>(types.SEARCH_COMPANY_NOTES_FAIL);\n\nexport const updateNote = createAction(\n types.UPDATE_COMPANY_NOTE,\n (note: CompanyNotification, text: string) => ({\n payload: note,\n meta: text,\n })\n);\n\nexport const updateNoteSuccess = createAction(\n types.UPDATE_COMPANY_NOTE_SUCCESS,\n (note: CompanyNotification, text: string) => ({\n payload: note,\n meta: text,\n })\n);\n\nexport const updateNoteFail = createAction<string>(types.UPDATE_COMPANY_NOTE_FAIL);\n\nexport const resetSearch = createAction(types.RESET_SEARCH_COMPANY_NOTES);\n","export const SEARCH_COMPANY_NOTES = 'SEARCH_COMPANY_NOTES';\nexport const SEARCH_COMPANY_NOTES_SUCCESS = 'SEARCH_COMPANY_NOTES_SUCCESS';\nexport const SEARCH_COMPANY_NOTES_FAIL = 'SEARCH_COMPANY_NOTES_FAIL';\n\nexport const UPDATE_COMPANY_NOTE = 'UPDATE_COMPANY_NOTE';\nexport const UPDATE_COMPANY_NOTE_SUCCESS = 'UPDATE_COMPANY_NOTE_SUCCESS';\nexport const UPDATE_COMPANY_NOTE_FAIL = 'UPDATE_COMPANY_NOTE_FAIL';\n\nexport const RESET_SEARCH_COMPANY_NOTES = 'RESET_SEARCH_COMPANY_NOTES';\n","import { AppState } from '@optx/redux/interfaces';\nimport { createSelector } from 'reselect';\n\nconst selectSearchNotes = (state: AppState) => state.notes.search;\n\nconst getAllIds = createSelector(selectSearchNotes, state => state.allIds);\n\nconst getById = createSelector(selectSearchNotes, state => state.byId);\n\nexport const getSearchNotes = createSelector(getAllIds, getById, (allIds, byId) =>\n allIds.map(id => byId[id])\n);\n\nexport const isLoading = createSelector(selectSearchNotes, state => state.loading);\n\nexport const shouldInitialFetch = createSelector(\n selectSearchNotes,\n state => !state.fetchedAt && !state.loading\n);\n\nexport const getSearchQuery = createSelector(selectSearchNotes, state => state.searchQuery);\n\nexport const hasMore = createSelector(selectSearchNotes, state => state.hasMore);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyNotification } from '@models/Company';\nimport { EquityTouchBulkSuccess } from '@models/bulkActions';\nimport { UpdateCompanyET } from '@models/equityTouch';\n// redux\nimport { actions as equityTouchActions } from '@redux/company/equity-touch';\nimport { actions as bulkEqtActions } from '@features/bulk-actions/equity-touch';\nimport { fetchReducer, fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport { deleteCompanyNoteSuccess } from '@redux/company/notes/companyNotes/actions';\nimport * as models from './interfaces';\nimport * as actions from './actions';\n\nexport const initialState: models.CompanyNotesSearchState = {\n error: '',\n loading: false,\n byId: {},\n allIds: [],\n fetchedAt: '',\n hasMore: true,\n searchQuery: {\n query: undefined,\n pageNumber: 0,\n pageSize: 30,\n },\n};\n\nconst searchNotesReducer: CaseReducer<\n models.CompanyNotesSearchState,\n PayloadAction<models.NotesSearchQuery | undefined>\n> = (draftState, action) => {\n fetchReducer(draftState);\n draftState.hasMore = false;\n};\n\nconst searchNotesSuccessReducer: CaseReducer<\n models.CompanyNotesSearchState,\n PayloadAction<Array<CompanyNotification>, any, models.NotesSearchQuery>\n> = (draftState, action) => {\n searchSuccessReducer(draftState, action);\n};\n\nconst updateNoteSuccessReducer: CaseReducer<\n models.CompanyNotesSearchState,\n PayloadAction<CompanyNotification, any, string>\n> = (draftState, action) => {\n const { payload: note, meta: text } = action;\n const currentNote = draftState.byId[note.note_unique_id];\n\n if (currentNote) {\n currentNote.note_text = text;\n }\n\n draftState.loading = false;\n};\n\nconst deleteCompanyNoteSuccessReducer: CaseReducer<\n models.CompanyNotesSearchState,\n PayloadAction<number>\n> = (draftState, action) => {\n const itemId = action.payload;\n const index = draftState.allIds.findIndex(id => id === itemId);\n\n if (index !== -1) {\n draftState.allIds.splice(index, 1);\n delete draftState.byId[itemId];\n }\n};\n\nconst resetSearchReducer: CaseReducer<models.CompanyNotesSearchState> = draftState => {\n return {\n ...initialState,\n searchQuery: {\n ...draftState.searchQuery,\n pageNumber: 0,\n },\n };\n};\n\nconst updateCompanyETDataReducer: CaseReducer<\n models.CompanyNotesSearchState,\n PayloadAction<UpdateCompanyET>\n> = (draftState, action) => {\n const { payload } = action;\n const companyIds: number[] = [];\n companyIds.push(Number((payload as UpdateCompanyET).updateData.companyId));\n\n draftState.allIds.forEach(noteId => {\n if (companyIds.includes(draftState.byId[noteId].company_id)) {\n draftState.byId[noteId].is_in_et = true;\n }\n });\n};\n\nconst addToEquityTouchBulkSuccessaReducer: CaseReducer<\n models.CompanyNotesSearchState,\n PayloadAction<EquityTouchBulkSuccess>\n> = (draftState, action) => {\n const {\n payload: { results },\n } = action;\n const companyIds: number[] = [];\n\n results.forEach(result => {\n if (result.et_sync_status) {\n companyIds.push(result.company_id);\n }\n });\n\n draftState.allIds.forEach(noteId => {\n if (companyIds.includes(draftState.byId[noteId].company_id)) {\n draftState.byId[noteId].is_in_et = true;\n }\n });\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.searchNotes, searchNotesReducer)\n .addCase(actions.searchNotesSuccess, searchNotesSuccessReducer)\n .addCase(actions.searchNotesFail, fetchFailReducer)\n .addCase(actions.updateNote, fetchReducer)\n .addCase(actions.updateNoteSuccess, updateNoteSuccessReducer)\n .addCase(actions.updateNoteFail, fetchReducer)\n .addCase(actions.resetSearch, resetSearchReducer)\n .addCase(deleteCompanyNoteSuccess, deleteCompanyNoteSuccessReducer)\n .addCase(equityTouchActions.updateCompanyETData, updateCompanyETDataReducer)\n .addCase(bulkEqtActions.addToEquityTouchBulkSuccess, addToEquityTouchBulkSuccessaReducer)\n);\n\nexport default reducer;\n\nfunction searchSuccessReducer(\n draftState: models.CompanyNotesSearchState,\n action: PayloadAction<Array<CompanyNotification>, any, models.NotesSearchQuery>\n) {\n const { payload: notes, meta: queryData } = action;\n const currentQueryData = draftState.searchQuery;\n\n // reset notes if key search changes or if query is empty\n if (\n queryData.query !== currentQueryData.query ||\n (queryData.query === undefined && queryData.pageNumber === 1)\n ) {\n draftState.byId = {};\n draftState.allIds = [];\n }\n\n notes.forEach(note => {\n const { note_unique_id: id } = note;\n draftState.allIds.push(id);\n draftState.byId[id] = note;\n });\n\n draftState.loading = false;\n\n if (!draftState.fetchedAt) {\n draftState.fetchedAt = new Date().toISOString();\n }\n\n // handle query update\n draftState.searchQuery = queryData;\n draftState.hasMore = notes.length === draftState.searchQuery.pageSize;\n}\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { CompanyNotification } from '@optx/models/Company';\n// services\nimport NotificationService from '@optx/services/NotificationService';\nimport { UserService } from '@optx/services/api';\n// utils\nimport { preProcessSearch } from '@optx/utils/search';\n// local\nimport * as models from './interfaces';\nimport * as searchNotesActions from './actions';\nimport { getSearchQuery } from './selectors';\n\nexport function* searchCompanyNotesSaga(action: PayloadAction<models.NotesSearchQuery>) {\n let queryData = action.payload;\n\n if (!queryData) {\n queryData = (yield select(getSearchQuery)) as models.NotesSearchQuery;\n }\n\n try {\n const query = { ...queryData, query: preProcessSearch(queryData.query || '') };\n const res: AxiosResponse<CompanyNotification[]> = yield call(UserService.searchNotes, query);\n\n if (res.data) {\n yield put(searchNotesActions.searchNotesSuccess(res.data, query));\n } else {\n const errorMessage = 'Search notes fail!';\n yield put(searchNotesActions.searchNotesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Search notes fail, Server error!';\n yield put(searchNotesActions.searchNotesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* updateNoteSaga(action: PayloadAction<CompanyNotification, any, string>) {\n const note = action.payload;\n const text = action.meta;\n\n try {\n // @ts-ignore\n const res = yield call(UserService.updateCompanyNote, note, text);\n\n if (res.data) {\n yield put(searchNotesActions.updateNoteSuccess(note, text));\n } else {\n const errorMessage = 'Update note fail!';\n yield put(searchNotesActions.updateNoteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Update note fail, Server error!';\n yield put(searchNotesActions.updateNoteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* searchNotesSaga() {\n yield takeLatest(searchNotesActions.searchNotes, searchCompanyNotesSaga);\n yield takeLatest(searchNotesActions.updateNote, updateNoteSaga);\n}\n","import React from 'react';\nimport { Popover as AntPopver } from 'antd';\nimport { PopoverProps } from 'antd/lib/popover';\n\n/**\n * Wrapper for ANT Popover allowing styles with styled-components.\n * By default in ANT Popover className is passed to the child\n * and due to how styled-components work we pass it to overlayClassName to allow popover styling.\n */\nconst Popover: React.FC<PopoverProps> = ({ className, ...rest }) => {\n return <AntPopver overlayClassName={className} {...rest} />;\n};\n\nexport default Popover;\n","// constants\nimport appRoutes from '@constants/routes';\nimport { isInIframe } from '@optx/constants/plugin';\n// utils\nimport { saveToken, sendToken } from '@optx/utils/window';\nimport { setPluginOrigin } from '@optx/utils/pluginManager';\n// storage\nimport { checkPluginVersion, getPluginVersion, setPluginVersion } from './pluginStorage';\n// services\nimport { setAxiosAuthorizationHeaders } from '@optx/modules/axios';\n// redux\nimport { getCookie } from '@optx/redux/login/utils';\n\n/**\n * @description The storage item name\n * @type {string}\n */\nexport const JWT = 'optx_token';\n\n/**\n * @description get item from localStorage\n * @return {string | null}\n */\nconst getJWT = () => {\n // in plugin version 2.3 a localstorage item is added that is used to check and\n // disable the quick solution for plugin login using cookies\n // this solution is temporary and will be removed alongside cookie quick fix\n // when version 2.3 is approved by google\n const isPluginVersion2_3 = checkPluginVersion(2.3);\n\n if (!isPluginVersion2_3) {\n const jwtCookieToken = getCookie('optx_token');\n\n setJWT(jwtCookieToken || '');\n\n return localStorage.getItem(JWT) || null;\n } else {\n if (isInIframe) {\n return sessionStorage.getItem(JWT);\n } else {\n return localStorage.getItem(JWT);\n }\n }\n};\n\n/**\n * Stores a JSON Web Token (JWT) in local storage and optionally updates a plugin.\n *\n * @param {string} value - The JWT string to be stored.\n * @param {boolean} [saveToPlugin] - A flag indicating whether to update the plugin after storing the JWT.\n * Defaults to true if not provided.\n */\nconst setJWT = (value: string) => {\n const isPluginVersion2_3 = checkPluginVersion(2.3);\n\n if (isPluginVersion2_3) {\n if (isInIframe) {\n // for plugin use session storage instead of localstorage. when plugin will be opened\n // it will get the token from chrome storage local. otherwise, using localstorage, if page\n // is closed and opened later it might get old invalid token and logout user from all tabs.\n // this should be used from 2.3 plugin onwards\n // this solution is temporary and will be removed alongside cookie quick fix\n // when version 2.3 is approved by google\n sessionStorage.setItem(JWT, value);\n } else {\n localStorage.setItem(JWT, value);\n }\n } else {\n localStorage.setItem(JWT, value);\n }\n};\n\n/**\n * @description remove jwt from localStorage\n */\nconst removeJWT = () => {\n const isPluginVersion2_3 = checkPluginVersion(2.3);\n\n if (isPluginVersion2_3) {\n if (isInIframe) {\n sessionStorage.removeItem(JWT);\n } else {\n localStorage.removeItem(JWT);\n }\n } else {\n localStorage.removeItem(JWT);\n }\n};\n\n/**\n * @description Check is jwt token exist in localStorage\n * @return {Boolean}\n */\nconst exists = () => {\n const item = getJWT();\n\n return typeof item !== 'undefined' && item !== null;\n};\n\n// because tokens are being refreshed at certain time intervals,\n// this is a fix for updating the token in cases where you have another\n// optx tab open and you go back to it after a certain amount of time, preventing\n// the user from being logged out\nwindow.addEventListener('storage', (event: StorageEvent) => {\n if (event.key === JWT) {\n console.log('change storage jwt.ts: ', event);\n const { oldValue, newValue } = event;\n\n if (newValue) {\n setAxiosAuthorizationHeaders(newValue);\n setJWT(newValue);\n\n if (oldValue !== newValue) {\n console.log('save 4: ', newValue);\n\n sendToken('save-data', newValue);\n }\n }\n }\n});\n\nwindow.addEventListener('message', event => {\n const { type, message } = event.data;\n\n if (type === 'set-init') {\n console.log('set-init: ', origin, message);\n const iframeOrigin = message.origin;\n const currentPluginVersion = getPluginVersion();\n console.log(currentPluginVersion === message.version);\n\n if (currentPluginVersion !== message.version) {\n setPluginVersion(message.version);\n }\n\n setPluginOrigin(message.origin);\n const payload = { type: 'get-data' };\n\n // after initial request for data make a new request to\n // get token from chrome storage local\n if (isInIframe) {\n window.parent.postMessage(payload, iframeOrigin);\n } else {\n window.postMessage(payload, window.location.origin);\n }\n } else if (type === 'send-data') {\n console.log('send-data: ', event);\n\n if (message) {\n saveToken(message);\n } else {\n removeJWT();\n\n if (isInIframe) {\n window.location.href = `${origin}${appRoutes.chromeExtension}`;\n } else {\n window.location.href = `${origin}${appRoutes.login}`;\n }\n }\n }\n});\n\nexport default {\n getJWT,\n setJWT,\n removeJWT,\n exists,\n};\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { NotificationDetails, NotificationPayload } from '@optx/models/notifications';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches';\nimport * as constants from './constants';\nimport {\n NotificationError,\n NotificationsState,\n NotificationsResponse,\n TouchesNotificationResponse,\n TouchType,\n} from './interfaces';\nimport * as actions from './actions';\n\nexport const initialState: NotificationsState = {\n inbox: {\n error: '',\n newAlertCount: 0,\n data: [],\n loaded: false,\n loading: false,\n pageNr: 1,\n sorting: 'desc',\n },\n history: {\n error: '',\n newAlertCount: 0,\n data: [],\n loaded: false,\n pageNr: 1,\n sorting: 'desc',\n loading: false,\n },\n touches: {\n upcoming: {\n error: '',\n newUpcomingCount: 0,\n data: [],\n loading: false,\n loaded: false,\n pageNr: 1,\n sorting: 'desc',\n },\n pastDue: {\n error: '',\n data: [],\n initialData: [],\n loading: false,\n loaded: false,\n pageNr: 1,\n sorting: 'desc',\n },\n },\n roadmapUrl: '',\n totalCount: 0,\n};\n\nconst { PAGE_SIZE } = constants;\n\nconst fetchAlertsSuccessReducer: CaseReducer<\n NotificationsState,\n PayloadAction<NotificationsResponse>\n> = (draftState, action) => {\n draftState.roadmapUrl = action.payload.roadmapUrl;\n draftState.inbox.loading = true;\n\n if (action.payload.history === false) {\n draftState.totalCount = action.payload.totalCount;\n }\n\n if (action.payload.history) {\n draftState.history.pageNr = action.payload.pageNr;\n if (action.payload.response.length < PAGE_SIZE || action.payload.response.length === 0)\n draftState.history.loaded = true;\n\n if (action.payload.pageNr > 1) {\n draftState.history.data = [...draftState.history.data, ...action.payload.response];\n } else {\n draftState.history.data = action.payload.response;\n }\n\n draftState.history.sorting = action.payload.sorting;\n } else {\n draftState.inbox.pageNr = action.payload.pageNr;\n draftState.inbox.newAlertCount = action.payload.newAlertCount;\n\n if (action.payload.response.length < PAGE_SIZE || action.payload.response.length === 0)\n draftState.inbox.loaded = true;\n\n if (action.payload.pageNr > 1 && action.payload.response.length <= PAGE_SIZE) {\n draftState.inbox.data = [...draftState.inbox.data, ...action.payload.response];\n } else {\n draftState.inbox.data = action.payload.response;\n }\n\n draftState.inbox.sorting = action.payload.sorting;\n }\n\n draftState.inbox.loading = false;\n};\n\nconst fetchAlertsFailReducer: CaseReducer<NotificationsState, PayloadAction<NotificationError>> = (\n draftState,\n action\n) => {\n if (action.payload.history) {\n draftState.history.error = action.payload.errorMessage;\n } else {\n draftState.inbox.error = action.payload.errorMessage;\n draftState.inbox.loading = false;\n }\n};\n\nconst fetchTouchesSuccessReducer: CaseReducer<\n NotificationsState,\n PayloadAction<TouchesNotificationResponse>\n> = (draftState, action) => {\n const { touchType, sorting, response } = action.payload;\n\n if (touchType && sorting) {\n draftState.touches[touchType].sorting = sorting;\n }\n\n response.upcomingTouches.forEach(touch => {\n if (touch.viewed_at === null) {\n draftState.touches.upcoming.newUpcomingCount++;\n }\n });\n\n draftState.touches.upcoming.error = '';\n draftState.touches.upcoming.loaded = true;\n draftState.touches.upcoming.data = action.payload.response.upcomingTouches;\n draftState.touches.pastDue.error = '';\n\n if (action.payload.response.pastdueTouches.length > 25) {\n draftState.touches.pastDue.data = action.payload.response.pastdueTouches.slice(0, 25);\n draftState.touches.pastDue.initialData = action.payload.response.pastdueTouches.slice(25);\n } else {\n draftState.touches.pastDue.data = action.payload.response.pastdueTouches;\n draftState.touches.pastDue.loaded = true;\n }\n\n draftState.touches.pastDue.loading = false;\n draftState.touches.upcoming.loading = false;\n};\n\nconst fetchTouchesFailReducer: CaseReducer<NotificationsState, PayloadAction<NotificationError>> = (\n draftState,\n action\n) => {\n draftState.touches.upcoming.loading = false;\n draftState.touches.upcoming.error = action.payload.errorMessage;\n draftState.touches.pastDue.loading = false;\n draftState.touches.pastDue.error = action.payload.errorMessage;\n};\n\n// remove new label\nconst updateAlertsReducer: CaseReducer<NotificationsState, PayloadAction<Array<number>>> = (\n draftState,\n action\n) => {\n let count = 0;\n draftState.inbox.data.map((alert: NotificationDetails) => {\n if (action.payload.includes(alert.id)) {\n // eslint-disable-next-line no-param-reassign\n alert.viewed_at = new Date().toISOString();\n count++;\n }\n\n return draftState;\n });\n\n draftState.inbox.newAlertCount -= count;\n};\n\nconst updateTouchesReducer: CaseReducer<NotificationsState, PayloadAction<Array<number>>> = (\n draftState,\n action\n) => {\n let count = 0;\n draftState.touches.upcoming.data.map(touch => {\n if (action.payload.includes(touch.unique_id)) {\n // eslint-disable-next-line no-param-reassign\n touch.viewed_at = new Date().toISOString();\n count++;\n }\n\n return draftState;\n });\n\n draftState.touches.upcoming.newUpcomingCount -= count;\n};\n\nconst dismissAlertReducer: CaseReducer<NotificationsState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n const itemToMove = draftState.inbox.data.filter(alert => alert.id === action.payload);\n const remainingData = draftState.inbox.data.filter(alert => alert.id !== action.payload);\n draftState.inbox.data = remainingData;\n\n if (itemToMove[0].viewed_at === null) {\n itemToMove[0].viewed_at = new Date().toISOString();\n draftState.inbox.newAlertCount--;\n }\n\n draftState.totalCount--;\n\n draftState.history.data.unshift(itemToMove[0]);\n};\n\nconst dismissAllAlertsSuccessReducer: CaseReducer<NotificationsState, PayloadAction<void>> = (\n draftState,\n action\n) => {\n const itemsToMove = [...draftState.inbox.data];\n\n itemsToMove.forEach(alert => {\n const modifiedAlert = { ...alert };\n\n if (modifiedAlert.viewed_at === null) {\n modifiedAlert.viewed_at = new Date().toISOString();\n draftState.inbox.newAlertCount = 0;\n }\n });\n\n draftState.history.data.unshift(...itemsToMove);\n\n draftState.inbox.data = [];\n draftState.totalCount = 0;\n};\n\nconst deleteUpcomingTouch: CaseReducer<NotificationsState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n draftState.touches.upcoming.loading = true;\n};\n\nconst deleteUpcomingTouchSuccess: CaseReducer<NotificationsState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n draftState.touches.upcoming.loading = false;\n draftState.touches.upcoming.error = '';\n\n const remainingData = draftState.touches.upcoming.data.filter(\n upcomingTouch => upcomingTouch.unique_id !== action.payload\n );\n draftState.touches.upcoming.data = remainingData;\n};\n\nconst deleteUpcomingTouchFailReducer: CaseReducer<\n NotificationsState,\n PayloadAction<NotificationError>\n> = (draftState, action) => {\n draftState.touches.upcoming.loading = false;\n draftState.touches.upcoming.error = action.payload.errorMessage;\n};\n\nconst deletePastDueTouch: CaseReducer<NotificationsState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n draftState.touches.pastDue.loading = true;\n};\n\nconst loadMoreInboxAlertsReducer: CaseReducer<\n NotificationsState,\n PayloadAction<NotificationPayload>\n> = (draftState, action) => {\n draftState.inbox.loading = true;\n};\n\nconst deletePastDueTouchSuccess: CaseReducer<NotificationsState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n draftState.touches.pastDue.loading = false;\n draftState.touches.pastDue.error = '';\n\n const remainingData = draftState.touches.pastDue.data.filter(\n upcomingTouch => upcomingTouch.unique_id !== action.payload\n );\n draftState.touches.pastDue.data = remainingData;\n};\n\nconst deletePastDueTouchFailReducer: CaseReducer<\n NotificationsState,\n PayloadAction<NotificationError>\n> = (draftState, action) => {\n draftState.touches.pastDue.loading = false;\n draftState.touches.pastDue.error = action.payload.errorMessage;\n};\n\nconst deleteAllPastUpcomingTouchesReducer: CaseReducer<\n NotificationsState,\n PayloadAction<TouchType>\n> = (draftState, action) => {\n const touchKey = action.payload;\n\n draftState.touches[touchKey].loading = true;\n};\n\nconst deleteAllPastUpcomingTouchesSuccessReducer: CaseReducer<\n NotificationsState,\n PayloadAction<TouchType>\n> = (draftState, action) => {\n const touchKey = action.payload;\n\n draftState.touches[touchKey].loading = false;\n draftState.touches[touchKey].error = '';\n draftState.touches[touchKey].data = [];\n};\n\nconst deleteAllPastUpcomingTouchesFailReducer: CaseReducer<\n NotificationsState,\n PayloadAction<NotificationError>\n> = (draftState, action) => {\n if (action.payload.touchType === 'upcoming') {\n draftState.touches.upcoming.loading = false;\n draftState.touches.upcoming.error = action.payload.errorMessage;\n } else {\n draftState.touches.pastDue.loading = false;\n draftState.touches.pastDue.error = action.payload.errorMessage;\n }\n};\n\nconst loadMorePastDueTouchesReducer: CaseReducer<NotificationsState> = draftState => {\n draftState.touches.pastDue.loading = true;\n\n if (draftState.touches.pastDue.initialData.length > 25) {\n draftState.touches.pastDue.data = [\n ...draftState.touches.pastDue.data,\n ...draftState.touches.pastDue.initialData.slice(0, 25),\n ];\n draftState.touches.pastDue.initialData = draftState.touches.pastDue.initialData.slice(25);\n } else {\n draftState.touches.pastDue.data = [\n ...draftState.touches.pastDue.data,\n ...draftState.touches.pastDue.initialData.slice(),\n ];\n draftState.touches.pastDue.initialData = [];\n draftState.touches.pastDue.loaded = true;\n }\n\n draftState.touches.pastDue.loading = false;\n};\n\nconst deleteSearchSuccessReducer: CaseReducer<NotificationsState, PayloadAction<Number>> = (\n draftState,\n action\n) => {\n const deletedListId = action.payload;\n let inboxItemId;\n\n if (draftState.inbox.data.length) {\n inboxItemId = draftState.inbox.data.findIndex(\n item => item.attributes.extra_context?.list_id === deletedListId && item.type === 'list_share'\n );\n\n if (\n typeof inboxItemId === 'number' &&\n inboxItemId !== -1 &&\n draftState.inbox.data[inboxItemId].attributes.extra_context\n ) {\n draftState.inbox.data[inboxItemId].attributes.extra_context.deleted = true;\n }\n } else if (\n (typeof inboxItemId === 'undefined' || inboxItemId === -1) &&\n draftState.history.data.length\n ) {\n const historyItemId = draftState.history.data.findIndex(\n item => item.attributes.extra_context?.list_id === deletedListId && item.type === 'list_share'\n );\n\n if (historyItemId !== -1 && draftState.inbox.data[historyItemId].attributes.extra_context) {\n draftState.inbox.data[historyItemId].attributes.extra_context.deleted = true;\n }\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchAlertsSuccess, fetchAlertsSuccessReducer)\n .addCase(actions.fetchAlertsFail, fetchAlertsFailReducer)\n .addCase(actions.updateAlerts, updateAlertsReducer)\n .addCase(actions.dismissAlertSuccess, dismissAlertReducer)\n .addCase(actions.dismissAllAlertSuccess, dismissAllAlertsSuccessReducer)\n .addCase(actions.fetchTouchesFail, fetchTouchesFailReducer)\n .addCase(actions.fetchTouchesSuccess, fetchTouchesSuccessReducer)\n .addCase(actions.updateTouches, updateTouchesReducer)\n .addCase(actions.deleteUpcomingTouch, deleteUpcomingTouch)\n .addCase(actions.deleteUpcomingTouchSuccess, deleteUpcomingTouchSuccess)\n .addCase(actions.deleteUpcomingTouchFail, deleteUpcomingTouchFailReducer)\n .addCase(actions.deletePastDueTouch, deletePastDueTouch)\n .addCase(actions.deletePastDueTouchSuccess, deletePastDueTouchSuccess)\n .addCase(actions.deletePastDueTouchFail, deletePastDueTouchFailReducer)\n .addCase(actions.deleteAllPastUpcomingTouches, deleteAllPastUpcomingTouchesReducer)\n .addCase(\n actions.deleteAllPastUpcomingTouchesSuccess,\n deleteAllPastUpcomingTouchesSuccessReducer\n )\n .addCase(actions.deleteAllPastUpcomingTouchesFail, deleteAllPastUpcomingTouchesFailReducer)\n .addCase(actions.loadMorePastDueTouches, loadMorePastDueTouchesReducer)\n .addCase(savedSearchesActions.deleteSearchSuccess, deleteSearchSuccessReducer)\n .addCase(actions.loadMoreAlerts, loadMoreInboxAlertsReducer)\n);\n\nexport default reducer;\n","import { utils as requestUtils } from '@features/request';\nimport featureName from '../featureName';\n\nexport const fetchScoreGrowth = requestUtils.createActionTypes(featureName, 'FETCH');\n","export default 'score-growth';\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { ChartData } from '@optx/models/charts/data';\nimport { ScoreGrowth } from '@optx/models/Company';\nimport * as types from './types';\n\nexport const fetchScoreGrowth = createAction<ScoreGrowth>(types.fetchScoreGrowth.REQUEST);\n\nexport const fetchScoreGrowthSuccess = createAction<{ data: ChartData; psgDate: string | null }>(\n types.fetchScoreGrowth.SUCCESS\n);\n\nexport const fetchScoreGrowthFail = createAction<string>(types.fetchScoreGrowth.FAILURE);\n","export default 'bulk-watchlist';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const bulkAddToWatchlist = createFeatureActionType(featureName, 'BULK_ADD_TO_WATCHLIST');\nexport const bulkRemoveFromWatchList = createFeatureActionType(\n featureName,\n 'BULK_REMOVE_FROM_WATCHLIST'\n);\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport * as types from './types';\nimport { BulkAddToWatchList, BulkRemoveFromWatchList } from './interfaces';\n\nexport const bulkAddToWatchList = createAction<BulkAddToWatchList>(types.bulkAddToWatchlist);\nexport const bulkRemoveFromWatchList = createAction<BulkRemoveFromWatchList>(\n types.bulkRemoveFromWatchList\n);\n","import { FEATURE } from '../constants';\n\nconst FEATURE_SLICE = `${FEATURE} filters`;\n\n// fetch\nexport const FETCH = `${FEATURE_SLICE}/fetch`;\nexport const FETCH_SUCCESS = `${FEATURE_SLICE}/fetch success`;\nexport const FETCH_FAIL = `${FEATURE_SLICE}/fetch fail`;\n// change\nexport const CLEAR_ALL_FILTERS = `${FEATURE_SLICE}/clear all`;\nexport const CLEAR_FILTER = `${FEATURE_SLICE}/clear filter`;\nexport const FILTER_CHANGE = `${FEATURE_SLICE}/filter changed`;\n// update\nexport const UPDATE_VALUE = `${FEATURE_SLICE}/update value`;\nexport const SET_VALUES = `${FEATURE_SLICE}/set values`;\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { FilterSource } from '@optx/models/filters';\n// Local\n// models\nimport { UpdateValuePayload, FilterMeta } from './interfaces';\n// types\nimport * as types from './types';\n\n// fetch\nexport const fetch = createAction(types.FETCH);\nexport const fetchSuccess = createAction<Array<FilterSource>>(types.FETCH_SUCCESS);\nexport const fetchFail = createAction<string>(types.FETCH_FAIL);\n// change\nexport const clearAllFilters = createAction(types.CLEAR_ALL_FILTERS);\nexport const clearFilter = createAction<FilterMeta>(types.CLEAR_FILTER);\nexport const updateValue = createAction<UpdateValuePayload>(types.UPDATE_VALUE);\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\nimport { GridKeys } from '@optx/models/grid';\nimport { selectFeatureState } from '@optx/features/grid/selectFeature';\n\nconst selectMyCompaniesState = (state: AppState) => state.myCompanies.filterCards;\n\nexport const getMyCompaniesCards = createSelector(selectMyCompaniesState, state => state.cards);\nexport const getSelectedCard = createSelector(selectMyCompaniesState, state => state.selectedCard);\nexport const getSelectedCardId = createSelector(selectMyCompaniesState, state => {\n if (state.selectedCard) {\n return state.selectedCard.id;\n }\n\n if (state.selectedCardId) {\n return state.selectedCardId;\n }\n\n return null;\n});\n\nexport const getSubFilter = createSelector(selectMyCompaniesState, state => state.subFilter);\n\nexport const getStageFilter = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.filter[gridKey].filter.stage);\n","export const REQUEST = 'REQUEST';\nexport const SUCCESS = 'SUCCESS';\nexport const FAILURE = 'FAILURE';\n","import { CompanyWatchList, CreateCompanyToWatchList } from '@optx/models/WatchList';\nimport { Company } from '@optx/models/Company';\nimport { SelectOption } from '@optx/models/Option';\n\nconst createCompanyToListSuccess = (\n company: Company,\n watchList: CompanyWatchList | CreateCompanyToWatchList | SelectOption[],\n isBulk?: boolean,\n ownerName?: string\n) => {\n function setWatchlist(\n companyItem: Company,\n watchlistItem: CompanyWatchList | SelectOption | CreateCompanyToWatchList\n ) {\n const companyData = companyItem;\n const isEt =\n (watchlistItem as SelectOption)?.isET || (watchlistItem as CompanyWatchList).is_et_group;\n\n const getLabelWithoutOwner = isBulk && (watchlistItem as SelectOption).label?.split(' (@')[0];\n\n const watchListData = isBulk\n ? {\n title: getLabelWithoutOwner as string,\n label: getLabelWithoutOwner as string,\n list_id: (watchlistItem as SelectOption).value,\n }\n : {\n title: (watchlistItem as CreateCompanyToWatchList).title,\n list_id: (watchlistItem as CompanyWatchList).unique_id\n ? (watchlistItem as CompanyWatchList).unique_id\n : (watchlistItem as CreateCompanyToWatchList).id,\n unique_id: (watchlistItem as CreateCompanyToWatchList).id,\n owner_name: (watchlistItem as CreateCompanyToWatchList).name,\n };\n\n if (isEt) {\n // if the list is in ET\n if (companyData?.et_watchlists === null) {\n // if there is no et watchList\n companyData.et_watchlists = [watchListData];\n\n return companyData;\n }\n\n const isAlreadyAddedToList = companyData?.et_watchlists?.filter(\n list => parseInt(list?.list_id as string) === parseInt(watchListData?.list_id as string)\n );\n if (isAlreadyAddedToList && isAlreadyAddedToList.length === 0)\n companyData?.et_watchlists.push(watchListData);\n\n return companyData;\n }\n\n if (companyData?.regular_watchlists === null) {\n // if there is no regular watchList\n if (watchListData.title) {\n companyData.regular_watchlists = [watchListData];\n }\n\n return companyData;\n }\n\n if (watchListData.title) {\n const isAlreadyAddedToList = companyData?.regular_watchlists?.filter(\n list => parseInt(list?.list_id as string) === parseInt(watchListData?.list_id as string)\n );\n if (isAlreadyAddedToList && isAlreadyAddedToList.length === 0)\n companyData?.regular_watchlists.push(watchListData);\n }\n\n return companyData;\n }\n\n if (isBulk) {\n (watchList as SelectOption[]).map((listItem: SelectOption) => {\n if (listItem.label.search(`@${ownerName}`) !== -1) {\n return setWatchlist(company, listItem);\n }\n\n return null;\n });\n }\n\n return setWatchlist(company, watchList as CompanyWatchList | CreateCompanyToWatchList);\n};\n\nconst deleteCompanyToListSuccess = (company: Company, listId: string | number) => {\n function setWatchlist(companyItem: Company, listId: string | number) {\n const companyData = companyItem;\n\n const listIndexNotET =\n companyData?.regular_watchlists?.findIndex(item => item.list_id === listId) ?? -1;\n const listIndex = companyData?.et_watchlists?.findIndex(item => item.list_id === listId) ?? -1; // if null set - 1\n\n if (listIndex !== -1) {\n companyData?.et_watchlists?.splice(listIndex, 1);\n }\n\n if (listIndexNotET === -1) {\n companyData?.regular_watchlists?.splice(listIndex, 1);\n }\n\n return companyData;\n }\n\n return setWatchlist(company, listId as string | number);\n};\n\nexport { createCompanyToListSuccess, deleteCompanyToListSuccess };\n","import React from 'react';\nimport { components, IndicatorProps } from 'react-select';\nimport { DownOutlined } from '@ant-design/icons';\n\n/**\n * customDropdownIndicator - style the arrow of the dropdown.\n */\nconst DropdownIndicator: React.FC<IndicatorProps<any>> = props => (\n <components.DropdownIndicator {...props}>\n <DownOutlined />\n </components.DropdownIndicator>\n);\n\nexport default DropdownIndicator;\n","import React from 'react';\nimport { components, MultiValueProps } from 'react-select';\nimport { CloseOutlined } from '@ant-design/icons';\nimport { SelectOption } from '@optx/models/Option';\n\n/**\n * Selected value remove element.\n */\nconst MultiValueRemove: React.FC<MultiValueProps<SelectOption>> = props => {\n const { data, innerProps } = props;\n\n const handleClick = (event: React.MouseEvent) => {\n event.stopPropagation();\n\n // Use click handler from select binded to item removal.\n innerProps.onClick();\n };\n\n if (!data.closable) {\n return null;\n }\n\n return (\n <components.MultiValueRemove {...props}>\n <CloseOutlined onClick={handleClick} />\n </components.MultiValueRemove>\n );\n};\n\nexport default MultiValueRemove;\n","import React from 'react';\n\n/**\n * Selected value label element.\n */\nconst MultiValueLabel: React.FC = ({ children }) => <>{children}</>;\n\nexport default MultiValueLabel;\n","import React from 'react';\nimport { components, ValueContainerProps } from 'react-select';\nimport { SearchOutlined } from '@ant-design/icons';\n\n/**\n * Dropdown search area.\n */\nconst ValueContainer: React.FC<ValueContainerProps<any>> = props => {\n const { children } = props;\n\n return (\n <components.ValueContainer {...props}>\n <span className=\"multiselect-select__value-container__icon\">\n <SearchOutlined />\n </span>\n {children}\n </components.ValueContainer>\n );\n};\n\nexport default ValueContainer;\n","import React from 'react';\nimport classnames from 'classnames';\nimport { components, OptionProps as OProps } from 'react-select';\nimport { Checkbox } from 'antd';\n// Constants\nimport { SELECT_ALL } from '../constants';\n\n/**\n * Option inside the dropdown list.\n */\n\ninterface OptionProps extends OProps<any> {\n disabled?: boolean;\n}\n\nconst Option: React.FC<OptionProps> = props => {\n const { isSelected, children, data, isDisabled, disabled } = props;\n\n return (\n <components.Option\n className={classnames({\n 'multiselect-select__option--all': data.value === SELECT_ALL.value,\n })}\n {...props}\n >\n <Checkbox checked={isSelected} disabled={isDisabled || (disabled && isSelected)}>\n {children}\n </Checkbox>\n </components.Option>\n );\n};\n\nexport default Option;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { IndicatorProps } from 'react-select';\n// components\nimport { CloseCircleFilled } from '@ant-design/icons';\n\nconst StyledClearIndicator = styled(CloseCircleFilled)`\n color: #c1c1c1;\n font-size: 12px;\n cursor: pointer;\n`;\n\nconst ClearIndicator: React.FC<IndicatorProps<any>> = props => {\n const { children = <StyledClearIndicator />, innerProps } = props;\n\n return <div {...innerProps}>{children}</div>;\n};\n\nexport default ClearIndicator;\n","import { Typography } from 'antd';\nimport styled from 'styled-components';\n\nexport const Title = styled(Typography.Title)`\n h1& {\n /* Dark BLue */\n color: #334d6e;\n\n font-style: normal;\n font-size: 24px;\n line-height: 1.33334;\n }\n\n h2& {\n /* Dark BLue */\n color: #334d6e;\n\n font-style: normal;\n font-size: 20px;\n line-height: 1.33334;\n }\n`;\n","import styled from 'styled-components';\n\nexport const RecommendedContainer = styled.div`\n display: flex;\n align-items: center;\n gap: 5px;\n\n b {\n color: #1890ff;\n font-weight: bold;\n }\n`;\n","import { useState } from 'react';\n\nconst useToggle = (initialState: boolean = false): [boolean, VoidFunction] => {\n const [isOpen, setIsOpen] = useState(initialState);\n const toggle = () => setIsOpen(!isOpen);\n\n return [isOpen, toggle];\n};\n\nexport default useToggle;\n","import styled from 'styled-components';\n\nconst PSGCompanyLabel = styled.span<{ isLongCardView?: boolean; isFromNotifications?: boolean }>`\n text-align: center;\n color: #1e3a51;\n font-weight: bold;\n font-family: 'Times New Roman';\n margin-right: 15px;\n margin-left: 18px;\n font-size: ${props =>\n props.isLongCardView ? '30px' : props.isFromNotifications ? '26px' : '28px'};\n`;\n\nconst ScoreTrendingGrowth = styled.div`\n display: flex;\n align-items: center;\n gap: 3px;\n justify-content: center;\n`;\n\nconst TrendingValueSpan = styled.span`\n display: flex;\n align-items: center;\n gap: 3px;\n`;\n\nexport const Styled = { PSGCompanyLabel, ScoreTrendingGrowth, TrendingValueSpan };\n","import React from 'react';\nimport classNames from 'classnames';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { Styled } from './Trending.styled';\n// utils\nimport { formatPercentDefault } from '../../../utils/format';\nimport { normalizeNegativeSignValues } from '@optx/utils/utils';\n// components\nimport Icon from '../Icon';\n\ntype FormatValue = number | null | undefined;\n\ntype TrendingValueProps = React.HTMLAttributes<HTMLSpanElement> & {\n value: number | null;\n customFontSize?: string;\n format?: (value: FormatValue) => string | FormatValue;\n};\n\nconst CLASS_NAME = 'trending-value';\n\nconst TrendingValue: React.FC<TrendingValueProps> = ({\n value,\n format,\n className,\n customFontSize,\n ...restProps\n}) => {\n let icon: React.ReactNode = <></>;\n let finalClassName = classNames(CLASS_NAME, className);\n\n if (typeof value === 'string') {\n return null;\n }\n\n if (value) {\n if (value > 0) {\n icon = <Icon iconName=\"trending-up\" />;\n finalClassName = classNames(finalClassName, `${CLASS_NAME}--up`);\n } else if (value < 0) {\n icon = <Icon iconName=\"trending-down\" />;\n finalClassName = classNames(finalClassName, `${CLASS_NAME}--down`);\n }\n }\n\n const valueFormated = value === null ? DEFAULT_EMPTY_VALUE : format!(value);\n\n return (\n <Styled.TrendingValueSpan className={finalClassName} {...restProps}>\n {icon}\n <span style={{ fontSize: customFontSize || '' }}>\n {normalizeNegativeSignValues(valueFormated?.toString() as string)}\n </span>\n </Styled.TrendingValueSpan>\n );\n};\n\nTrendingValue.defaultProps = {\n format: formatPercentDefault,\n};\n\nexport default React.memo(TrendingValue);\n","import styled from 'styled-components';\nimport { InfoCircleOutlined } from '@ant-design/icons';\n\nconst Icon = styled(InfoCircleOutlined)`\n color: #1890ff;\n opacity: 1;\n font-size: 12px;\n cursor: pointer;\n position: absolute;\n right: -15px;\n top: 20px;\n\n &.extension-info {\n right: 10px;\n }\n`;\n\nexport default {\n Icon,\n};\n","import React from 'react';\nimport { Tooltip } from 'antd';\n// styled\nimport Styled from './Info.styled';\n\nexport interface InfoProps {\n info: string;\n className?: string;\n}\n\nconst Info: React.FC<InfoProps> = ({ info, className }) => {\n return (\n <Tooltip\n arrowPointAtCenter={true}\n placement={className === 'extension-info' ? 'bottomRight' : 'bottom'}\n title={info}\n overlayInnerStyle={{\n textAlign: 'center',\n width: 113,\n fontSize: 10,\n lineHeight: '11px',\n padding: 6,\n }}\n >\n <Styled.Icon className={className} />\n </Tooltip>\n );\n};\n\nexport default Info;\n","import React from 'react';\nimport { Styled } from './Trending.styled';\n// components\nimport TrendingValue from './TrendingValue';\nimport Info from './Info';\n\ninterface ScoreTrendingProps {\n score: number | React.ReactNode;\n growth: number | null;\n label?: string;\n isPSGCompany?: boolean;\n customFontSize?: string;\n isLongCardView?: boolean;\n isFromNotifications?: boolean;\n infoText?: string;\n isExtension?: boolean;\n}\n\nconst ScoreTrending: React.FC<ScoreTrendingProps> = ({\n score,\n growth,\n label,\n isPSGCompany,\n customFontSize,\n isLongCardView,\n isFromNotifications,\n infoText,\n isExtension,\n}) => {\n return (\n <div className={`score-trending ${isPSGCompany && 'psg-company'}`}>\n {isPSGCompany ? (\n <>\n <Styled.PSGCompanyLabel\n isLongCardView={isLongCardView}\n isFromNotifications={isFromNotifications}\n >\n PSG\n </Styled.PSGCompanyLabel>\n {infoText && (\n <Info info={infoText} className={isExtension ? 'extension-info psg' : 'info psg'} />\n )}\n </>\n ) : (\n <>\n <Styled.ScoreTrendingGrowth className=\"score-trending__growth\">\n <span className=\"score-trending__growth-score\">\n {typeof score !== 'number' ? 'N/A' : score}\n </span>\n <TrendingValue customFontSize={customFontSize} value={growth} />\n </Styled.ScoreTrendingGrowth>\n {label && <div className=\"score-trending__label\">{label}</div>}\n {infoText && <Info info={infoText} className={isExtension ? 'extension-info' : 'info'} />}\n </>\n )}\n </div>\n );\n};\n\nexport default React.memo(ScoreTrending);\n","import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n margin: 0px;\n padding: 10px;\n background-color: rgb(255, 255, 255);\n border: 1px solid rgb(204, 204, 204);\n white-space: nowrap;\n`;\n\nconst Label = styled.p`\n margin: 0;\n`;\n\nconst Styled = {\n Wrapper,\n Label,\n};\n\nexport default Styled;\n","import { createSelector } from 'reselect';\nimport { GridKeys } from '@models/grid';\nimport { selectFeatureState, StateSlice } from '../../selectFeature';\n\nconst selectSortFeatureState = (state: StateSlice) => selectFeatureState(state).sort;\n\nexport const getSorting = (gridKey: GridKeys) =>\n createSelector(selectSortFeatureState, state => state[gridKey]?.sortBy);\n\nexport const getSortingLoading = (gridKey: GridKeys) =>\n createSelector(selectSortFeatureState, state => state[gridKey].loading);\n\nexport const isMultiSort = (gridKey: GridKeys) =>\n createSelector(selectSortFeatureState, state => state[gridKey].multiSort);\n\nexport const isSimilarCompaniesSort = (gridKey: GridKeys) =>\n createSelector(selectSortFeatureState, state => state[gridKey].isSimilarCompaniesSort);\n","import { useLocation } from 'react-router-dom';\nimport queryString from 'query-string';\n// models\nimport { ReferrerUrlParam, ReferrerUrlOrigin } from '@optx/models/routes';\n// utils\nimport { getCompanyProfileURL, stringifyReferrerUrlParam } from '@optx/utils/routes';\n\nconst useReferrerProfileLink = (companyId?: number) => {\n const location = useLocation();\n\n const searchParams: ReferrerUrlParam = queryString.parse(location.search);\n const referrer =\n searchParams.referrer === ReferrerUrlOrigin.parentCompanySearch\n ? searchParams.referrer\n : location.pathname;\n\n const getReferrerUrl = (companyId: number) => {\n return getCompanyProfileURL(companyId, stringifyReferrerUrlParam(referrer));\n };\n\n const referrerUrl = companyId ? getReferrerUrl(companyId) : '';\n\n return { referrerUrl, referrer, getReferrerUrl };\n};\n\nexport default useReferrerProfileLink;\n","import { featureName } from './featureName';\nimport { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport { reducer, saga } from './state';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","import { createFeatureAction } from '@utils/feature';\nimport CompanyIndividualEditOptions from '@models/feature/companyIndividualEdit/CompanyIndividualEditOptions';\nimport featureName from '../../featureName';\nimport * as actionTypes from './actionTypes';\n\nexport const fetchSelectOptions = createFeatureAction<string | null>(\n featureName,\n actionTypes.FETCH_SELECT_OPTIONS\n);\nexport const fetchSelectOptionsSuccess = createFeatureAction<CompanyIndividualEditOptions>(\n featureName,\n actionTypes.FETCH_SELECT_OPTIONS_SUCCESS\n);\n\nexport const fetchSelectOptionsFail = createFeatureAction<string>(\n featureName,\n actionTypes.FETCH_SELECT_OPTIONS_FAIL\n);\n","// fetch options lists for stage, rank and company owner\nexport const FETCH_SELECT_OPTIONS = 'FETCH_SELECT_OPTIONS';\nexport const FETCH_SELECT_OPTIONS_SUCCESS = 'FETCH_SELECT_OPTIONS_SUCCESS';\nexport const FETCH_SELECT_OPTIONS_FAIL = 'FETCH_SELECT_OPTIONS_FAIL';\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport { CompanyActivePayload, CompanyActiveResponse } from './interfaces';\n\nexport const addCompanyActive = createAction<CompanyActivePayload>(types.ADD_COMPANY_ACTIVE);\nexport const addCompanyActiveSuccess = createAction<CompanyActiveResponse>(\n types.ADD_COMPANY_ACTIVE_SUCCESS\n);\nexport const addCompanyActiveFail = createAction<string>(types.ADD_COMPANY_ACTIVE_FAIL);\n","export default 'selected-companies';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const selectCompanyIds = createFeatureActionType(featureName, 'SELECT_COMPANY_IDS');\n\nexport const deselectCompanyIds = createFeatureActionType(featureName, 'DESELECT_COMPANY_IDS');\n\nexport const fetchBulkEditData = createFeatureActionType(featureName, 'FETCH_BULK_EDIT_DATA');\nexport const fetchBulkEditDataSuccess = createFeatureActionType(\n featureName,\n 'FETCH_BULK_EDIT_DATA_SUCCESS'\n);\nexport const bulkUpdateDataSuccess = createFeatureActionType(\n featureName,\n 'BULK_UPDATE_DATA_SUCCESS'\n);\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport {\n SelectedCompaniesPayload,\n FetchBulkEditData,\n FetchBulkEditDataSuccess,\n BulkUpdateDataSuccess,\n} from './interfaces';\nimport * as types from './types';\nimport { SelectedCompaniesGrids } from '@optx/models/bulkActions';\n\nexport const selectCompanyIds = createAction<SelectedCompaniesPayload>(types.selectCompanyIds);\n\nexport const deselectCompanyIds = createAction<{ gridName: SelectedCompaniesGrids }>(\n types.deselectCompanyIds\n);\n\nexport const fetchBulkEditData = createAction<FetchBulkEditData>(types.fetchBulkEditData);\nexport const fetchBulkEditDataSuccess = createAction<FetchBulkEditDataSuccess>(\n types.fetchBulkEditDataSuccess\n);\n\nexport const bulkUpdateDataSuccess = createAction<BulkUpdateDataSuccess>(\n types.bulkUpdateDataSuccess\n);\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\nimport createCachedSelector from 're-reselect';\nimport { Dictionary, forEach } from 'lodash';\nimport { selectors as fetchSelectors } from '../../feature/fetch';\nimport { selectors as listsSelectors } from '../lists-popup';\n\n// specific selectors\nconst selectListsState = (state: AppState) => state.favoriteLists;\nconst selectCompanyListsState = createSelector(selectListsState, state => state.companyLists);\n\nexport const isLoading = createSelector(selectCompanyListsState, fetchSelectors.isLoadingSelector);\n\n/**\n * Get lists including company.\n */\nexport const getCompanyLists = createCachedSelector(\n listsSelectors.getAllWatchlists,\n selectCompanyListsState,\n (state: AppState, companyId: number) => companyId,\n (lists, listsState, companyId) => {\n // By default we have lists exclusing company from API.\n const listsExcludingCompany = listsState.byId[companyId] || undefined;\n\n if (!listsExcludingCompany) {\n return undefined;\n }\n\n // Compute lists including company comparing all lists with lists excluding company.\n const listsIncludingCompany: Dictionary<boolean> = {};\n\n forEach(lists, (list, listId) => {\n if (!listsExcludingCompany[listId]) {\n listsIncludingCompany[listId] = true;\n }\n });\n\n return listsIncludingCompany;\n }\n)((state, companyId) => companyId);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary, forEach } from 'lodash';\n// models\nimport { AddCompanyToWatchList, DeleteCompanyFromWatchList } from '@models/WatchList';\nimport { CompanyListsState, FetchListsExcludingCompanySuccessPayload } from './interfaces';\n// redux\nimport * as actions from './actions';\nimport { fetchReducer, fetchFailReducer } from '../../feature/fetch/reducers';\nimport * as favoriteListsActions from '../lists/actions';\nimport * as favoriteListsActionsPopup from '../lists-popup/actions';\n\nexport const initialState: CompanyListsState = {\n byId: {},\n error: '',\n loading: false,\n fetchedAt: '',\n};\n\n// Fetch lists excluding company success.\nconst fetchListsExclusingCompanySuccessReducer: CaseReducer<\n CompanyListsState,\n PayloadAction<FetchListsExcludingCompanySuccessPayload>\n> = (draftState, action) => {\n const { companyId, lists } = action.payload;\n\n draftState.loading = false;\n draftState.fetchedAt = new Date().toISOString();\n const listsExcludingCompany: Dictionary<boolean> = {};\n\n forEach(lists, list => {\n listsExcludingCompany[list.unique_id] = true;\n });\n\n draftState.byId[companyId] = listsExcludingCompany;\n};\n\n/**\n * Add company to favorite list success reducer.\n * @param draftState company lists state.\n * @param action action.\n */\nconst addCompanyToListSuccessReducer: CaseReducer<\n CompanyListsState,\n PayloadAction<AddCompanyToWatchList>\n> = (draftState, action) => {\n const { companyId, watchLists } = action.payload;\n\n if (draftState.byId[companyId]) {\n watchLists.forEach(list => {\n delete draftState.byId[companyId][list.unique_id];\n });\n }\n};\n\n/**\n * Delete company from favorite list success.\n * @param draftState company lists state.\n * @param action action.\n */\nconst deleteCompanyFromListSuccessReducer: CaseReducer<\n CompanyListsState,\n PayloadAction<DeleteCompanyFromWatchList>\n> = (draftState, action) => {\n const { companyId, listId } = action.payload;\n\n if (draftState.byId[companyId]) {\n draftState.byId[companyId][listId] = true;\n }\n};\n\n/**\n * By default data contains lists excluding company.\n */\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchListsExcludingCompany, fetchReducer)\n .addCase(actions.fetchListsExcludingCompanySuccess, fetchListsExclusingCompanySuccessReducer)\n .addCase(actions.fetchListsExcludingCompanyFail, fetchFailReducer)\n // add/delete company to/from list.\n .addCase(favoriteListsActions.addCompanyToListSuccess, addCompanyToListSuccessReducer)\n .addCase(favoriteListsActions.deleteCompanyFromListSuccess, deleteCompanyFromListSuccessReducer)\n .addCase(favoriteListsActionsPopup.addCompanyToListPopupSuccess, addCompanyToListSuccessReducer)\n .addCase(\n favoriteListsActionsPopup.deleteCompanyFromListPopupSuccess,\n deleteCompanyFromListSuccessReducer\n )\n);\n\nexport default reducer;\n","// search\nexport const SEARCH_CONTACTS = 'contacts/search/SEARCH_CONTACTS';\nexport const SEARCH_CONTACTS_SUCCESS = 'contacts/search/SEARCH_CONTACTS_SUCCESS';\nexport const SEARCH_CONTACTS_FAIL = 'contacts/search/SEARCH_CONTACTS_FAIL';\n// reset\nexport const RESET_SEARCH_CONTACTS = 'contacts/search/RESET_SEARCH_CONTACTS';\nexport const CLEAR_SEARCH_CONTACTS = 'contacts/search/CLEAR_SEARCH_CONTACTS';\n// reset to\nexport const RESET_SEARCH_CONTACTS_TO = 'contacts/search/RESET_SEARCH_CONTACTS_TO';\nexport const REMOVE_FILTER = 'contacts/search/REMOVE_FILTER';\n","import { PipelineInformationState } from './interfaces';\n\nexport const selectPipelineInformation = (state: PipelineInformationState) => state.data;\n\nexport const selectCount = (state: PipelineInformationState) =>\n state.data ? state.data.companies_count : 0;\n\nexport const selectOtherDealStages = (state: PipelineInformationState) =>\n state.data ? state.data.other_deal_stages : [];\n\nexport const selectPipelineInfo = (state: PipelineInformationState) =>\n state.data ? state.data.pipeline_data : [];\n\nexport const selectSelectedPeriodDate = (state: PipelineInformationState) =>\n state.data ? state.data.selected_period_date : null;\n\nexport const selectPreviousPeriodDate = (state: PipelineInformationState) =>\n state.data ? state.data.previous_period_date : null;\n","import { utils as requestUtils } from '@features/request';\nimport { STATE_KEY } from '../constants';\n\nexport const fetch = requestUtils.createActionTypes(STATE_KEY, 'pipeline-information/fetch');\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { PipelineInformation } from '@optx/models/feature/analystsLeaderboard/PipelineInformation';\n// types\nimport * as types from './types';\n\n// fetch\nexport const fetch = createAction(types.fetch.REQUEST);\nexport const fetchSuccess = createAction<PipelineInformation>(types.fetch.SUCCESS);\nexport const fetchFail = createAction<string>(types.fetch.FAILURE);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n\nimport { PipelineInformation } from '@models/feature/analystsLeaderboard/PipelineInformation';\n// local\nimport { PipelineInformationState } from './interfaces';\n// redux\nimport * as actions from './actions';\n\nconst initialState: PipelineInformationState = {\n data: null,\n};\n\nconst fetchSuccessReducer: CaseReducer<\n PipelineInformationState,\n PayloadAction<PipelineInformation>\n> = (draftState, action) => {\n draftState.data = action.payload;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder.addCase(actions.fetchSuccess, fetchSuccessReducer)\n);\n\nexport default reducer;\n","export const ADD_COMPANY_NOTE = 'ADD_COMPANY_NOTE';\nexport const ADD_COMPANY_NOTE_SUCCESS = 'ADD_COMPANY_NOTE_SUCCESS';\nexport const ADD_COMPANY_NOTE_FAIL = 'ADD_COMPANY_NOTE_FAIL';\n\nexport const DELETE_COMPANY_NOTE = 'DELETE_COMPANY_NOTE';\nexport const DELETE_COMPANY_NOTE_SUCCESS = 'DELETE_COMPANY_NOTE_SUCCESS';\nexport const DELETE_COMPANY_NOTE_FAIL = 'DELETE_COMPANY_NOTE_FAIL';\n\nexport const FETCH_COMPANY_NOTES = 'FETCH_COMPANY_NOTES';\nexport const FETCH_COMPANY_NOTES_SUCCESS = 'FETCH_COMPANY_NOTES_SUCCESS';\nexport const FETCH_COMPANY_NOTES_FAIL = 'FETCH_COMPANY_NOTES_FAIL';\n","import { each } from 'lodash';\nimport { ValueType } from 'react-select';\n// models\nimport { FilterMultiSelectOption, APIMultiSelectOption, SelectOption } from '@optx/models/Option';\nimport { FilterSource, Filter, MultiselectMappedFilter } from '@optx/models/filters';\nimport { mapToSelectOption } from '../option';\n// constants\nimport { FILTER_TOUCHES } from '@constants/filters';\n\n/**\n * compares the selected values with the entries from the helper filter\n * if matches are found returns the options\n * @param values all selected values of multi select filter\n * @param helperName name of the helper filter\n * @param source filters source data\n */\nexport const checkHelperValues = (\n values: Array<APIMultiSelectOption>,\n helperName: string,\n source: FilterSource<Filter<any>>\n) => {\n let helperData = [] as Array<ValueType<APIMultiSelectOption>>;\n const helpersValues = [] as Array<ValueType<APIMultiSelectOption>>;\n // get the associated helper filter\n each(source.data, filter => {\n if (filter.column === helperName) {\n helperData = filter.data;\n\n return false;\n }\n\n return true;\n });\n\n helperData.forEach(item => {\n if (values!.length >= item!.entries!.length) {\n let addOption = true;\n const valueList = [] as Array<string>;\n // compile the selected values of the multi select into an array\n // which contains only the value properties, making it easier to compare values\n values.forEach(option => {\n valueList.push(option.value);\n });\n // check if values from helper filter find\n // themselves in the selected value list\n each(item?.entries, (entry: { label: string; value: string }) => {\n if (!valueList.includes(entry.value)) {\n addOption = false;\n\n return false;\n }\n\n return true;\n });\n\n if (addOption) {\n helpersValues.push(item);\n }\n }\n });\n const newValues: ValueType<APIMultiSelectOption> = helpersValues.map(option => {\n return mapToSelectOption(option as string | APIMultiSelectOption<string>, undefined);\n });\n\n return newValues;\n};\n\n/**\n * when removing or deselecting an option, check if this value matches\n * any of the entries from the selected options of the helper filter and return the index\n * @param selectedValue the option that was removed or deselected\n * @param filterValues the selected values from the helper filter\n */\nexport const helperValueIndex = (\n selectedValue: string,\n filterValues: Array<FilterMultiSelectOption>\n) => {\n let removeIndexValue: undefined | number;\n\n if (filterValues && filterValues.length) {\n each(filterValues, (filterValue, index) => {\n each(filterValue.entries, entry => {\n if (entry.value === selectedValue) {\n removeIndexValue = index;\n\n return false;\n }\n\n return true;\n });\n\n if (removeIndexValue) {\n return false;\n }\n\n return true;\n });\n }\n\n return removeIndexValue;\n};\n\nexport function arrayUnion(firstArray: SelectOption[], secondArray: SelectOption[]) {\n const union = [...firstArray, ...secondArray].reduce((acc: SelectOption[], obj: SelectOption) => {\n const foundIndex = acc.findIndex((item: { value: string }) => item.value === obj.value);\n\n if (foundIndex === -1) {\n acc.push(obj);\n }\n\n return acc;\n }, []);\n\n return union;\n}\n\nexport function removeElementByValue(arr: SelectOption[], value: string) {\n const index = arr.findIndex((obj: { value: string }) => obj.value === value);\n\n if (index !== -1) {\n arr.splice(index, 1);\n }\n\n return arr;\n}\n\nexport function removeMultipleElements(arr1: SelectOption[], arr2: SelectOption[]) {\n const valuesToRemove = arr2.map((obj: { value: string }) => obj.value);\n\n return arr1.filter((obj: { value: string }) => !valuesToRemove.includes(obj.value));\n}\n\nexport function normalizeFilter(filter: any) {\n let filterCopy = { ...filter };\n\n if (filterCopy.company_owner_id !== undefined && Array.isArray(filterCopy.company_owner_id)) {\n filterCopy = {\n ...filterCopy,\n company_owner_id: filterCopy.company_owner_id.filter(\n (item: { value: string; label: string }) =>\n item.value !== 'active sourcing team' && item.value !== 'everybody else'\n ),\n };\n }\n\n if (filterCopy.psg_attendees !== undefined && Array.isArray(filterCopy.psg_attendees)) {\n const excludedValues = new Set(['uk team group', 'us team group', 'other group']);\n filterCopy = {\n ...filterCopy,\n psg_attendees: filterCopy.psg_attendees.filter(\n (item: { value: string; label: string }) => !excludedValues.has(item.value)\n ),\n };\n }\n\n return filterCopy;\n}\n\n/**\n * There are any empty values in the filter object\n * the function return only non empty values\n * @param data data of object\n */\nexport const cleanObjectWithEmptyValues = (data: any) => {\n for (const propName in data) {\n if (\n data[propName] === null ||\n data[propName] === undefined ||\n data[propName]?.length === 0 ||\n data[propName] === '' ||\n (data[propName].length === 1 && data[propName][0] === '')\n ) {\n // eslint-disable-next-line no-param-reassign\n delete data[propName];\n }\n }\n\n return data;\n};\n\n/**\n * function to find and return specific filter from data source\n * @param {FilterSource<Filter<any>>[]} source filter source data\n * @param {string} id name of the filter we want to get data from\n */\nexport const getFilterSourceData = (source: FilterSource<Filter<any>>[], id: string) => {\n let filter: Filter | undefined;\n\n if (source.length) {\n each(source, ({ data }) => {\n each(data, columnData => {\n if (columnData.column === id) {\n filter = columnData;\n\n return false;\n }\n\n return true;\n });\n\n if (filter) {\n return false;\n }\n\n return true;\n });\n }\n\n return filter;\n};\n\nexport const getMappedTouchFilters = (touchesParam?: string[]) => {\n const touches = touchesParam ?? FILTER_TOUCHES;\n\n return touches.map(touch => {\n return {\n disabled: undefined,\n entries: undefined,\n label: touch,\n value: touch,\n };\n }) as MultiselectMappedFilter[];\n};\n","import { SelectOption } from '@optx/models/Option';\n\nexport const SELECT_ALL: SelectOption = { label: '(select all / none)', value: '*' };\nexport const SELECT_NONE: SelectOption = { label: 'None', value: 'blank' };\nexport const SELECT_UNKNOWN: SelectOption = { label: 'Unknown', value: 'unknown' };\n","import { createAction } from '@reduxjs/toolkit';\nimport { SortRule } from '@models/table/sorting';\n// redux\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport * as types from './types';\nimport * as models from './interfaces';\n\nexport const searchSourceScrubLists = createAction<Partial<models.SearchPayload> | undefined>(\n types.SEARCH_SOURCE_SCRUB_LISTS\n);\n\nexport const searchSourceScrubListsSuccess = createAction(\n types.SEARCH_SOURCE_SCRUB_LISTS_SUCCESS,\n (sourceScrubLists: models.SourceScrubListsResponse, searchPayload: models.SearchPayload) => ({\n payload: sourceScrubLists,\n meta: searchPayload,\n })\n);\n\nexport const searchSourceScrubListsFail = createAction<string>(\n types.SEARCH_SOURCE_SCRUB_LISTS_FAIL\n);\n\nexport const changeSourceScrubPagination = createAction<PageInfo>(\n types.CHANGE_SOURCE_SCRUB_LISTS_PAGINATION\n);\n\nexport const sortSourceScrub = createAction<SortRule<any>>(types.SORT_SOURCE_SCRUB_LISTS);\n\nexport const fetchSourceScrubListsTotal = createAction(types.FETCH_SOURCE_SCRUB_LISTS_TOTAL);\nexport const fetchSourceScrubListsTotalSuccess = createAction<number>(\n types.FETCH_SOURCE_SCRUB_LISTS_TOTAL_SUCCESS\n);\nexport const fetchSourceScrubListsTotalFail = createAction<string>(\n types.FETCH_SOURCE_SCRUB_LISTS_TOTAL_FAIL\n);\n","export const SEARCH_SOURCE_SCRUB_LISTS = 'SEARCH_SOURCE_SCRUB_LISTS';\nexport const SEARCH_SOURCE_SCRUB_LISTS_SUCCESS = 'SEARCH_SOURCE_SCRUB_LISTS_SUCCESS';\nexport const SEARCH_SOURCE_SCRUB_LISTS_FAIL = 'SEARCH_SOURCE_SCRUB_LISTS_FAIL';\n\nexport const CHANGE_SOURCE_SCRUB_LISTS_PAGINATION = 'CHANGE_SOURCE_SCRUB_LISTS_PAGINATION';\n\nexport const SORT_SOURCE_SCRUB_LISTS = 'SORT_SOURCE_SCRUB_LISTS';\n\nexport const FETCH_SOURCE_SCRUB_LISTS_TOTAL = 'FETCH_SOURCE_SCRUB_LISTS_TOTAL';\nexport const FETCH_SOURCE_SCRUB_LISTS_TOTAL_SUCCESS = 'FETCH_SOURCE_SCRUB_LISTS_TOTAL_SUCCESS';\nexport const FETCH_SOURCE_SCRUB_LISTS_TOTAL_FAIL = 'FETCH_SOURCE_SCRUB_LISTS_TOTAL_FAIL';\n","import { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n// utils\nimport { getSourceScrubListURL } from '@optx/utils/routes';\n// redux\nimport { loadCompanyList } from '@redux/lists/details/actions';\nimport { hideCancelSearch } from '@features/grid/search/state/actions';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\n\nconst gridKey = 'lists';\n\nconst useSourceScrubLists = (): {\n handleSourceScrubListsResults: (id: string) => void;\n} => {\n const dispatch = useDispatch();\n const history = useHistory();\n const isInitialSearch: boolean = useSelector(searchSelectors.isInitialSearch(gridKey));\n const paginationSize: number = useSelector(paginationSelectors.getPageSize(gridKey));\n\n const handleSourceScrubListsResults = (id: string) => {\n if (isInitialSearch) {\n dispatch(\n paginationActions.changePaginationSuccess({\n gridKey: gridKey,\n data: {\n pageNumber: 1,\n pageSize: paginationSize,\n },\n })\n );\n }\n\n history.push(getSourceScrubListURL(id));\n dispatch(hideCancelSearch({ gridKey: gridKey, data: true }));\n\n if (!isInitialSearch) {\n dispatch(loadCompanyList({ id, isSourceScrub: true }));\n }\n };\n\n return { handleSourceScrubListsResults };\n};\n\nexport default useSourceScrubLists;\n","import React from 'react';\n// hooks\nimport useSourceScrubLists from '@hooks/saved-searches/useSourceScrubLists';\n\ninterface CellLinkProps {\n id: string;\n children: React.ReactNode;\n}\n\nconst CellLink = ({ id, children }: CellLinkProps) => {\n const { handleSourceScrubListsResults } = useSourceScrubLists();\n\n const handleClick = () => {\n if (id) {\n handleSourceScrubListsResults(id.toString());\n }\n };\n\n return (\n <div role=\"presentation\" onClick={handleClick}>\n {children}\n </div>\n );\n};\n\nexport default CellLink;\n","import React from 'react';\nimport numeral from 'numeral';\n// models\nimport { SourceScrubList } from '@optx/models/SourceScrubList';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n// components\nimport CellLink from '../CellLink';\n\ninterface TableCellDefaultTooltipProps {\n value: any;\n row: SourceScrubList;\n}\n\nconst TableCellDefaultTooltip: React.FC<TableCellDefaultTooltipProps> = ({ value, row }) => {\n const formattedVal = value ? numeral(value).format('0,0') : DEFAULT_CELL_VALUE;\n\n return <CellLink id={row.id?.toString()}>{formattedVal}</CellLink>;\n};\n\nexport default TableCellDefaultTooltip;\n","import React from 'react';\n// models\nimport { TableCellSourceScrubLists } from '@optx/models/table/Cell';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n// components\nimport CellLink from '../CellLink';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nconst TableCellDefaultTooltip: React.FC<TableCellSourceScrubLists> = ({ value, row }) => {\n return (\n <CellLink id={row.id?.toString()}>\n <TruncateTooltip placement=\"topLeft\" title={value}>\n {value || DEFAULT_CELL_VALUE}\n </TruncateTooltip>\n </CellLink>\n );\n};\n\nexport default TableCellDefaultTooltip;\n","import React from 'react';\nimport moment from 'moment';\n// models\nimport { SourceScrubList } from '@optx/models/SourceScrubList';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\nimport globalConfig from '@optx/constants/config';\n// components\nimport CellLink from '../CellLink';\n\ninterface TableCellDefaultProps {\n value: any;\n row: SourceScrubList;\n}\n\nconst TableCellDefault: React.FC<TableCellDefaultProps> = ({ value, row }) => {\n return (\n <CellLink id={row.id?.toString()}>\n {value && value !== DEFAULT_CELL_VALUE\n ? moment(value).format(globalConfig.grid_date.DATE_FORMAT)\n : DEFAULT_CELL_VALUE}{' '}\n </CellLink>\n );\n};\n\nexport default TableCellDefault;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\n// components\nimport { exportFileCSV } from '@utils/csvHandler';\n// redux\nimport { selectors as userListSelectors } from '@redux/user/user-list';\nimport { actions as favoriteListsActions } from '@redux/favorite-lists/lists';\nimport { getFilterListId } from '@redux/lists/details/selectors';\nimport { clearCompanyList } from '@redux/lists/details/actions';\nimport { actions as pipelineActions } from '@redux/my-pipeline';\nimport DropdownDot from '@components/feature/drop-down/saved-searches/ListActions';\nimport { SourceScrubList } from '@optx/models/SourceScrubList';\nimport { ListAccessRights } from '@optx/models/WatchList';\nimport { CompanyService } from '@optx/services/api';\nimport { columns } from '@optx/components/common/table/Companies/columns/virtual-column-config';\n\nconst TableCellActions: React.FC<{ row: SourceScrubList }> = ({ row }) => {\n const { id, title } = row;\n\n const dispatch = useDispatch();\n const { isAdmin } = useUserRole();\n const currentFilteredListId = useSelector(getFilterListId);\n const userListShare = useSelector(userListSelectors.getUserList);\n\n const handleRenameList = (title: string, listId: number | string) => {\n dispatch(favoriteListsActions.renameFavoriteList({ title, list_id: listId }));\n };\n\n const handleClearFilterList = () => dispatch(clearCompanyList());\n\n const handleDeleteListFavorites = (listId: number | string) => {\n // clear current list before deleting it\n if (currentFilteredListId.toString() === listId.toString()) {\n handleClearFilterList();\n }\n\n dispatch(favoriteListsActions.deleteFavoriteList(listId));\n };\n\n const handleExportListFavorites = (\n listId: string,\n fileName: string,\n includeDescription = false\n ) => {\n const companyData = { ss_list_id: listId };\n\n const filteredColumns = isAdmin\n ? columns.filter(column => column.dataIndex !== 'last_viewed')\n : columns;\n\n dispatch(pipelineActions.setLoading(true));\n exportFileCSV(\n fileName,\n companyData,\n filteredColumns,\n CompanyService.exportToCSV,\n includeDescription,\n true\n ).then(() => {\n dispatch(pipelineActions.setLoading(false));\n });\n };\n\n return (\n <>\n <DropdownDot\n type=\"list\"\n isRight\n listId={Number(id)}\n title={title}\n userListShare={userListShare}\n handleDeleteList={handleDeleteListFavorites}\n handleRenameList={handleRenameList}\n onDownloadList={handleExportListFavorites}\n accessRights={ListAccessRights.ReadOnly}\n />\n </>\n );\n};\n\nexport default TableCellActions;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Dictionary } from 'lodash';\nimport queryString from 'query-string';\n// constants\nimport predefinedFilters from '@components/common/table/TableSourceScrubLists/utils/predefinedFilters';\n// models\nimport { SourceScrubList } from '@models/SourceScrubList';\nimport { PreselectedFilter } from '@models/filters';\n// redux\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\n// utils\nimport { searchSourceScrubInNewTab } from '@utils/search';\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\n// components\nimport Icon from '@components/common/Icon';\n\ninterface TableCellNewTabProps {\n value: any;\n row: SourceScrubList;\n filterKey:\n | 'number_of_companies_in_et'\n | 'number_of_companies_not_in_et'\n | 'number_of_last_touch_over_6_months'\n | 'number_of_future_touches';\n}\n\nconst TableCellNewTab: React.FC<TableCellNewTabProps> = ({ value, row, filterKey }) => {\n const clearedFilter = useSelector(filterSelectors.getClearedFilter('advancedSearch'));\n const sources = useSelector(filterSourcesSelectors.getFiltersMap);\n\n const listId = row && row.id;\n\n let query = '';\n\n if (predefinedFilters[filterKey]) {\n // insert filter info in filters.\n const filter: Dictionary<PreselectedFilter> = {\n ...clearedFilter,\n ...predefinedFilters[filterKey],\n };\n\n const mappedFilters = mapFiltersToURLParams(sources, filter);\n query = queryString.stringify(mappedFilters, {\n arrayFormat: 'comma',\n });\n }\n\n return (\n <a\n className=\"new-tab-number\"\n href={`/ss-lists/${listId}?${query}`}\n onClick={e => {\n e.preventDefault();\n if (predefinedFilters[filterKey])\n searchSourceScrubInNewTab(listId, clearedFilter, sources, predefinedFilters[filterKey]);\n }}\n >\n <Icon color=\"#1890ff\" iconName=\"open-in-new\" /> {value}\n </a>\n );\n};\n\nexport default TableCellNewTab;\n","import numeral from 'numeral';\nimport { ColumnType } from 'antd/es/table';\n// models\nimport { SourceScrubList } from '@optx/models/SourceScrubList';\n// components\nimport {\n TableCellDefaultTooltip,\n TableCellDate,\n TableCellActions,\n TableCellNewTab,\n TableCellDefault,\n} from './cells';\n\nconst cellUpdates: Array<ColumnType<SourceScrubList>> = [\n {\n dataIndex: 'title',\n title: 'List Name',\n className: 'title',\n sorter: true,\n render: (value, row, index) => (\n <TableCellDefaultTooltip value={value} row={row} index={index} />\n ),\n width: 450,\n },\n {\n dataIndex: 'startdate',\n title: 'Start Date',\n className: 'startdate',\n sorter: true,\n align: 'left',\n render: (value, row) => <TableCellDate value={value} row={row} />,\n width: 100,\n },\n {\n dataIndex: 'enddate',\n title: 'End Date',\n className: 'enddate',\n sorter: true,\n align: 'left',\n render: (value, row) => <TableCellDate value={value} row={row} />,\n width: 100,\n },\n {\n dataIndex: 'last_refreshed_at',\n title: 'Last Refreshed Date',\n className: 'last_refreshed_at',\n sorter: true,\n align: 'left',\n render: (value, row) => <TableCellDate value={value} row={row} />,\n width: 140,\n },\n {\n dataIndex: 'number_of_companies',\n title: '# of Companies',\n className: 'number_of_companies',\n sorter: true,\n align: 'right',\n render: (value, row) => <TableCellDefault value={value} row={row} />,\n width: 140,\n },\n {\n dataIndex: 'number_of_companies_in_et',\n title: '# of Companies in ET',\n className: 'number_of_companies_in_et',\n sorter: true,\n align: 'right',\n render: (value: any, record: SourceScrubList) => {\n const formattedVal = numeral(value).format('0,0');\n\n return (\n <TableCellNewTab filterKey=\"number_of_companies_in_et\" value={formattedVal} row={record} />\n );\n },\n width: 170,\n },\n {\n dataIndex: 'number_of_companies_not_in_et',\n title: '# Not in ET',\n className: 'number_of_companies_not_in_et',\n sorter: true,\n align: 'right',\n render: (value: any, record: SourceScrubList) => {\n const formattedVal = numeral(value).format('0,0');\n\n return (\n <TableCellNewTab\n filterKey=\"number_of_companies_not_in_et\"\n value={formattedVal}\n row={record}\n />\n );\n },\n width: 110,\n },\n {\n dataIndex: 'number_of_last_touch_over_6_months',\n title: '# W/O a Touch < 6M',\n className: 'number_of_last_touch_over_6_months',\n sorter: true,\n align: 'right',\n render: (value: any, record: SourceScrubList) => {\n const formattedVal = numeral(value).format('0,0');\n\n return (\n <TableCellNewTab\n filterKey=\"number_of_last_touch_over_6_months\"\n value={formattedVal}\n row={record}\n />\n );\n },\n width: 170,\n },\n {\n dataIndex: 'number_of_future_touches',\n title: '# of Future Touches',\n className: 'number_of_future_touches',\n sorter: true,\n align: 'right',\n render: (value: any, record: SourceScrubList) => {\n const formattedVal = numeral(value).format('0,0');\n\n return (\n <TableCellNewTab filterKey=\"number_of_future_touches\" value={formattedVal} row={record} />\n );\n },\n width: 130,\n },\n {\n dataIndex: 'row_actions',\n title: 'Action',\n align: 'center',\n className: 'cell-actions',\n render: (value, row, index) => <TableCellActions row={row} />,\n width: 60,\n },\n];\n\nexport default cellUpdates;\n","import { createSelector } from 'reselect';\n// models\nimport { AppState } from '@optx/redux/interfaces';\n// utils\nimport { sortColumns } from '@utils/table/sorting';\n// redux\nimport { selectors as userInformationSelectors } from '@redux/user/information';\n// components\nimport columns from '@components/common/table/TableSourceScrubLists/sourceScrubColumns';\n\n// specific selectors\nconst sourceScrubListsState = (state: AppState) => state.sourceScrubLists;\n\nexport const shouldFetch = createSelector(\n userInformationSelectors.loaded,\n sourceScrubListsState,\n (loadedUserInfo, state) => loadedUserInfo && !state.loading && !state.fetchedAt\n);\n\nexport const shouldFetchTotal = createSelector(\n sourceScrubListsState,\n state => !state.loading && !state.fetchedTotalAt\n);\n\nexport const isLoading = createSelector(sourceScrubListsState, state => state.loading);\n\nexport const getSourceScrubLists = createSelector(sourceScrubListsState, state => state.data);\n\nexport const getPageNumber = createSelector(sourceScrubListsState, state => state.pageNumber);\n\nexport const getSort = createSelector(sourceScrubListsState, state => state.sortBy);\n\nexport const getQuery = createSelector(sourceScrubListsState, state => state.query);\n\nexport const getTotal = createSelector(sourceScrubListsState, state => state.total);\n\nexport const getGridColumns = createSelector(\n getSort,\n userInformationSelectors.getDefaultScore,\n (sorting, defaultOptxScore) => sortColumns(columns, sorting, defaultOptxScore)\n);\n","import { AxiosResponse } from 'axios';\nimport { call, put } from 'redux-saga/effects';\nimport * as actions from './actions';\nimport * as models from './interfaces';\nimport { ListsService } from '../../../services/api';\n\n// search\nexport function* searchSourceScrubLists(data: models.SearchPayload) {\n const res: AxiosResponse<models.SourceScrubListsResponse> = yield call(\n ListsService.searchSourceScrubLists,\n data\n );\n yield put(actions.searchSourceScrubListsSuccess(res.data, data));\n}\n","import { takeLatest, call, put, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\n// models\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { SortByRule, SortRule } from '@models/table/sorting';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\nimport { mapSortQuery } from '@optx/utils/search';\n// redux\nimport { selectors as listsAndSearchesSelectors } from '@features/lists-and-searches';\nimport { actions as listsAndSearchesActions } from '@features/lists-and-searches/pagination';\nimport { selectors as userSelectors, actions as userActions } from '@redux/user/information';\nimport { AxiosResponse } from 'axios';\nimport * as actions from './actions';\nimport * as models from './interfaces';\nimport * as selectors from './selectors';\nimport { ListsService } from '../../../services/api';\nimport NotificationService from '../../../services/NotificationService';\nimport { searchSourceScrubLists } from './sagasReusable';\n\nexport function* searchSourceScrubListsFail() {\n const errorMessage = 'Error fetching source scrub lists!';\n yield put(actions.searchSourceScrubListsFail(errorMessage));\n NotificationService.error(errorMessage);\n}\n\nexport function* searchSourceScrubsListsSaga(\n action: PayloadAction<models.SearchPayload | undefined>\n) {\n const initialQuery: string = yield select(selectors.getQuery);\n let query = '';\n\n if (action.payload && action.payload.query) {\n query = action.payload.query;\n }\n\n const pageNumber: number = yield select(selectors.getPageNumber);\n const userPageNumber: number = yield select(userSelectors.getSourceScrubListResultsPageNumber);\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n\n const sortBy: SortByRule<any>[] = yield select(selectors.getSort);\n const searchData: models.SearchPayload = {\n query,\n pagination: {\n pageSize,\n pageNumber: query !== initialQuery ? 1 : pageNumber,\n },\n ...(query ? { sortBy: [] } : { sortBy }),\n };\n\n try {\n yield call(searchSourceScrubLists, searchData);\n\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettingsForSSList({\n source_scrub_list_page_number: searchData.pagination.pageNumber,\n source_scrub_list_filters: query,\n })\n );\n } else {\n yield put(userActions.updateUserSettingsForSSList({ source_scrub_list_filters: query }));\n }\n } catch (error: any) {\n yield call(searchSourceScrubListsFail);\n }\n}\n\nexport function* changePaginationSaga(action: PayloadAction<PageInfo>) {\n const pagination = action.payload;\n\n const query: string = yield select(selectors.getQuery);\n const sortBy: SortByRule<any>[] = yield select(selectors.getSort);\n const userPageNumber: number = yield select(userSelectors.getSourceScrubListResultsPageNumber);\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n\n const searchData: models.SearchPayload = {\n query,\n pagination,\n sortBy,\n };\n\n try {\n yield call(searchSourceScrubLists, searchData);\n\n if (pagination.pageSize !== pageSize && searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettingsForSSList({\n lists_and_searches_results_per_page: pagination.pageSize,\n source_scrub_list_page_number: searchData.pagination.pageNumber,\n })\n );\n yield put(\n listsAndSearchesActions.updateMyWatchlistTabsPagination({\n actions: ['watchlists', 'companySearches', 'contactSearches'],\n pagination,\n })\n );\n } else if (pagination.pageSize !== pageSize) {\n yield put(\n userActions.updateUserSettingsForSSList({\n lists_and_searches_results_per_page: pagination.pageSize,\n })\n );\n yield put(\n listsAndSearchesActions.updateMyWatchlistTabsPagination({\n actions: ['watchlists', 'companySearches', 'contactSearches'],\n pagination,\n })\n );\n } else if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettingsForSSList({\n source_scrub_list_page_number: searchData.pagination.pageNumber,\n })\n );\n }\n } catch (error: any) {\n yield call(searchSourceScrubListsFail);\n }\n}\n\nexport function* sortSourceScrubListsSaga(action: PayloadAction<SortRule<any>>) {\n const currentSortBy: SortByRule<any>[] = yield select(selectors.getSort);\n const query: string = yield select(selectors.getQuery);\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n const userPageNumber: number = yield select(userSelectors.getSourceScrubListResultsPageNumber);\n\n // if we need to sort by relevance we need to set sortBy as an empty array.\n // for this, we check if we are sorting by the same column,\n // if current sorting is done in descending order and if we have a query term set\n const sortBy =\n currentSortBy?.length &&\n currentSortBy[0].id === action.payload.sortBy[0].id &&\n !action.payload.sortBy[0].desc &&\n query\n ? []\n : action.payload.sortBy;\n\n const searchData: models.SearchPayload = {\n query,\n pagination: {\n pageNumber: 1,\n pageSize,\n },\n sortBy,\n };\n\n const sortQuery = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n\n try {\n yield call(searchSourceScrubLists, searchData);\n\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettingsForSSList({\n source_scrub_list_sorting: sortQuery,\n source_scrub_list_page_number: searchData.pagination.pageNumber,\n })\n );\n } else {\n yield put(userActions.updateUserSettingsForSSList({ source_scrub_list_sorting: sortQuery }));\n }\n } catch (error: any) {\n yield call(searchSourceScrubListsFail);\n }\n}\n\nexport function* fetchSourceScrubListsTotalSaga() {\n try {\n const res: AxiosResponse<number> = yield call(ListsService.getSourceScrubListsTotal);\n yield put(actions.fetchSourceScrubListsTotalSuccess(res.data));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Error fetching source scrub lists total!');\n yield put(actions.searchSourceScrubListsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* sourceScrubsListsSaga() {\n yield takeLatest(actions.searchSourceScrubLists, searchSourceScrubsListsSaga);\n yield takeLatest(actions.changeSourceScrubPagination, changePaginationSaga);\n yield takeLatest(actions.sortSourceScrub, sortSourceScrubListsSaga);\n yield takeLatest(actions.fetchSourceScrubListsTotal, fetchSourceScrubListsTotalSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { UserInformation } from '@optx/models/user';\n// constants\nimport { SOURCE_SCRUB_LISTS_DEFAULT_SORT } from '@constants/table/sort/defaultSort';\n// utils\nimport { parseSorting } from '@optx/utils/filters/parseSorting';\n// redux\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { fetchFailReducer, fetchReducer } from '@redux/feature/fetch/reducers';\nimport * as actions from './actions';\nimport * as models from './interfaces';\nimport { SourceScrubListState } from './interfaces';\n\nexport const initialState: SourceScrubListState = {\n data: [],\n loading: false,\n error: '',\n fetchedAt: '',\n sortBy: SOURCE_SCRUB_LISTS_DEFAULT_SORT,\n query: '',\n pageNumber: 1,\n total: 0,\n fetchedTotalAt: '',\n};\n\nconst searchSourceScrubListsSuccessReducer: CaseReducer<\n SourceScrubListState,\n PayloadAction<models.SourceScrubListsResponse, any, models.SearchPayload>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.data = action.payload.lists;\n draftState.query = action.meta.query;\n draftState.pageNumber = action.meta.pagination.pageNumber;\n draftState.sortBy = action.meta.sortBy;\n draftState.total = action.payload.total_list_count;\n draftState.fetchedAt = new Date().toISOString();\n};\n\nconst fetchSourceScrubListsTotalSuccessReducer: CaseReducer<\n SourceScrubListState,\n PayloadAction<number>\n> = (draftState, action) => {\n draftState.total = action.payload;\n draftState.fetchedTotalAt = new Date().toISOString();\n};\n\nexport const fetchUserInformationSuccessReducer: CaseReducer<\n SourceScrubListState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const sorting = action.payload.settings.session_settings?.source_scrub_list_sorting;\n const query = action.payload.settings.session_settings?.source_scrub_list_filters;\n const pageNumber = action.payload.settings.session_settings?.source_scrub_list_page_number;\n\n if (sorting) {\n const { sortBy } = parseSorting(sorting);\n draftState.sortBy = sortBy;\n }\n\n if (query) {\n draftState.query = query;\n }\n\n if (pageNumber) {\n draftState.pageNumber = pageNumber;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // search\n .addCase(actions.searchSourceScrubLists, fetchReducer)\n .addCase(actions.searchSourceScrubListsSuccess, searchSourceScrubListsSuccessReducer)\n .addCase(actions.searchSourceScrubListsFail, fetchFailReducer)\n // change pagination\n .addCase(actions.changeSourceScrubPagination, fetchReducer)\n // sorting\n .addCase(actions.sortSourceScrub, fetchReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n // total\n .addCase(actions.fetchSourceScrubListsTotalSuccess, fetchSourceScrubListsTotalSuccessReducer)\n);\n\nexport default reducer;\n","export const featureName = 'sourcing-outreach-summary';\n","export default 'bulk-merge-companies';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const bulkMergeCompanies = createFeatureActionType(featureName, 'BULK_MERGE_COMPANIES');\n\nexport const invertStatusAfterMerge = createFeatureActionType(\n featureName,\n 'INVERT_STATUS_AFTER_MERGE'\n);\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport * as types from './types';\nimport { BulkMergeCompanies } from './interfaces';\n\nexport const bulkMergeCompanies = createAction<BulkMergeCompanies>(types.bulkMergeCompanies);\n\nexport const invertStatusAfterMerge = createAction(types.invertStatusAfterMerge);\n","import { BulkMergeCompaniesResponse } from './interfaces';\n\nexport const getStatus = (state: BulkMergeCompaniesResponse) => state.status;\n","import { createReducer, CaseReducer } from '@reduxjs/toolkit';\nimport * as actions from './actions';\nimport { BulkMergeCompaniesResponse } from './interfaces';\n\nconst initialState: BulkMergeCompaniesResponse = {\n status: false,\n};\n\nconst fetchMergeReducer: CaseReducer<BulkMergeCompaniesResponse> = (draftState, action) => {\n draftState.status = true;\n};\n\nconst mergeStatusInvertReducer: CaseReducer<BulkMergeCompaniesResponse> = draftState => {\n draftState.status = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.bulkMergeCompanies, fetchMergeReducer)\n .addCase(actions.invertStatusAfterMerge, mergeStatusInvertReducer)\n);\n\nexport default reducer;\n","import { takeLatest, put, call, select } from 'redux-saga/effects';\nimport { Dictionary } from 'lodash';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { SearchPayloadRequest } from '@models/api/contacts';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { BulkMergeCompanies } from './interfaces';\n// services\nimport { UserService } from '@optx/services/api';\nimport NotificationService from '@optx/services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\nimport { getRouteAlias } from '@optx/utils/routes';\n// redux\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { actions as editFieldsActions } from '@features/bulk-actions/edit-fields';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\nimport {\n actions as paginationActions,\n selectors as paginationSelectors,\n} from '@features/grid/pagination';\nimport { actions as searchCountActions } from '@features/grid/search-count';\nimport { getFiltersQuery } from '@redux/company/search/search/sagasReusable';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { selectors as searchTypeSelectors } from '@optx/features/grid/search-type';\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport * as actions from './actions';\n\nfunction* bulkMergeCompaniesSaga(action: PayloadAction<BulkMergeCompanies>) {\n const { selectedCompanies } = action.payload;\n const companies = [...selectedCompanies];\n\n const companyIds = companies.map(company => company.company_id);\n\n try {\n // @ts-ignore\n const res = yield call(UserService.bulkMergeCompanies, companyIds);\n\n if (res.data) {\n const successMessage = 'Companies merged successfully';\n NotificationService.success(successMessage);\n\n const view = getRouteAlias();\n\n if (view === 'advancedSearch') {\n const pagination: PageInfo = yield select(\n paginationSelectors.getPagination('advancedSearch')\n );\n const searchKey: string = yield select(searchSelectors.getSearchKey('advancedSearch'));\n const searchType: string = yield select(\n searchTypeSelectors.getSearchType('advancedSearch')\n );\n const filter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter('advancedSearch')\n );\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(\n getFiltersQuery,\n filter\n );\n const sortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting('advancedSearch'));\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterQuery,\n pagination,\n sortBy,\n };\n\n yield put(searchCountActions.searchCount({ data: searchData, gridKey: 'advancedSearch' }));\n yield put(\n paginationActions.changePagination({ gridKey: 'advancedSearch', data: pagination })\n );\n } else if (view === 'userLists' || view === 'sourceScrubLists') {\n const pagination: PageInfo = yield select(paginationSelectors.getPagination('lists'));\n const searchKey: string = yield select(searchSelectors.getSearchKey('lists'));\n const searchType: string = yield select(searchTypeSelectors.getSearchType('lists'));\n const filter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter('lists')\n );\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(\n getFiltersQuery,\n filter\n );\n const sortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting('lists'));\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterQuery,\n pagination,\n sortBy,\n };\n\n yield put(\n searchCountActions.searchCount({\n data: searchData,\n gridKey: 'lists',\n })\n );\n yield put(paginationActions.changePagination({ gridKey: 'lists', data: pagination }));\n } else if (view === 'companyOutReach') {\n const gridKey = 'outreachDetails';\n const tableGridQuery: string = yield select(searchSelectors.getTableGridQuery(gridKey));\n\n yield put(searchActions.initialCompaniesSearch({ gridKey, data: { tableGridQuery } }));\n } else if (view === 'companyProfile') {\n const gridKey = 'addons';\n const companyId: number | undefined = yield select(profileSelectors.getCompanyId);\n const pagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const searchKey: string = yield select(searchSelectors.getSearchKey(gridKey));\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridKey));\n\n if (companyId) {\n const filter: Dictionary<PreselectedFilter> = yield select(\n filterSelectors.getFilter(gridKey)\n );\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(\n getFiltersQuery,\n filter\n );\n const sortBy: SortByRule<any>[] = yield select(sortSelectors.getSorting('lists'));\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterQuery,\n pagination,\n sortBy,\n companyId: companyId,\n };\n yield put(searchCountActions.searchCount({ data: searchData, gridKey }));\n yield put(paginationActions.changePagination({ gridKey, data: pagination }));\n }\n }\n\n yield put(editFieldsActions.updateCompleted(true));\n }\n } catch (e: any) {\n const message = getErrorMessage(e, 'Failed to merge companies!');\n NotificationService.error(message);\n yield put(editFieldsActions.updateCompleted(true));\n }\n\n yield put(editFieldsActions.updateProgress(false));\n yield put(editFieldsActions.updateCompleted(false));\n yield put(editFieldsActions.cancel(false));\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n}\n\nexport default function* bulkEditSaga() {\n yield takeLatest(actions.bulkMergeCompanies, bulkMergeCompaniesSaga);\n}\n","import React from 'react';\nimport { LabeledValue } from 'antd/lib/select';\nimport classNames from 'classnames';\n// interfaces\nimport { SelectOption } from '@optx/models/Option';\n// styles\nimport './styles.scss';\n\nexport interface PrefixedSelectionItemProps {\n prefix: string;\n label: string | number;\n className?: string;\n}\n\nexport const PrefixedSelectionItem: React.FC<PrefixedSelectionItemProps> = ({\n prefix,\n label,\n className,\n}) => {\n return (\n <span className={classNames('prefixed-selection-item', className)}>\n <span className=\"prefixed-selection-item__prefix\">{prefix}</span>\n <span className=\"prefixed-selection-item__label\">{label}</span>\n </span>\n );\n};\n\n/**\n * Inject prefix into options label.\n * @param prefix prefix to be injected\n * @param options options list\n */\nexport const mapOptionsToLabeledValues = (\n prefix: string,\n options: Array<SelectOption>,\n SelectionItem: React.FC<PrefixedSelectionItemProps> = PrefixedSelectionItem,\n existParent: boolean = false\n) =>\n options.map<LabeledValue>(option => ({\n label: <SelectionItem prefix={prefix} label={option.label} />,\n value: option.value,\n parent: existParent ? option.parent : undefined,\n }));\n\nexport default PrefixedSelectionItem;\n","import moment, { Moment } from 'moment';\nimport { SelectOption } from '@optx/models/Option';\n\nexport const isFutureDate = (current: Moment) => {\n return current && current > moment().endOf('day');\n};\n\nexport const formatDateFromDatePicker = (date: string) => {\n // 2021-08-03T08:38:19.965Z\n // The date picker from formik-antd returns date strings in the format above.\n // We need to remove the part after \"T\", including\n const newDate = date.indexOf('T') !== -1 ? date.substring(0, date.indexOf('T')) : date;\n\n return newDate;\n};\n\n/**\n * Get year range list staring with current year + 2\n * @param startYear start year of array\n * @param yearsInAdvance number of years to add to current year\n * @returns {Array<SelectOption>}\n */\nexport const getYearsList = (startYear: number = 1900, yearsInAdvance: number = 0) => {\n let maxYear = new Date().getFullYear() + yearsInAdvance;\n const years: Array<SelectOption> = [];\n\n for (let index = maxYear; index >= startYear; index--) {\n years.push({\n value: index.toString(),\n label: index.toString(),\n });\n }\n\n return years;\n};\n\n/**\n * Get the function with the date limits that user can select for Last Round Date.\n * This can be passed into the disabledDate property of antd's Datepicker\n * @param currentInputDate current last round date in date input\n * @param secondToLastRoundDate date of previous last round\n * @param numberOfRounds total number of rounds\n * @returns a function that can be passed into the disabledDate property of antd's Datepicker\n */\nexport const getLastRoundDisabledDate =\n (currentInputDate: moment.Moment, secondToLastRoundDate: moment.Moment, numberOfRounds: number) =>\n (current: moment.Moment) => {\n // user should not select a future date for Last Round Date\n if (current.isAfter(moment().endOf('day'))) {\n return true;\n }\n\n if (numberOfRounds === 0) {\n return false;\n }\n\n // if one round, limit to date of last round\n if (numberOfRounds === 1) {\n return current.isBefore(currentInputDate);\n }\n\n // if multiple rounds then limit to date of previous to last round\n if (numberOfRounds > 1) {\n if (!secondToLastRoundDate || !secondToLastRoundDate.isValid()) {\n return false;\n }\n\n return current.isBefore(secondToLastRoundDate);\n }\n\n return false;\n };\n","export const DEFAULT_SORT_COMPANIES = [\n {\n id: 'company_name',\n desc: false,\n },\n];\n\nexport const DEFAULT_SORT_ANALYST = [\n {\n id: 'total_companies_reviewed_cids',\n desc: true,\n },\n];\n","import { createAction } from '@reduxjs/toolkit';\nimport { CompanyUserValue } from '@models/Company';\nimport { StageResponse } from '@optx/components/feature/company-individual-edit/state/saga/interfaces';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport * as types from './types';\nimport {\n OptxScoreUpdateResponse,\n TrendingLinesUpdate,\n EmployeeGrowthPercentage,\n} from './interfaces';\n\nexport const updateCompanyUserValues = createAction(\n types.UPDATE_COMPANY_USER_VALUES,\n (payload: CompanyUserValue, callback?: (data: SuccessErrorCallback) => void) => ({\n payload,\n meta: callback,\n })\n);\n\nexport const updateCompanyOptxScoreSuccess = createAction(\n types.UPDATE_COMPANY_OPTX_SCORE,\n (res: OptxScoreUpdateResponse | StageResponse) => ({\n payload: {\n score: res.optx_score,\n score_v3: res.score_v3,\n il_score: res.il_optx_score,\n il_score_growth: res.optx_score_growth,\n scoreGrowth: res.optx_score_growth,\n newScoreGrowth: res.score_v3_growth,\n },\n })\n);\n\nexport const updateCompanyTrendingLines = createAction<TrendingLinesUpdate>(\n types.UPDATE_COMPANY_TRENDING_LINES\n);\n\nexport const updateCompanyUserValuesSuccess = createAction<CompanyUserValue>(\n types.UPDATE_COMPANY_USER_VALUES_SUCCESS\n);\n\nexport const updateCompanyEmployeeGrowthPercentage = createAction<EmployeeGrowthPercentage>(\n types.UPDATE_COMPANY_EMPLOYEE_GROWTH_PERCENTAGE\n);\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\nimport createCachedSelector from 're-reselect';\nimport { selectors as fetchSelectors } from '../../feature/fetch';\nimport { selectors as filterSelectors } from '../filters';\nimport { getSavedSearchesSelector, getTitlesSelector } from '../../feature/saved-search/selectors';\n\n// specific selectors\nconst selectContactsSavedSearchesState = (state: AppState) => state.contactsSavedSearches;\n\nexport const isLoading = createSelector(\n selectContactsSavedSearchesState,\n fetchSelectors.isLoadingSelector\n);\n\nexport const getError = createSelector(\n selectContactsSavedSearchesState,\n fetchSelectors.errorSelector\n);\n\nexport const getSavedSearches = createSelector(\n selectContactsSavedSearchesState,\n getSavedSearchesSelector\n);\n\nexport const shouldFetch = createSelector(\n selectContactsSavedSearchesState,\n state => !state.loading && !state.fetchedAt\n);\n\nexport const shouldInitialFetch = createSelector(\n filterSelectors.fetchedFilters,\n shouldFetch,\n (fetchedFilters, shouldFetch) => fetchedFilters && shouldFetch\n);\n\nexport const getSearch = createCachedSelector(\n selectContactsSavedSearchesState,\n (state: AppState, searchId: number | string) => searchId,\n (state, searchId) => state.byId[searchId]\n)((state, searchId) => searchId);\n\nexport const getTitles = createSelector(selectContactsSavedSearchesState, getTitlesSelector);\n\nexport const getTotal = createSelector(selectContactsSavedSearchesState, state => state.total);\n\nexport const getQuery = createSelector(selectContactsSavedSearchesState, state => state.query);\n\nexport const getPageNumber = createSelector(\n selectContactsSavedSearchesState,\n state => state.pageNumber\n);\n\nexport const getSavedSearchesById = createSelector(\n selectContactsSavedSearchesState,\n state => state.allIds\n);\n","import { createSelector } from 'reselect';\n// models\nimport { AppState } from '@optx/redux/interfaces';\nimport { SearchPayload } from '@optx/models/api/contacts';\nimport { SpecialFilterTag } from '@optx/models/tags';\n// constants\nimport { defaultSearchType } from '@optx/features/grid/search-type/state/constants';\n// utils\nimport mapTags from '@optx/utils/filters/mapTags';\nimport { generateUniqueKey } from '@optx/utils/uuid';\nimport { sortColumns } from '@utils/table/sorting';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { getDefaultScore } from '@optx/redux/user/information/selectors';\nimport { selectors as filterSourcesSelectors } from '../../filters';\nimport { getSearchCount } from '@optx/features/grid/search-count/state/selectors';\nimport { selectors as paginationSelectors } from '@features/grid/pagination';\nimport { getSorting, isMultiSort } from '@features/grid/sort/state/selectors';\n// components\nimport defaultColumns from '../../../../components/common/table/TableContactsSearch/defaultColumns';\nimport { getSearchKey as searchKey } from '@optx/features/grid/searchkey/state/selectors';\n\nconst selectContactsSearchState = (state: AppState) => state.contactsSearch.search;\n\nexport const getError = createSelector(selectContactsSearchState, state => state.error);\n\nexport const isInitialFetch = createSelector(\n selectContactsSearchState,\n state => !state.fetchedAt && !state.loading && !state.error\n);\n\nexport const isLoading = createSelector(selectContactsSearchState, state => state.loading);\n\nexport const getPagination = createSelector(selectContactsSearchState, state => state.pagination);\n\nexport const getContacts = createSelector(selectContactsSearchState, state => {\n const { byId, allIds } = state;\n\n return allIds.map(contactId => byId[contactId]);\n});\n\nexport const getSearchKey = searchKey('contacts');\n\nconst selectSearchState = (state: AppState) => state.contactsSearch;\n\nexport const getFilter = createSelector(selectSearchState, state => state.filter.filter);\n\nexport const getData = createSelector(selectSearchState, state => state.filter.data);\n\nexport const getClearedFilter = createSelector(selectSearchState, state => state.filter.clear);\n\nexport const getSearchTitle = createSelector(selectSearchState, state => state.search.searchTitle);\n\nexport const getTags = createSelector(\n getFilter,\n getData,\n getClearedFilter,\n getSearchKey,\n (filter, sources, clearedFilter, searchKey) => {\n const tags = mapTags(filter, sources, clearedFilter);\n\n if (searchKey) {\n tags.unshift({\n filter: 'keyword' as SpecialFilterTag,\n uniqueKey: generateUniqueKey(),\n label: 'Keyword',\n values: [\n {\n value: searchKey,\n },\n ],\n });\n }\n\n return tags;\n }\n);\n\nexport const getSearchData = createSelector(\n paginationSelectors.getPagination('contacts'),\n getSearchCount('contacts'),\n getSorting('contacts'),\n getFilter,\n getSearchKey,\n getSearchTitle,\n (pagination, total, sortBy, filter, searchKey, searchTitle) => {\n const data: SearchPayload = {\n pagination,\n total,\n sortBy,\n filter,\n searchKey,\n searchTitle,\n searchType: defaultSearchType,\n };\n\n return data;\n }\n);\n\nexport const shouldInitialFetch = createSelector(\n userSelectors.loaded,\n filterSourcesSelectors.loaded,\n isInitialFetch,\n (userInfoLoaded, filtersLoaded, shouldFetch) => userInfoLoaded && filtersLoaded && shouldFetch\n);\n\nexport const getGridColumns = createSelector(\n getSorting('contacts'),\n isMultiSort('contacts'),\n getDefaultScore,\n (sorting, isMultiSort, defaultOptxScore) =>\n sortColumns(defaultColumns, sorting, defaultOptxScore, { isMultiSort })\n);\n","import { utils as requestUtils } from '@features/request';\nimport { featureName, featureNamePluginPrimaryContact } from '../featureName';\n\nexport const fetchCompany = requestUtils.createActionTypes(featureName, 'FETCH');\n\nexport const fetchPluginPrimaryContact = requestUtils.createActionTypes(\n featureNamePluginPrimaryContact,\n 'FETCH'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { CompanyProfile, PluginPrimaryContact } from '@optx/models/Company';\nimport * as types from './types';\n\nexport const fetchCompanyProfile = createAction(\n types.fetchCompany.REQUEST,\n (companyId: number, callback?: (data: CompanyProfile) => void) => ({\n payload: companyId,\n meta: callback,\n })\n);\n\nexport const fetchCompanyProfileSuccess = createAction<CompanyProfile>(types.fetchCompany.SUCCESS);\n\nexport const fetchCompanyProfileFail = createAction<string>(types.fetchCompany.FAILURE);\n\nexport const fetchPluginPrimaryContact = createAction<{\n companyId: number;\n}>(types.fetchPluginPrimaryContact.REQUEST);\n\nexport const fetchPluginPrimaryContactSuccess = createAction<PluginPrimaryContact>(\n types.fetchPluginPrimaryContact.SUCCESS\n);\n\nexport const fetchPluginPrimaryContactFail = createAction<string>(\n types.fetchPluginPrimaryContact.FAILURE\n);\n","import { CaseReducer, createReducer, current, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport Company, {\n CompanyFundingRounds,\n CompanyProfile,\n PluginPrimaryContact,\n} from '@optx/models/Company';\nimport { SelectOption } from '@optx/models/Option';\nimport { CompanyUserContact, ContactPhone } from '@models/api/contacts';\nimport {\n AddCompanyToWatchList,\n CompanyWatchList,\n DeleteCompanyFromWatchList,\n} from '@optx/models/WatchList';\n// interfaces\nimport {\n EditFieldSuccess,\n UpdateFieldsPayload,\n MultipleFieldsValue,\n} from '@optx/features/company/edit-fields/state/interfaces';\nimport { TouchesFinancialPayload } from '@models/api/touches';\n// constants\nimport { DEFAULT_COMPANY_OWNER_VALUE } from '@constants/table/company';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { showRationaleForStage } from '@optx/utils/helpers';\n// redux\nimport {\n AiDescriptionResponse,\n AiRelationshipSummaryResponse,\n} from '@optx/redux/company/profile/interfaces';\nimport { actions as companyProfileActions } from '@optx/redux/company/profile';\nimport { submitResearchRationaleSuccessReducer } from '@optx/redux/common/rationales/reducer';\nimport { fetchFailReducer, fetchReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\nimport * as researchRationaleActions from '@features/add-research-rationale/state/actions';\nimport { actions as tagsActions } from '@redux/company/tags';\nimport { actions as primaryContactsActions } from '@redux/company/primary-contacts';\nimport { actions as companyEditFields } from '@features/company/edit-fields/state';\nimport { SuccessCompanyTag, DeleteTagPayload } from '@optx/redux/company/tags/interfaces';\nimport { actions as bulkSalesloftActions } from '@optx/features/bulk-actions/salesloft';\nimport { EditCompanyStageActionPayload } from '@components/feature/company-individual-edit/state/stage/interfaces';\nimport { actions as companyStageActions } from '@components/feature/company-individual-edit/state/stage';\nimport { actions as favoriteListsActions } from '@redux/favorite-lists/lists';\nimport { actions as favoriteListsActionsPopup } from '@redux/favorite-lists/lists-popup';\nimport { EditCompanyOwnerSuccess } from '@components/feature/company-individual-edit/state/companyOwner/interfaces';\nimport { actions as companyOwnerActions } from '@components/feature/company-individual-edit/state/companyOwner';\nimport { actions as updateCompanyInfoActions } from '@redux/ui/modals/company-touches';\nimport { actions as editAllInfoActions } from '@optx/features/edit-all-info/state';\nimport { actions as fundingRoundActions } from '@redux/company/funding-rounds';\nimport {\n createCompanyToListSuccess,\n deleteCompanyToListSuccess,\n} from '@optx/redux/common/list/reducers';\nimport * as actions from './actions';\nimport { CompanyCardState } from './interfaces';\n\nconst initialState: CompanyCardState = {\n data: null,\n pluginPrimaryContact: null,\n active: false,\n loading: false,\n error: '',\n};\n\nconst fetchCompanyProfileReducer: CaseReducer<CompanyCardState> = draftState => {\n fetchReducer(draftState);\n};\n\nconst fetchCompanyProfileSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<CompanyProfile>\n> = (draftState, action) => {\n fetchSuccessReducer(draftState, action);\n draftState.active = true;\n};\n\nconst fetchPluginPrimaryContactReducer: CaseReducer<CompanyCardState> = draftState => {\n draftState.error = '';\n};\n\nconst fetchPluginPrimaryContactSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<PluginPrimaryContact>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.pluginPrimaryContact = action.payload;\n};\n\nconst addCompanyTagSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<SuccessCompanyTag>\n> = (draftState, action) => {\n const { companyId, ...tag } = action.payload;\n\n if (draftState.data) {\n // Add empty list if is null.\n if (!draftState.data.specialties) {\n draftState.data.specialties = [];\n }\n\n draftState.data.specialties.push(tag);\n }\n};\n\nconst addContactSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n if (draftState.data) {\n const companyContacts = draftState.data?.contacts;\n const newContact = {\n ...(action.payload as CompanyUserContact),\n additional_phones: action.payload.phones as ContactPhone[],\n primary_contact: !!action.payload.primary_contact,\n };\n const mappedContacts = action.payload.primary_contact\n ? companyContacts?.map(contact => ({ ...contact, primary_contact: false }))\n : companyContacts;\n\n if (draftState.data && mappedContacts) {\n draftState.data.contacts = [...mappedContacts, ...[newContact]];\n }\n\n draftState.data.has_contacts = true;\n }\n};\n\nconst deleteCompanyTagSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<DeleteTagPayload>\n> = (draftState, action) => {\n const { id } = action.payload;\n\n if (draftState.data && draftState.data.specialties) {\n const index = draftState.data.specialties.findIndex(item => item.tag_id === id);\n const removedTagName: string | undefined = draftState.data.specialties.find(\n item => item.tag_id === id\n )?.tag;\n\n if (index !== -1) {\n draftState.data.specialties.splice(index, 1);\n const companyTags = draftState.data.cs_tags ? draftState.data.cs_tags.split('|') : [];\n\n if (removedTagName && companyTags.includes(removedTagName)) {\n const tagNameIndex = companyTags.indexOf(removedTagName);\n companyTags.splice(tagNameIndex, 1);\n draftState.data.cs_tags = companyTags.join('|');\n }\n }\n }\n};\n\nconst addCompanyStageReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<EditCompanyStageActionPayload>\n> = (draftState, action) => {\n const { companyId, companyStageText } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n draftState.data.stage = companyStageText;\n }\n};\n\nconst addCompanyOwnerSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<EditCompanyOwnerSuccess>\n> = (draftState, action) => {\n const { companyId, companyOwnerData } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n if (companyOwnerData) {\n draftState.data.company_owner =\n companyOwnerData.company_owner_name === null\n ? DEFAULT_COMPANY_OWNER_VALUE\n : companyOwnerData.company_owner_name;\n draftState.data.company_owner_id =\n companyOwnerData.company_owner_id !== null ? +companyOwnerData.company_owner_id : null;\n draftState.data.owner_img = companyOwnerData.company_owner_img;\n } else {\n draftState.data.company_owner = DEFAULT_COMPANY_OWNER_VALUE;\n draftState.data.company_owner_id = null;\n draftState.data.owner_img = null;\n }\n }\n};\n\nconst editUserContactSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<Partial<CompanyUserContact>>\n> = (draftState, action) => {\n const contacts = draftState.data?.contacts;\n const contactDetails = action.payload;\n\n if (contacts) {\n const index = contacts.findIndex(contact => contact.person_id === contactDetails.person_id);\n const primaryContact = contacts.find(contact => contact.primary_contact);\n\n // check for existing primary contact and reset it,\n // if new contact is set as primary\n if (\n primaryContact &&\n contactDetails.primary_contact &&\n primaryContact.person_id !== contactDetails.person_id\n ) {\n primaryContact.primary_contact = false;\n }\n\n if (index !== -1) {\n contacts[index] = {\n ...contacts[index],\n ...contactDetails,\n is_edited: true,\n additional_phones: contactDetails.phones || null,\n // There is an issue with name. If initially there is no first_name or last_name\n // they are computed from full_name. On edit only first_name and last name\n // are updated, but no full_name so we recreate it based on new values.\n full_name: `${contactDetails.first_name} ${contactDetails.last_name}`,\n };\n }\n }\n};\n\nconst addCompanyToListSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<AddCompanyToWatchList>\n> = (draftState, action) => {\n const { watchLists } = action.payload;\n\n let companyData = { ...draftState.data };\n\n if (draftState.data) {\n watchLists.forEach(list => {\n if (list.owner_name === action.payload.ownerName || list.owner_name === 'Equity Touch') {\n companyData = createCompanyToListSuccess(companyData as Company, list);\n }\n });\n }\n\n draftState.data = companyData as CompanyProfile;\n};\n\nexport const deleteCompanyToListSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<DeleteCompanyFromWatchList>\n> = (draftState, action) => {\n const { listId } = action.payload;\n\n const companyData = deleteCompanyToListSuccess(draftState.data as Company, listId);\n draftState.data = companyData as CompanyProfile;\n};\n\nexport const createCompanyToListSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<{\n companyId: number;\n list: CompanyWatchList;\n }>\n> = (draftState, action) => {\n const { list } = action.payload;\n\n const companyData = createCompanyToListSuccess(draftState.data as Company, list);\n draftState.data = companyData as CompanyProfile;\n};\n\nconst updateFieldsSuccessReducer: CaseReducer<CompanyCardState, PayloadAction<EditFieldSuccess>> = (\n draftState,\n action\n) => {\n const {\n companyId,\n companyOwnerData,\n fieldName,\n value,\n ilScore,\n ilScoreGrowth,\n score,\n scoreGrowth,\n newScore,\n newScoreGrowth,\n isPsgCompany,\n defaultOptxScore,\n } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n const optionSelected = (value as UpdateFieldsPayload).value as SelectOption;\n const rationale = (value as UpdateFieldsPayload).rationale;\n\n if (defaultOptxScore === 'il') {\n draftState.data.il_optx_score = isNaN(Number(ilScore))\n ? draftState.data.il_optx_score\n : Number(ilScore);\n draftState.data.il_score_growth =\n ilScoreGrowth || isNaN(Number(draftState.data.il_score_growth))\n ? draftState.data.il_score_growth\n : Number(draftState.data.il_score_growth);\n }\n\n if (!Array.isArray(fieldName)) {\n if (fieldName === 'Date Presented') {\n const selectedValue = (value as UpdateFieldsPayload).value as string[];\n draftState.data.date_presented = selectedValue;\n }\n\n if (fieldName !== 'PSG Platform' && fieldName !== 'Add-on') {\n draftState.data.score = isNaN(Number(score)) ? draftState.data.score : Number(score);\n draftState.data.score_growth = scoreGrowth?.toString() as string;\n draftState.data.score_v3 = isNaN(Number(newScore))\n ? draftState.data.score_v3\n : Number(newScore);\n draftState.data.score_v3_growth = newScoreGrowth?.toString() as string;\n }\n\n if (fieldName === 'Website Status') {\n draftState.data.url_status = optionSelected ? 'active' : 'not active';\n }\n\n if (fieldName === 'Company Type') {\n draftState.data.company_type = optionSelected.label;\n }\n\n if (fieldName === 'Pipeline Rank') {\n draftState.data.pipeline_rank =\n optionSelected.value !== 'blank' ? optionSelected.label : DEFAULT_EMPTY_VALUE;\n }\n\n if (fieldName === 'Company Owner') {\n draftState.data.company_owner = companyOwnerData\n ? companyOwnerData.company_owner_name\n : DEFAULT_COMPANY_OWNER_VALUE;\n draftState.data.owner_img = companyOwnerData\n ? companyOwnerData.company_owner_img\n : draftState.data.owner_img;\n }\n\n if (fieldName === 'Stage' || fieldName === 'Fund') {\n draftState.data.stage =\n optionSelected.value !== 'blank' ? optionSelected.label : DEFAULT_EMPTY_VALUE;\n draftState.data.is_psg_company = isPsgCompany as boolean;\n\n if (fieldName === 'Stage') {\n if (showRationaleForStage(optionSelected.label)) {\n draftState.data.stage_rationale = rationale as string;\n } else {\n draftState.data.stage_rationale = null;\n }\n }\n }\n } else {\n if (fieldName.includes('Stage')) {\n const optionSelected = (value as MultipleFieldsValue).value.Stage;\n draftState.data.stage =\n optionSelected.value !== 'blank' ? optionSelected.label : DEFAULT_EMPTY_VALUE;\n draftState.data.is_psg_company = isPsgCompany as boolean;\n\n if (showRationaleForStage(optionSelected.label)) {\n draftState.data.stage_rationale = rationale as string;\n } else {\n draftState.data.stage_rationale = null;\n }\n }\n\n if (fieldName.includes('Pipeline Rank')) {\n const optionSelected = (value as MultipleFieldsValue).value['Pipeline Rank'];\n draftState.data.pipeline_rank =\n optionSelected.value !== 'blank' ? optionSelected.label : DEFAULT_EMPTY_VALUE;\n }\n\n if (fieldName.includes('Company Owner')) {\n draftState.data.company_owner = companyOwnerData\n ? companyOwnerData.company_owner_name\n : DEFAULT_COMPANY_OWNER_VALUE;\n draftState.data.owner_img = companyOwnerData\n ? companyOwnerData.company_owner_img\n : draftState.data.owner_img;\n }\n\n draftState.data.score = isNaN(Number(score)) ? draftState.data.score : Number(score);\n draftState.data.score_growth = scoreGrowth?.toString() as string;\n draftState.data.score_v3 = isNaN(Number(newScore))\n ? draftState.data.score_v3\n : Number(newScore);\n draftState.data.score_v3_growth = newScoreGrowth?.toString() as string;\n }\n }\n};\n\nconst updateCompanyInfoSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<Partial<TouchesFinancialPayload>>\n> = (draftState, { payload }) => {\n if (draftState.data && draftState.data.company_id === payload.company_id) {\n if (payload.general_info) {\n if (payload.general_info.primary_contact) {\n const contacts = draftState.data.contacts.map(contact => {\n if (contact.person_id === payload.general_info?.primary_contact) {\n return { ...contact, primary_contact: true };\n } else {\n return { ...contact, primary_contact: false };\n }\n });\n draftState.data.contacts = contacts;\n }\n\n if (payload.general_info.num_employees !== undefined) {\n draftState.data.num_employees = payload.general_info.num_employees;\n }\n\n if (payload.general_info.sub_sector) {\n draftState.data.sub_sector = payload.general_info.sub_sector.name;\n }\n\n if (payload.general_info.product_category) {\n const updatedProdCat = payload.general_info.product_category.map(\n (prodCat: SelectOption) => {\n return {\n category: prodCat.label,\n // @ts-ignore\n is_valid: 'isValid' in prodCat ? prodCat.isValid : prodCat.is_valid,\n };\n }\n );\n draftState.data.product_category = updatedProdCat;\n }\n }\n\n if (payload.funding) {\n if (payload.funding.capital_raised) {\n draftState.data.capital_raised = payload.funding.capital_raised;\n }\n\n if (payload.funding.last_round) {\n draftState.data.last_round =\n payload.funding.last_round.label &&\n payload.funding.last_round.label !== DEFAULT_EMPTY_VALUE\n ? payload.funding.last_round.label\n : null;\n draftState.data.last_round_id =\n payload.funding.last_round.value &&\n payload.funding.last_round.value.toString() !== DEFAULT_EMPTY_VALUE\n ? payload.funding.last_round.value\n : null;\n }\n\n if (payload.funding.next_steps) {\n draftState.data.next_steps = payload.funding.next_steps;\n }\n\n if (payload.funding.acquiring_company) {\n draftState.data.parentcompany = payload.funding.acquiring_company;\n }\n\n if (payload.funding.last_round_date) {\n draftState.data.raise_date = payload.funding.last_round_date;\n }\n\n if (payload.funding.last_round_amount) {\n draftState.data.last_raised_amount = payload.funding.last_round_amount;\n }\n\n if (payload.funding.last_investors) {\n draftState.data.last_investors = payload.funding.last_investors || [];\n }\n }\n\n if (payload.financials) {\n if (payload.financials.ebitda) {\n draftState.data.ebitda_list = payload.financials.ebitda;\n }\n\n if (payload.financials.revenue) {\n draftState.data.revenue_list = payload.financials.revenue;\n }\n }\n }\n};\n\nconst updateAllCompanyEditAllInfoSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<Partial<TouchesFinancialPayload>>\n> = (draftState, { payload }) => {\n if (draftState.data && draftState.data.company_id === payload.company_id) {\n draftState.data = {\n ...draftState.data,\n ...payload,\n };\n }\n};\n\nconst loadingCompletedReducer: CaseReducer<CompanyCardState> = draftState => {\n draftState.loading = false;\n};\n\nconst aiDescriptionSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<AiDescriptionResponse>\n> = (draftState, action) => {\n const { description } = action.payload;\n\n if (draftState.data) {\n const stateDescriptions = current(draftState.data?.descriptions);\n draftState.data.company_description = description;\n\n if (stateDescriptions && 'AI' in stateDescriptions) {\n draftState.data.descriptions.AI = description;\n } else {\n draftState.data.descriptions = { AI: description, ...stateDescriptions };\n }\n }\n\n draftState.loading = false;\n};\n\nconst companyFundingRoundsSuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<CompanyFundingRounds>\n> = (draftState, action) => {\n if (draftState.data) {\n const { total_raised, last_round } = action.payload;\n\n if (total_raised !== null) {\n draftState.data.capital_raised = total_raised;\n draftState.data.is_capital_raise_has_unknown = total_raised.includes('(plus Unknown)');\n }\n\n if (last_round?.amount !== null) {\n draftState.data.last_raised_amount = last_round?.amount as unknown as number;\n }\n }\n};\n\nconst aiRelationshipSummarySuccessReducer: CaseReducer<\n CompanyCardState,\n PayloadAction<AiRelationshipSummaryResponse>\n> = (draftState, action) => {\n if (draftState.data) {\n draftState.data.highlights = action.payload.highlights;\n draftState.data.is_ai_highlights_approved = action.payload.is_ai_highlights_approved;\n }\n};\n\nexport const reducer = createReducer<CompanyCardState>(initialState, builder =>\n builder\n .addCase(actions.fetchCompanyProfile, fetchCompanyProfileReducer)\n .addCase(actions.fetchCompanyProfileSuccess, fetchCompanyProfileSuccessReducer)\n .addCase(actions.fetchCompanyProfileFail, fetchFailReducer)\n .addCase(actions.fetchPluginPrimaryContact, fetchPluginPrimaryContactReducer)\n .addCase(actions.fetchPluginPrimaryContactSuccess, fetchPluginPrimaryContactSuccessReducer)\n .addCase(actions.fetchPluginPrimaryContactFail, fetchFailReducer)\n .addCase(tagsActions.addCompanyTagSuccess, addCompanyTagSuccessReducer)\n .addCase(companyStageActions.addCompanyStage, addCompanyStageReducer)\n .addCase(companyOwnerActions.addCompanyOwnerSuccess, addCompanyOwnerSuccessReducer)\n .addCase(tagsActions.deleteCompanyTagSuccess, deleteCompanyTagSuccessReducer)\n .addCase(favoriteListsActions.addCompanyToListSuccess, addCompanyToListSuccessReducer)\n .addCase(favoriteListsActions.deleteCompanyFromListSuccess, deleteCompanyToListSuccessReducer)\n .addCase(favoriteListsActions.createFavoriteListSuccess, createCompanyToListSuccessReducer)\n .addCase(favoriteListsActionsPopup.addCompanyToListPopupSuccess, addCompanyToListSuccessReducer)\n .addCase(\n favoriteListsActionsPopup.deleteCompanyFromListPopupSuccess,\n deleteCompanyToListSuccessReducer\n )\n .addCase(\n favoriteListsActionsPopup.createFavoriteListPopupSuccess,\n createCompanyToListSuccessReducer\n )\n .addCase(primaryContactsActions.editPrimaryContactSuccess, editUserContactSuccessReducer)\n .addCase(bulkSalesloftActions.addContactSuccess, addContactSuccessReducer)\n .addCase(\n researchRationaleActions.submitResearchRationaleSuccess,\n submitResearchRationaleSuccessReducer\n )\n .addCase(companyEditFields.updateFieldsSuccess, updateFieldsSuccessReducer)\n .addCase(\n updateCompanyInfoActions.updateTouchCompanyInfoSuccess,\n updateCompanyInfoSuccessReducer\n )\n .addCase(editAllInfoActions.updateCompanyEditAllInfoSuccess, updateCompanyInfoSuccessReducer)\n .addCase(\n editAllInfoActions.updateAllCompanyEditAllInfoSuccess,\n updateAllCompanyEditAllInfoSuccessReducer\n )\n .addCase(fundingRoundActions.getCompanyFundingRoundsSuccess, companyFundingRoundsSuccessReducer)\n .addCase(companyProfileActions.opinionAiDescriptionSuccess, aiDescriptionSuccessReducer)\n .addCase(companyProfileActions.opinionAiDescriptionFail, loadingCompletedReducer)\n .addCase(companyProfileActions.regenerateAiDescriptionFail, loadingCompletedReducer)\n .addCase(companyProfileActions.regenerateAiDescriptionSuccess, aiDescriptionSuccessReducer)\n .addCase(\n companyProfileActions.aiRelationshipSummarySuccess,\n aiRelationshipSummarySuccessReducer\n )\n);\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, put, takeLatest, takeLeading } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { CompanyProfile, PluginPrimaryContact } from '@optx/models/Company';\nimport NotificationService from '@optx/services/NotificationService';\nimport { CompanyService } from '@optx/services/api';\nimport { getErrorMessage } from '@optx/utils/api/errors';\nimport * as actions from './actions';\nimport { FetchCompanyProfileActionPayload } from './interfaces';\n\nexport function* fetchCompanyProfileSaga(action: FetchCompanyProfileActionPayload) {\n const { payload: companyId, meta: callback } = action;\n\n try {\n const res: AxiosResponse<false | CompanyProfile> = yield call(\n CompanyService.getProfile,\n companyId\n );\n\n if (res.data) {\n yield put(actions.fetchCompanyProfileSuccess(res.data));\n callback && callback(res.data as CompanyProfile);\n } else {\n const errorMessage = 'Failed to fetch company Profile!';\n yield put(actions.fetchCompanyProfileFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch company Profile!');\n yield put(actions.fetchCompanyProfileFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchPluginPrimaryContactSaga(\n action: PayloadAction<{\n companyId: number;\n }>\n) {\n const { companyId } = action.payload;\n\n try {\n const res: AxiosResponse<false | PluginPrimaryContact> = yield call(\n CompanyService.getPluginPrimaryContact,\n companyId\n );\n\n if (res.data) {\n yield put(actions.fetchPluginPrimaryContactSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch primary contact information!';\n yield put(actions.fetchPluginPrimaryContactFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch primary contact information!');\n yield put(actions.fetchPluginPrimaryContactFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companyProfileSaga() {\n yield takeLatest(actions.fetchCompanyProfile, fetchCompanyProfileSaga);\n yield takeLeading(actions.fetchPluginPrimaryContact, fetchPluginPrimaryContactSaga);\n}\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as actionTypes from './actionTypes';\nimport { EditCompanyOwner, EditCompanyOwnerSuccess } from './interfaces';\n\nexport const addCompanyOwner = createFeatureAction<EditCompanyOwner>(\n featureName,\n actionTypes.ADD_COMPANY_OWNER\n);\n\nexport const addCompanyOwnerSuccess = createFeatureAction<EditCompanyOwnerSuccess>(\n featureName,\n actionTypes.ADD_COMPANY_OWNER_SUCCESS\n);\n\nexport const addCompanyOwnerFail = createFeatureAction<string>(\n featureName,\n actionTypes.ADD_COMPANY_OWNER_FAIL\n);\n","import { createSelector } from 'reselect';\n// models\nimport { GridKeys } from '@models/grid';\nimport { selectFeatureState, StateSlice } from '../../selectFeature';\n// utils\nimport { preProcessSearch } from '@utils/search';\n\nconst selectSearchFeatureState = (state: StateSlice) => selectFeatureState(state).search;\n\nexport const getSearchKey = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => preProcessSearch(state[gridKey]?.searchKey));\n\nexport const getTotalCount = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey].total);\n\nexport const isLoading = (gridKey: GridKeys) =>\n createSelector(selectSearchFeatureState, state => state[gridKey].loading);\n","import { CombineSearchRequest } from '@optx/models/combine-search';\nimport { SearchSaveResponse } from '@optx/models/search';\n\n/**\n * Creates select options for CombineSearchMenuItem component.\n * @param savedSearches - An array of SearchSaveResponse objects from which select options will be created.\n * @returns An array of objects with label and value properties representing the select options.\n */\nexport const createSelectOptions = (savedSearches: SearchSaveResponse[]) => {\n return savedSearches\n .filter(item => item.title !== 'Sourcing Order')\n .map(item => ({\n label: item.title,\n value: item.unique_id,\n }));\n};\n\n/**\n * Creates combined search data based on the provided values.\n * @param values - The values used to create the combined search data.\n * @returns The combined search data containing the list title and searches to be combined.\n */\nexport const createCombineSearchData = (values: CombineSearchRequest) => {\n const searchesToCombine = [\n {\n search_id: values.first_search_id,\n logical_operator: values.searchFieldsList[0].operator.toUpperCase(),\n },\n ...values.searchFieldsList.map((search: any, index: number) => ({\n search_id: search.search_id,\n logical_operator: values.searchFieldsList[index + 1]?.operator.toUpperCase() || null,\n })),\n ];\n\n return {\n list_title: values.searchName,\n searches: searchesToCombine,\n };\n};\n\n/**\n * Returns the ordinal number as a string for the given input number.\n * @param number - The input number for which the ordinal number is to be determined.\n * @returns The ordinal number as a string, e.g. \"1st\", \"2nd\", \"3rd\", \"4th\", etc.\n */\nexport const getOrdinalNumber = (number: number) => {\n const mod100 = number % 100;\n const mod10 = number % 10;\n\n if (mod10 === 1 && mod100 !== 11) {\n return number + 'st';\n } else if (mod10 === 2 && mod100 !== 12) {\n return number + 'nd';\n } else if (mod10 === 3 && mod100 !== 13) {\n return number + 'rd';\n } else {\n return number + 'th';\n }\n};\n\n/**\n * Determines whether to fetch data after deleting saved search.\n * We do refetch if deleted search is parent for other combined search.\n * If dependent search is deleted, the combined search will be automatically deleted as well.\n * @param uniqueId - The unique identifier of the search to be deleted.\n * @param savedSearches - The list of saved searches to check for parent search IDs.\n * @returns A boolean indicating whether to fetch data after deleting the search.\n */\nexport const fetchAfterDelete = (\n uniqueId: number | string,\n savedSearches: SearchSaveResponse[]\n) => {\n return savedSearches.some(search => search.parent_search_ids?.includes(Number(uniqueId)));\n};\n\n/**\n * Extracts and returns a numerical ID from a given filter string.\n *\n * This function searches for a specific pattern (`combined_search_id=<number>`)\n * within the provided filter string and returns the corresponding numerical ID.\n * If the pattern is not found, it returns 0.\n *\n * @param {string | undefined} filters - The filter string that may contain the ID.\n * @returns {number} - The extracted numerical ID or 0 if the pattern is not found.\n */\nexport const getIdFromFilters = (filters: string | undefined): number => {\n return Number(filters?.match(/combined_search_id=(\\d+)/)?.[1] || 0);\n};\n","export const featureName = 'scroll-history';\n","import { createFeatureActionType } from '@utils/feature';\nimport { featureName } from '../featureName';\n\nexport const SAVE_SCROLL_POSITION = createFeatureActionType(featureName, 'SAVE_SCROLL_POSITION');\nexport const SAVE_TABLE_ROW = createFeatureActionType(featureName, 'SAVE_TABLE_ROW');\nexport const RESET_SCROLL_HISTORY = createFeatureActionType(featureName, 'RESET_SCROLL_HISTORY');\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\nimport { PageScrollHistory } from './interfaces';\n\nconst prepareSaveScrollAction = (\n pageKey: string,\n scrollHistory: Partial<PageScrollHistory> = {}\n) => ({\n payload: {\n key: pageKey,\n scrollHistory,\n },\n});\n\nexport const saveScrollPosition = createAction(types.SAVE_SCROLL_POSITION, prepareSaveScrollAction);\nexport const saveTableRow = createAction(types.SAVE_TABLE_ROW, prepareSaveScrollAction);\nexport const resetScrollHistory = createAction<string>(types.RESET_SCROLL_HISTORY);\n","import { PageScrollHistory } from './interfaces';\n\nexport const defaultPageScrollHistory: PageScrollHistory = {\n scrollPosition: 0,\n tableRow: '',\n};\n","import createCachedSelector from 're-reselect';\nimport { defaultPageScrollHistory } from './constants';\nimport { featureName } from '../featureName';\n\nexport const selectScrollState = (state: any) => state[featureName];\n\nexport const getScrollPosition = createCachedSelector(\n selectScrollState,\n (state: any, pageKey: string) => pageKey,\n (state, pageKey) => {\n const scrollHistory = state && state[pageKey];\n\n if (scrollHistory) {\n return scrollHistory.scrollPosition;\n }\n\n return defaultPageScrollHistory.scrollPosition;\n }\n)((state, pageKey) => pageKey);\n\nexport const getTableRow = createCachedSelector(\n selectScrollState,\n (state: any, pageKey: string) => pageKey,\n (state, pageKey) => {\n if (state && pageKey in state) {\n const scrollHistory = state[pageKey];\n\n if (scrollHistory) {\n return scrollHistory.tableRow;\n }\n\n return defaultPageScrollHistory.tableRow;\n }\n\n return '';\n }\n)((state, pageKey) => pageKey);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n\nimport { ScrollState, SavePageScrollHistoryPayload } from './interfaces';\nimport * as actions from './actions';\nimport { defaultPageScrollHistory } from './constants';\n\nconst initialState: ScrollState = {};\n\nconst pageScrollHistoryReducer: CaseReducer<\n ScrollState,\n PayloadAction<SavePageScrollHistoryPayload>\n> = (draftState, action) => {\n const { key, scrollHistory } = action.payload;\n const currentScrollHistory = draftState[key] || defaultPageScrollHistory;\n\n draftState[key] = {\n ...currentScrollHistory,\n ...scrollHistory,\n };\n};\n\nconst resetScrollHistory: CaseReducer<ScrollState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n const historyKey = action.payload;\n\n draftState[historyKey] = defaultPageScrollHistory;\n};\n\nconst reducer = createReducer<ScrollState>(initialState, builder =>\n builder\n .addCase(actions.saveScrollPosition, pageScrollHistoryReducer)\n .addCase(actions.saveTableRow, pageScrollHistoryReducer)\n .addCase(actions.resetScrollHistory, resetScrollHistory)\n);\n\nexport default reducer;\n","import React, { useRef } from 'react';\nimport { useSize } from '@umijs/hooks';\n\nexport interface IVirtualTableScrollYContext {\n height?: number;\n containerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst initialValue: IVirtualTableScrollYContext = {\n containerRef: React.createRef(),\n};\n\nexport const VirtualTableScrollYContext =\n React.createContext<IVirtualTableScrollYContext>(initialValue);\n\n/**\n * Keep track of one of table top parents in order to resize grid content.\n */\nexport const useVirtualTableContainerSize = (): IVirtualTableScrollYContext => {\n const ref = useRef<HTMLElement | null>(null);\n const [containerSize] = useSize(ref.current);\n\n // useLayoutEffect(() => {\n // console.log('Container Size CHanged: ', containerSize.height);\n // }, [containerSize.height]);\n // const debouncedValue = useDebounce(containerSize.height, 500);\n\n return {\n containerRef: ref,\n height: containerSize.height,\n };\n};\n","import { useInjectReducer } from 'redux-injectors';\nimport reducer from '../state';\nimport { featureName } from '../featureName';\n\nexport const useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n};\n","import { useDispatch, useSelector } from 'react-redux';\nimport { useEffect, useRef } from 'react';\nimport { actions as scrollActions, selectors as scrollSelectors } from '../state';\n\ninterface VirtualScrollInfo {\n left: number;\n top: number;\n isEnd: boolean;\n}\n\ntype OnVirtualScrollCallback = (scrollInfo: VirtualScrollInfo) => void;\n\n/**\n * Move the external scroll when the table is scrolled horizontally\n */\nconst handleExternalScroll: OnVirtualScrollCallback = scrollInfo => {\n const wrapper = document.querySelector('.external-scroll-wrapper');\n if (!wrapper) return;\n\n wrapper.scrollTo(scrollInfo.left, wrapper.scrollTop);\n};\n\n/**\n * Use Scroll Position for virtualized grid.\n * @param pageKey\n * This hook saves the scroll position of a window or that of a scrolled table\n * and sets the scroll position when navigating from a different page.\n */\nexport const useVirtualScrollPosition = (pageKey: string) => {\n const dispatch = useDispatch();\n const initialScrollPosition = useSelector((state: any) =>\n scrollSelectors.getScrollPosition(state, pageKey)\n );\n const scrollRef = useRef(initialScrollPosition);\n\n const onScroll: OnVirtualScrollCallback = scrollInfo => {\n scrollRef.current = scrollInfo.top;\n\n handleExternalScroll(scrollInfo);\n };\n\n useEffect(() => {\n return () => {\n // If component unmounts but scroll wasn't changed don't update store.\n if (initialScrollPosition !== scrollRef.current) {\n dispatch(scrollActions.saveScrollPosition(pageKey, { scrollPosition: scrollRef.current }));\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n /**\n * IMPORTANT: keep scroll 1 if initialScrollPosition is 0,\n * otherwise when comming form other page it will not display all virtual items.\n */\n initialScrollPosition: initialScrollPosition || 1,\n onScroll,\n };\n};\n","import { useDispatch, useSelector } from 'react-redux';\nimport { useEffect, useState } from 'react';\nimport { useLocation } from 'react-router';\nimport { usePrevious } from '@umijs/hooks';\nimport { actions, selectors } from '../state';\n\n/**\n * This hook saves the scroll position of a window or that of a scrolled table\n * and sets the scroll position when navigating from a different page or using\n * pagination.\n * This hook applies to normal grid.\n */\nexport const useScrollPosition = (\n pageKey: string,\n elementToScroll?: React.RefObject<HTMLDivElement>,\n pageNumber?: number,\n query?: string,\n pageSize?: number\n) => {\n const dispatch = useDispatch();\n const location = useLocation();\n const scrollPosition = useSelector(state => {\n return selectors.getScrollPosition(state, pageKey);\n });\n\n const [currQuery, setCurrQuery] = useState(query);\n const prevQuery = usePrevious(currQuery);\n const [currPageSize, setCurrPageSize] = useState(pageSize);\n const prevPageSize = usePrevious(currPageSize);\n const [currLocation, setCurrLocation] = useState(location.pathname);\n const prevLocation = usePrevious(currLocation);\n const [currPageNumber, setCurrPageNumber] = useState(pageNumber);\n const prevPageNumber = usePrevious(currPageNumber);\n\n useEffect(() => {\n const element = elementToScroll?.current?.children[0];\n\n setCurrQuery(query);\n setCurrPageSize(pageSize);\n setCurrLocation(location.pathname);\n setCurrPageNumber(pageNumber);\n\n // only fire the scrollTop if the user came from a different page\n if (\n prevPageSize !== currPageSize ||\n prevLocation !== currLocation ||\n prevPageNumber !== currPageNumber ||\n currQuery !== prevQuery\n ) {\n if (element) {\n if (\n prevPageSize !== currPageSize ||\n prevPageNumber !== currPageNumber ||\n currQuery !== prevQuery\n ) {\n element.scrollTop = 0;\n } else {\n element.scrollTop = scrollPosition;\n }\n }\n\n window.scrollTo(0, scrollPosition);\n }\n\n return () => {\n // determine if there is an element and save the scroll position when component unmounts\n if (element) {\n const scrolled = element.scrollTop;\n\n dispatch(actions.saveScrollPosition(pageKey, { scrollPosition: scrolled }));\n } else {\n const scrolled = window.scrollY;\n dispatch(actions.saveScrollPosition(pageKey, { scrollPosition: scrolled }));\n }\n };\n }, [\n currLocation,\n dispatch,\n elementToScroll,\n location.pathname,\n pageKey,\n prevLocation,\n scrollPosition,\n pageNumber,\n currQuery,\n prevQuery,\n currPageNumber,\n prevPageNumber,\n currPageSize,\n prevPageSize,\n pageSize,\n query,\n ]);\n};\n","import { call, put, select } from 'redux-saga/effects';\n// models\nimport { ListsSearchData } from '@optx/models/lists/search';\n// services\nimport { SavedSearchesService } from '@services/api';\n// redux\nimport { FilterSource, PreselectedFilter } from '@optx/models/filters';\nimport { Dictionary } from 'lodash';\nimport { AxiosResponse } from 'axios';\nimport * as actions from './actions';\nimport { selectors as filterSourcesSelectors } from '../filters';\nimport { selectors as searchSelectors } from '../search/search';\n\n// search\nexport function* searchSavedSearches(data: ListsSearchData) {\n const filterSources: FilterSource[] = yield select(filterSourcesSelectors.getFilterSources);\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n searchSelectors.getClearedFilter\n );\n const res: AxiosResponse<any> = yield call(SavedSearchesService.getContactSearches, data);\n yield put(\n actions.fetchContactSavedSearchesSuccess(\n res.data.lists,\n filterSources,\n clearedFilters,\n res.data.total_list_count,\n data.query,\n data.pagination\n )\n );\n}\n","import { takeLatest, call, put, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\nimport { AxiosResponse } from 'axios';\n// models\nimport { BaseFilter, FilterSource, PreselectedFilter } from '@optx/models/filters';\nimport { SearchSave, SearchSaveResponse } from '@optx/models/search';\nimport { ListsSearchData } from '@optx/models/lists/search';\nimport { PageInfo } from '@optx/models/table/Pagination';\n// services\nimport { SavedSearchesService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { preProcessSearch } from '@optx/utils/search';\nimport { getErrorMessage } from '@optx/utils/api/errors';\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\n// redux\nimport * as actions from './actions';\nimport * as selectors from './selectors';\nimport { searchSavedSearches } from './sagasReusable';\nimport { selectors as userSelectors, actions as userActions } from '@redux/user/information';\nimport { actions as listsAndSearchesActions } from '@features/lists-and-searches/pagination';\nimport { selectors as listsAndSearchesSelectors } from '@features/lists-and-searches';\nimport { selectors as filterSourcesSelectors } from '@redux/contacts/filters';\nimport {\n actions as searchActions,\n selectors as searchSelectors,\n} from '@redux/contacts/search/search';\n\nexport function* searchSavedSearchesFail() {\n const errorMessage = 'Error fetching watch lists!';\n yield put(actions.fetchContactSavedSearchesFail(errorMessage));\n NotificationService.error(errorMessage);\n}\n\nexport function* fetchContactsSavedSearchesSaga(action: PayloadAction<string>) {\n const pageNumber: number = yield select(selectors.getPageNumber);\n const userPageNumber: number = yield select(\n userSelectors.getSavedContactSearchesResultsPageNumber\n );\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n const pagination = { pageNumber, pageSize };\n\n const query: string = yield select(selectors.getQuery);\n const searchData: ListsSearchData = {\n query: action.payload || '',\n pagination:\n action.payload && action.payload !== query ? { ...pagination, pageNumber: 1 } : pagination,\n };\n\n try {\n yield call(searchSavedSearches, searchData);\n\n if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettingsForSavedContactSearches({\n saved_contact_serches_page_number: searchData.pagination.pageNumber,\n saved_contact_searches_filters: action.payload || '',\n })\n );\n } else {\n yield put(\n userActions.updateUserSettingsForSavedContactSearches({\n saved_contact_searches_filters: action.payload || '',\n })\n );\n }\n } catch (e: any) {\n yield call(searchSavedSearchesFail);\n }\n}\n\nexport function* savedContactsSearchPaginationSaga(action: PayloadAction<PageInfo>) {\n const pagination = action.payload;\n const userPageNumber: number = yield select(\n userSelectors.getSavedContactSearchesResultsPageNumber\n );\n const pageSize: number = yield select(listsAndSearchesSelectors.pageSize);\n const query: string = yield select(selectors.getQuery);\n const searchData: ListsSearchData = {\n query,\n pagination: action.payload,\n };\n\n try {\n yield call(searchSavedSearches, searchData);\n\n if (pagination.pageSize !== pageSize && searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettingsForSavedContactSearches({\n lists_and_searches_results_per_page: pagination.pageSize,\n saved_contact_serches_page_number: searchData.pagination.pageSize,\n })\n );\n yield put(\n listsAndSearchesActions.updateMyWatchlistTabsPagination({\n actions: ['watchlists', 'sourceScrub', 'companySearches'],\n pagination,\n })\n );\n } else if (pagination.pageSize !== pageSize) {\n yield put(\n userActions.updateUserSettings({\n lists_and_searches_results_per_page: pagination.pageSize,\n })\n );\n yield put(\n listsAndSearchesActions.updateMyWatchlistTabsPagination({\n actions: ['watchlists', 'sourceScrub', 'companySearches'],\n pagination,\n })\n );\n } else if (searchData.pagination.pageNumber !== userPageNumber) {\n yield put(\n userActions.updateUserSettingsForSavedContactSearches({\n saved_contact_serches_page_number: searchData.pagination.pageSize,\n })\n );\n }\n } catch (e: any) {\n yield call(searchSavedSearchesFail);\n }\n}\n\nexport function* saveSearchSaga(\n action: PayloadAction<{ title: string; filters: Dictionary<PreselectedFilter> }>\n) {\n const { title, filters } = action.payload;\n\n try {\n const searchKey: string = yield select(searchSelectors.getSearchKey);\n const filterMap: Dictionary<BaseFilter> = yield select(filterSourcesSelectors.getFiltersMap);\n const filterURLParams = mapFiltersToURLParams(filterMap, filters);\n const res: AxiosResponse<SearchSaveResponse> = yield call(\n SavedSearchesService.createContactSearch,\n title,\n searchKey,\n filterURLParams\n );\n\n if (res.data) {\n const filterSources: FilterSource[] = yield select(filterSourcesSelectors.getFilterSources);\n const clearedFilters: Dictionary<PreselectedFilter> = yield select(\n searchSelectors.getClearedFilter\n );\n\n yield put(actions.saveContactSearchSuccess(res.data, filterSources, clearedFilters));\n } else {\n const errorMessage = 'Error saving contacts search!';\n yield put(actions.saveContactSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Error saving contacts search!');\n yield put(actions.saveContactSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* deleteSearchSaga(action: PayloadAction<number>) {\n const searchId = action.payload;\n\n try {\n // @ts-ignore\n const res = yield call(SavedSearchesService.deleteContactSearch, searchId);\n\n if (res.data) {\n yield put(actions.deleteContactSearchSuccess(searchId));\n const successMessage = 'Contacts search deleted successfully';\n NotificationService.success(successMessage);\n } else {\n const errorMessage = 'Error deleting contacts search!';\n yield put(actions.deleteContactSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Error deleting contacts search!';\n yield put(actions.deleteContactSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* renameSearchSaga(\n action: PayloadAction<{ searchId: number | string; title: string }>\n) {\n const { searchId, title } = action.payload;\n\n try {\n // @ts-ignore\n const res = yield call(SavedSearchesService.renameContactSearch, searchId, title);\n\n if (res.data) {\n yield put(actions.renameContactSearchSuccess(searchId, title));\n const successMessage = 'Contacts search renamed successfully';\n NotificationService.success(successMessage);\n } else {\n const errorMessage = 'Error renaming contacts search!';\n yield put(actions.renameContactSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n let errorMessage: string;\n\n if (\n Object.values(e.response.data.errors)[0] ===\n `Contact search list with a title ${title} already exists.`\n ) {\n errorMessage = Object.values(e.response.data.errors)[0] as string;\n } else {\n errorMessage = 'Error renaming contacts search!';\n }\n\n yield put(actions.renameContactSearchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* resetToSearchSaga(\n action: PayloadAction<{ searchId: number | string; title: string }>\n) {\n const { searchId, title } = action.payload;\n\n const savedSearch: SearchSave = yield select(state => selectors.getSearch(state, searchId));\n const { searchKey, filters } = savedSearch;\n yield put(\n searchActions.reset(\n false,\n { searchKey: searchKey ? preProcessSearch(searchKey) : undefined, filter: filters },\n title\n )\n );\n}\n\nexport default function* contactsSavedSearchesSaga() {\n yield takeLatest(actions.fetchContactSavedSearches, fetchContactsSavedSearchesSaga);\n yield takeLatest(actions.saveContactSearch, saveSearchSaga);\n yield takeLatest(actions.deleteContactSearch, deleteSearchSaga);\n yield takeLatest(actions.renameContactSearch, renameSearchSaga);\n yield takeLatest(actions.resetToSearch, resetToSearchSaga);\n yield takeLatest(actions.savedContactsSearchPagination, savedContactsSearchPaginationSaga);\n}\n","import { createReducer } from '@reduxjs/toolkit';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport * as actions from './actions';\nimport { fetchReducer, fetchFailReducer } from '../../feature/fetch/reducers';\n\nimport {\n initialState,\n fetchSavedSearchesReducer,\n fetchSavedSearchesSuccessReducer,\n saveSearchSuccessReducer,\n deleteSearchSuccessReducer,\n renameSearchSuccessReducer,\n fetchUserInformationSuccessReducer,\n} from '../../feature/saved-search/reducers';\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // fetch contacts saved searches\n .addCase(actions.fetchContactSavedSearches, fetchSavedSearchesReducer)\n .addCase(actions.fetchContactSavedSearchesSuccess, fetchSavedSearchesSuccessReducer)\n .addCase(actions.fetchContactSavedSearchesFail, fetchFailReducer)\n // create contact search\n .addCase(actions.saveContactSearch, fetchReducer)\n .addCase(actions.saveContactSearchSuccess, saveSearchSuccessReducer)\n .addCase(actions.saveContactSearchFail, fetchFailReducer)\n // delete search\n .addCase(actions.deleteContactSearch, fetchReducer)\n .addCase(actions.deleteContactSearchSuccess, deleteSearchSuccessReducer)\n .addCase(actions.deleteContactSearchFail, fetchFailReducer)\n // rename search\n .addCase(actions.renameContactSearch, fetchReducer)\n .addCase(actions.renameContactSearchSuccess, renameSearchSuccessReducer)\n .addCase(actions.renameContactSearchFail, fetchFailReducer)\n // external\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n);\n\nexport default reducer;\n","import { Dictionary } from 'lodash';\nimport { GroupType } from 'react-select';\n// models\nimport RangeOption, { CheckableRangeOption, SingleCheckboxRangeOption } from './RangeOption';\nimport Option, {\n SelectOption,\n FormRangeOption,\n FormCheckboxOption,\n DateRangeOption,\n LogicOption,\n FormCheckableRangeOption,\n} from './Option';\nimport { Identifiable } from './Identifiable';\nimport { SearchSaveResponse } from '@optx/models/search';\nimport { AlertSettingsResponse } from '@redux/company/filters/interfaces';\n\nexport enum FilterGroup {\n Company = 0,\n Contacts,\n EquityTouchCompanies = 6,\n PipelineReport = 8,\n SourcingOutreachSummaryReport = 9,\n Touches = 10,\n ChecklistResearchInsightReport = 11,\n}\n\nexport type CompanyFilterType =\n | 'range_input'\n | 'date_range'\n | 'date_range_radio'\n | 'checkbox'\n | 'logic_checkbox'\n | 'multi_select'\n | 'single_select'\n | 'multi_select_helper'\n | 'single_select_helper'\n | 'multiple_range_nr'\n | 'multi_text'\n | 'endpoint_query'\n | 'radio'\n | 'filter_group'\n | 'filter_group_georange'\n | 'filter_group_custom';\n\nexport type CompanyFilterColumn =\n | 'sw_website_rank'\n | 'sw_website_rank_per_country'\n | 'company_owner_id'\n | 'emp_growth_percent'\n | 'raise_date'\n | 'last_round'\n | 'last_touch_date'\n | 'score'\n | 'score_v3'\n | 'last_rev_update_amount'\n | 'company_tag'\n | 'is_software'\n | 'is_interesting'\n | 'addon'\n | 'addon_bool'\n | 'num_employees'\n | 'location'\n | 'city'\n | 'state'\n | 'country'\n | 'pipeline_rank'\n | 'source_tag_filter'\n | 'capital_raised'\n | 'stage'\n | 'next_steps';\n\nexport type CompanyFormRationale =\n | 'is_software_rationales'\n | 'psg_fit_rationales'\n | 'optx_score_rationales'\n | 'optx_score_lower_rationales'\n | 'optx_score_upper_rationales'\n | 'stage_pass_dead_rationales';\n\nexport type CompanyAlertSettings = 'deliver' | 'frequency';\n\nexport type FilterFormat = 'location';\n\nexport interface CheckOption<T = number> extends RangeOption<T> {\n checked?: boolean | string | Array<string>;\n}\n\nexport interface FilterSource<T = Filter> {\n id: string;\n label: string;\n tag?: string;\n data: Array<T>;\n}\n\nexport interface FilterPlaceholder {\n min: string;\n max: string;\n}\n\n// Histogram structures\nexport interface Histogram {\n x: number;\n bucket: number;\n max_value: number;\n min_value: number;\n color?: string;\n}\n\nexport interface HistogramFilterOption {\n min?: number;\n max?: number;\n value?: string;\n name?: string;\n is_null?: number;\n}\n\nexport interface HistogramSlider {\n data: Array<Histogram>;\n min: number;\n max: number;\n}\n\nexport type HistogramFilterType = Dictionary<HistogramFilterOption> | string | Dictionary<string>;\nexport type HistogramType = Dictionary<Array<HistogramFilterType>> | HistogramSlider | number;\n\nexport interface HistogramGroup<T = HistogramType> {\n [param: string]: T;\n}\n\nexport interface BaseFilterDataType {\n name: string;\n value: string;\n}\n\nexport interface Filter<T extends object = any> {\n index: number;\n column: string;\n type: CompanyFilterType;\n data: null | T;\n custom?: boolean;\n rationales?: Array<BaseFilterDataType>;\n format_name?: FilterFormat;\n label?: string;\n tooltip: string | null;\n preselected?: Array<Dictionary<string>>;\n placeholders: null | FilterPlaceholder;\n endpoint: string;\n depends_on: Array<string>;\n histogram?: Array<Histogram>;\n hasHistogram?: boolean;\n slider_dots?: Array<number>;\n used_by?: Array<string>;\n used_for?: Array<string>;\n groupItems?: Array<Filter<any>>;\n empty_state?: Array<Option>;\n is_location?: boolean;\n is_quick_filter?: boolean;\n range_values?: SelectOption[];\n}\n\nexport type FilterURLParameter =\n | string\n | RangeOption<number | string>\n | Array<string | RangeOption<number | string>>;\n\nexport interface FilterSorting {\n id: string;\n desc: string;\n}\n\nexport interface ParsedFilterSorting {\n name: string | undefined;\n order: string;\n}\n\n// New filter\n// generic base filter\nexport interface BaseFilter<T = any> {\n disabled?: boolean;\n index: number;\n column: string;\n type: CompanyFilterType;\n data: T;\n default_value?: any;\n label: string;\n tooltip: string | null;\n used_by: Array<string>;\n used_for: Array<string>;\n empty_state?: Array<Option>;\n rationales?: Array<BaseFilterDataType>;\n // Model might be different Array<string>...\n preselected?: string | Array<string>;\n\n // Special on change event.\n onChange?: VoidFunction;\n groupItems?: Array<Filter<any>>;\n is_quick_filter?: boolean;\n\n // For Location.\n is_location?: boolean;\n}\n\n// generic range filter\nexport interface RangeFilter<T> extends BaseFilter<T> {\n histogram?: Array<Histogram>;\n slider_dots: Array<number>;\n slider_type: string;\n placeholders: FilterPlaceholder;\n allow_multiple: boolean;\n is_formatted: boolean;\n slider_plus: boolean;\n slider_handle_sticks: 'left' | 'right' | null;\n slider_min: number;\n slider_step: number;\n active_for?: Array<string>;\n}\n\nexport interface MultiRangeNumberFilter extends RangeFilter<Array<RangeOption>> {\n custom: boolean;\n}\n\nexport interface MultiCheckboxFilter extends BaseFilter<Array<FormCheckboxOption>> {\n custom: boolean;\n placeholders: FilterPlaceholder;\n}\n\nexport interface MultiSelectFilter<T = any> extends Omit<BaseFilter<T>, 'preselected'> {\n used_by: Array<string>;\n used_for: Array<string>;\n format_name?: FilterFormat;\n placeholders?: string;\n preselected?: Array<Option>;\n}\n\nexport interface MultiselectAsyncFilter extends BaseFilter<null> {\n endpoint: string;\n depends_on: Array<string>;\n placeholders?: string;\n}\n\nexport interface MultiselectMappedFilter {\n disabled: undefined;\n entries: undefined;\n label: string;\n value: string;\n}\n\nexport type FilterGroupDataSectionOption = {\n name: string;\n value: string;\n label?: string;\n checked?: boolean;\n parent?: string;\n};\nexport interface FilterGroupDataSection {\n index: number;\n type: CompanyFilterType;\n column: CompanyFilterColumn;\n label: string | null;\n data: FilterGroupDataSectionOption[] | null;\n\n // extra\n placeholders: string | FilterPlaceholder;\n\n // checkbox\n custom: boolean;\n tooltip: string | null;\n used_by: string[];\n used_for: string[];\n\n // date range\n slider_dots: number[];\n slider_type: string;\n allow_multiple: boolean;\n is_formatted: boolean;\n slider_plus: boolean;\n slider_handle_sticks: 'left' | 'right' | null;\n slider_min: number;\n slider_step: number;\n active_for?: Array<string>;\n\n // For groups\n reset_for?: Array<string>;\n}\n\nexport type PreselectedFilter =\n | string\n | CheckableRangeOption<number | string>\n | SingleCheckboxRangeOption\n | SelectOption\n | Array<\n | string\n | SelectOption\n | FormRangeOption\n | FormCheckboxOption\n | CheckableRangeOption\n | SingleCheckboxRangeOption\n | DateRangeOption\n | LogicOption\n | FormCheckableRangeOption\n >\n | [string | null, string | null]\n | undefined\n | boolean;\n\n/**\n * Special filter keys, not visible in filters UI.\n */\nexport type SpecialFilterKey =\n | 'company_tag'\n | 'is_platform'\n | 'diversity'\n | 'is_psg_company'\n | 'my_assigned_companies';\n\nexport type Filters = {\n [key in SpecialFilterKey]?: string;\n} & Dictionary<PreselectedFilter>;\n\nexport type FilterOptions =\n | Array<SelectOption>\n | Array<GroupType<SelectOption> | SelectOption>\n | Array<Identifiable<DateRangeOption>>;\n\n/**\n * Search origin keys, to indicate from what page we have \"search company\" api call.\n */\n\nexport type FilterSearchOriginName =\n | 'advanced_search'\n | 'my_companies'\n | 'my_watchlist'\n | 'source_scrub_list'\n | 'profile_page';\n\nexport interface FilterSearchOrigin {\n name: FilterSearchOriginName;\n value: number;\n}\n\nexport interface FilterResponse {\n default_views: SearchSaveResponse[];\n filters: FilterSource[];\n forms: {\n alert_settings: AlertSettingsResponse;\n next_steps: {\n next_step_choices: SelectOption[];\n };\n rationales: Dictionary<SelectOption[]>;\n };\n search_origin: FilterSearchOrigin[];\n}\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n\nimport * as actions from './actions';\nimport { CompanyOwnerState, EditCompanyOwner } from './interfaces';\n\nexport const initialState: CompanyOwnerState = {\n companyId: null,\n error: null,\n loading: false,\n};\n\nconst addCompanyOwner: CaseReducer<CompanyOwnerState, PayloadAction<EditCompanyOwner>> = (\n draftState,\n action\n) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n draftState.loading = true;\n};\n\nconst addCompanyOwnerSuccess: CaseReducer<CompanyOwnerState, PayloadAction<EditCompanyOwner>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addCompanyOwner, addCompanyOwner)\n .addCase(actions.addCompanyOwnerSuccess, addCompanyOwnerSuccess)\n .addCase(actions.addCompanyOwnerFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","export const deleteCookie = (name: string) => {\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; SameSite=None; Secure`;\n};\n\nexport const getCookie = (name: string): string | null => {\n const nameEQ = `${name}=`;\n const cookies = document.cookie.split(';');\n\n for (let i = 0; i < cookies.length; i++) {\n let cookie = cookies[i].trim();\n\n if (cookie.startsWith(nameEQ)) {\n return cookie.substring(nameEQ.length, cookie.length);\n }\n }\n\n return null;\n};\n","import { SelectOption } from '@optx/models/Option';\nimport styled from 'styled-components';\n\ninterface MultiSelectWrapperProps {\n value?: SelectOption<string>;\n hasButtons?: boolean;\n}\n\nconst MultiSelectWrapper = styled.div<MultiSelectWrapperProps>`\n min-width: 200px;\n width: 100%;\n color: rgba(0, 0, 0, 0.85);\n width: ${props => props.hasButtons === true && '65%'};\n\n .multiselect {\n &__multi-value {\n display: none;\n }\n\n &__control {\n border: 1px solid #d9d9d9;\n border-radius: 0;\n\n &--is-focused {\n border: 1px solid #d9d9d9;\n }\n }\n\n &__value-container {\n padding-left: 34px;\n height: 40px;\n }\n\n &__placeholder {\n color: #bfbfbf;\n font-size: 16px;\n }\n\n &__indicator {\n color: #000000;\n width: 65%;\n }\n\n &__indicator-separator {\n display: none;\n }\n\n &__menu {\n background: #ffffff;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.15);\n border-radius: 2px;\n margin-top: 4px;\n margin-bottom: 4px;\n z-index: 2;\n .primary + .multiselect__option:not(.primary) {\n border-top: 1px solid #d9d9d9;\n }\n }\n\n &__option {\n background-color: inherit;\n color: inherit;\n color: rgba(0, 0, 0, 0.85);\n\n &:hover {\n background-color: #deebff;\n cursor: pointer;\n }\n\n &--is-disabled {\n &:hover {\n cursor: not-allowed;\n }\n }\n\n label {\n line-height: 0;\n }\n\n span {\n margin-top: -2px;\n }\n }\n\n &__group {\n > :last-child {\n padding-left: 20px;\n }\n }\n }\n\n &.bulk-action-multiselect,\n &.is-addon {\n .multiselect {\n &__menu {\n border: 1px solid #d9d9d9;\n border-top: 0;\n box-shadow: none;\n position: static;\n margin-top: 0;\n\n &-list {\n max-height: 180px;\n }\n }\n }\n }\n\n &.is-addon .multiselect__menu-list {\n max-height: 250px;\n }\n`;\n\nexport const Styled = { MultiSelectWrapper };\n","import { SelectOption } from '@optx/models/Option';\n\nexport const isOptionDisabled = (value: SelectOption) => !!value.disabled;\n","import { SelectOption } from './Option';\nimport { PageInfo } from './table/Pagination';\nimport { SortByRule } from './table/sorting';\n\nexport enum ListAccessRights {\n // List can only be downloaded.\n ReadOnly = 1,\n // Full access to list. It can be renamed, deleted, shared etc.\n Edit,\n // List can be downloaded and shared.\n ShareOnly,\n}\n\nexport interface CompanyWatchList {\n title: string;\n count: number;\n date: string;\n global_list?: boolean;\n extra_options?: WatchListMeta;\n unique_id: string | number;\n share_permission: ListAccessRights;\n origin?: string;\n owner_name?: string;\n is_et_group?: boolean;\n addon_company?: string;\n addon_company_id?: number;\n modified_at: string | null;\n is_public: boolean;\n is_owner: boolean;\n}\n\nexport interface WatchListMeta {\n list_type: string;\n read_only: boolean;\n et_group_id?: number;\n is_public?: boolean;\n}\n\nexport type ListType = 'saved_search' | 'watchlist' | 'combined';\n\nexport interface AddCompanyToWatchList {\n companyId: number;\n watchLists: CompanyWatchList[];\n ownerName?: string;\n}\n\nexport interface AddCompanyToWatchListBulk {\n companyIds: number[];\n watchLists: SelectOption[];\n ownerName?: string;\n}\nexport interface DeleteCompanyFromWatchList {\n listId: string;\n companyId: number;\n}\n\nexport interface UpdateListPermission {\n listId: number;\n userPermission: number;\n}\n\nexport interface CreateCompanyToWatchList {\n companyId?: number;\n title: string;\n name: string;\n id: number;\n}\n\nexport interface FetchFavoriteLists {\n query: string;\n sortBy?: Array<SortByRule<any>>;\n fetchAll?: boolean;\n showEmptyLists?: boolean;\n}\nexport interface FetchFavoriteListsPopup {\n data: Array<CompanyWatchList>;\n sortBy: Array<SortByRule<any>>;\n fetchAll?: boolean;\n showEmptyLists: boolean;\n}\n\nexport interface UpdateListAssociation {\n listId: number | string;\n addonCompany?: string;\n addonCompanyId?: number;\n}\n\nexport type WatchlistsTabsPaginationActionsKeys =\n | 'watchlists'\n | 'sourceScrub'\n | 'companySearches'\n | 'contactSearches';\n\nexport interface WatchlistsTabsPaginationActions {\n actions: WatchlistsTabsPaginationActionsKeys[];\n pagination: PageInfo;\n}\nexport type WatchlistsSorting = 'recently' | 'title-asc' | 'title-desc' | 'owner';\n\nexport interface PublicWatchListActionPayload {\n is_public: boolean;\n list_id?: number;\n origin?: string;\n}\n","export default 'bulk-software-company';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const bulkSoftware = createFeatureActionType(featureName, 'BULK_SOFTWARE_COMPANIES');\nexport const bulkSoftwareSuccess = createFeatureActionType(\n featureName,\n 'BULK_SOFTWARE_COMPANIES_SUCCESS'\n);\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport * as types from './types';\nimport { BulkSoftware, BulkSoftwareSuccess } from './interfaces';\n\nexport const bulkSoftware = createAction<BulkSoftware>(types.bulkSoftware);\nexport const bulkSoftwareSuccess = createAction<{\n data: BulkSoftwareSuccess[];\n count: number;\n isAdminOrAnalyst?: boolean;\n}>(types.bulkSoftwareSuccess);\n","import { BulkSoftwareResponse } from './interfaces';\n\nexport const getSuccessCount = (state: BulkSoftwareResponse) => state.count;\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// local\nimport * as actions from './actions';\nimport { BulkSoftwareResponse, BulkSoftwareSuccess } from './interfaces';\n\nconst initialState: BulkSoftwareResponse = {\n count: 0,\n data: [],\n};\n\nconst bulkSoftwareSuccessReducer: CaseReducer<\n BulkSoftwareResponse,\n PayloadAction<{ data: BulkSoftwareSuccess[]; count: number }>\n> = (draftState, action) => {\n draftState.data = action.payload.data;\n draftState.count = action.payload.count;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder.addCase(actions.bulkSoftwareSuccess, bulkSoftwareSuccessReducer)\n);\n\nexport default reducer;\n","import { takeLatest, put, call, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { AxiosResponse } from 'axios';\n// constants\nimport { BULK_EDIT_COMPANY_LIMIT_SET_AS_SOFTWARE_COMPANY } from '@optx/config/bulkConfig';\n// services\nimport { UserService } from '@optx/services/api';\nimport NotificationService from '@optx/services/NotificationService';\n// redux\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport { actions as editFieldsActions } from '../../edit-fields';\nimport * as actions from './actions';\nimport { BulkSoftware, BulkSoftwareResponse } from './interfaces';\n\nfunction* bulkSoftwareSaga(action: PayloadAction<BulkSoftware>) {\n const { selectedCompanies, isSoftware, page = 1, rationale, isAdminOrAnalyst } = action.payload;\n const companies = [...selectedCompanies];\n const selectedCompaniesCount: number = selectedCompanies.length;\n\n const totalPageCount = Math.ceil(\n selectedCompaniesCount / BULK_EDIT_COMPANY_LIMIT_SET_AS_SOFTWARE_COMPANY\n );\n const startCompany = (page - 1) * BULK_EDIT_COMPANY_LIMIT_SET_AS_SOFTWARE_COMPANY;\n const companiesBatch = companies.slice(\n startCompany,\n startCompany + BULK_EDIT_COMPANY_LIMIT_SET_AS_SOFTWARE_COMPANY\n );\n\n const getCompanyCount =\n totalPageCount === page\n ? selectedCompaniesCount\n : page * BULK_EDIT_COMPANY_LIMIT_SET_AS_SOFTWARE_COMPANY;\n\n try {\n const res: AxiosResponse<BulkSoftwareResponse> = yield call(\n UserService.bulkCompanySoftwareEvaluation,\n companiesBatch.map(company => company.company_id),\n isSoftware,\n rationale\n );\n\n const isCancel: boolean = yield select(bulkActionsSelectors.editFields.cancel);\n const percentage = Math.round((getCompanyCount / selectedCompaniesCount) * 100);\n\n if (!isCancel) {\n if (res.data) {\n if (totalPageCount !== page) {\n yield put(editFieldsActions.updateCompleted(false));\n yield put(editFieldsActions.updateProgress(true));\n yield put(editFieldsActions.updatePercentage(percentage));\n\n yield put(\n actions.bulkSoftwareSuccess({\n data: res.data.data,\n count: selectedCompaniesCount,\n isAdminOrAnalyst,\n })\n );\n yield put(\n actions.bulkSoftware({\n selectedCompanies,\n isSoftware,\n page: page + 1,\n rationale,\n isAdminOrAnalyst,\n })\n );\n } else {\n yield put(editFieldsActions.updateProgress(false));\n yield put(editFieldsActions.updateCompleted(true));\n yield put(editFieldsActions.updatePercentage(percentage));\n\n yield put(\n actions.bulkSoftwareSuccess({\n data: res.data.data,\n count: selectedCompaniesCount,\n isAdminOrAnalyst,\n })\n );\n NotificationService.success('Companies having been set as Software Company successfully');\n }\n }\n } else {\n yield put(editFieldsActions.updateProgress(false));\n yield put(editFieldsActions.updateCompleted(true));\n yield put(editFieldsActions.updatePercentage(percentage));\n\n yield put(\n actions.bulkSoftwareSuccess({\n data: res.data.data,\n count: selectedCompaniesCount,\n isAdminOrAnalyst,\n })\n );\n\n const message = 'Canceled to set as Software Company!';\n NotificationService.success(message);\n }\n } catch (e: any) {\n // save the title to reducer, create a new action\n yield put(editFieldsActions.updateProgress(false));\n yield put(editFieldsActions.updateCompleted(true));\n yield put(\n editFieldsActions.updatePercentage(\n BULK_EDIT_COMPANY_LIMIT_SET_AS_SOFTWARE_COMPANY * (page - 1)\n )\n );\n const message = 'Failed to set as Software Company!';\n NotificationService.error(message);\n }\n}\n\nexport default function* bulkEditSaga() {\n yield takeLatest(actions.bulkSoftware, bulkSoftwareSaga);\n}\n","export default 'bulk-ai-ml';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const bulkAiMl = createFeatureActionType(featureName, 'BULK_AI_ML_COMPANIES');\nexport const bulkAiMlSuccess = createFeatureActionType(featureName, 'BULK_AI_ML_COMPANIES_SUCCESS');\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport * as types from './types';\nimport { BulkAiMl, BulkAiMlSuccess } from './interfaces';\n\nexport const bulkAiMl = createAction<BulkAiMl>(types.bulkAiMl);\nexport const bulkAiMlSuccess = createAction<{\n data: BulkAiMlSuccess[];\n count: number;\n successCount: number;\n}>(types.bulkAiMlSuccess);\n","import { BulkAiMlResponse } from './interfaces';\n\nexport const getTotalCount = (state: BulkAiMlResponse) => state.count;\nexport const getSuccessCount = (state: BulkAiMlResponse) => state.successCount;\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// local\nimport * as actions from './actions';\nimport { BulkAiMlResponse, BulkAiMlSuccess } from './interfaces';\n\nconst initialState: BulkAiMlResponse = {\n count: 0,\n successCount: 0,\n data: [],\n};\n\nconst bulkAiMlSuccessReducer: CaseReducer<\n BulkAiMlResponse,\n PayloadAction<{ data: BulkAiMlSuccess[]; count: number; successCount: number }>\n> = (draftState, action) => {\n draftState.data = action.payload.data;\n draftState.count = action.payload.count;\n draftState.successCount = action.payload.successCount;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder.addCase(actions.bulkAiMlSuccess, bulkAiMlSuccessReducer)\n);\n\nexport default reducer;\n","import { takeLatest, put, call, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { BulkAiMl, BulkAiMlResponse } from './interfaces';\n// constants\nimport { BULK_EDIT_COMPANY_LIMIT_SET_AS_AI_ML_COMPANY } from '@optx/config/bulkConfig';\n// services\nimport { UserService } from '@optx/services/api';\nimport NotificationService from '@optx/services/NotificationService';\n// redux\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport { actions as editFieldsActions } from '../../edit-fields';\nimport * as actions from './actions';\n\nfunction* bulkAiMlSaga(action: PayloadAction<BulkAiMl>) {\n const { selectedCompanies, isAiMl, page = 1 } = action.payload;\n const companies = [...selectedCompanies];\n const selectedCompaniesCount: number = selectedCompanies.length;\n\n const totalPageCount = Math.ceil(\n selectedCompaniesCount / BULK_EDIT_COMPANY_LIMIT_SET_AS_AI_ML_COMPANY\n );\n const startCompany = (page - 1) * BULK_EDIT_COMPANY_LIMIT_SET_AS_AI_ML_COMPANY;\n const companiesBatch = companies.slice(\n startCompany,\n startCompany + BULK_EDIT_COMPANY_LIMIT_SET_AS_AI_ML_COMPANY\n );\n\n const getCompanyCount =\n totalPageCount === page\n ? selectedCompaniesCount\n : page * BULK_EDIT_COMPANY_LIMIT_SET_AS_AI_ML_COMPANY;\n\n try {\n const res: AxiosResponse<BulkAiMlResponse> = yield call(\n UserService.bulkCompanyAiMl,\n companiesBatch.map(company => company.company_id),\n isAiMl\n );\n\n const isCancel: boolean = yield select(bulkActionsSelectors.editFields.cancel);\n const percentage = Math.round((getCompanyCount / selectedCompaniesCount) * 100);\n\n if (!isCancel) {\n if (res.data) {\n if (totalPageCount !== page) {\n yield put(editFieldsActions.updateCompleted(false));\n yield put(editFieldsActions.updateProgress(true));\n yield put(editFieldsActions.updatePercentage(percentage));\n\n yield put(\n actions.bulkAiMlSuccess({\n data: res.data.data,\n count: selectedCompaniesCount,\n successCount: getCompanyCount,\n })\n );\n yield put(\n actions.bulkAiMl({\n selectedCompanies,\n isAiMl,\n page: page + 1,\n })\n );\n } else {\n yield put(editFieldsActions.updateProgress(false));\n yield put(editFieldsActions.updateCompleted(true));\n yield put(editFieldsActions.updatePercentage(percentage));\n\n yield put(\n actions.bulkAiMlSuccess({\n data: res.data.data,\n count: selectedCompaniesCount,\n successCount: getCompanyCount,\n })\n );\n NotificationService.success('Companies having been updated successfully');\n }\n }\n } else {\n yield put(editFieldsActions.updateProgress(false));\n yield put(editFieldsActions.updateCompleted(true));\n yield put(editFieldsActions.updatePercentage(percentage));\n\n yield put(\n actions.bulkAiMlSuccess({\n data: res.data.data,\n count: selectedCompaniesCount,\n successCount: getCompanyCount,\n })\n );\n\n yield put(editFieldsActions.cancel(false));\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n\n const message = 'Canceled to update AI / ML for Company!';\n NotificationService.success(message);\n }\n } catch (e: any) {\n // save the title to reducer, create a new action\n yield put(editFieldsActions.updateProgress(false));\n yield put(editFieldsActions.updateCompleted(true));\n yield put(\n editFieldsActions.updatePercentage(BULK_EDIT_COMPANY_LIMIT_SET_AS_AI_ML_COMPANY * (page - 1))\n );\n const message = 'Failed to update AI / ML for Company!';\n NotificationService.error(message);\n }\n}\n\nexport default function* bulkEditSaga() {\n yield takeLatest(actions.bulkAiMl, bulkAiMlSaga);\n}\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as types from './actionTypes';\nimport { EditCompanyFund } from './interfaces';\n\nexport const addFund = createFeatureAction<EditCompanyFund>(featureName, types.ADD_COMPANY_FUND);\nexport const addFundSuccess = createFeatureAction<EditCompanyFund>(\n featureName,\n types.ADD_COMPANY_FUND_SUCCESS\n);\nexport const addFundFail = createFeatureAction<string>(featureName, types.ADD_COMPANY_FUND_FAIL);\n","export const ADD_COMPANY_FUND = 'ADD_COMPANY_FUND';\nexport const ADD_COMPANY_FUND_SUCCESS = 'ADD_COMPANY_FUND_SUCCESS';\nexport const ADD_COMPANY_FUND_FAIL = 'ADD_COMPANY_FUND_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n\nimport * as actions from './actions';\nimport { EditCompanyFund, FundState } from './interfaces';\n\nexport const initialState: FundState = {\n companyId: null,\n error: null,\n loading: false,\n};\n\nconst addFund: CaseReducer<FundState, PayloadAction<EditCompanyFund>> = (draftState, action) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n draftState.loading = true;\n};\n\nconst addFundSuccess: CaseReducer<FundState, PayloadAction<EditCompanyFund>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addFund, addFund)\n .addCase(actions.addFundSuccess, addFundSuccess)\n .addCase(actions.addFundFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","export const UPDATE_COMPANY_USER_VALUES = 'UPDATE_COMPANY_USER_VALUES';\nexport const UPDATE_COMPANY_OPTX_SCORE = 'UPDATE_COMPANY_OPTX_SCORE';\nexport const UPDATE_COMPANY_USER_VALUES_SUCCESS = 'UPDATE_COMPANY_USER_VALUES_SUCCESS';\nexport const UPDATE_COMPANY_TRENDING_LINES = 'UPDATE_COMPANY_TRENDING_LINES';\nexport const UPDATE_COMPANY_EMPLOYEE_GROWTH_PERCENTAGE =\n 'UPDATE_COMPANY_EMPLOYEE_GROWTH_PERCENTAGE';\n","import { createAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport { CompanyWatchList } from '@optx/models/WatchList';\n// redux\nimport * as types from './types';\n\n/**\n * Fetch lists not including specified company.\n */\nexport const fetchListsExcludingCompany = createAction<number>(types.FETCH_LISTS_EXCLUDING_COMPANY);\nexport const fetchListsExcludingCompanySuccess = createAction(\n types.FETCH_LISTS_WITHOUT_COMPANY_SUCCESS,\n (companyId: number, listsExclusingCompany: Dictionary<CompanyWatchList>) => ({\n payload: {\n companyId,\n lists: listsExclusingCompany,\n },\n })\n);\nexport const fetchListsExcludingCompanyFail = createAction<string>(\n types.FETCH_LISTS_WITHOUT_COMPANY_FAIL\n);\n","// get lists excluding company.\nexport const FETCH_LISTS_EXCLUDING_COMPANY = 'company/company-lists/FETCH_LISTS_EXCLUDING_COMPANY';\nexport const FETCH_LISTS_WITHOUT_COMPANY_SUCCESS =\n 'company/company-lists/FETCH_LISTS_EXCLUDING_COMPANY_SUCCESS';\nexport const FETCH_LISTS_WITHOUT_COMPANY_FAIL =\n 'company/company-lists/FETCH_LISTS_EXCLUDING_COMPANY_FAIL';\n","export const featureName = 'add-company';\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Checkbox as $Checkbox } from 'antd';\n\ninterface SelectAllWrapperProps extends React.HTMLAttributes<HTMLDivElement> {\n hasCustomNoTouchesOption?: boolean;\n}\n\nconst SelectAllWrapper = styled.div<SelectAllWrapperProps>`\n cursor: pointer;\n padding: ${props => (props.hasCustomNoTouchesOption ? '12px 12px 8px' : '15px 12px 17px')};\n border-bottom: ${props => (props.hasCustomNoTouchesOption ? 'inherit' : '1px solid #d9d9d9')};\n margin-bottom: ${props => (props.hasCustomNoTouchesOption ? '0' : '8px')};\n\n background-color: transparent;\n display: block;\n font-size: inherit;\n width: 100%;\n user-select: none;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n box-sizing: border-box;\n\n &:hover {\n background-color: #deebff;\n }\n`;\n\nconst Checkbox = styled($Checkbox)`\n margin: 0 8px 0 0;\n`;\n\nexport const Styled = {\n SelectAllWrapper,\n Checkbox,\n};\n","import React, { useMemo } from 'react';\nimport { GroupType, MenuListComponentProps } from 'react-select';\nimport { CheckboxProps } from 'antd/lib/checkbox';\n\nimport { SelectOption } from '@optx/models/Option';\nimport { hasGroups } from '@optx/utils/select/select';\nimport { SELECT_ALL } from '@constants/select';\nimport { Styled } from './SelectAll.styled';\n\ntype CheckOptions = Pick<CheckboxProps, 'checked' | 'disabled'>;\n\nconst SelectAll = ({\n getValue,\n setValue,\n options,\n hasCustomNoTouchesOption,\n}: MenuListComponentProps<SelectOption> & { hasCustomNoTouchesOption?: boolean }) => {\n const value = getValue() as Array<SelectOption>;\n\n const allOptions = useMemo(() => {\n let allOptions: Array<SelectOption> = [];\n\n if (hasGroups(options)) {\n options?.forEach((option: SelectOption | GroupType<SelectOption>) => {\n const groupOptions = (option as GroupType<SelectOption>).options;\n\n if (groupOptions) {\n // grouped options\n allOptions = allOptions.concat(groupOptions);\n } else {\n // single option\n allOptions.push(option as SelectOption);\n }\n });\n } else {\n allOptions = [...options];\n }\n\n return allOptions;\n }, [options]);\n\n const checkProps: CheckOptions = useMemo(() => {\n if (!value) {\n return {\n checked: false,\n disabled: false,\n };\n }\n\n // Disable select all if no options are enabled.\n const enabledOptions = allOptions.filter(item => !item.disabled);\n const isDisabled = !enabledOptions.length;\n\n return {\n checked: value.length === allOptions.length,\n disabled: isDisabled,\n };\n }, [allOptions, value]);\n\n const handleChange = (checked: boolean) => {\n if (checked) {\n if (hasGroups(options)) {\n let newValues: Array<SelectOption> = [];\n\n options.forEach(option => {\n if ((option as unknown as GroupType<SelectOption>).options) {\n // grouped options\n newValues = newValues.concat((option as unknown as GroupType<SelectOption>).options);\n } else {\n newValues.push(option);\n }\n });\n\n const filteredValues = newValues.filter(\n item => value.some(val => val.value === item.value) || !item.disabled\n );\n\n setValue(filteredValues, 'set-value');\n } else {\n const filteredValues = options.filter(\n item => value.some(val => val.value === item.value) || !item.disabled\n );\n\n setValue(filteredValues, 'set-value');\n }\n } else {\n // if there are disabled options checked we should keep them.\n setValue(\n value.filter(option => option.disabled),\n 'set-value'\n );\n }\n };\n\n const handleClick = () => {\n handleChange(!checkProps.checked);\n };\n\n return (\n <Styled.SelectAllWrapper\n onClick={handleClick}\n hasCustomNoTouchesOption={hasCustomNoTouchesOption}\n >\n <Styled.Checkbox {...checkProps} style={{ margin: '0 8px 0 0' }} />\n {SELECT_ALL.label}\n </Styled.SelectAllWrapper>\n );\n};\n\nexport default SelectAll;\n","import React from 'react';\nimport { components, MenuListComponentProps } from 'react-select';\nimport { SelectOption } from '@optx/models/Option';\nimport SelectAll from './SelectAll';\n\nconst { MenuList } = components;\n\nconst SelectAllMenuList =\n (hasCustomNoTouchesOption?: boolean) => (props: MenuListComponentProps<SelectOption>) => {\n const { children, ...restProps } = props;\n\n return (\n <MenuList {...restProps}>\n <SelectAll {...props} hasCustomNoTouchesOption={hasCustomNoTouchesOption} />\n {children}\n </MenuList>\n );\n };\n\nexport default SelectAllMenuList;\n","import React from 'react';\nimport { Typography } from 'antd';\nimport { CommonProps, GroupType } from 'react-select';\n// models\nimport { SelectOption } from '@optx/models/Option';\n// utils\nimport { hasGroups } from '@optx/utils/select/select';\n// Local\n// models\nimport { MultiSelectProps } from '../../interfaces';\n\ninterface AllMultiValueContainerProps extends CommonProps<SelectOption> {\n data: SelectOption;\n}\n\n/**\n * Display select ALL inside dropdown when is the case.\n */\nconst AllMultiValueContainer: React.FC<AllMultiValueContainerProps> = props => {\n const { selectProps, data } = props;\n const { allPrefix } = selectProps as MultiSelectProps;\n\n // For now keep function without memoization because sometimes it can receive\n // the same value reference but different size and will not update show all.\n const showSelectAll = () => {\n const options = selectProps.options;\n const value = selectProps.value as Array<SelectOption> | null;\n\n if (!value || !value.length || data.value !== value[0].value) {\n return false;\n }\n\n let allOptions: Array<SelectOption> = [];\n\n if (hasGroups(options)) {\n options?.forEach((option: SelectOption | GroupType<SelectOption>) => {\n const groupOptions = (option as GroupType<SelectOption>).options;\n\n if (groupOptions) {\n // grouped options\n allOptions = allOptions.concat(groupOptions);\n } else {\n // single option\n allOptions.push(option as SelectOption);\n }\n });\n } else {\n allOptions = [...(options as Array<SelectOption>)];\n }\n\n // If there are disabled options don't show all.\n if (allOptions.some(item => item.disabled)) {\n return false;\n }\n\n return value.length === allOptions.length;\n };\n\n if (showSelectAll()) {\n return (\n <Typography.Text>\n {allPrefix || 'Select'}: <Typography.Text style={{ color: '#1890FF' }}>ALL</Typography.Text>\n </Typography.Text>\n );\n }\n\n return null;\n};\n\nexport default AllMultiValueContainer;\n","import styled from 'styled-components';\nimport { components } from 'react-select';\nimport { Checkbox as $Checkbox } from 'antd';\n\nconst GroupHeading = styled(components.GroupHeading)`\n &.multiselect__group-heading {\n color: rgba(0, 0, 0, 0.85);\n padding: 8px 12px;\n cursor: pointer;\n font-size: inherit;\n }\n\n &:hover {\n background-color: #deebff;\n }\n`;\n\nconst Checkbox = styled($Checkbox)`\n margin: 0 8px 0 0;\n`;\n\nexport const Styled = {\n GroupHeading,\n Checkbox,\n};\n","import React, { useMemo } from 'react';\nimport { forEach, Dictionary } from 'lodash';\nimport { CommonProps, ActionMeta, GroupedOptionsType } from 'react-select';\n\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { Styled } from './SelectableGroupHeading.styled';\n\ntype SelectableGroupHeadingProps = CommonProps<SelectOption> & {\n children: React.ReactChildren;\n id: string;\n};\n\nconst SelectableGroupHeading = (props: SelectableGroupHeadingProps) => {\n const { children, id, selectProps } = props;\n\n // Parse group index from identifier.\n const numbers = id.match(/\\d+/gi) as RegExpMatchArray;\n const groupIndex = Number.parseInt(numbers[numbers.length - 1]);\n const group = (selectProps!.options as GroupedOptionsType<SelectOption>)[groupIndex];\n const value = selectProps.value;\n\n const handleChange = (checked: boolean) => {\n const meta: ActionMeta<SelectOption> = {\n action: 'set-value',\n };\n\n const groupOptions: Dictionary<any> = {};\n\n forEach(group.options, option => {\n groupOptions[option.value] = true;\n });\n\n if (checked) {\n // Group was checked.\n const valuesOutsideGroup = (value as Array<SelectOption>).filter(\n option => !groupOptions[option.value]\n );\n\n const filteredGroupOptions = group.options.filter(option => !option.disabled);\n selectProps.onChange!(valuesOutsideGroup.concat(filteredGroupOptions), meta);\n } else {\n // Group was unchecked.\n const newValue = (value as Array<SelectOption>).filter(option => !groupOptions[option.value]);\n selectProps.onChange!(newValue, meta);\n }\n };\n\n // Check if group should be checked or not.\n const isChecked = useMemo(() => {\n if (!value) {\n return false;\n }\n\n const currentValues: Dictionary<boolean> = {};\n (value as Array<SelectOption>).forEach(option => {\n currentValues[option.value] = true;\n });\n\n for (let index = 0; index < group.options.length; index++) {\n const option = group.options[index];\n\n if (!option.disabled && !currentValues[option.value]) {\n return false;\n }\n }\n\n return true;\n }, [group.options, value]);\n\n const isDisabled = useMemo(() => !group.options.some(item => !item.disabled), [group.options]);\n\n const handleClick = () => {\n handleChange(!isChecked);\n };\n\n return (\n <Styled.GroupHeading {...props} onClick={handleClick}>\n <Styled.Checkbox\n style={{ margin: '0 8px 0 0' }}\n checked={isChecked && !isDisabled}\n disabled={isDisabled}\n />\n {children}\n </Styled.GroupHeading>\n );\n};\n\nexport default SelectableGroupHeading;\n","export default 'add-research-rationale';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport featureName from '../featureName';\n\nexport const TOGGLE_ADD_RESEARCH_RATIONALE = createFeatureActionType(\n featureName,\n 'TOGGLE_ADD_RESEARCH_RATIONALE'\n);\nexport const TOGGLE_ADD_RESEARCH_RATIONALE_SUCCESS = createFeatureActionType(\n featureName,\n 'TOGGLE_ADD_RESEARCH_RATIONALE_SUCCESS'\n);\nexport const CHANGE_FIELDS = createFeatureActionType(featureName, 'CHANGE_FIELDS');\nexport const CHANGE_RATIONALE = createFeatureActionType(featureName, 'CHANGE_RATIONALE');\n\nexport const REVERT_FIELDS_CHANGES = createFeatureActionType(featureName, 'REVERT_FIELDS_CHANGES');\n\nexport const SUBMIT_RESEARCH_RATIONALE = createFeatureActionType(\n featureName,\n 'SUBMIT_RESEARCH_RATIONALE'\n);\nexport const SUBMIT_RESEARCH_RATIONALE_SUCCESS = createFeatureActionType(\n featureName,\n 'SUBMIT_RESEARCH_RATIONALE_SUCCESS'\n);\n","import { createAction } from '@reduxjs/toolkit';\n// redux\nimport { START_CONNECTING, STOP_CONNECTING } from './types';\n\nexport const startConnecting = createAction(START_CONNECTING);\nexport const endConnecting = createAction(STOP_CONNECTING);\n","export const START_CONNECTING = 'app/loader/start_connecting';\nexport const STOP_CONNECTING = 'app/loader/stop_connecting';\n","import { AppState } from '@optx/redux/interfaces';\nimport { createSelector } from 'reselect';\n\nconst selectLoader = (state: AppState) => state.loaderReducer;\n\nexport const isLoading = createSelector(selectLoader, loader => loader.isConnecting);\n","// models\nimport { CaseReducer, createReducer } from '@reduxjs/toolkit';\nimport { LoaderState } from './interfaces';\n// redux\nimport * as actions from './actions';\n\nconst initialState: LoaderState = {\n isConnecting: false,\n};\n\nconst startConnectingReducer: CaseReducer<LoaderState> = draftState => {\n draftState.isConnecting = true;\n};\n\nconst endConnectingReducer: CaseReducer<LoaderState> = draftState => {\n draftState.isConnecting = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.startConnecting, startConnectingReducer)\n .addCase(actions.endConnecting, endConnectingReducer)\n);\n\nexport default reducer;\n","import { createFeatureActionType } from '@utils/feature';\nimport { featureName } from '@features/grid/featureName';\n\nexport const TOGGLE_GRID_FILTERS_MODAL = createFeatureActionType(\n featureName,\n 'TOGGLE_GRID_FILTERS_MODAL'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { ToggleModalPayload } from './interfaces';\nimport * as types from './types';\n\nexport const toggleModal = createAction<ToggleModalPayload>(types.TOGGLE_GRID_FILTERS_MODAL);\n","import { GridKeys } from '@optx/models/grid';\nimport { AppState } from '@optx/redux/interfaces';\nimport { createSelector } from 'reselect';\n\nconst UIModalsState = (state: AppState) => state.ui.modals;\n\nexport const isOpen = (gridKey: GridKeys) =>\n createSelector(UIModalsState, state => state.gridModals[gridKey].isModalOpen);\n","import { GRID_KEYS_FILTER_MODALS, GRID_MODALS_INITIAL_STATE } from '@optx/constants/grid';\nimport { generateGridReducerInitialState } from '@optx/utils/grid';\nimport { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\nimport { toggleModal } from './actions';\nimport { FiltersModalState, ToggleModalPayload } from './interfaces';\n\nconst initialState: FiltersModalState = generateGridReducerInitialState(\n GRID_KEYS_FILTER_MODALS,\n GRID_MODALS_INITIAL_STATE\n);\n\nexport const gridToggleReducer: CaseReducer<\n FiltersModalState,\n PayloadAction<ToggleModalPayload>\n> = (draftState, action) => {\n const { gridKey } = action.payload;\n\n draftState[gridKey].isModalOpen = !draftState[gridKey].isModalOpen;\n};\n\nconst reducer = createReducer<FiltersModalState>(initialState, builder =>\n builder.addCase(toggleModal, gridToggleReducer)\n);\n\nexport default reducer;\n","import { Dictionary, each } from 'lodash';\nimport * as yup from 'yup';\nimport queryString from 'query-string';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n// utils\nimport { numberToMillions } from '@utils/number';\n// models\nimport {\n EquityTouchDatabaseMatch,\n EquityTouchFetchedField,\n EquityTouchSubmitField,\n GroupsSubmitField,\n EquityTouchContact,\n WatchlistsSubmitField,\n} from '@models/equityTouch';\nimport { ProductCategory } from '@optx/models/Company';\nimport { SelectOption } from '@models/Option';\nimport { SelectedCompanies, SelectedCompaniesGrids } from '@models/bulkActions';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { CompanyWatchList } from '@models/WatchList';\nimport { SourceScrubList } from '@models/SourceScrubList';\n// utils\nimport { stripUrlSlashes } from './url';\n\n/**\n * function to parse form related data coming from api\n * @param {Dictionary<EquityTouchFetchedField>} initialFormData data coming from api\n */\nexport const parseInitialFormData = (initialFormData: Dictionary<EquityTouchFetchedField>) => {\n const formInitialValues: Dictionary<\n string | number | boolean | number[] | string[] | null | SelectOption | ProductCategory[]\n > = {};\n\n Object.keys(initialFormData).forEach((field: string) => {\n if (initialFormData[field].type === 'select') {\n if (field === 'Country' || field === 'State') {\n if (initialFormData[field].database_matched) {\n formInitialValues[field] = initialFormData[field].database_matched?.text as string;\n } else {\n formInitialValues[field] = initialFormData[field].from_database;\n }\n } else {\n formInitialValues[field] = initialFormData[field].database_matched?.itemId as string;\n }\n } else if (field === 'Investors') {\n if (initialFormData[field].from_database) {\n formInitialValues[field] = (initialFormData[field].from_database as string[]).join('; ');\n }\n } else if (field === 'Add-On') {\n formInitialValues[field] = initialFormData[field].from_database;\n } else if (field === 'Add-On For') {\n formInitialValues[field] = initialFormData[field].database_matched?.text as string;\n } else if (field === 'Equity Check') {\n if (typeof initialFormData[field].from_database === 'number') {\n formInitialValues[field] = (initialFormData[field].from_database as number) / 1000000;\n } else {\n formInitialValues[field] = initialFormData[field].from_database;\n }\n } else if (initialFormData[field].from_database) {\n formInitialValues[field] = initialFormData[field].from_database;\n }\n });\n\n return formInitialValues;\n};\n\n/**\n * get a string of emails and parse them into an array of objects\n * @param value string of emails\n */\nexport const getEmailsFromString = (value: string | null | undefined) => {\n return value ? value.split(',').map(item => ({ email: item.trim() })) : [{ email: '' }];\n};\n\n/**\n * function to get value for special fields, like Company Type\n * @param {string} fieldName input field name\n * @param {Dictionary<string | SelectOption<String> | string[]>} formData form values\n * @param {Dictionary<EquityTouchFetchedField>} initialFormData initial form values\n */\nexport const getFieldValue = (\n fieldName: string,\n formData: Dictionary<\n string | number | boolean | number[] | string[] | null | SelectOption | ProductCategory[]\n >,\n initialFormData?: Dictionary<EquityTouchFetchedField>\n) => {\n let value: string | number = '';\n\n each(initialFormData![fieldName].received_values, item => {\n if (\n (item as EquityTouchDatabaseMatch).itemId === formData[fieldName] ||\n (item as EquityTouchDatabaseMatch).text === formData[fieldName]\n ) {\n value = (item as EquityTouchDatabaseMatch).itemId;\n\n return false;\n }\n\n return null;\n });\n\n return value;\n};\n\nconst getFTEsValues = (value: number) => {\n return !value || isNaN(value) ? '' : value;\n};\n\n/**\n * get the form values and map each field with the required data\n * @param {Dictionary<string | SelectOption<String> | string[]>} formData form values\n * @param {Dictionary<EquityTouchFetchedField>} initialFormData initial form values\n */\nexport const mapEquityTouchForm = (\n formData: Dictionary<\n string | number | boolean | number[] | string[] | null | SelectOption | ProductCategory[]\n >,\n initialFormData?: Dictionary<EquityTouchFetchedField>\n) => {\n const jsonForm = {} as Dictionary<\n string | EquityTouchSubmitField | GroupsSubmitField | WatchlistsSubmitField[]\n >;\n\n // for the post json some fields can only be sent with the value,\n // some need to have other properties attached\n if (initialFormData) {\n Object.keys(initialFormData).forEach(formKey => {\n const field = initialFormData![formKey];\n\n if (formKey === 'Sub-Sector') {\n let value;\n\n if (typeof formData[formKey] === 'number') {\n value = formData[formKey];\n } else {\n const findSubSectorId = initialFormData!['Sub-Sector'].received_values.find(\n (item: EquityTouchDatabaseMatch | SelectOption) =>\n (item as EquityTouchDatabaseMatch).text === formData['Sub-Sector']\n );\n\n if (findSubSectorId) {\n value = (findSubSectorId as EquityTouchDatabaseMatch).itemId;\n } else {\n value = '';\n }\n }\n\n jsonForm[formKey] = {\n fieldId: initialFormData!['Sub-Sector'].fieldId,\n fieldTypeId: initialFormData!['Sub-Sector'].fieldTypeId,\n value: Number(value) || '',\n };\n } else if (formKey === 'Product Category') {\n let value;\n\n if (typeof formData[formKey] === 'string') {\n value = (formData[formKey] as string).replaceAll(', ', ',').split(',') as string[];\n } else {\n value = (formData[formKey] as ProductCategory[]).map(item => item.category);\n }\n\n jsonForm[formKey] = {\n fieldId: initialFormData!['Product Category'].fieldId,\n fieldTypeId: initialFormData!['Product Category'].fieldTypeId,\n value: value || [],\n };\n } else if (formKey === 'addressLine1') {\n jsonForm[formKey] = {\n locTypeId: field.locTypeId,\n locId: field.locId,\n value: (formData[formKey] as string) || '',\n };\n } else if (formKey === 'Company Type') {\n jsonForm[formKey] = {\n value: getFieldValue(formKey, formData, initialFormData),\n };\n } else if (formKey === 'Investors') {\n jsonForm[formKey] = {\n fieldId: field.fieldId,\n fieldTypeId: field.fieldTypeId,\n value: (formData[formKey] && (formData[formKey] as string).toString()) || '',\n };\n } else if (formKey === 'FTEs') {\n jsonForm[formKey] = {\n fieldId: field.fieldId,\n fieldTypeId: field.fieldTypeId,\n value: getFTEsValues(Number(formData[formKey])),\n };\n } else if (formKey === 'Groups') {\n if (formData[formKey] && (formData[formKey] as string[]).length > 0) {\n const value = formData[formKey] as string[];\n\n const selectedDealTeamLead = initialFormData['Deal Team Lead'].received_values.find(\n val => (val as EquityTouchDatabaseMatch).itemId === formData['Deal Team Lead']\n );\n const groups = (selectedDealTeamLead as EquityTouchDatabaseMatch).groups;\n const personid = groups && (groups[0] as EquityTouchDatabaseMatch).personid;\n jsonForm[formKey] = {\n personid,\n groupids:\n (groups as EquityTouchDatabaseMatch[])\n ?.filter(group => !group?.type && value.includes(group.itemId))\n ?.map(value => value.itemId) || [],\n };\n\n const watchlists = (groups as EquityTouchDatabaseMatch[])\n ?.filter(group => !!group?.type && value.includes(group.itemId))\n ?.map(watchlist => ({ id: watchlist.itemId, title: watchlist.text }));\n jsonForm.Watchlists = watchlists || [];\n } else {\n jsonForm[formKey] = '';\n }\n } else if (formKey === 'Equity Check') {\n const value = formData[formKey] as number | null;\n\n jsonForm[formKey] = {\n fieldId: field.fieldId,\n fieldTypeId: field.fieldTypeId,\n value: value ? numberToMillions(value) : '',\n };\n } else if (field.fieldId) {\n jsonForm[formKey] = {\n fieldId: field.fieldId,\n fieldTypeId: field.fieldTypeId,\n value: (formData[formKey] as string) || '',\n };\n } else {\n jsonForm[formKey] = (formData[formKey] as string) || '';\n }\n });\n\n jsonForm['Add-On For'] = {\n fieldId: initialFormData!['Add-On For'].fieldId,\n fieldTypeId: initialFormData!['Add-On For'].fieldTypeId,\n value:\n (formData['Add-On For'] as unknown as SelectOption[])?.map(option => option.label) || [],\n };\n }\n\n return jsonForm;\n};\n\n/**\n * map company properties to equity touch props\n * @param {SelectedCompanies} company company properties\n */\nexport const mapEquityTouchProps = (company: SelectedCompanies) => {\n const {\n city,\n company_name: name,\n country,\n company_description: description,\n sw_website_rank: WWWebsiteRank,\n sw_website_rank_per_country: USWebsiteRank,\n num_employees: employeeCount,\n product_category: category,\n state,\n sub_sector: subSector,\n company_url: url,\n street,\n } = company;\n\n const companyData: Dictionary<\n | string\n | number\n | boolean\n | number[]\n | null\n | string[]\n | SelectOption\n | CompanyUserContact[]\n | ProductCategory[]\n > = {\n City: city === DEFAULT_CELL_VALUE ? '' : city,\n 'Company Name': name,\n Country: country === DEFAULT_CELL_VALUE ? '' : country,\n Description: description,\n 'Website Global Rank': WWWebsiteRank === DEFAULT_CELL_VALUE ? '' : WWWebsiteRank,\n 'Website US Rank': USWebsiteRank === DEFAULT_CELL_VALUE ? '' : USWebsiteRank,\n FTEs: employeeCount?.toString() === DEFAULT_CELL_VALUE ? '' : employeeCount,\n 'Product Category': category,\n State: state === DEFAULT_CELL_VALUE ? '' : state,\n 'Sub-Sector': subSector === DEFAULT_CELL_VALUE ? '' : subSector,\n Website: url ? stripUrlSlashes(url) : '',\n addressLine1: street === DEFAULT_CELL_VALUE ? '' : street,\n };\n\n return companyData;\n};\n\n/**\n * validation for equity touch form\n */\nconst message = 'Field is required!';\n\nexport const equityTouchValidationSchema = yup\n .object()\n .shape<\n Dictionary<\n string | number | boolean | number[] | string[] | null | SelectOption | SelectOption[]\n >\n >(\n {\n 'Company Name': yup.string().required(message),\n 'Company Type': yup.string().required(message),\n Rank: yup.string().required(message),\n Fund: yup.string().required(message),\n Sector: yup.string().required(message),\n Rationale: yup.string().max(500, 'Maximum 500 characters'),\n 'Add-On For': yup.array<SelectOption>().when('Add-On', {\n is: addon => addon,\n then: yup.array<SelectOption>().required(message),\n otherwise: yup.array<SelectOption>().nullable(),\n }),\n 'Add-On': yup.bool().when('Add-On For', {\n is: addonFor => addonFor === undefined || addonFor?.length === 0,\n then: yup.bool(),\n otherwise: yup.bool().oneOf([true], message).required(message),\n }),\n },\n [['Add-On For', 'Add-On']]\n );\n\n/** H\n * function to return primary contact in a list of contacts\n * @param {CompanyUserContact[]} contacts list of contacts\n */\nexport const getPrimaryContact = (contacts: EquityTouchContact[]) => {\n let primaryContact: EquityTouchContact | undefined;\n each(contacts, (contact, index) => {\n if (contact.primary_contact) {\n primaryContact = contact;\n\n return false;\n }\n\n return true;\n });\n\n return primaryContact;\n};\n\n/**\n * get the text for the back to grid button for equity touch bulk actions\n * if adding from watchlist or source scrub lists get the name of the list and\n * display it inside the button\n * @param {Dictionary<CompanyWatchList>} userLists watchlists\n * @param {SourceScrubList[]} sourceScrubLists source scrub lists\n */\nexport const getBackButtonText = (\n userLists: Dictionary<CompanyWatchList>,\n sourceScrubLists: SourceScrubList[],\n advancedSearchPathname: string\n) => {\n const parsedUrl = queryString.parseUrl(window.location.href);\n const { query } = parsedUrl;\n const referrer = query.referrer as string;\n\n const btnText = 'Back to ';\n\n if (referrer === advancedSearchPathname) {\n return `${btnText}Advanced Grid`;\n }\n\n if (referrer) {\n const listId = referrer.replace(/^\\D+/g, '');\n\n if (referrer.includes('user-lists')) {\n const list = userLists[listId];\n\n if (list) {\n return btnText + list.title;\n }\n } else if (referrer.includes('ss-lists')) {\n const list = sourceScrubLists.find(list => list.id.toString() === listId);\n\n if (list) {\n return btnText + list.title;\n }\n } else if (referrer.includes('my-companies')) {\n return `${btnText}My Companies`;\n }\n }\n\n return 'Go Back';\n};\n\n/**\n * get grid name\n */\nexport const getGridName: () => SelectedCompaniesGrids | null = () => {\n const { pathname } = window.location;\n\n if (pathname.includes('advancedSearch')) {\n return 'advancedSearch';\n }\n\n if (pathname.includes('companiesOutReach')) {\n return 'outreachDetails';\n }\n\n if (pathname.includes('watchlists')) {\n return 'lists';\n }\n\n if (pathname.includes('myCompanies')) {\n return 'myCompanies';\n }\n\n return null;\n};\n","/**\n * Compute actual page size.\n * @param pageSize page size.\n * @param count count results.\n */\n\n// default value for pageNumber is set for cases where we use getPageSize function\n// for just 1 page like in Equity Touch Integration page, to not break logic for\n// multi-pages grids\nexport const getPageSize = (pageSize: number, count: number, pageNumber: number = 0) => {\n const lastPage = Math.ceil(count / pageSize);\n\n if (pageNumber === lastPage && pageNumber !== 1) {\n const remainingCompanies = count % pageSize;\n\n if (remainingCompanies === 0) {\n return pageSize;\n }\n\n return remainingCompanies;\n }\n\n return pageSize >= count ? count : pageSize;\n};\n","import { LoadingOutlined } from '@ant-design/icons';\nimport styled from 'styled-components';\n\nconst LoadingIcon = styled(LoadingOutlined)`\n font-size: 42px;\n color: #4ce1b6;\n`;\n\nconst Wrapper = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n z-index: 10;\n background: rgba(223, 223, 223, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport default {\n Wrapper,\n LoadingIcon,\n};\n","import React from 'react';\nimport Styled from './LoadingBlock.styled';\n\ninterface LoadingBlockProps {\n loading: boolean;\n}\n\nconst LoadingBlock = ({ loading }: LoadingBlockProps) => {\n if (loading) {\n return (\n <Styled.Wrapper>\n <Styled.LoadingIcon />\n </Styled.Wrapper>\n );\n }\n\n return null;\n};\n\nexport default LoadingBlock;\n","import React from 'react';\nimport styled, { keyframes } from 'styled-components';\n\nimport { LoadIcon32 } from '@optx/components/LoadingIcon';\n\nconst animation = keyframes`\nfrom {\n transform: rotate(0deg) scale(2);\n}\n\nto {\n transform: rotate(360deg) scale(2);\n}\n`;\nconst LoadingWrapper = styled.div`\n height: 46px;\n svg {\n position: absolute;\n top: 45%;\n left: 45%;\n z-index: 1000;\n transform: translate(-50%, -50%);\n animation: linear ${animation} 2s infinite;\n width: 32px;\n height: 32px;\n }\n`;\n\nconst LoadingIcon = () => {\n return (\n <LoadingWrapper>\n <LoadIcon32 />\n </LoadingWrapper>\n );\n};\n\nexport default LoadingIcon;\n","export const FETCH_COGNITO_LOGOUT_URL = 'auth/cognitoLogout/FETCH_COGNITO_LOGOUT_URL';\nexport const FETCH_COGNITO_LOGOUT_URL_SUCCESS =\n 'auth/cognitoLogout/FETCH_COGNITO_LOGOUT_URL_SUCCESS';\nexport const FETCH_COGNITO_LOGOUT_URL_FAIL = 'auth/cognitoLogout/FETCH_COGNITO_LOGOUT_URL_FAIL';\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\n\nexport const fetchCognitoLogoutURL = createAction(types.FETCH_COGNITO_LOGOUT_URL);\n\nexport const fetchCognitoLogoutURLSuccess = createAction<string>(\n types.FETCH_COGNITO_LOGOUT_URL_SUCCESS\n);\n\nexport const fetchCognitoLogoutURLFail = createAction<string>(types.FETCH_COGNITO_LOGOUT_URL_FAIL);\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst selectCognitoLogOut = (state: AppState) => state.auth?.cognitoLogout;\n\nexport const shouldFetchCognitoLogoutURL = createSelector(\n selectCognitoLogOut,\n state => !state.loading && !state.url\n);\n\nexport const loadingCognitoLogoutURL = createSelector(selectCognitoLogOut, state => state.loading);\n\nexport const getCognitoLogoutURL = createSelector(selectCognitoLogOut, state => state && state.url);\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\n\nimport { CognitoLogoutState } from './interfaces';\n\nimport * as actions from './actions';\n\nexport const initialState: CognitoLogoutState = {\n loading: false,\n error: '',\n url: '',\n};\n\nconst cognitoLogOutReducer: CaseReducer<CognitoLogoutState> = draftState => {\n draftState.loading = true;\n draftState.error = '';\n};\n\nconst cognitoLogOutFailReducer: CaseReducer<CognitoLogoutState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n draftState.error = action.payload;\n};\n\nconst cognitoLogOutSuccessReducer: CaseReducer<CognitoLogoutState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n draftState.url = action.payload;\n};\n\nexport default createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchCognitoLogoutURL, cognitoLogOutReducer)\n .addCase(actions.fetchCognitoLogoutURLSuccess, cognitoLogOutSuccessReducer)\n .addCase(actions.fetchCognitoLogoutURLFail, cognitoLogOutFailReducer)\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { FETCH_COGNITO_LOGOUT_URL } from './actionTypes';\nimport { fetchCognitoLogoutURLFail, fetchCognitoLogoutURLSuccess } from './actions';\n// services\nimport { AuthService } from '../../../services/api';\n\nexport function* fetchCognitoLogOutURLSaga() {\n try {\n const res: AxiosResponse<string> = yield call(AuthService.getCognitoLogOutURL);\n\n if (res.data) {\n yield put(fetchCognitoLogoutURLSuccess(res.data));\n } else {\n yield put(fetchCognitoLogoutURLFail('Cognito LogOut URL failure!'));\n }\n } catch (e: any) {\n yield put(fetchCognitoLogoutURLFail('Cognito LogOut URL failure!'));\n }\n}\n\nexport default function* cognitoLogOutSaga() {\n yield takeLatest(FETCH_COGNITO_LOGOUT_URL, fetchCognitoLogOutURLSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { UPDATE_AUTOSAVE_STATUS } from './actionTypes';\n// constants\nimport { AutosaveStatus } from './interfaces';\n\nexport const updateAutosaveStatus = createAction<AutosaveStatus>(UPDATE_AUTOSAVE_STATUS);\n","export const UPDATE_AUTOSAVE_STATUS = 'UPDATE_AUTOSAVE_STATUS';\n","import { memo, useCallback, useEffect, useRef } from 'react';\nimport { FormikContextType, useFormik, useFormikContext } from 'formik';\nimport { useDispatch } from 'react-redux';\n// constants\nimport { SAVE_FREQUENCY_IN_MILLISECONDS } from '@optx/constants/autosave';\n// services\nimport NotificationService from '@optx/services/NotificationService';\n// utils\nimport { getSavedValues, saveValues } from '@optx/storage/localStorage/autoSaveStorage';\n// redux\nimport * as actions from '../state/actions';\n\ninterface AutoSaveProps {\n storageKeyPrefix: string;\n companyId: number;\n loadFromStorage: boolean;\n}\n\ntype FormikType = FormikContextType<any> | ReturnType<typeof useFormik>;\n\nconst useAddTouchAutoSave = (\n formik: FormikType,\n storageKeyPrefix: string,\n companyId: number,\n loadFromStorage: boolean\n): void => {\n const dispatch = useDispatch();\n\n const latestFormik = useRef<FormikType | null>(null);\n\n const { values, setValues, initialValues } = formik;\n const currentValues = JSON.stringify(values);\n\n const handleSave = useCallback(() => {\n if (latestFormik.current) {\n const { values, initialValues } = latestFormik.current;\n const currentValues = JSON.stringify(values);\n const isInitialValues = currentValues === JSON.stringify(initialValues);\n const isDifferentFromSaved = currentValues !== getSavedValues(storageKeyPrefix, companyId);\n\n if (!isInitialValues && isDifferentFromSaved) {\n dispatch(actions.updateAutosaveStatus('saving'));\n saveValues(storageKeyPrefix, companyId, values);\n\n setTimeout(() => {\n dispatch(actions.updateAutosaveStatus('saved'));\n }, 1500);\n }\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentValues, getSavedValues]);\n\n useEffect(() => {\n latestFormik.current = formik;\n }, [formik]);\n\n useEffect(() => {\n const savedValues = getSavedValues(storageKeyPrefix, companyId);\n\n if (savedValues && loadFromStorage) {\n try {\n const persistedValues = JSON.parse(savedValues);\n const newValues = { ...initialValues, ...persistedValues };\n\n if (currentValues !== JSON.stringify(newValues)) {\n setValues(newValues);\n dispatch(actions.updateAutosaveStatus('saved'));\n }\n } catch (error) {\n NotificationService.error('Failed to load autosaved data into the form!');\n }\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getSavedValues]);\n\n /**\n * This hook initializes a timer using `setInterval` to periodically invoke the `handleSave` function,\n * ensuring that data is saved at regular intervals defined by `SAVE_FREQUENCY_IN_MILLISECONDS`.\n *\n * The interval is cleared when the component is unmounted to prevent memory leaks and unnecessary\n * operations after the component is no longer in use.\n */\n useEffect(() => {\n const intervalId = setInterval(() => {\n handleSave();\n }, SAVE_FREQUENCY_IN_MILLISECONDS);\n\n // Cleanup function to clear the interval on component unmount\n return () => {\n clearInterval(intervalId);\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n};\n\nconst AutoSave: React.FC<AutoSaveProps> = ({\n storageKeyPrefix,\n companyId,\n loadFromStorage = true,\n}) => {\n const formik = useFormikContext();\n\n useAddTouchAutoSave(formik, storageKeyPrefix, companyId, loadFromStorage);\n\n return null;\n};\n\nexport default memo(AutoSave);\n","export const featureName = 'local-storage-autosave';\n","import { createSelector } from 'reselect';\nimport { LocalStorageAutosaveState } from './interfaces';\nimport { featureName } from '../featureName';\n\nconst selectAutosaveState = (state: any) => state[featureName] as LocalStorageAutosaveState;\n\nexport const getAutosaveStatus = createSelector(selectAutosaveState, state => state.status);\n","import styled from 'styled-components';\nimport { useSelector } from 'react-redux';\n// redux\nimport * as selectors from '../state/selectors';\n// components\nimport Icon from '@optx/components/common/Icon';\n\nconst StyledStatusWrapper = styled.span`\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: 16px;\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes fadeOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n }\n\n .fade-out {\n animation: fadeOut 1.2s ease-out forwards;\n animation-delay: 0.8s;\n }\n\n .fade-in {\n animation: fadeIn 1.2s;\n }\n\n .fade-in-fade-out {\n animation: fadeIn 1.2s forwards, fadeOut 0.5s 1.2s forwards;\n }\n`;\n\nconst AutoSaveStatus = () => {\n const autosaveStatus = useSelector(selectors.getAutosaveStatus);\n\n const iconStyle: React.CSSProperties = { fontSize: 16 };\n const textStyle: React.CSSProperties = { fontWeight: 600, color: '#595959' };\n\n if (autosaveStatus === 'none') {\n return null;\n }\n\n return (\n <StyledStatusWrapper>\n {autosaveStatus === 'saved' && (\n <>\n <Icon className=\"fade-in\" iconName=\"autosave-saved\" style={iconStyle} />\n <span className=\"fade-in-fade-out\" style={textStyle}>\n Saved\n </span>\n </>\n )}\n {autosaveStatus === 'saving' && (\n <>\n <Icon className=\"fade-in\" iconName=\"autosave-saving\" style={iconStyle} />\n <span className=\"fade-in\" style={textStyle}>\n Saving...\n </span>\n </>\n )}\n </StyledStatusWrapper>\n );\n};\n\nexport default AutoSaveStatus;\n","import styled from 'styled-components';\n\ninterface FormErrorMaskProps {\n $isChromeExtension: boolean;\n}\n\nconst FormErrorMask = styled.div<FormErrorMaskProps>`\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1001; // index of antd's Drawer is 1000\n\n display: flex;\n flex-direction: column;\n\n width: ${props => (props.$isChromeExtension ? '640px' : '735px')};\n height: ${props => (props.$isChromeExtension ? 'calc(100% - 60px)' : '100%')};\n margin-top: ${props => (props.$isChromeExtension ? '60px' : '0')};\n background: rgba(255, 255, 255, 0.9);\n\n div {\n padding: 40px;\n margin: 180px auto 0;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n\n svg {\n margin-bottom: 12px;\n }\n\n p,\n button {\n display: block;\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n line-height: 24px;\n }\n }\n`;\n\nexport const Styled = {\n FormErrorMask,\n};\n","import React from 'react';\nimport { Button } from 'antd';\n// components\nimport Icon from '@optx/components/common/Icon';\nimport { Styled } from './FormErrorMask.styled';\n\ninterface FormErrorMaskProps {\n isChromeExtension: boolean;\n}\n\nconst FormErrorMask: React.FC<FormErrorMaskProps> = ({ isChromeExtension }) => {\n return (\n <Styled.FormErrorMask $isChromeExtension={!!isChromeExtension}>\n <div>\n <Icon iconName=\"autosave-refresh\" style={{ fontSize: 50 }} />\n <p>Sorry, something is not right.</p>\n <Button\n type=\"link\"\n onClick={event => {\n event.preventDefault();\n window.location.reload();\n }}\n >\n Please try refreshing the page.\n </Button>\n </div>\n </Styled.FormErrorMask>\n );\n};\n\nexport default FormErrorMask;\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { AutosaveStatus, LocalStorageAutosaveState } from './interfaces';\n// redux\nimport * as actions from './actions';\n\nconst initialState: LocalStorageAutosaveState = {\n status: 'none',\n};\n\nconst updateAutosaveStatusReducer: CaseReducer<\n LocalStorageAutosaveState,\n PayloadAction<AutosaveStatus>\n> = (draftState, action) => {\n draftState.status = action.payload;\n};\n\nexport default createReducer(initialState, builder =>\n builder.addCase(actions.updateAutosaveStatus, updateAutosaveStatusReducer)\n);\n","import { useInjectReducer } from 'redux-injectors';\n// local\nimport { reducer } from './state';\nimport { featureName } from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n};\n\nexport default useInject;\n","// generic selectors for saved searches\nimport { Dictionary, reduce } from 'lodash';\nimport { SearchSave } from '@optx/models/search';\nimport { ContactsSavedSearchesState } from './interfaces';\n\nexport const getSavedSearchesSelector = (state: ContactsSavedSearchesState) => {\n const { allIds, byId } = state;\n\n return allIds.map(id => byId[id]);\n};\n\nexport const getAllViewsSelector = (state: ContactsSavedSearchesState) => {\n const { viewIds, views } = state;\n\n if (Object.keys(views).length) {\n return viewIds.map(id => views[id]);\n }\n\n return [];\n};\n\nexport const getTitlesSelector = (state: ContactsSavedSearchesState) => {\n const { byId } = state;\n\n return reduce<Dictionary<SearchSave>, Dictionary<boolean>>(\n byId,\n (acumulator, item) => {\n const newAcumulator = acumulator;\n newAcumulator[item.title] = true;\n\n return newAcumulator;\n },\n {}\n );\n};\n","import { EditAllTabsProps } from '@optx/models/company/CompanyEditAll';\nimport { EditAllInfoKeys } from '../state/interfaces';\nimport { EditAllInfoForm } from '@optx/models/api/editAllInfo';\n\n// Define an array to store the edit all tabs\nexport const EDIT_ALL_TABS: Array<EditAllTabsProps> = [\n {\n name: 'All FIELDS',\n key: 'editAllFieldsTab',\n title: 'All Fields',\n hasSearch: true,\n },\n {\n name: 'EQT VIEW',\n key: 'eqtViewTab',\n title: 'Equity Touch Ordering',\n },\n {\n name: 'PROPRIETARY INFO',\n key: 'proprietaryFieldsTab',\n title: 'Proprietary Info',\n },\n {\n name: 'GRID ORDER',\n key: 'gridOrderTab',\n title: 'Grid Order',\n },\n {\n name: 'ID INFO',\n key: 'editIdInfoTab',\n title: 'Identifying Information',\n },\n {\n name: 'FAVORITES',\n key: 'favoritesTab',\n title: 'Favorites',\n },\n];\n\nexport const COMPANY_ALL_INFO_KEYS: EditAllInfoKeys[] = [\n 'company_id',\n 'company_owner',\n 'owner_img',\n 'company_name',\n 'company_url',\n 'logo_url',\n 'is_in_et',\n 'location',\n 'year_founded',\n 'company_owner_id',\n 'stage',\n 'contacts',\n 'pipeline_rank',\n 'source_tag',\n];\n\nexport const EDIT_ALL_INFO_FORM: EditAllInfoForm = {\n companyId: '',\n annual_recurring_revenue: [],\n revenue: [],\n gm: [],\n ebitda: [],\n revenue_model: [],\n revenue_by_country: '',\n cashflow: '',\n financial_notes: '',\n other_notes: '',\n capital_raised: '',\n cap_table: '',\n last_round_date: '',\n last_round: undefined,\n last_round_amount: undefined,\n acquiring_company: '',\n banker: undefined,\n banker_name: '',\n asking_amount: '',\n deal_type: '',\n equity_check: '',\n next_steps: '',\n transaction_notes: '',\n customers_number: undefined,\n customer_type: [],\n sales_and_marketing: '',\n sales_cycle: [],\n acv: '',\n clt: '',\n nps: '',\n net_retention: undefined,\n gross_retention: undefined,\n customer_churn: '',\n customer_concentration: '',\n cac: '',\n ltv_cac: '',\n delivery_model: [],\n cloud_provider: [],\n architecture: [],\n technology_notes: '',\n primary_contact: undefined,\n product_category: [],\n sub_sector: undefined,\n num_employees: undefined,\n competitors: [],\n fte_location: '',\n sub_vertical: [],\n addon_bool: false,\n addon: null,\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport * as models from '@optx/models/Notes';\nimport * as types from './types';\nimport { ProfileNotes } from './interfaces';\n\n// get notes for profile page\nexport const fetchProfileNotes = createAction<models.FetchNote>(types.FETCH_PROFILE_NOTES);\n\nexport const fetchProfileNotesSuccess = createAction<{\n data: ProfileNotes;\n sorting: models.noteSorting;\n}>(types.FETCH_PROFILE_NOTES_SUCCESS);\n\nexport const fetchProfileNotesFail = createAction<string>(types.FETCH_PROFILE_NOTES_FAIL);\n\nexport const pinNote = createAction(\n types.PIN_NOTE,\n (note: models.PinNote, callback: (companyid: number) => void) => ({ payload: note, callback })\n);\n\nexport const editNote = createAction<models.EditNote>(types.EDIT_PROFILE_NOTE);\nexport const editNoteSuccess = createAction<models.EditNote>(types.EDIT_PROFILE_NOTE_SUCCESS);\n\nexport const deleteProfileNote = createAction<{ companyId: number; pinId: number }>(\n types.DELETE_PROFILE_NOTE\n);\nexport const deleteProfileNoteFail = createAction<string>(types.DELETE_PROFILE_NOTE_FAIL);\n","export const FETCH_PROFILE_NOTES = 'FETCH_PROFILE_NOTES';\nexport const FETCH_PROFILE_NOTES_SUCCESS = 'FETCH_PROFILE_NOTES_SUCCESS';\nexport const FETCH_PROFILE_NOTES_FAIL = 'FETCH_PROFILE_NOTES_FAIL';\n\nexport const PIN_NOTE = 'PIN_NOTE';\n\nexport const EDIT_PROFILE_NOTE = 'EDIT_PROFILE_NOTE';\nexport const EDIT_PROFILE_NOTE_SUCCESS = 'EDIT_PROFILE_NOTE_SUCCESS';\n\nexport const DELETE_PROFILE_NOTE = 'DELETE_PROFILE_NOTE';\nexport const DELETE_PROFILE_NOTE_FAIL = 'DELETE_PROFILE_NOTE_FAIL';\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst selectProfileNotes = (state: AppState) => state.notes.profileNotes;\n\nexport const isLoading = createSelector(selectProfileNotes, state => state.loading);\n\nexport const getProfileNotes = createSelector(selectProfileNotes, state => state.data);\n\nexport const getSorting = createSelector(selectProfileNotes, state => state.sorting);\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport * as models from '@optx/models/Notes';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\n// services\nimport { CompanyService } from '../../../../services/api';\nimport NotificationService from '../../../../services/NotificationService';\nimport { ProfileNotes } from './interfaces';\n\nexport function* fetchProfileNotesSaga(action: PayloadAction<models.FetchNote>) {\n try {\n const res: AxiosResponse<ProfileNotes> = yield call(\n CompanyService.getProfileNotes,\n action.payload\n );\n\n if (res.data) {\n yield put(\n actions.fetchProfileNotesSuccess({ data: res.data, sorting: action.payload.sorting })\n );\n } else {\n const errorMessage = 'Failed to get notes';\n yield put(actions.fetchProfileNotesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Failed to get notes';\n yield put(actions.fetchProfileNotesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* editNoteSaga(action: PayloadAction<models.EditNote>) {\n try {\n // @ts-ignore\n const res = yield call(CompanyService.editNote, action.payload);\n\n if (res.data) {\n yield put(actions.editNoteSuccess(action.payload));\n }\n } catch (e: any) {\n const errorMessage = 'Failed to edit note';\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* pinNoteSaga(action: PayloadAction<models.PinNote>) {\n try {\n // @ts-ignore\n const res = yield call(CompanyService.pinNote, action.payload);\n\n if (res.data) {\n const { companyId } = action.payload;\n const sorting: models.noteSorting = yield select(selectors.getSorting);\n yield put(actions.fetchProfileNotes({ companyId, sorting }));\n } else {\n const errorMessage = 'Failed to pin note';\n yield put(actions.fetchProfileNotesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Failed to pin note';\n yield put(actions.fetchProfileNotesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* deleteProfileNoteSaga(\n action: PayloadAction<{ companyId: number; pinId: number }>\n) {\n try {\n const { companyId, pinId } = action.payload;\n const res: AxiosResponse<number> = yield call(CompanyService.deleteProfileNote, pinId);\n\n if (res.data) {\n const sorting: models.noteSorting = yield select(selectors.getSorting);\n yield put(actions.fetchProfileNotes({ companyId, sorting }));\n } else {\n const errorMessage = 'Failed to delete note';\n yield put(actions.fetchProfileNotesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Failed to delete note';\n yield put(actions.fetchProfileNotesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* profileNotesSaga() {\n yield takeLatest(actions.fetchProfileNotes, fetchProfileNotesSaga);\n yield takeLatest(actions.editNote, editNoteSaga);\n yield takeLatest(actions.pinNote, pinNoteSaga);\n yield takeLatest(actions.deleteProfileNote, deleteProfileNoteSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport * as models from '@optx/models/Notes';\nimport * as actions from './actions';\nimport { ProfileNotes, ProfileNotesState } from './interfaces';\nimport { fetchReducer, fetchFailReducer } from '../../../feature/fetch/reducers';\n\nconst initialState: ProfileNotesState = {\n loading: false,\n error: '',\n data: {\n pinned_notes: [],\n unpinned_notes: [],\n },\n sorting: 'desc',\n};\n\nconst fetchProfileNotesSuccessReducer: CaseReducer<\n ProfileNotesState,\n PayloadAction<{\n data: ProfileNotes;\n sorting: models.noteSorting;\n }>\n> = (draftState, action) => {\n draftState.data = action.payload.data;\n draftState.sorting = action.payload.sorting;\n draftState.loading = true;\n draftState.error = '';\n};\n\nconst editNoteSuccessReducer: CaseReducer<ProfileNotesState, PayloadAction<models.EditNote>> = (\n draftState,\n action\n) => {\n const { pinId, newText, isPinned } = action.payload;\n const notes = isPinned ? draftState.data.pinned_notes : draftState.data.unpinned_notes;\n const index = notes.findIndex(note => note.pin_id === pinId);\n\n if (index !== -1) {\n if (isPinned) {\n draftState.data.pinned_notes[index].note_text = newText;\n } else {\n draftState.data.unpinned_notes[index].note_text = newText;\n }\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // fetch opportunity presentation\n .addCase(actions.fetchProfileNotes, fetchReducer)\n .addCase(actions.fetchProfileNotesSuccess, fetchProfileNotesSuccessReducer)\n .addCase(actions.fetchProfileNotesFail, fetchFailReducer)\n // update store with new and edited note\n .addCase(actions.editNoteSuccess, editNoteSuccessReducer)\n // delete note\n .addCase(actions.deleteProfileNote, fetchReducer)\n .addCase(actions.deleteProfileNoteFail, fetchFailReducer)\n);\n\nexport default reducer;\n","import { AppState } from '@optx/redux/interfaces';\nimport { createSelector } from 'reselect';\n\nconst activeState = (state: AppState) => state.companyActive;\n\nexport const isLoading = createSelector(activeState, state => state.loading);\nexport const getCurrentCompany = createSelector(activeState, state => state.companyId);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport * as actions from './actions';\nimport { CompanyActivePayload, CompanyActiveState, CompanyActiveResponse } from './interfaces';\n\nconst initialState: CompanyActiveState = {\n companyId: null,\n error: '',\n loading: false,\n};\n\nconst addCompanyActiveReducer: CaseReducer<\n CompanyActiveState,\n PayloadAction<CompanyActivePayload>\n> = (draftState, action) => {\n draftState.companyId = action.payload.companyId;\n draftState.loading = true;\n draftState.error = '';\n};\n\nconst addCompanyActiveSuccessReducer: CaseReducer<\n CompanyActiveState,\n PayloadAction<CompanyActiveResponse>\n> = (draftState, action) => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addCompanyActive, addCompanyActiveReducer)\n .addCase(actions.addCompanyActiveSuccess, addCompanyActiveSuccessReducer)\n .addCase(actions.addCompanyActiveFail, fetchFailReducer)\n);\n\nexport default reducer;\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, put, takeLatest, select } from 'redux-saga/effects';\n// mdoels\nimport { RationaleSoftwareResponse } from '@optx/models/score';\nimport { APIBoolean } from '@optx/models/api/generic';\n// services\nimport { UserService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\nimport { getErrorMessage } from '@utils/api/errors';\nimport { AxiosResponse } from 'axios';\n//utils\nimport { mapCompanyInfoData } from '@optx/utils/company';\n// redux\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport {\n actions as auditActions,\n selectors as auditSelectors,\n} from '@features/company/audit-trail/state';\nimport { UpdateFieldsPayload } from '@optx/features/company/edit-fields/state/interfaces';\nimport * as actions from './actions';\nimport { CompanyActivePayload } from './interfaces';\n\nexport function* addInBusinessEvaluationSaga(action: PayloadAction<CompanyActivePayload>) {\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n const { companyId, active, isFromHistory } = action.payload;\n\n const payload: UpdateFieldsPayload = {\n companyId,\n value: active,\n };\n\n const customPayload = mapCompanyInfoData({\n data: payload,\n fieldName: 'Active on Pipeline',\n });\n\n try {\n const res: AxiosResponse<RationaleSoftwareResponse> = yield call(\n UserService.updateCompanyUserValues,\n customPayload as unknown as UpdateFieldsPayload\n );\n\n if (res.data) {\n yield put(actions.addCompanyActiveSuccess({ active, companyId }));\n\n if (isFromHistory) {\n const { pageSize } = yield select(auditSelectors.getPagination);\n const field: string = yield select(auditSelectors.getSearchQuery);\n const optx: APIBoolean = yield select(auditSelectors.getOPTX);\n const internal: APIBoolean = yield select(auditSelectors.getInternal);\n const startDate: string = yield select(auditSelectors.getStartDate);\n const endDate: string = yield select(auditSelectors.getEndDate);\n\n yield put(\n auditActions.fetchChangedCompanyFields({\n companyId,\n pagination: {\n pageNumber: 1,\n pageSize,\n },\n field,\n internal,\n optx,\n startDate,\n endDate,\n })\n );\n }\n\n NotificationService.success('Company active state updated successfully!');\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to update company active state!');\n yield put(actions.addCompanyActiveFail(errorMessage));\n NotificationService.error(errorMessage);\n } finally {\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n}\n\nexport default function* inBusinessEvaluationSaga() {\n yield takeLatest(actions.addCompanyActive, addInBusinessEvaluationSaga);\n}\n","import { Progress } from 'antd';\nimport styled from 'styled-components';\n\nconst Wrapper = styled.div`\n margin: 0 0 20px;\n`;\n\nconst Title = styled.div`\n font-style: normal;\n font-weight: 600;\n font-size: 12px;\n line-height: 20px;\n /* Dark BLue */\n color: #334d6e;\n opacity: 0.8;\n font-family: 'Lato', sans-serif;\n`;\n\nconst MainStatValue = styled.div`\n font-style: normal;\n font-weight: 600;\n font-size: 16px;\n line-height: 24px;\n /* Daybreak Blue / blue-6 */\n color: #1890ff;\n opacity: 0.8;\n`;\n\nconst ComparedValue = styled.div`\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 20px;\n /* Gray */\n color: #90a0b7;\n opacity: 0.8;\n`;\n\nconst StyledPropgress = styled(Progress)`\n display: block;\n line-height: 1;\n margin: 0 0 4px;\n\n &.ant-progress-line {\n font-size: 4px;\n\n .ant-progress-bg {\n /* Height is set directly on element and can't be overriden otherwise. */\n height: 4px !important;\n }\n }\n`;\n\nconst MainStatProgress = styled(StyledPropgress)`\n .ant-progress-bg {\n /* Daybreak Blue / blue-6 */\n background-color: #1890ff;\n }\n`;\n\nconst ComparedProgress = styled(StyledPropgress)`\n .ant-progress-bg {\n /* Gray */\n background-color: #90a0b7;\n }\n`;\n\nconst Styles = {\n Wrapper,\n Title,\n MainStatValue,\n MainStatProgress,\n ComparedValue,\n ComparedProgress,\n};\n\nexport default Styles;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { ButtonProps } from 'antd/lib/button';\nimport { Button } from 'antd';\n// utils\nimport { getLocationMainGridKey } from '@optx/utils/grid';\n// redux\nimport { selectors as searchSelectors } from '@features/grid/search';\n// components\nimport styled from 'styled-components';\n\nconst StyledCancelSearchButton = styled(Button)`\n &&& {\n position: fixed;\n top: 60%;\n left: 50%;\n transform: translateX(-50%);\n z-index: 2000;\n }\n`;\n\nconst CancelSearchButton: React.FC<ButtonProps> = ({ children, ...restProps }) => {\n const gridKey = getLocationMainGridKey();\n\n const cancelSearch = useSelector(\n searchSelectors.isCancelled(gridKey ? gridKey : 'advancedSearch')\n );\n\n return (\n <StyledCancelSearchButton type=\"primary\" {...restProps} disabled={cancelSearch}>\n {cancelSearch ? 'Canceling' : children}\n </StyledCancelSearchButton>\n );\n};\n\nCancelSearchButton.defaultProps = {\n children: 'Cancel Search',\n};\nexport default CancelSearchButton;\n","import React from 'react';\nimport FixedLoader from './FixedLoader';\nimport { LoadIcon32 } from '../../LoadingIcon';\nimport CancelSearchButton from '../buttons/CancelSearchButton';\n\ninterface FixedLoaderProps {\n loading?: boolean;\n showCancel?: boolean;\n onCancel: VoidFunction;\n}\n\nconst FixedLoaderWithCancel: React.FC<FixedLoaderProps> = ({ loading, showCancel, onCancel }) => {\n return (\n <FixedLoader loading={loading}>\n <LoadIcon32 />\n {showCancel && <CancelSearchButton onClick={onCancel} />}\n </FixedLoader>\n );\n};\n\nexport default FixedLoaderWithCancel;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Tooltip } from 'antd';\nimport { useSelector } from 'react-redux';\n// styles\nimport './styles.scss';\n// models\nimport { CompanyCompetitor } from '@optx/models/Company';\n// constants\nimport { CompanyPageOverviewPendo } from '@optx/constants/pendoActions';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\n// utils\nimport { getCompanyProfileURL } from '../../../../utils/routes';\n// components\nimport { CompanyAvatar } from '../../avatar';\nimport { ScoreTrending } from '../../trending';\nimport { OpenInNewTabHover } from '../../link';\n\ninterface CompetitorCardProps {\n competitor: CompanyCompetitor;\n to: string;\n}\n\nconst CompetitorCard: React.FC<CompetitorCardProps> = ({ competitor, to }) => {\n const profileURL = getCompanyProfileURL(competitor.company_id);\n const defaultOptxScore = useSelector(userSelectors.getDefaultScore);\n\n const isPSGCompany = competitor.is_psg_company;\n\n return (\n <div className=\"media-object competitor-card\">\n <div className=\"media-object-section\">\n <CompanyAvatar companyName={competitor.company_name} logoUrl={competitor.logo_url} />\n </div>\n <div className=\"media-object-section text-ellipsis\" style={{ flex: 1 }}>\n <OpenInNewTabHover url={profileURL}>\n <Tooltip title={competitor.company_name || undefined}>\n <Link\n className=\"competitor-card__name text-ellipsis\"\n to={profileURL}\n onClick={() =>\n window.pendo.track(CompanyPageOverviewPendo.similarCompanies_profileLink)\n }\n >\n {competitor.company_name}\n </Link>\n </Tooltip>\n </OpenInNewTabHover>\n <a href={to} target=\"_blank\" rel=\"noreferrer\" className=\"competitor-card__link\">\n {competitor.raw_url}\n </a>\n </div>\n <div className=\"media-object-section score-trending-wrapper\">\n {isPSGCompany ? (\n <span className=\"is-psg-company\">PSG</span>\n ) : (\n <ScoreTrending\n growth={\n defaultOptxScore === 'il'\n ? competitor.il_optx_score_growth\n : competitor.optx_score_growth\n }\n label={defaultOptxScore === 'il' ? 'IL OPTX SCORE' : 'OPTX SCORE'}\n score={defaultOptxScore === 'il' ? competitor.il_optx_score : competitor.score}\n customFontSize=\"16px\"\n />\n )}\n </div>\n </div>\n );\n};\n\nCompetitorCard.defaultProps = {\n to: '#',\n};\n\nexport default CompetitorCard;\n","/* eslint max-len: 0 */\nimport React from 'react';\nimport classnames from 'classnames';\n\ninterface IconProps extends React.SVGProps<SVGElement> {}\n\nconst Camera: React.FC<IconProps> = ({ className }) => {\n return (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 32 32\"\n className={classnames('icon icon-camera', className)}\n >\n <title>camera</title>\n <path d=\"M9.5 19c0 3.59 2.91 6.5 6.5 6.5s6.5-2.91 6.5-6.5-2.91-6.5-6.5-6.5-6.5 2.91-6.5 6.5zM30 8h-7c-0.5-2-1-4-3-4h-8c-2 0-2.5 2-3 4h-7c-1.1 0-2 0.9-2 2v18c0 1.1 0.9 2 2 2h28c1.1 0 2-0.9 2-2v-18c0-1.1-0.9-2-2-2zM16 27.875c-4.902 0-8.875-3.973-8.875-8.875s3.973-8.875 8.875-8.875c4.902 0 8.875 3.973 8.875 8.875s-3.973 8.875-8.875 8.875zM30 14h-4v-2h4v2z\" />\n </svg>\n );\n};\n\nexport { Camera };\n\nexport const ThumbsUp: React.FC<IconProps> = () => {\n return (\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n data-prefix=\"fas\"\n data-icon=\"thumbs-up\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 8500 11000\"\n width=\"20px\"\n height=\"20px\"\n >\n <path d=\"M7727 8644l-1133 0c-520,598 -1085,1036 -1692,1313 -191,16 -334,24 -425,24 -259,0 -552,-47 -881,-138l-272 138 -326 0c-744,0 -1117,-267 -1117,-798 0,-31 5,-75 15,-138 -546,-44 -821,-305 -821,-780 0,-51 5,-121 15,-212 -202,-57 -355,-148 -458,-275 -104,-124 -156,-285 -156,-477 0,-155 55,-324 166,-500 -272,-293 -409,-619 -409,-979 0,-415 225,-749 676,-1003 451,-251 1047,-378 1791,-378l189 0c-60,-456 -200,-897 -417,-1322l-122 -212c-262,-501 -394,-889 -394,-1161 0,-754 396,-1226 1192,-1413l220 -54 381 1687 1405 1495c96,112 261,327 500,645l212 280c228,309 389,498 482,565 94,70 244,104 451,104l889 0c272,580 409,1179 409,1790 0,596 -124,1198 -370,1799zm-252 -394c159,-461 236,-902 236,-1322 0,-495 -85,-982 -259,-1464 -637,0 -1036,-39 -1197,-114 -163,-75 -407,-342 -731,-798 -129,-176 -326,-428 -583,-749l-1526 -1625 -303 -1407c-508,174 -762,498 -762,975 0,246 85,515 259,803l98 168c397,659 594,1286 594,1884l8 213 -275 0c-803,0 -1410,80 -1814,238 -407,161 -609,402 -609,726 0,293 106,541 316,743 210,203 467,304 770,304l464 5 1376 -620c-208,-313 -487,-471 -837,-471 -91,0 -208,21 -348,59 -142,42 -308,104 -502,184l-358 16 -357 -381 616 -8c179,-75 340,-132 487,-166 146,-36 280,-54 402,-54 648,0 1122,329 1420,987l-259 122c319,156 565,430 738,819l-298 127c234,148 449,399 646,751l-469 221c256,189 464,453 622,798l-933 417c150,31 280,47 386,47l295 -8c674,-389 1221,-863 1641,-1420l1046 0zm-3462 -1101c-176,-236 -388,-389 -637,-454l-1132 508 -402 0c-381,0 -669,-54 -866,-161 -64,91 -98,179 -98,259 0,156 78,272 231,353 155,78 386,116 694,116l806 0 1404 -621zm319 888c-23,-31 -44,-57 -59,-77 -122,-140 -267,-252 -433,-332l-1164 516 -1228 -8 -23 98c0,298 295,449 889,449l570 0 1448 -646zm161 1024c-36,-44 -62,-80 -83,-106 -96,-138 -218,-259 -365,-371l-1086 485 -700 0 0 46c0,340 246,508 739,508l248 0 1247 -562z\" />\n </svg>\n );\n};\n\nexport const ThumbsDown: React.FC<IconProps> = () => {\n return (\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n data-prefix=\"fas\"\n data-icon=\"thumbs-down\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 8500 11000\"\n width=\"20px\"\n height=\"20px\"\n >\n <path d=\"M824 2025l1133 0c520,-598 1085,-1036 1692,-1314 191,-15 334,-23 425,-23 259,0 552,47 881,137l272 -137 326 0c744,0 1117,267 1117,798 0,31 -5,75 -15,138 546,44 821,305 821,780 0,51 -5,121 -16,212 203,57 355,148 459,275 104,124 156,285 156,477 0,155 -55,323 -166,500 272,292 409,619 409,979 0,415 -225,749 -676,1003 -451,251 -1047,378 -1791,378l-189 0c60,456 200,897 417,1322l122 212c262,501 394,889 394,1161 0,754 -396,1226 -1192,1413l-220 54 -381 -1687 -1405 -1495c-96,-112 -261,-327 -500,-645l-212 -280c-228,-309 -389,-498 -482,-565 -94,-70 -244,-104 -451,-104l-889 0c-272,-580 -409,-1179 -409,-1790 0,-596 124,-1198 370,-1799zm252 394c-159,461 -236,902 -236,1322 0,495 85,982 259,1464 637,0 1036,39 1197,114 163,75 407,342 731,795 129,179 326,431 583,752l1526 1625 303 1404c508,-171 762,-495 762,-972 0,-246 -85,-515 -259,-803l-98 -168c-397,-659 -594,-1286 -594,-1884l-8 -213 275 0c803,0 1410,-80 1814,-238 407,-161 609,-402 609,-726 0,-293 -106,-541 -316,-743 -210,-203 -467,-304 -770,-304l-464 -5 -1376 620c208,313 487,471 837,471 91,0 208,-21 348,-59 142,-42 308,-104 502,-184l358 -16 357 381 -616 8c-179,75 -340,132 -487,166 -146,36 -280,54 -402,54 -648,0 -1122,-329 -1420,-987l259 -122c-319,-156 -565,-430 -736,-819l295 -127c-233,-148 -448,-399 -645,-754l469 -218c-256,-189 -464,-453 -622,-798l933 -417c-150,-31 -280,-47 -386,-47l-295 8c-674,389 -1221,863 -1641,1420l-1046 0zm3461 1101c177,236 389,387 638,454l1132 -508 402 0c381,0 669,54 865,161 65,-91 99,-179 99,-259 0,-156 -78,-273 -231,-353 -155,-78 -386,-116 -694,-116l-806 0 -1405 621zm-318 -888c23,31 44,57 59,75 122,142 267,254 433,334l1164 -516 1228 8 23 -98c0,-298 -295,-449 -889,-449l-570 0 -1448 646zm-161 -1024c36,44 62,80 83,106 96,138 218,259 365,371l1086 -485 700 0 0 -46c0,-340 -246,-508 -739,-508l-248 0 -1247 562z\" />\n </svg>\n );\n};\n\nconst IconTwitter: React.FC<IconProps> = ({ className }) => (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 32 32\"\n className={classnames('icon-twitter', className)}\n >\n <path d=\"M32 7.075c-1.175 0.525-2.444 0.875-3.769 1.031 1.356-0.813 2.394-2.1 2.887-3.631-1.269 0.75-2.675 1.3-4.169 1.594-1.2-1.275-2.906-2.069-4.794-2.069-3.625 0-6.563 2.938-6.563 6.563 0 0.512 0.056 1.012 0.169 1.494-5.456-0.275-10.294-2.888-13.531-6.862-0.563 0.969-0.887 2.1-0.887 3.3 0 2.275 1.156 4.287 2.919 5.463-1.075-0.031-2.087-0.331-2.975-0.819 0 0.025 0 0.056 0 0.081 0 3.181 2.263 5.838 5.269 6.437-0.55 0.15-1.131 0.231-1.731 0.231-0.425 0-0.831-0.044-1.237-0.119 0.838 2.606 3.263 4.506 6.131 4.563-2.25 1.762-5.075 2.813-8.156 2.813-0.531 0-1.050-0.031-1.569-0.094 2.913 1.869 6.362 2.95 10.069 2.95 12.075 0 18.681-10.006 18.681-18.681 0-0.287-0.006-0.569-0.019-0.85 1.281-0.919 2.394-2.075 3.275-3.394z\" />\n </svg>\n);\n\nexport { IconTwitter };\n\nconst IconStart: React.FC<IconProps> = ({ fill, stroke }) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path\n fill={fill}\n fillOpacity=\"1\"\n fillRule=\"evenodd\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n d=\"M12 18.01l-3.423 1.767c-.965.498-2.16.134-2.667-.814a1.908 1.908 0 0 1-.198-1.23l.653-3.743-2.769-2.65a1.914 1.914 0 0 1-.035-2.742c.303-.306.7-.504 1.13-.566l3.827-.546 1.711-3.405c.483-.96 1.667-1.354 2.645-.88.39.188.705.498.897.88l1.711 3.405 3.827.546c1.08.154 1.827 1.138 1.67 2.198a1.927 1.927 0 0 1-.576 1.11l-2.769 2.65.654 3.743c.184 1.055-.538 2.058-1.613 2.239a2.007 2.007 0 0 1-1.252-.195L12 18.01z\"\n />\n </svg>\n );\n};\n\nIconStart.defaultProps = {\n fill: 'none',\n stroke: '#B8BFCB',\n};\n\ninterface IconBellProps extends React.SVGProps<SVGElement> {\n size?: string;\n}\n\nconst IconBell: React.FC<IconBellProps> = ({ fill, size }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <desc>Created with sketchtool.</desc>\n <g id=\"Symbols\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g\n id=\"icn/favorite-default\"\n transform=\"translate(-6.000000, -6.000000)\"\n fill={fill}\n fillRule=\"nonzero\"\n >\n <g id=\"Group-5\">\n <g id=\"notification_ico\" transform=\"translate(6.000000, 6.000000)\">\n <path\n d=\"M16.0711554,7.96507 C16.0711554,5.00467288 13.8822416,2.55431411 11.0114798,2.08054064 L11.0114798,0 L8.98855057,0 L8.98855057,2.08054064 C6.11781911,2.55428424 3.92887498,5.0047625 3.92887498,7.96507 L3.92887498,13.0348749 C3.92531761,14.1329181 3.02175784,15.0208998 1.9047619,15.0208998 L1.9047619,17.0139447 L6.96443749,17.0127776 C6.96443749,18.661575 8.32452127,20 10,20 C11.6754787,20 13.0355625,18.661575 13.0355625,17.0127776 L18.0952381,17.0127776 L18.0952381,15.0220628 C16.9770583,15.0220628 16.071125,14.1305561 16.071125,13.0313479 L16.0711554,7.96507 Z M9.9047619,4 C12.1139009,4 13.9047619,5.790861 13.9047619,8 L13.9047619,15 L5.9047619,15 L5.9047619,8 C5.9047619,5.790861 7.69562291,4 9.9047619,4 Z M8.98858093,17.0126901 L11.0115101,17.0126901 C11.0115101,17.5646392 10.5597274,18.0091976 10.0000607,18.0091976 C9.44033334,18.0091976 8.98858093,17.5646093 8.98858093,17.0126901 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M15,15 L5,15 L5,7.32908265 C5,4.94065125 7.51862061,3 10,3 C12.4827295,3 15,4.9419501 15,7.32908265 L15,15 Z\"\n id=\"Path\"\n opacity=\"0.160505022\"\n />\n <path\n d=\"M2.19207615,7.61904762 C2.19207615,5.53631533 3.1737589,3.65038689 4.76190476,2.28594056 L3.20971183,0.952380952 C1.22710344,2.65827828 0,5.01488979 0,7.61904762 L2.19207615,7.61904762 Z\"\n id=\"Path\"\n />\n <path\n d=\"M20,7.61904762 C20,5.01533166 18.7732186,2.65906346 16.7885654,0.952380952 L15.2380952,2.28684548 C16.8258243,3.65111685 17.8072495,5.53675357 17.8072495,7.61904762 L20,7.61904762 Z\"\n id=\"Path\"\n />\n </g>\n </g>\n </g>\n </g>\n </svg>\n );\n};\n\nIconBell.defaultProps = {\n fill: '#B8BFCB',\n size: '20px',\n};\n\nconst IconCompany: React.FC<IconProps> = ({ width, height }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n style={{\n shapeRendering: 'geometricPrecision',\n textRendering: 'geometricPrecision',\n imageRendering: 'auto',\n }}\n width={width ?? '100px'}\n height={height ?? '100px'}\n viewBox=\"0 0 846.66 1058.325\"\n x=\"0px\"\n y=\"0px\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n >\n <defs />\n <g style={{ transform: 'translate(0, 90px)' }}>\n <path\n fill=\"#000000\"\n d=\"M273.62 313.04l0 -203.72 150.82 -79.54 150.82 79.54 0 202.46 60.3 -34.67 100.04 57.51 0 482.26c-208.18,0 -416.36,0 -624.53,0l0 -482.26 100.05 -57.51 62.5 35.93zm142.58 464.09l0 -698.18 -102.84 54.23 0 643.95 102.84 0zm-204.78 0l0 -454.21 59.98 34.48 0 419.73 -59.98 0zm423.83 0l0 -454.21 -59.99 34.48 0 419.73 59.99 0z\"\n />\n </g>\n <text\n x=\"0\"\n y=\"861.66\"\n fill=\"#000000\"\n fontSize=\"5px\"\n fontWeight=\"bold\"\n fontFamily=\"'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif\"\n >\n Created by wardehpillai\n </text>\n <text\n x=\"0\"\n y=\"866.66\"\n fill=\"#000000\"\n fontSize=\"5px\"\n fontWeight=\"bold\"\n fontFamily=\"'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif\"\n >\n from the Noun Project\n </text>\n </svg>\n);\n\nconst IconMail: React.FC<IconProps> = ({ fill }) => {\n return (\n <svg\n width=\"24px\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>AB6F94F9-B95A-424A-86E5-27ECD89A8595</title>\n <desc>Created with sketchtool.</desc>\n <g id=\"Symbols\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g id=\"Stockholm-icons-/-Communication-/-Mail\">\n <rect id=\"bound\" x=\"0\" y=\"0\" width=\"24\" height=\"24\" />\n <path\n d=\"M19,6 C20.1045695,6 21,6.8954305 21,8 L21,17 C21,18.1045695 20.1045695,19 19,19 L5,19 C3.8954305,19 3,18.1045695 3,17 L3,8 C3,6.8954305 3.8954305,6 5,6 L19,6 Z M19.1603533,8.14442513 C18.9639747,7.77972206 18.5091282,7.6432681 18.1444251,7.83964668 L18.1444251,7.83964668 L12,11.1481833 L5.85557487,7.83964668 C5.4908718,7.6432681 5.03602525,7.77972206 4.83964668,8.14442513 C4.6432681,8.5091282 4.77972206,8.96397475 5.14442513,9.16035332 L5.14442513,9.16035332 L11.6444251,12.6603533 C11.8664074,12.7798822 12.1335926,12.7798822 12.3555749,12.6603533 L12.3555749,12.6603533 L18.8555749,9.16035332 C19.2202779,8.96397475 19.3567319,8.5091282 19.1603533,8.14442513 Z\"\n id=\"Combined-Shape\"\n fill={fill}\n />\n </g>\n </g>\n </svg>\n );\n};\n\nIconMail.defaultProps = {\n fill: '#000000',\n};\n\nconst IconPhone: React.FC<IconProps> = ({ fill }) => {\n return (\n <svg\n width=\"24px\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>01C7F50F-883C-433A-9EB5-58CB6F69847C</title>\n <desc>Created with sketchtool.</desc>\n <g id=\"Symbols\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g id=\"Stockholm-icons-/-Communication-/-Incoming-call\">\n <rect id=\"bound\" x=\"0\" y=\"0\" width=\"24\" height=\"24\" />\n <path\n d=\"M9.8604543,6.01162174 C9.94073619,5.93133984 10.0459506,5.88077119 10.1587919,5.86823326 C10.4332453,5.83773844 10.6804547,6.03550595 10.7109496,6.30995936 L11.2341533,11.0187935 C11.2382309,11.0554911 11.2382309,11.0925274 11.2341533,11.129225 C11.2036585,11.4036784 10.9564491,11.6014459 10.6819957,11.5709511 L5.97316161,11.0477473 C5.86032028,11.0352094 5.75510588,10.9846407 5.67482399,10.9043588 C5.47956184,10.7090967 5.47956184,10.3925142 5.67482399,10.197252 L7.06053236,8.81154367 L5.55907018,7.31008149 C5.36380803,7.11481935 5.36380803,6.79823686 5.55907018,6.60297471 L6.26617696,5.89586793 C6.46143911,5.70060578 6.7780216,5.70060578 6.97328374,5.89586793 L8.47474592,7.39733011 L9.8604543,6.01162174 Z\"\n id=\"Shape\"\n fill=\"#000000\"\n fillRule=\"nonzero\"\n opacity=\"0.3\"\n />\n <path\n d=\"M12.0799676,14.7839934 L14.2839934,12.5799676 C14.8927139,11.9712471 15.0436229,11.0413042 14.6586342,10.2713269 L14.5337539,10.0215663 C14.1487653,9.25158901 14.2996742,8.3216461 14.9083948,7.71292558 L17.6411989,4.98012149 C17.836461,4.78485934 18.1530435,4.78485934 18.3483056,4.98012149 C18.3863063,5.01812215 18.4179321,5.06200062 18.4419658,5.11006808 L19.5459415,7.31801948 C20.3904962,9.0071287 20.0594452,11.0471565 18.7240871,12.3825146 L12.7252616,18.3813401 C11.2717221,19.8348796 9.12170075,20.3424308 7.17157288,19.6923882 L4.75709327,18.8875616 C4.49512161,18.8002377 4.35354162,18.5170777 4.4408655,18.2551061 C4.46541191,18.1814669 4.50676633,18.114554 4.56165376,18.0596666 L7.21292558,15.4083948 C7.8216461,14.7996742 8.75158901,14.6487653 9.52156634,15.0337539 L9.77132688,15.1586342 C10.5413042,15.5436229 11.4712471,15.3927139 12.0799676,14.7839934 Z\"\n id=\"Path-76\"\n fill={fill}\n />\n </g>\n </g>\n </svg>\n );\n};\n\nIconPhone.defaultProps = {\n fill: '#000000',\n};\n\nconst IconChart: React.FC<IconProps> = () => (\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.0142 16.8629H15.0001C15.5485 16.8629 15.993 16.3712 15.993 15.7645V5.87895C15.993 5.27227 15.5485 4.78056 15.0001 4.78056H13.0142C12.4658 4.78056 12.0213 5.27227 12.0213 5.87895V15.7645C12.0213 16.3712 12.4658 16.8629 13.0142 16.8629ZM7.38761 16.8629H9.37347C9.9219 16.8629 10.3664 16.3712 10.3664 15.7645V1.48536C10.3664 0.878679 9.9219 0.386963 9.37347 0.386963H7.38761C6.83918 0.386963 6.39468 0.878679 6.39468 1.48536V15.7645C6.39468 16.3712 6.83918 16.8629 7.38761 16.8629ZM1.761 16.8629H3.74686C4.29529 16.8629 4.73979 16.3712 4.73979 15.7645V11.3709C4.73979 10.7646 4.29529 10.2725 3.74686 10.2725H1.761C1.21257 10.2725 0.768066 10.7646 0.768066 11.3709V15.7645C0.768066 16.3712 1.21257 16.8629 1.761 16.8629Z\"\n fill=\"#FFF\"\n />\n </svg>\n);\n\nconst IconNotification: React.FC<IconProps> = () => {\n return (\n <svg\n width=\"24px\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <desc>Created with sketchtool.</desc>\n <g id=\"Symbols\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g id=\"Stockholm-icons-/-General-/-Notification#2\">\n <rect id=\"bound\" x=\"0\" y=\"0\" width=\"24\" height=\"24\" />\n <path\n d=\"M13,5.5 C13,8.53756612 15.4624339,11 18.5,11 C19.0200759,11 19.5232921,10.9278151 20.0001762,10.7929177 L20,17 C20,18.6568542 18.6568542,20 17,20 L7,20 C5.34314575,20 4,18.6568542 4,17 L4,7 C4,5.34314575 5.34314575,4 7,4 L13.2068013,4.00081772 C13.0720847,4.47740703 13,4.98028537 13,5.5 Z\"\n id=\"icon-notification\"\n fill=\"#0089be\"\n />\n <circle id=\"Oval\" fill=\"#4dacd1\" cx=\"18.5\" cy=\"5.5\" r=\"2.5\" />\n </g>\n </g>\n </svg>\n );\n};\n\nconst IconAlarmClock: React.FC<IconProps> = () => {\n return (\n <svg\n width=\"24px\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <desc>Created with sketchtool.</desc>\n <g id=\"Symbols\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g id=\"Stockholm-icons-/-Home-/-Alarm-clock\">\n <rect id=\"bound\" x=\"0\" y=\"0\" width=\"24\" height=\"24\" />\n <path\n d=\"M7.14359305,19.3578269 C7.67151586,19.7616911 8.25121217,20.1012903 8.87099797,20.3649403 L7.89205065,22.0604779 C7.61590828,22.5387706 7.00431787,22.7026457 6.52602525,22.4265033 C6.04773263,22.150361 5.88385747,21.5387706 6.15999985,21.0604779 Z M16.8643339,19.3517549 L17.8320512,21.0301278 C18.1081936,21.5084204 17.9443184,22.1200108 17.4660258,22.3961532 C17.0218969,22.6525711 16.4628327,22.5295862 16.1641373,22.1277608 L16.1000004,22.0301278 L15.1370175,20.3615254 L15.1959927,20.3360797 C15.5374409,20.1871181 15.8664774,20.0150168 16.1811207,19.8217571 C16.1975891,19.8116416 16.2139101,19.8015355 16.2301919,19.7913724 C16.329648,19.7292934 16.4276935,19.6650548 16.5242116,19.5987536 C16.5416259,19.5867888 16.5583717,19.5751891 16.5750709,19.5635273 L16.6871441,19.4838237 L16.6871441,19.4838237 L16.8643339,19.3517549 L16.8643339,19.3517549 Z\"\n id=\"clock-combined\"\n fill=\"#bac3cc\"\n />\n <path\n d=\"M12,5 C16.418278,5 20,8.581722 20,13 C20,17.418278 16.418278,21 12,21 C7.581722,21 4,17.418278 4,13 C4,8.581722 7.581722,5 12,5 Z M19.068812,3.25407593 L20.8181344,5.00339833 C21.4039208,5.58918477 21.4039208,6.53893224 20.8181344,7.12471868 C20.2323479,7.71050512 19.2826005,7.71050512 18.696814,7.12471868 L16.9474916,5.37539627 C16.3617052,4.78960984 16.3617052,3.83986237 16.9474916,3.25407593 C17.5332781,2.66828949 18.4830255,2.66828949 19.068812,3.25407593 Z M5.29862906,2.88207799 C5.8844155,2.29629155 6.83416297,2.29629155 7.41994941,2.88207799 C8.00573585,3.46786443 8.00573585,4.4176119 7.41994941,5.00339833 L7.41994941,5.00339833 L5.29862906,7.12471868 C4.71284263,7.71050512 3.76309516,7.71050512 3.17730872,7.12471868 C2.59152228,6.53893224 2.59152228,5.58918477 3.17730872,5.00339833 L3.17730872,5.00339833 Z\"\n id=\"clock\"\n fill=\"#bac3cc\"\n />\n <path\n d=\"M11.9630156,7.5 L12.0475062,7.5 C12.3043819,7.5 12.5194647,7.69464724 12.5450248,7.95024814 L13,12.5 L13,12.5 L16.2480695,14.3560397 C16.403857,14.4450611 16.5,14.6107328 16.5,14.7901613 L16.5,15 C16.5,15.2109164 16.3290185,15.3818979 16.1181021,15.3818979 C16.0841582,15.3818979 16.0503659,15.3773725 16.0176181,15.3684413 L11.3986612,14.1087258 C11.1672824,14.0456225 11.0132986,13.8271186 11.0316926,13.5879956 L11.4644883,7.96165175 C11.4845267,7.70115317 11.7017474,7.5 11.9630156,7.5 Z\"\n id=\"clock-needle\"\n fill=\"#364862\"\n />\n </g>\n </g>\n </svg>\n );\n};\n\nconst IconLike: React.FC<IconProps> = () => {\n return (\n <svg\n width=\"24px\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>8AAC51E3-62BB-44B6-8614-2C29A227090C</title>\n <desc>Created with sketchtool.</desc>\n <g id=\"Symbols\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g id=\"Stockholm-icons-/-General-/-Like\">\n <rect id=\"bound\" x=\"0\" y=\"0\" width=\"24\" height=\"24\" />\n <path\n d=\"M9,10 L9,19 L10.1525987,19.3841996 C11.3761964,19.7920655 12.6575468,20 13.9473319,20 L17.5405883,20 C18.9706314,20 20.2018758,18.990621 20.4823303,17.5883484 L21.231529,13.8423552 C21.5564648,12.217676 20.5028146,10.6372006 18.8781353,10.3122648 C18.6189212,10.260422 18.353992,10.2430672 18.0902299,10.2606513 L14.5,10.5 L14.5,10.5 L14.8641964,6.49383981 C14.9326895,5.74041495 14.3774427,5.07411874 13.6240179,5.00562558 C13.5827848,5.00187712 13.5414031,5 13.5,5 C12.5694044,5 11.7070439,5.48826024 11.2282564,6.28623939 L9,10 L9,10 Z\"\n id=\"like-hand\"\n fill=\"#364862\"\n />\n <rect id=\"like-rectangle\" fill=\"#bac3cc\" x=\"2\" y=\"9\" width=\"5\" height=\"11\" rx=\"1\" />\n </g>\n </g>\n </svg>\n );\n};\n\nconst IconSun: React.FC<IconProps> = ({ color }) => {\n return (\n <svg\n width=\"24px\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <desc>Created with sketchtool.</desc>\n <g id=\"Symbols\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g\n id=\"option/reminder\"\n transform=\"translate(-24.000000, -81.000000)\"\n fill={color}\n fillRule=\"nonzero\"\n >\n <g id=\"Group-9-Copy-4\">\n <g id=\"Group-2\">\n <g id=\"Group-5\" transform=\"translate(0.000000, 81.000000)\">\n <g id=\"sun_ico\" transform=\"translate(24.000000, 0.000000)\">\n <path\n d=\"M12.1904762,5.57142857 C8.54111015,5.57142857 5.57142857,8.54111015 5.57142857,12.1904762 C5.57142857,15.8398422 8.54111015,18.8095238 12.1904762,18.8095238 C15.8398422,18.8095238 18.8095238,15.8398422 18.8095238,12.1904762 C18.8095238,8.54111015 15.8398422,5.57142857 12.1904762,5.57142857 Z\"\n id=\"Shape\"\n stroke={color}\n strokeWidth=\"2\"\n fillOpacity=\"0.32\"\n />\n <path\n d=\"M12.1904762,3.55555556 C12.4708571,3.55555556 12.6984127,3.328 12.6984127,3.04761905 L12.6984127,1.01587302 C12.6984127,0.735492063 12.4708571,0.507936508 12.1904762,0.507936508 C11.9100952,0.507936508 11.6825397,0.735492063 11.6825397,1.01587302 L11.6825397,3.04761905 C11.6825397,3.328 11.9100952,3.55555556 12.1904762,3.55555556 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M12.1904762,20.8253968 C11.9100952,20.8253968 11.6825397,21.0529524 11.6825397,21.3333333 L11.6825397,23.3650794 C11.6825397,23.6454603 11.9100952,23.8730159 12.1904762,23.8730159 C12.4708571,23.8730159 12.6984127,23.6454603 12.6984127,23.3650794 L12.6984127,21.3333333 C12.6984127,21.0529524 12.4708571,20.8253968 12.1904762,20.8253968 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M7.1791746,4.52673016 C7.27365079,4.68926984 7.44431746,4.78069841 7.61904762,4.78069841 C7.70539683,4.78069841 7.7927619,4.75936508 7.87301587,4.71263492 C8.11580952,4.57142857 8.19911111,4.2615873 8.05892063,4.01879365 L7.04304762,2.25930159 C6.90184127,2.01549206 6.59098413,1.93219048 6.34920635,2.07339683 C6.1064127,2.2135873 6.02311111,2.52342857 6.16330159,2.7672381 L7.1791746,4.52673016 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M17.2017778,19.8542222 C17.0605714,19.6104127 16.7497143,19.5271111 16.5079365,19.6683175 C16.2651429,19.8085079 16.1818413,20.1193651 16.3220317,20.3621587 L17.3379048,22.1216508 C17.432381,22.2852063 17.6030476,22.375619 17.7787937,22.375619 C17.8651429,22.375619 17.9525079,22.3542857 18.0327619,22.3075556 C18.2755556,22.1673651 18.3588571,21.8565079 18.2186667,21.6137143 L17.2017778,19.8542222 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M2.25930159,7.04304762 L4.01879365,8.05892063 C4.09803175,8.10565079 4.18539683,8.12698413 4.27174603,8.12698413 C4.44749206,8.12698413 4.61815873,8.03657143 4.71263492,7.87301587 C4.8528254,7.63022222 4.76952381,7.31936508 4.52673016,7.1791746 L2.7672381,6.16330159 C2.52444444,6.02311111 2.2135873,6.10539683 2.07339683,6.34920635 C1.93219048,6.592 2.01549206,6.90285714 2.25930159,7.04304762 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M22.1216508,17.3379048 L20.3621587,16.3220317 C20.1193651,16.1818413 19.8085079,16.264127 19.6683175,16.5079365 C19.528127,16.7507302 19.6114286,17.0615873 19.8542222,17.2017778 L21.6137143,18.2176508 C21.6939683,18.264381 21.7813333,18.2857143 21.8676825,18.2857143 C22.0434286,18.2857143 22.2140952,18.1953016 22.3085714,18.031746 C22.4487619,17.7889524 22.3654603,17.4780952 22.1216508,17.3379048 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M3.55555556,12.1904762 C3.55555556,11.9100952 3.328,11.6825397 3.04761905,11.6825397 L1.01587302,11.6825397 C0.735492063,11.6825397 0.507936508,11.9100952 0.507936508,12.1904762 C0.507936508,12.4708571 0.735492063,12.6984127 1.01587302,12.6984127 L3.04761905,12.6984127 C3.328,12.6984127 3.55555556,12.4708571 3.55555556,12.1904762 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M23.3650794,11.6825397 L21.3333333,11.6825397 C21.0529524,11.6825397 20.8253968,11.9100952 20.8253968,12.1904762 C20.8253968,12.4708571 21.0529524,12.6984127 21.3333333,12.6984127 L23.3650794,12.6984127 C23.6454603,12.6984127 23.8730159,12.4708571 23.8730159,12.1904762 C23.8730159,11.9100952 23.6454603,11.6825397 23.3650794,11.6825397 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M4.01879365,16.3220317 L2.25930159,17.3379048 C2.01650794,17.4780952 1.93320635,17.7889524 2.07339683,18.031746 C2.16685714,18.1953016 2.33752381,18.2857143 2.51326984,18.2857143 C2.59961905,18.2857143 2.68698413,18.264381 2.7672381,18.2176508 L4.52673016,17.2017778 C4.76952381,17.0615873 4.8528254,16.7507302 4.71263492,16.5079365 C4.57142857,16.264127 4.25955556,16.1818413 4.01879365,16.3220317 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M20.1092063,8.12698413 C20.1955556,8.12698413 20.2829206,8.10565079 20.3631746,8.05892063 L22.1226667,7.04304762 C22.3654603,6.90285714 22.4487619,6.592 22.3085714,6.34920635 C22.1673651,6.10539683 21.8565079,6.02311111 21.6147302,6.16330159 L19.8552381,7.1791746 C19.6124444,7.31936508 19.5291429,7.63022222 19.6693333,7.87301587 C19.7627937,8.03657143 19.9334603,8.12698413 20.1092063,8.12698413 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M7.87301587,19.6683175 C7.63022222,19.5271111 7.31936508,19.6104127 7.1791746,19.8542222 L6.16330159,21.6137143 C6.02311111,21.8565079 6.1064127,22.1673651 6.34920635,22.3075556 C6.42946032,22.3532698 6.5168254,22.375619 6.6031746,22.375619 C6.77892063,22.375619 6.9495873,22.2852063 7.04406349,22.1216508 L8.05993651,20.3621587 C8.19911111,20.1193651 8.11580952,19.8095238 7.87301587,19.6683175 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M16.5079365,4.71263492 C16.5881905,4.75834921 16.6755556,4.78069841 16.7619048,4.78069841 C16.9376508,4.78069841 17.1083175,4.69028571 17.2027937,4.52673016 L18.2186667,2.7672381 C18.3588571,2.52444444 18.2755556,2.2135873 18.0327619,2.07339683 C17.7899683,1.93219048 17.4791111,2.01549206 17.3389206,2.25930159 L16.3230476,4.01879365 C16.1818413,4.2615873 16.2651429,4.57142857 16.5079365,4.71263492 Z\"\n id=\"Shape\"\n />\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </svg>\n );\n};\n\nIconSun.defaultProps = {\n color: '#1967AE',\n};\n\nconst IconRainBow: React.FC<IconProps> = ({ color }) => {\n return (\n <svg\n width=\"26px\"\n height=\"13px\"\n viewBox=\"0 0 26 13\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <desc>Created with sketchtool.</desc>\n <g id=\"Symbols\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g\n id=\"option/reminder\"\n transform=\"translate(-23.000000, -144.000000)\"\n fill={color}\n fillRule=\"nonzero\"\n >\n <g id=\"Group-9-Copy-4\">\n <g id=\"Group-2\">\n <g id=\"Group-5-Copy\" transform=\"translate(0.000000, 142.000000)\">\n <g id=\"rainbow_ico\" transform=\"translate(24.000000, 3.000000)\">\n <g id=\"icons\">\n <path\n d=\"M12,0 C5.383,0 0,4.80625 0,10.7142857 C0,10.9607143 0.224,11.1607143 0.5,11.1607143 C0.776,11.1607143 1,10.9607143 1,10.7142857 C1,5.29910714 5.935,0.892857143 12,0.892857143 C18.065,0.892857143 23,5.29910714 23,10.7142857 C23,10.9607143 23.224,11.1607143 23.5,11.1607143 C23.776,11.1607143 24,10.9607143 24,10.7142857 C24,4.80625 18.617,0 12,0 Z\"\n id=\"Shape\"\n stroke={color}\n />\n <path\n d=\"M20.5,11.1607143 C20.776,11.1607143 21,10.9607143 21,10.7142857 C21,6.28303571 16.962,2.67857143 12,2.67857143 C7.038,2.67857143 3,6.28303571 3,10.7142857 C3,10.9607143 3.224,11.1607143 3.5,11.1607143 C3.776,11.1607143 4,10.9607143 4,10.7142857 C4,6.77589286 7.589,3.57142857 12,3.57142857 C16.411,3.57142857 20,6.77589286 20,10.7142857 C20,10.9607143 20.224,11.1607143 20.5,11.1607143 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M17,10.7142857 C17,10.9607143 17.224,11.1607143 17.5,11.1607143 C17.776,11.1607143 18,10.9607143 18,10.7142857 C18,7.75982143 15.309,5.35714286 12,5.35714286 C8.691,5.35714286 6,7.75982143 6,10.7142857 C6,10.9607143 6.224,11.1607143 6.5,11.1607143 C6.776,11.1607143 7,10.9607143 7,10.7142857 C7,8.25267857 9.243,6.25 12,6.25 C14.757,6.25 17,8.25267857 17,10.7142857 Z\"\n id=\"Shape\"\n stroke=\"#0066B5\"\n strokeWidth=\"0.5\"\n />\n <path\n d=\"M14.5,11.1607143 C14.776,11.1607143 15,10.9607143 15,10.7142857 C15,9.2375 13.654,8.03571429 12,8.03571429 C10.346,8.03571429 9,9.2375 9,10.7142857 C9,10.9607143 9.224,11.1607143 9.5,11.1607143 C9.776,11.1607143 10,10.9607143 10,10.7142857 C10,9.72946429 10.897,8.92857143 12,8.92857143 C13.103,8.92857143 14,9.72946429 14,10.7142857 C14,10.9607143 14.224,11.1607143 14.5,11.1607143 Z\"\n id=\"Shape\"\n />\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </svg>\n );\n};\n\nIconRainBow.defaultProps = {\n color: '#1967AE',\n};\n\nconst IconClouds: React.FC<IconProps> = ({ color }) => {\n return (\n <svg\n width=\"24px\"\n height=\"20px\"\n viewBox=\"0 0 24 20\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <desc>Created with sketchtool.</desc>\n <g id=\"Symbols\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g\n id=\"option/reminder\"\n transform=\"translate(-24.000000, -199.000000)\"\n fill={color}\n fillRule=\"nonzero\"\n >\n <g id=\"Group-9-Copy-4\">\n <g id=\"Group-2\">\n <g id=\"Group-5-Copy-2\" transform=\"translate(0.000000, 199.000000)\">\n <g id=\"clouds_ico\" transform=\"translate(24.000000, 0.000000)\">\n <path\n d=\"M14.0606061,1.97530864 C14.3282424,1.97530864 14.5454545,1.75407407 14.5454545,1.48148148 L14.5454545,0.49382716 C14.5454545,0.221234568 14.3282424,0 14.0606061,0 C13.7929697,0 13.5757576,0.221234568 13.5757576,0.49382716 L13.5757576,1.48148148 C13.5757576,1.75407407 13.7929697,1.97530864 14.0606061,1.97530864 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M8.23272727,4.14518519 C8.32775758,4.24197531 8.45187879,4.28938272 8.576,4.28938272 C8.70012121,4.28938272 8.82424242,4.24098765 8.91927273,4.14518519 C9.10836364,3.95259259 9.10836364,3.63950617 8.91927273,3.44691358 L8.23272727,2.74864198 C8.04363636,2.55604938 7.73624242,2.55604938 7.54715152,2.74864198 C7.35806061,2.94123457 7.35806061,3.25432099 7.54715152,3.44691358 L8.23272727,4.14518519 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M21.8181818,9.87654321 L22.7878788,9.87654321 C23.0555152,9.87654321 23.2727273,9.65530864 23.2727273,9.38271605 C23.2727273,9.11012346 23.0555152,8.88888889 22.7878788,8.88888889 L21.8181818,8.88888889 C21.5505455,8.88888889 21.3333333,9.11012346 21.3333333,9.38271605 C21.3333333,9.65530864 21.5505455,9.87654321 21.8181818,9.87654321 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M19.5461818,4.28938272 C19.670303,4.28938272 19.7944242,4.24098765 19.8894545,4.14518519 L20.5750303,3.44691358 C20.7641212,3.25432099 20.7641212,2.94123457 20.5750303,2.74864198 C20.3859394,2.55604938 20.0785455,2.55604938 19.8894545,2.74864198 L19.2029091,3.44691358 C19.0138182,3.63950617 19.0138182,3.95259259 19.2029091,4.14518519 C19.2979394,4.24098765 19.4220606,4.28938272 19.5461818,4.28938272 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M12.278303,4.2291358 C14.2380606,4.75160494 15.9330909,5.98518519 17.0501818,7.70074074 C17.1481212,7.84987654 17.3178182,7.92987654 17.4933333,7.92 C18.153697,7.86469136 18.816,7.9308642 19.4996364,8.10864198 C19.5393939,8.11950617 19.5801212,8.12444444 19.6198788,8.12444444 L19.6295758,8.12444444 C19.9098182,8.14320988 20.1241212,7.90716049 20.1241212,7.63061728 C20.1241212,7.52888889 20.0940606,7.43506173 20.0426667,7.35703704 C19.1854545,4.72296296 16.7970909,2.96296296 14.0606061,2.96296296 C13.5127273,2.96296296 12.8698182,3.07654321 12.2511515,3.28098765 C12.0465455,3.3491358 11.9098182,3.54666667 11.9166061,3.76493827 C11.9233939,3.98419753 12.0707879,4.17283951 12.278303,4.2291358 Z\"\n id=\"Shape\"\n />\n <path\n d=\"M17.9393939,9.88888889 C17.6270402,9.88888889 17.3028384,9.93261828 16.9510455,10.0238092 L16.1590015,10.2291209 L15.80095,9.49339954 C14.739646,7.31263993 12.5699681,5.9382716 10.1818182,5.9382716 C7.13722694,5.9382716 4.51887449,8.19359866 4.00487092,11.2559034 L3.90488097,11.8516185 L3.33106431,12.0403218 C1.94174633,12.497208 1,13.8078984 1,15.308642 C1,17.210793 2.5142517,18.7530864 4.36363636,18.7530864 L17.9393939,18.7530864 C20.3240513,18.7530864 22.2727273,16.7683239 22.2727273,14.3209877 C22.2727273,11.8736514 20.3240513,9.88888889 17.9393939,9.88888889 Z\"\n id=\"Shape\"\n stroke={color}\n strokeWidth=\"2\"\n fillOpacity=\"0.32\"\n />\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </svg>\n );\n};\n\nIconClouds.defaultProps = {\n color: '#1967AE',\n};\n\nconst IconMoon: React.FC<IconProps> = ({ color }) => {\n return (\n <svg\n width=\"26px\"\n height=\"26px\"\n viewBox=\"0 0 26 26\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <desc>Created with sketchtool.</desc>\n <g\n id=\"Symbols\"\n stroke=\"none\"\n strokeWidth=\"1\"\n fill=\"none\"\n fillRule=\"evenodd\"\n fillOpacity=\"0.32\"\n >\n <g\n id=\"option/reminder\"\n transform=\"translate(-26.000000, -254.000000)\"\n fill={color}\n fillRule=\"nonzero\"\n stroke={color}\n strokeWidth=\"2\"\n >\n <g id=\"Group-9-Copy-4\">\n <g id=\"Group-2\">\n <g id=\"Group-5-Copy-3\" transform=\"translate(22.000000, 254.000000)\">\n <g id=\"moon_ico\">\n <path\n d=\"M17.2990691,15 C17.2990691,10.7793103 19.2796593,6.88965517 22.5278273,4.48965517 C22.6862745,4.40689655 22.6862745,4.24137931 22.6862745,4.07586207 C22.6862745,3.91034483 22.6070509,3.82758621 22.4486037,3.74482759 C21.1810259,3.24827586 19.8342246,3 18.4874233,3 C12.1495346,3 7,8.37931034 7,15 C7,21.6206897 12.1495346,27 18.4874233,27 C19.8342246,27 21.1810259,26.7517241 22.4486037,26.2551724 C22.6070509,26.1724138 22.6862745,26.0896552 22.6862745,25.9241379 C22.6862745,25.7586207 22.6070509,25.5931034 22.5278273,25.5103448 C19.2796593,23.1103448 17.2990691,19.2206897 17.2990691,15 Z\"\n id=\"Shape\"\n transform=\"translate(14.843137, 15.000000) rotate(-45.000000) translate(-14.843137, -15.000000) \"\n />\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </svg>\n );\n};\n\nIconMoon.defaultProps = {\n color: '#1967AE',\n};\n\nconst IconImport: React.FC<IconProps> = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"43\" viewBox=\"0 0 50 43\">\n <path d=\"M48.4 26.5c-.9 0-1.7.7-1.7 1.7v11.6h-43.3v-11.6c0-.9-.7-1.7-1.7-1.7s-1.7.7-1.7 1.7v13.2c0 .9.7 1.7 1.7 1.7h46.7c.9 0 1.7-.7 1.7-1.7v-13.2c0-1-.7-1.7-1.7-1.7zm-24.5 6.1c.3.3.8.5 1.2.5.4 0 .9-.2 1.2-.5l10-11.6c.7-.7.7-1.7 0-2.4s-1.7-.7-2.4 0l-7.1 8.3v-25.3c0-.9-.7-1.7-1.7-1.7s-1.7.7-1.7 1.7v25.3l-7.1-8.3c-.7-.7-1.7-.7-2.4 0s-.7 1.7 0 2.4l10 11.6z\" />\n </svg>\n);\n\nconst IconSearch: React.FC<IconProps> = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path\n fill=\"#8891A5\"\n fillRule=\"nonzero\"\n d=\"M12.7 11.23a6.777 6.777 0 0 0 1.4-4.174C14.1 3.18 11 0 7.1 0S0 3.18 0 7.056s3.2 7.056 7.1 7.056c1.6 0 3.1-.497 4.2-1.392l3 2.982c.2.199.5.298.7.298.2 0 .5-.1.7-.298.4-.398.4-.994 0-1.391l-3-3.081zm-5.6.795c-2.8 0-5.1-2.186-5.1-4.97 0-2.782 2.3-5.067 5.1-5.067s5.1 2.285 5.1 5.068c0 2.783-2.3 4.969-5.1 4.969z\"\n />\n </svg>\n);\n\nconst IconFaceBook: React.FC<IconProps> = () => (\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n data-prefix=\"fab\"\n data-icon=\"facebook-f\"\n className=\"icon-face\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 320 512\"\n >\n <path\n fill=\"currentColor\"\n d=\"M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z\"\n />\n </svg>\n);\n\nconst IconLinkedin: React.FC<IconProps> = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n className=\"icon-linked\"\n >\n <path d=\"M4.98 3.5c0 1.381-1.11 2.5-2.48 2.5s-2.48-1.119-2.48-2.5c0-1.38 1.11-2.5 2.48-2.5s2.48 1.12 2.48 2.5zm.02 4.5h-5v16h5v-16zm7.982 0h-4.968v16h4.969v-8.399c0-4.67 6.029-5.052 6.029 0v8.399h4.988v-10.131c0-7.88-8.922-7.593-11.018-3.714v-2.155z\" />\n </svg>\n);\n\nconst IconLocation: React.FC<IconProps> = () => (\n <svg\n version=\"1.1\"\n id=\"Layer_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 512 512\"\n xmlSpace=\"preserve\"\n >\n <g>\n <g>\n <path\n d=\"M256,0C153.755,0,70.573,83.182,70.573,185.426c0,126.888,165.939,313.167,173.004,321.035\n\t\t\tc6.636,7.391,18.222,7.378,24.846,0c7.065-7.868,173.004-194.147,173.004-321.035C441.425,83.182,358.244,0,256,0z M256,278.719\n\t\t\tc-51.442,0-93.292-41.851-93.292-93.293S204.559,92.134,256,92.134s93.291,41.851,93.291,93.293S307.441,278.719,256,278.719z\"\n />\n </g>\n </g>\n <g />\n <g />\n <g />\n <g />\n <g />\n <g />\n <g />\n <g />\n <g />\n <g />\n <g />\n <g />\n <g />\n <g />\n <g />\n </svg>\n);\n\nconst IconArrowDown: React.FC<IconProps> = () => (\n <svg\n version=\"1.1\"\n id=\"Capa_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 21.825 21.825\"\n xmlSpace=\"preserve\"\n >\n <path\n fill=\"#c2c8cf\"\n d=\"M16.791,13.254c0.444-0.444,1.143-0.444,1.587,0c0.429,0.444,0.429,1.143,0,1.587l-6.65,6.651\n c-0.206,0.206-0.492,0.333-0.809,0.333c-0.317,0-0.603-0.127-0.81-0.333l-6.65-6.651c-0.444-0.444-0.444-1.143,0-1.587\n s1.143-0.444,1.587,0l4.746,4.762V1.111C9.791,0.492,10.299,0,10.918,0c0.619,0,1.111,0.492,1.111,1.111v16.904L16.791,13.254z\"\n />\n </svg>\n);\n\nconst IconThreeDots: React.FC<IconProps> = () => (\n <svg\n version=\"1.1\"\n id=\"Capa_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 512 512\"\n xmlSpace=\"preserve\"\n >\n <g>\n <g>\n <g>\n <circle fill=\"#c2c8cf\" cx=\"256\" cy=\"256\" r=\"64\" />\n <circle fill=\"#c2c8cf\" cx=\"256\" cy=\"448\" r=\"64\" />\n <circle fill=\"#c2c8cf\" cx=\"256\" cy=\"64\" r=\"64\" />\n </g>\n </g>\n </g>\n </svg>\n);\n\nconst IconPencil: React.FC<IconProps> = () => (\n <svg\n version=\"1.1\"\n id=\"Capa_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 528.899 528.899\"\n xmlSpace=\"preserve\"\n >\n <g>\n <path\n d=\"M328.883,89.125l107.59,107.589l-272.34,272.34L56.604,361.465L328.883,89.125z M518.113,63.177l-47.981-47.981\n c-18.543-18.543-48.653-18.543-67.259,0l-45.961,45.961l107.59,107.59l53.611-53.611\n C532.495,100.753,532.495,77.559,518.113,63.177z M0.3,512.69c-1.958,8.812,5.998,16.708,14.811,14.565l119.891-29.069\n L27.473,390.597L0.3,512.69z\"\n />\n </g>\n </svg>\n);\n\nconst IconTrash: React.FC<IconProps> = () => (\n <svg\n version=\"1.1\"\n id=\"Capa_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 486.4 486.4\"\n xmlSpace=\"preserve\"\n >\n <g>\n <g>\n <path\n d=\"M446,70H344.8V53.5c0-29.5-24-53.5-53.5-53.5h-96.2c-29.5,0-53.5,24-53.5,53.5V70H40.4c-7.5,0-13.5,6-13.5,13.5\n S32.9,97,40.4,97h24.4v317.2c0,39.8,32.4,72.2,72.2,72.2h212.4c39.8,0,72.2-32.4,72.2-72.2V97H446c7.5,0,13.5-6,13.5-13.5\n S453.5,70,446,70z M168.6,53.5c0-14.6,11.9-26.5,26.5-26.5h96.2c14.6,0,26.5,11.9,26.5,26.5V70H168.6V53.5z M394.6,414.2\n c0,24.9-20.3,45.2-45.2,45.2H137c-24.9,0-45.2-20.3-45.2-45.2V97h302.9v317.2H394.6z\"\n />\n <path\n d=\"M243.2,411c7.5,0,13.5-6,13.5-13.5V158.9c0-7.5-6-13.5-13.5-13.5s-13.5,6-13.5,13.5v238.5\n C229.7,404.9,235.7,411,243.2,411z\"\n />\n <path\n d=\"M155.1,396.1c7.5,0,13.5-6,13.5-13.5V173.7c0-7.5-6-13.5-13.5-13.5s-13.5,6-13.5,13.5v208.9\n C141.6,390.1,147.7,396.1,155.1,396.1z\"\n />\n <path\n d=\"M331.3,396.1c7.5,0,13.5-6,13.5-13.5V173.7c0-7.5-6-13.5-13.5-13.5s-13.5,6-13.5,13.5v208.9\n C317.8,390.1,323.8,396.1,331.3,396.1z\"\n />\n </g>\n </g>\n </svg>\n);\n\nconst IconCheckList: React.FC<IconProps> = () => (\n <svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill=\"#1967ae\"\n d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0-12c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zm6 4.67h28v-4h-28v4zm0-12h28v-4h-28v4zm0-16v4h28v-4h-28z\"\n />\n <path d=\"M0 0h48v48h-48z\" fill=\"none\" />\n </svg>\n);\n\nconst IconEarth: React.FC<IconProps> = ({ fill, stroke, className }) => (\n <svg className={className} viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill={fill}\n stroke={stroke}\n d=\"M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM16 30c-1.967 0-3.84-0.407-5.538-1.139l7.286-8.197c0.163-0.183 0.253-0.419 0.253-0.664v-3c0-0.552-0.448-1-1-1-3.531 0-7.256-3.671-7.293-3.707-0.188-0.188-0.442-0.293-0.707-0.293h-4c-0.552 0-1 0.448-1 1v6c0 0.379 0.214 0.725 0.553 0.894l3.447 1.724v5.871c-3.627-2.53-6-6.732-6-11.489 0-2.147 0.484-4.181 1.348-6h3.652c0.265 0 0.52-0.105 0.707-0.293l4-4c0.188-0.188 0.293-0.442 0.293-0.707v-2.419c1.268-0.377 2.61-0.581 4-0.581 2.2 0 4.281 0.508 6.134 1.412-0.13 0.109-0.256 0.224-0.376 0.345-1.133 1.133-1.757 2.64-1.757 4.243s0.624 3.109 1.757 4.243c1.139 1.139 2.663 1.758 4.239 1.758 0.099 0 0.198-0.002 0.297-0.007 0.432 1.619 1.211 5.833-0.263 11.635-0.014 0.055-0.022 0.109-0.026 0.163-2.541 2.596-6.084 4.208-10.004 4.208z\"\n />\n </svg>\n);\n\nexport {\n IconStart,\n IconBell,\n IconCompany,\n IconMail,\n IconPhone,\n IconChart,\n IconNotification,\n IconAlarmClock,\n IconLike,\n IconSun,\n IconRainBow,\n IconClouds,\n IconMoon,\n IconImport,\n IconSearch,\n IconFaceBook,\n IconLinkedin,\n IconLocation,\n IconArrowDown,\n IconThreeDots,\n IconPencil,\n IconTrash,\n IconCheckList,\n IconEarth,\n};\n","import { createSelector } from 'reselect';\nimport { SelectedCompaniesGrids } from '@optx/models/bulkActions';\nimport {\n getCompanies,\n checkEquityTouch,\n checkCompaniesOwner,\n} from '../../selected-companies/state/selectors';\nimport { selectFeatureState } from './selectFeature';\n\nconst selectedCompaniesState = createSelector(selectFeatureState, state => {\n return state.selectedCompanies;\n});\n\n// slice selectors\nconst getSelectedCompanies = (gridName: SelectedCompaniesGrids, pageNumber?: number) => {\n return createSelector(selectedCompaniesState, getCompanies(gridName, pageNumber));\n};\n\nconst areAllCompaniesInEqt = (gridName: SelectedCompaniesGrids) => {\n return createSelector(selectedCompaniesState, checkEquityTouch(gridName));\n};\n\nconst areCompaniesAssigned = (gridName: SelectedCompaniesGrids, analyst: string) => {\n return createSelector(selectedCompaniesState, checkCompaniesOwner(gridName, analyst));\n};\n\nexport default {\n getSelectedCompanies,\n areAllCompaniesInEqt,\n areCompaniesAssigned,\n};\n","import React from 'react';\nimport { BarData, ContentRenderer, RectangleProps } from 'recharts';\nimport { RectRadius } from '@models/recharts';\nimport { getRectanglePath } from '@utils/chart/recharts';\n\nconst MINIMAL_BAR_HEIGHT = 3;\n\ntype MinimumSizeBarProps = BarData &\n RectangleProps & { radius: RectRadius; minimalHeight?: number };\n\nconst MinimumSizeBar: React.FC<MinimumSizeBarProps> = ({\n fill,\n x,\n y,\n width,\n height,\n radius,\n value,\n minimalHeight = MINIMAL_BAR_HEIGHT,\n}) => {\n let finalHeight = isNaN(height) ? 0 : height;\n let finalY = isNaN(y) ? 0 : y;\n\n if (value !== null && value !== 0 && height < minimalHeight) {\n finalHeight = minimalHeight;\n finalY = y + height - MINIMAL_BAR_HEIGHT;\n }\n\n return (\n <path d={getRectanglePath(x, finalY, width, finalHeight, radius)} stroke=\"none\" fill={fill} />\n );\n};\n\n// Even if bar shape receives value and other properties from BarData,\n// Typescript definition is not update and need to use as syntax.\nexport default MinimumSizeBar as ContentRenderer<RectangleProps>;\n","import styled from 'styled-components';\n\nexport const LegendText = styled.span`\n /* Gray */\n color: #90a0b7;\n font-weight: 600;\n font-size: 10px;\n line-height: 20px;\n margin: 0 15px 0 0;\n letter-spacing: 0.5px;\n font-family: 'Lato', sans-serif;\n`;\n","import React, { useRef } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Modal } from 'antd';\nimport { Form, Input } from 'formik-antd';\nimport { Formik, FormikProps } from 'formik';\nimport * as yup from 'yup';\n// utils\nimport { handlePendoAction } from '@optx/utils/utils';\n// redux\nimport { actions } from '@components/feature/company-individual-edit/state/rationale';\n\nexport interface RationaleForm {\n rationale: string | null;\n}\n\nconst validationSchema = yup.object<RationaleForm>({\n rationale: yup.string().nullable().max(500, 'Maximum 500 characters'),\n});\n\ntype EditFundProfileProps = {\n companyId: number;\n isOpen: boolean;\n value: string | null;\n toggle: () => void;\n callback: () => void;\n};\n\nconst EditRationaleProfile: React.FC<EditFundProfileProps> = ({\n companyId,\n isOpen,\n value,\n toggle,\n callback,\n}) => {\n const dispatch = useDispatch();\n\n const formRef = useRef<FormikProps<RationaleForm> | null>(null);\n\n const handleSubmit = (values: RationaleForm) => {\n dispatch(\n actions.addRationale({\n companyId,\n rationale: values.rationale || 'blank',\n value: values.rationale,\n callback: callback,\n })\n );\n window.pendo.track(handlePendoAction('SetRationale'));\n toggle();\n };\n\n const handleOk = () => {\n if (formRef.current) {\n formRef.current.submitForm();\n }\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLFormElement>) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n handleOk();\n }\n };\n\n const initialValues: RationaleForm = {\n rationale: value ?? '',\n };\n\n return (\n <>\n <Modal\n title=\"Edit Rationale\"\n visible={isOpen}\n onCancel={toggle}\n onOk={handleOk}\n okText=\"Save\"\n destroyOnClose\n >\n <Formik\n initialValues={initialValues}\n onSubmit={handleSubmit}\n validationSchema={validationSchema}\n innerRef={instance => {\n formRef.current = instance;\n }}\n component={() => (\n <Form layout=\"vertical\" onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n <Form.Item name=\"rationale\">\n <Input.TextArea autoFocus name=\"rationale\" rows={6} />\n </Form.Item>\n </Form>\n )}\n />\n </Modal>\n </>\n );\n};\n\nexport default EditRationaleProfile;\n","import React from 'react';\nimport { Popover } from 'antd';\nimport { PopoverProps } from 'antd/lib/popover';\n\n/**\n * EmptyPopover component.\n * Allow adding popover logic in places where the trigger of the popover can't be a direct child,\n * usually when there is dropdown menu that trigger visibility of the popover.\n *\n * IMPORTANT!: Component has to be used in a wrapper with empty-popover-wrapper class or a relative position.\n *\n * From ANTD documentation Popover has to have a direct child and can't be used without it,\n * otherwise will cause issues like body overflow and improper position.\n *\n * @param props\n */\nconst EmptyPopover: React.FC<PopoverProps> = props => {\n return (\n <Popover trigger=\"click\" {...props}>\n {/* Just an dummy trigger that doesn't actually trigger anything on click. */}\n <div className=\"empty-popover-trigger\" />\n </Popover>\n );\n};\n\nexport default EmptyPopover;\n","import React, { useState } from 'react';\nimport { Input, Button, Card, Row } from 'antd';\nimport styled from 'styled-components';\n// constants\nimport { MAX_CHAR_LENGTH } from '@constants/notes';\n\nconst EditNoteCard = styled(Card)`\n width: 500px;\n\n border-radius: 0;\n\n .ant-card-body {\n padding: 0;\n }\n\n .note-textarea-wrapper {\n padding: 10px;\n }\n\n .edit-note-actions {\n border-top: 1px solid #f0f0f0;\n\n padding: 10px;\n .ant-btn {\n margin-left: 20px;\n }\n }\n\n .edit-note-textarea {\n resize: none;\n width: 100%;\n\n box-sizing: border-box;\n }\n`;\ninterface EditNoteContentProps {\n noteText?: string;\n onNoteSave: (noteText: string) => void;\n handleToggle: () => void;\n}\n\nconst EditNoteContent: React.FC<EditNoteContentProps> = ({\n noteText,\n onNoteSave,\n handleToggle,\n}) => {\n const [textValue, setTextValue] = useState(noteText || '');\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n onNoteSave(textValue);\n }\n };\n\n return (\n <EditNoteCard title=\"Edit Note\">\n <div className=\"note-textarea-wrapper\">\n <Input.TextArea\n rows={6}\n className=\"edit-note-textarea\"\n name=\"note_text\"\n onKeyDown={handleDropdownKeyEvent}\n value={textValue}\n onChange={e => {\n setTextValue(e.target.value);\n }}\n placeholder=\"Add your note here\"\n maxLength={MAX_CHAR_LENGTH}\n />\n </div>\n <Row justify=\"end\" align=\"middle\" className=\"edit-note-actions\">\n <Button onClick={() => handleToggle()}>Cancel</Button>\n <Button\n type=\"primary\"\n disabled={textValue === noteText}\n onClick={() => onNoteSave(textValue)}\n >\n Save\n </Button>\n </Row>\n </EditNoteCard>\n );\n};\n\nexport default EditNoteContent;\n","import React, { useCallback } from 'react';\n// models\nimport { CompanyNotification } from '@models/Company';\nimport { PopoverProps } from 'antd/lib/popover';\n// redux\nimport { useDispatch } from 'react-redux';\nimport { actions } from '@redux/company/notes/search';\n// components\nimport EmptyPopover from '../common/popover/EmptyPopover';\nimport EditNoteContent from './EditNoteContent';\n\ninterface PopoverEditNote extends PopoverProps {\n isOpen: boolean;\n toggle: () => void;\n record: CompanyNotification;\n /**\n * close popover automatically after saving company to list.\n */\n autoClose?: boolean;\n}\n\nconst PopoverEditNote: React.FC<PopoverEditNote> = ({\n isOpen,\n toggle,\n\n autoClose,\n record,\n ...restProps\n}) => {\n // local state\n const dispatch = useDispatch();\n const handleToggle = useCallback(\n (manualClose?: boolean) => {\n if (!manualClose || autoClose) {\n toggle();\n }\n },\n [toggle, autoClose]\n );\n\n const updateNote = useCallback(\n (text: string) => dispatch(actions.updateNote(record, text)),\n [dispatch, record]\n );\n\n return (\n <EmptyPopover\n placement=\"topLeft\"\n content={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditNoteContent\n handleToggle={() => handleToggle()}\n noteText={record && record.note_text}\n onNoteSave={noteText => {\n updateNote(noteText);\n handleToggle();\n }}\n />\n }\n visible={isOpen}\n overlayClassName=\"edit-note-popover\"\n onVisibleChange={handleToggle}\n {...restProps}\n />\n );\n};\n\nPopoverEditNote.defaultProps = {\n isOpen: false,\n toggle: () => {},\n autoClose: true,\n};\n\nexport default PopoverEditNote;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { Company, Addon } from '@models/Company';\nimport { CustomValue } from '@optx/features/company/edit-fields/state/interfaces';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// services\nimport { CompanyService } from '@optx/services/api';\n// redux\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport {\n selectors as addonSelectors,\n actions as addonActions,\n} from '@redux/company/addon-management';\nimport { actions as editFieldActions } from '@optx/features/company/edit-fields/state';\n// components\nimport Popconfirm from '@optx/shared/view/molecules/Popconfirm/Popconfirm';\n\ninterface RemoveAsAddonProps {\n record: Company;\n}\n\nconst RemoveAsAddon: React.FC<RemoveAsAddonProps> = ({ record }) => {\n const dispatch = useDispatch();\n const { addon, company_id: companyId, addon_sync_et: addonSyncEt } = record;\n const companyProfileName = useSelector(profileSelectors.getCompanyName);\n const relatedListsIds = useSelector(\n addonSelectors.getOriginAdditionalFilterRelatedListsIds(companyId)\n );\n\n const handleConfirm = () => {\n let payload = {\n companyId,\n value: {\n value: false,\n optionalValue: false,\n } as unknown as CustomValue,\n successMessage: 'Add-on updated successfully!',\n errorMessage: 'Add-on update failed, Server error!',\n };\n\n if (Object.keys(addon || {}).includes(companyProfileName)) {\n const normalizedAddon = Object.entries(addon as Addon).filter(\n ([key, _]) => key !== companyProfileName\n );\n\n if (normalizedAddon.length) {\n payload = {\n ...payload,\n value: {\n value: true,\n optionalValue: Object.fromEntries(normalizedAddon),\n },\n };\n }\n\n dispatch(\n editFieldActions.updateFields({\n companyUrl: record.company_url,\n companyId: companyId,\n value: payload,\n service: CompanyService.updateAddon,\n fieldName: 'Add-on',\n isFromHistory: false,\n canBeDuplicatedLoader: true,\n })\n );\n\n if (relatedListsIds.length) {\n dispatch(\n addonActions.removeCompanyFromAddonManagement({\n list_id: relatedListsIds,\n company_id: companyId,\n })\n );\n }\n } else if (relatedListsIds.length) {\n dispatch(\n addonActions.removeCompanyFromAddonManagement({\n list_id: relatedListsIds,\n company_id: companyId,\n })\n );\n } else {\n const normalizedAddon =\n addonSyncEt && addonSyncEt !== DEFAULT_EMPTY_VALUE\n ? Object.entries(addon as Addon).filter(([key, _]) => key !== addonSyncEt)\n : [];\n\n if (normalizedAddon.length) {\n payload = {\n ...payload,\n value: {\n value: true,\n optionalValue: Object.fromEntries(normalizedAddon),\n },\n };\n }\n\n dispatch(\n editFieldActions.updateFields({\n companyUrl: record.company_url,\n companyId: companyId,\n value: payload,\n service: CompanyService.updateAddon,\n fieldName: 'Add-on',\n isFromHistory: false,\n canBeDuplicatedLoader: true,\n })\n );\n }\n };\n\n return (\n <Popconfirm title=\"as Add-on\" onConfirm={() => handleConfirm()} action=\"Remove\">\n <div>Remove as Add-on</div>\n </Popconfirm>\n );\n};\n\nexport default RemoveAsAddon;\n","import React from 'react';\nimport { DropdownAddMenuItemProps } from '@models/DropdownAdd';\nimport { Menu } from 'antd';\n\nconst { Item } = Menu;\n\nconst DropdownAddMenuItem: React.FC<DropdownAddMenuItemProps> = ({\n value,\n isVisible,\n render,\n onClick,\n actionIndex,\n index,\n className,\n ...rest\n}) => {\n return isVisible === undefined || isVisible === true ? (\n <Item\n key={index}\n className={'ant-dropdown-menu-item ' + (className || '')}\n onClick={() => {\n document.body.classList.remove('popover-visible');\n actionIndex(index);\n }}\n {...rest}\n >\n {value || (render && render())}\n </Item>\n ) : null;\n};\n\nexport default DropdownAddMenuItem;\n","import styled from 'styled-components';\nimport { Menu } from 'antd';\n\nconst DropdownMenu = styled(Menu)`\n &.ant-menu-root {\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n }\n\n .ant-menu-item,\n .ant-menu-item:not(:last-child) {\n line-height: 22px;\n margin: 0;\n padding: 5px 12px;\n height: auto;\n }\n .ant-menu-item.ant-menu-item-selected {\n background: transparent none;\n }\n\n .ant-menu-title-content {\n width: 100%;\n }\n\n .ant-menu-item.add-on {\n overflow: visible;\n }\n`;\nexport const Styled = {\n DropdownMenu,\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// models\nimport { DropdownAddItem } from '@models/DropdownAdd';\nimport DropdownAddMenuItem from './DropdownAddMenuItem';\n// utils\nimport { verifyAccess } from '@utils/verifyAccess';\n// redux\nimport { selectors } from '@redux/user/information';\nimport { Styled } from './DropdownAddMenu.styled';\n\ninterface DropdownAddMenuProps {\n items: DropdownAddItem[];\n actionIndex: (value: number | undefined) => void;\n}\n\nconst DropdownAddMenu: React.FC<DropdownAddMenuProps> = ({\n items,\n actionIndex,\n ...menuItemProps\n}) => {\n const components = useSelector(selectors.authorizedComponents);\n\n return (\n <>\n <Styled.DropdownMenu className=\"dropdown-add\" selectable={false}>\n {items.map((item, index, array) => {\n const component = (\n <DropdownAddMenuItem actionIndex={actionIndex} {...item} key={item.key} index={index} />\n );\n\n return !item.accessFor\n ? component\n : verifyAccess(components, item.accessFor)\n ? component\n : null;\n })}\n </Styled.DropdownMenu>\n </>\n );\n};\n\nexport default DropdownAddMenu;\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// utils\nimport { handlePendoAction } from '@optx/utils/utils';\n// redux\nimport { selectors as favoriteSelectors, actions as favoriteActions } from '@redux/favorites';\n\n/**\n * Hook used to toggle a company favorite status.\n * @param companyId company identifier.\n */\nexport const useCompanyFavorite = (companyId: number) => {\n const dispatch = useDispatch();\n const isFavorite = useSelector((state: any) => favoriteSelectors.isFavorite(state, companyId));\n\n const toggleFavorite = useCallback(\n (callback?: () => void) => {\n if (isFavorite) {\n dispatch(favoriteActions.deleteFavorite(companyId));\n } else {\n dispatch(favoriteActions.addFavorite(companyId, callback));\n }\n\n window.pendo.track(handlePendoAction('AddToFavorites'));\n },\n [dispatch, isFavorite, companyId]\n );\n\n return {\n isFavorite,\n toggleFavorite,\n };\n};\n","import React from 'react';\n\ninterface FavoriteButtonProps\n extends React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n > {\n isFavorite?: boolean;\n}\n\nexport const FavoriteButton: React.FC<FavoriteButtonProps> = ({\n isFavorite,\n children,\n ...restProps\n}) => {\n return (\n <button type=\"button\" {...restProps}>\n {isFavorite ? 'Remove from Favorites' : 'Add to Favorites'}\n </button>\n );\n};\n\nFavoriteButton.defaultProps = {\n className: 'p-0',\n};\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Dictionary } from 'lodash';\nimport { ZoomInOutlined, EllipsisOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons';\nimport { Dropdown, Button } from 'antd';\nimport { stringify, parse } from 'query-string';\nimport { useLocation, useHistory } from 'react-router-dom';\n// models\nimport { DropdownAddProps, DropdownAddItem } from '@models/DropdownAdd';\nimport { Company, CompanyNotification } from '@models/Company';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { SelectOption } from '@optx/models/Option';\nimport { ReferrerUrlParam } from '@models/routes';\nimport { EquityTouchFetchedField } from '@models/equityTouch';\n// constants\nimport { FAVORITE_LIST_ID } from '@constants/lists';\nimport { CompanyProfileTabs } from '@optx/constants/routes';\nimport { ADVANCED_SEARCH } from '@optx/constants/pendoAction';\nimport { CompanyPageAddOnMGMT } from '@optx/constants/pendoActions';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { CompanyService, UserService } from '@optx/services/api';\n// utils\nimport { sendPendoData, trackMyCompaniesPendoActions, handlePendoAction } from '@optx/utils/utils';\nimport { hasEditPermission } from '@utils/lists';\nimport { geEquityTouchURL, stringifyReferrerUrlParam, getAddToSalesLoftURL } from '@utils/routes';\nimport { convertToURL } from '@utils/url';\nimport { handleMenuVisibleChange } from '@utils/menu';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { actions as etActions } from '@redux/company/equity-touch';\nimport { selectors as individualEditSelectors } from '@components/feature/company-individual-edit/state';\n// hooks\nimport useUpdateFields from '@optx/features/company/edit-fields/hooks/useUpdateFields';\nimport { useInitWatchListsIncludingCompany } from '@optx/common/hooks/init';\nimport { useHistoryTab } from '@optx/common/hooks/history/useHistoryTab';\nimport { useDropdownAdd } from '@components/DropdownAdd/useDropdownAdd';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\n// IMPORTANT: useInitWatchListsIncludingCompany should be before this import or all will break.\n// components\nimport { EditRationaleProfile } from '@components/feature/company-individual-edit/components';\nimport Icon from '@components/common/Icon';\nimport {\n EditFieldCheckBoxSelectAsync,\n EditFieldSingleSelect,\n EditFieldText,\n EditFieldRadio,\n} from '@optx/features/company/edit-fields/components';\nimport { DropdownAddContext } from './DropdownAddContext';\nimport PopoverSelectWatchList from './AddCompanyToListPopover';\nimport PopoverEditNote from './PopoverEditNote';\nimport RemoveAsAddon from './RemoveAsAddon';\nimport DropdownAddMenu from './DropdownAddMenu';\nimport { FavoriteButton, useCompanyFavorite } from '@optx/features/company/favorites';\n\nconst DropdownAdd: React.FC<DropdownAddProps> = ({\n record,\n index,\n deleteNote,\n editNote,\n isBlue = false,\n fromNotesPage,\n className,\n view,\n}) => {\n const {\n is_in_et: isInEt,\n note_unique_id: noteId,\n et_url: companyEtUrl,\n links,\n stage,\n pipeline_rank: rank,\n company_owner: companyOwner,\n addon,\n company_id: companyId,\n company_name: companyName,\n company_url: companyUrl,\n company_owner: companyOwnerName,\n lead_source: leadSource,\n senior_advisor_thesis: seniorAdvisor,\n fund,\n linkedin,\n url_status: urlStatus,\n next_steps: nextSteps,\n } = (record as CompanyNotification & Company) || {};\n\n const getIsPartnerOnly = useSelector(userSelectors.getIsPartnerOnly);\n const hasReviewAccess = useSelector(userSelectors.getHasAccessToReviewCompany);\n\n const company = record as Company;\n\n const {\n filterListId,\n favoritesLists,\n toggleSelectList,\n openDropdownSelectList,\n // toggleCompanyNotesModal,\n toggleCompanyTouchesModal,\n toggleAddResearchRationale,\n deleteFromWatchList,\n openEditNotePopover,\n toggleEditNote,\n openRationalePopover,\n toggleRationale,\n removeNote,\n companyReview,\n toggleEditAllModal,\n toggleCompanyEditFavoritesTab,\n } = useDropdownAdd(companyId, companyName, company, index, noteId);\n\n const history = useHistory();\n const location = useLocation();\n const { tab } = parse(location.search);\n const dispatch = useDispatch();\n const { updateHistoryFields } = useHistoryTab();\n const { updateField } = useUpdateFields({\n fieldName: 'Company Owner',\n companyUrl: record?.company_url ?? null,\n companyId,\n service: CompanyService.updateCompanyData,\n });\n const userLastName = useSelector(userSelectors.getLastName);\n const userFullName = useSelector(userSelectors.getFullName);\n const currentCompanyOwnerName = useRef<string>('');\n const currentGridName = useCurrentGridName();\n const companyOwnerOptions = useSelector(\n individualEditSelectors.companyIndividualEdit.companyOwnerOptions\n );\n const owner: SelectOption | undefined = companyOwnerOptions.find(\n option => option.label === userLastName\n );\n\n const handleCallback = useCallback(\n (data?: SuccessErrorCallback, showHistory?: boolean) => {\n if (data) {\n if (showHistory) {\n updateHistoryFields({\n afterValue: currentCompanyOwnerName.current,\n beforeValue: companyOwner === 'Unowned' ? 'None' : companyOwner,\n fieldChanged: 'Company Owner',\n });\n }\n }\n },\n [companyOwner, updateHistoryFields]\n );\n\n const components = useSelector(userSelectors.authorizedComponents);\n const addOwner = useCallback(\n (companyOwnerId, companyOwnerName) => {\n currentCompanyOwnerName.current = companyOwnerName;\n const value: SelectOption = {\n label: companyOwnerName,\n value: companyOwnerId,\n };\n updateField(value, 'deal_team_leader', undefined, handleCallback);\n },\n [handleCallback, updateField]\n );\n\n const etUrl = (links?.['Equity Touch'] || companyEtUrl) ?? '';\n\n const isAdmin = Object.keys(components).includes('admin_portal_link');\n\n const hasTouchAccess = useSelector(userSelectors.getHasAccessToTouches);\n\n const [initializeCompanyLists, setInitializeCompanyLists] = useState(false);\n\n const [dropdownVisible, setDropdownVisible] = useState(false);\n\n const [targetOffset, setTargetOffset] = useState<[number, number]>([0, 0]);\n\n const { isFavorite, toggleFavorite } = useCompanyFavorite(companyId);\n\n useInitWatchListsIncludingCompany(companyId, initializeCompanyLists);\n\n useEffect(() => {\n return () => {\n if (!dropdownVisible || (dropdownVisible && window.location.pathname.includes('lists'))) {\n document.body.classList.remove('popover-visible');\n }\n };\n }, [dropdownVisible]);\n\n const fetchFormData = useCallback(\n (id: string, cb: (data: Dictionary<EquityTouchFetchedField>) => void) =>\n dispatch(etActions.fetchEquityTouchFormData(Number(id), cb)),\n [dispatch]\n );\n\n const companyInfoParams = stringify(\n { id: companyId, name: companyName, url: companyUrl },\n { arrayFormat: 'comma' }\n );\n\n const handleAddToEtClick = () => {\n dispatch(etActions.resetAddToEquityTouch());\n fetchFormData(companyId.toString(), (data: Dictionary<EquityTouchFetchedField>) => {\n if (Object.keys(data).length) {\n const searchParams: ReferrerUrlParam = parse(location.pathname);\n history.push(\n geEquityTouchURL(\n companyId,\n `${stringifyReferrerUrlParam(\n searchParams.referrer ? searchParams.referrer : location.pathname\n )}&${companyInfoParams}`\n )\n );\n } else {\n NotificationService.error(\n 'Error in communication with EquityTouch. Please contact support team.'\n );\n }\n });\n };\n\n const handlePendoActionDropdown = (action: string, callback?: () => void) => {\n if (currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_ThreeDotsAction_${action}`);\n }\n\n if (currentGridName === 'My Companies') {\n trackMyCompaniesPendoActions(action);\n }\n\n callback && callback();\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const items: DropdownAddItem[] = !fromNotesPage\n ? [\n {\n value: 'Verify Key Info',\n onClick: () => {\n toggleAddResearchRationale(() => handlePendoActionDropdown('VerifyKeyInfo'));\n trackMyCompaniesPendoActions('VerifyKeyInfo');\n },\n isVisible: !getIsPartnerOnly,\n key: 'item-1',\n },\n {\n value: 'Add to Equity Touch',\n onClick: handleAddToEtClick,\n isVisible: !isInEt,\n key: 'item-2',\n },\n {\n value: 'Add to Sales Loft Cadence',\n onClick: () => {\n trackMyCompaniesPendoActions('AddToSalesLoftCadence');\n history.push(getAddToSalesLoftURL(companyId, companyInfoParams));\n handlePendoActionDropdown('AddToSalesLoftCadence');\n },\n key: 'item-3',\n },\n {\n value: '',\n onClick: () => {\n if (window.location.pathname.startsWith('/profile/')) {\n window.pendo.track(handlePendoAction('OpenURLInNewTab'));\n } else {\n handlePendoActionDropdown('OpenURLNewTab');\n }\n\n toggleDropdownVisible();\n },\n render: () => (\n <a href={`/profile/${companyId}`} target=\"_blank\" rel=\"noopener noreferrer\">\n Open URL in new tab\n </a>\n ),\n key: 'item-4',\n },\n {\n value: '',\n onClick: () => {\n if (window.location.pathname.startsWith('/profile/')) {\n window.pendo.track(handlePendoAction('OpenInEquityTouch'));\n } else {\n handlePendoActionDropdown('OpenInEquityTouch');\n }\n\n toggleDropdownVisible();\n },\n render: () => (\n <a href={convertToURL(etUrl) || undefined} target=\"_blank\" rel=\"noopener noreferrer\">\n Open in Equity Touch\n </a>\n ),\n\n isVisible: etUrl !== '',\n key: 'item-5',\n },\n\n {\n value: '',\n render: () => <FavoriteButton isFavorite={isFavorite} />,\n onClick: () => {\n toggleFavorite(() => handlePendoActionDropdown('AddToFavorites'));\n toggleDropdownVisible();\n },\n key: 'item-6',\n },\n // { value: ' Create a note', onClick: () => toggleCompanyNotesModal(), key: 'item-7' },\n {\n value: ' Add Touch Note',\n onClick: () => {\n trackMyCompaniesPendoActions('AddTouchNote');\n toggleCompanyTouchesModal(() => handlePendoActionDropdown('AddTouchNote'));\n },\n isVisible: isInEt && hasTouchAccess,\n key: 'item-25',\n },\n {\n value: `Remove from ${favoritesLists[filterListId]?.title} Watchlist`,\n isVisible:\n !!filterListId &&\n filterListId !== FAVORITE_LIST_ID &&\n !!favoritesLists[filterListId] &&\n hasEditPermission(favoritesLists[filterListId]?.share_permission),\n onClick: () => deleteFromWatchList(filterListId, companyId),\n key: 'item-8',\n },\n {\n value: 'Create or add to watchlist',\n onClick: () => {\n trackMyCompaniesPendoActions('CreateOrAddToWatchlist');\n toggleSelectList();\n },\n key: 'item-9',\n },\n {\n value: 'Claim as Owner',\n onClick: () => addOwner(owner?.value, owner?.label),\n isVisible: userFullName !== companyOwnerName && !isAdmin && isInEt,\n accessFor: 'analyst_general',\n key: 'item-10',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <EditFieldSingleSelect\n value={stage}\n record={record as Company}\n isFromGrid\n isFromGridDropDown\n dropdownLabel=\"Edit Stage\"\n callbackComponent={() => handlePendoActionDropdown('EditStage')}\n hidePenIcon\n service={CompanyService.updateCompanyData}\n successMessage=\"Company stage updated successfully!\"\n errorMessage=\"Company stage update failed, Server error!\"\n fieldName=\"Stage\"\n fieldKey=\"stage\"\n actionPendo={handlePendoAction('EditStage')}\n />\n ),\n isVisible: isInEt,\n key: 'item-11',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <EditFieldSingleSelect\n value={nextSteps}\n record={record as Company}\n isFromGrid\n isFromGridDropDown\n dropdownLabel=\"Edit Next Steps\"\n hidePenIcon\n service={UserService.updateCompanyUserValues}\n successMessage=\"Company next steps updated successfully!\"\n errorMessage=\"Company next steps update failed, Server error!\"\n fieldName=\"Next Steps\"\n actionPendo={handlePendoAction('NextSteps')}\n />\n ),\n isVisible: tab === CompanyProfileTabs.ADDON_MGMT && !isBlue,\n key: 'item-12',\n },\n {\n value: '',\n onClick: () => {},\n render: () => <RemoveAsAddon record={record as Company} />,\n isVisible: tab === CompanyProfileTabs.ADDON_MGMT && !isBlue,\n key: 'item-13',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <EditFieldSingleSelect\n fieldName=\"Pipeline Rank\"\n fieldKey=\"rank\"\n value={rank}\n isFromGrid\n isFromGridDropDown\n callbackComponent={() => handlePendoAction('SetPipelineRank')}\n dropdownLabel=\"Set Pipeline Rank\"\n service={CompanyService.updateCompanyData}\n successMessage=\"Pipeline rank updated successfully!\"\n errorMessage=\"Company pipeline rank update failed, Server error!\"\n hidePenIcon\n record={record as Company}\n actionPendo={handlePendoAction('SetPipelineRank')}\n />\n ),\n isVisible: isInEt,\n key: 'item-14',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <EditFieldSingleSelect\n fieldName=\"Fund\"\n fieldKey=\"fund\"\n record={record as Company}\n value={fund}\n isFromGrid\n callbackComponent={() => handlePendoAction('SetFund')}\n isFromGridDropDown\n hidePenIcon\n dropdownLabel=\"Set Fund\"\n successMessage=\"Company fund updated successfully!\"\n errorMessage=\"Company fund update failed, Server error!\"\n service={CompanyService.updateCompanyData}\n actionPendo={handlePendoAction('SetFund')}\n />\n ),\n isVisible: isInEt,\n key: 'item-15',\n },\n {\n value: 'Set Rationale',\n onClick: () => {\n trackMyCompaniesPendoActions('SetRationale');\n toggleRationale();\n },\n isVisible: isInEt,\n key: 'item-16',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <EditFieldSingleSelect\n value={companyOwner}\n record={record as Company}\n isFromGrid\n isFromGridDropDown\n callbackComponent={() => handlePendoAction('ChangeOwnership')}\n dropdownLabel=\"Change Ownership\"\n hidePenIcon\n service={CompanyService.updateCompanyData}\n successMessage=\"Company owner updated successfully!\"\n errorMessage=\"Company owner update failed, Server error!\"\n fieldName=\"Company Owner\"\n fieldKey=\"deal_team_leader\"\n actionPendo={handlePendoAction('ChangeOwnership')}\n />\n ),\n isVisible: isInEt,\n key: 'item-17',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <EditFieldSingleSelect\n value={leadSource}\n record={record as Company}\n isFromGrid\n isFromGridDropDown\n callbackComponent={() => handlePendoAction('ChangeLeadSource')}\n dropdownLabel=\"Change Lead Source\"\n hidePenIcon\n service={CompanyService.updateCompanyData}\n successMessage=\"Lead Source updated successfully!\"\n errorMessage=\"Company fund update failed, Server error!\"\n fieldName=\"Lead Source\"\n fieldKey=\"lead_source\"\n actionPendo={handlePendoAction('ChangeLeadSource')}\n />\n ),\n isVisible: isInEt && leadSource !== undefined,\n key: 'item-18',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <EditFieldSingleSelect\n value={seniorAdvisor}\n record={record as Company}\n isFromGrid\n isFromGridDropDown\n callbackComponent={() => handlePendoAction('ChangeSeniorAdvisorThesis')}\n dropdownLabel=\"Change Senior Advisor Thesis\"\n hidePenIcon\n service={CompanyService.updateCompanyData}\n successMessage=\"Senior Advisor Thesis updated successfully!\"\n errorMessage=\"Company senior advisor thesis update failed, Server error!\"\n fieldName=\"Senior Advisor Thesis\"\n fieldKey=\"senior_advisor_thesis\"\n actionPendo={handlePendoAction('ChangeSeniorAdvisorThesis')}\n />\n ),\n isVisible: isInEt && seniorAdvisor !== undefined,\n key: 'item-19',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <EditFieldCheckBoxSelectAsync\n fieldName=\"Add-on\"\n record={record as Company}\n value={addon}\n isFromGridDropDown\n callbackComponent={() => handlePendoAction('MakeAnAddon')}\n service={CompanyService.updateAddon}\n hidePenIcon\n dropdownLabel=\"Make an Add-on\"\n successMessage=\"Add-on updated successfully!\"\n errorMessage=\"\"\n isFromGrid\n getPopupContainer={trigger => trigger.parentNode as HTMLElement}\n actionPendo={handlePendoAction('MakeAnAddon')}\n />\n ),\n isVisible: isInEt && leadSource !== undefined,\n key: 'item-20',\n className: 'add-on',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <EditFieldText\n value={linkedin}\n record={record as Company}\n isFromGrid={false}\n isFromHistory\n hidePenIcon\n callbackComponent={() => handlePendoAction('EditLinkedinProfile')}\n service={CompanyService.updateLinkedinURL}\n fieldName=\"Linkedin Profile\"\n triggerLabel=\"Edit Linkedin Profile\"\n entityType=\"company\"\n isURL\n actionPendo={handlePendoAction('EditLinkedInProfile')}\n />\n ),\n key: 'item-21',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <EditFieldRadio\n value={urlStatus}\n record={record as Company}\n isFromGrid={false}\n isFromHistory\n callbackComponent={() => handlePendoAction('EditWebsiteStatus')}\n hidePen\n service={UserService.updateCompanyUserValues}\n successMessage=\"Company website status updated successfully!\"\n errorMessage=\"Failed to update value!\"\n fieldName=\"Website Status\"\n triggerLabel=\"Edit Website Status\"\n actionPendo={handlePendoAction('EditWebsiteStatus')}\n />\n ),\n isVisible: companyUrl !== null,\n key: 'item-22',\n },\n {\n value: 'Mark as reviewed',\n onClick: () => {\n companyReview();\n },\n isVisible: getIsPartnerOnly || hasReviewAccess,\n key: 'item-23',\n },\n {\n value: 'Edit Company Info',\n onClick: () => {\n toggleEditAllModal();\n },\n key: 'item-28',\n },\n {\n value: 'Edit Favorites Field',\n onClick: () => toggleCompanyEditFavoritesTab(),\n key: 'item-29',\n },\n ]\n : [\n {\n value: '',\n render: () => (\n <div>\n <EditOutlined />\n Edit Note\n </div>\n ),\n onClick: toggleEditNote,\n isVisible: editNote,\n key: 'item-24',\n },\n {\n value: '',\n render: () => (\n <div>\n <DeleteOutlined />\n Delete Note\n </div>\n ),\n onClick: removeNote,\n isVisible: deleteNote,\n key: 'item-26',\n },\n {\n value: '',\n onClick: () => {},\n render: () => (\n <a\n href={`/profile/${companyId}?tab=${CompanyProfileTabs.RELATIONSHIP_MANAGEMENT}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <ZoomInOutlined />\n View on Company Profile\n </a>\n ),\n key: 'item-27',\n },\n ];\n\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const handleVisibleChange = (visible: boolean) => {\n if (visible && view === 'table') {\n const trigger = triggerRef.current;\n\n if (trigger) {\n const boundingLimits = trigger.getBoundingClientRect();\n const { top, height } = boundingLimits;\n\n const page = window.location.pathname;\n let menuHeight = 0;\n\n if (page.includes('my-companies')) {\n menuHeight = 544;\n } else if (page.includes('profile')) {\n const addonTableClass = document.getElementsByClassName('addon-management-grid-wrapper');\n\n if (addonTableClass) {\n window.pendo.track(CompanyPageAddOnMGMT.sortByAction);\n }\n\n menuHeight = company.is_in_et ? 640 : 288;\n } else if (page.includes('checklist-research-insights')) {\n menuHeight = company.is_in_et ? 544 : 188;\n }\n\n // add a +10 offset to prevent scroll on bottom issue\n const yCoord = top - menuHeight < 0 ? 200 : menuHeight + height + 10;\n\n // adding a positive offset means it goes up on y-axis or left on x-axis,\n // relative to the trigger (3-dots ellipsis)\n setTargetOffset([0, yCoord]);\n }\n }\n\n setDropdownVisible(visible);\n handleMenuVisibleChange(visible);\n\n // Use timeout due to menu transition animation being blocked/delayed while the DOM changes and API call are made.\n setTimeout(() => {\n // Initialize company lists on first dropdown open only.\n if (visible && !initializeCompanyLists && !window.location.pathname.includes('user-lists')) {\n setInitializeCompanyLists(true);\n }\n }, 300);\n };\n\n const handleDropdownVisible = useCallback(\n (actionIndex: number | undefined) => {\n if (items[actionIndex as number].value !== '') {\n setDropdownVisible(!dropdownVisible);\n }\n },\n [dropdownVisible, items]\n );\n\n const toggleDropdownVisible = () => {\n setDropdownVisible(!dropdownVisible);\n };\n\n const handleActionsNames = useCallback(\n (actionIndex: number | undefined) => {\n if (typeof actionIndex === 'number') {\n handleDropdownVisible(actionIndex);\n items[actionIndex as number].onClick();\n }\n },\n [handleDropdownVisible, items]\n );\n\n const menu = <DropdownAddMenu items={items} actionIndex={handleActionsNames} />;\n\n return (\n <DropdownAddContext.Provider value={{ dropdownVisible, setDropdownVisible }}>\n <div className=\"dropdown-block dropdown-tags empty-popover-wrapper\">\n <Dropdown\n getPopupContainer={\n view !== 'table' ? trigger => trigger.parentNode as HTMLElement : undefined\n }\n overlay={menu}\n trigger={['click']}\n placement=\"bottomRight\"\n onVisibleChange={handleVisibleChange}\n className={className}\n visible={dropdownVisible}\n overlayStyle={{ zIndex: 1029 }}\n align={{ targetOffset }}\n >\n {isBlue ? (\n <Button\n type=\"text\"\n icon={<Icon iconName=\"three-dots\" className=\"profiledotsbutton\" />}\n ref={triggerRef}\n />\n ) : (\n <EllipsisOutlined ref={triggerRef} />\n )}\n </Dropdown>\n <PopoverSelectWatchList\n companyId={companyId}\n isOpen={openDropdownSelectList}\n callback={() => sendPendoData(handlePendoAction('CreateOrAddToWatchlist'))}\n toggle={toggleSelectList}\n />\n <PopoverEditNote\n record={record as CompanyNotification}\n isOpen={openEditNotePopover}\n toggle={toggleEditNote}\n getPopupContainer={\n view !== 'table' ? trigger => trigger.parentNode as HTMLElement : undefined\n }\n placement=\"leftBottom\"\n destroyTooltipOnHide\n />\n <EditRationaleProfile\n companyId={companyId}\n isOpen={openRationalePopover}\n callback={() => handlePendoAction('SetRationale')}\n toggle={toggleRationale}\n value={company?.rationale ?? ''}\n />\n </div>\n </DropdownAddContext.Provider>\n );\n};\n\nexport default DropdownAdd;\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const TOGGLE_VIEW_TRANSITION = createFeatureActionType(\n featureName,\n 'TOGGLE_VIEW_TRANSITION'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\n\nexport const toggleViewTransition = createAction<boolean>(types.TOGGLE_VIEW_TRANSITION);\n","import { createSelector } from 'reselect';\nimport { selectFeatureState } from '../../selectFeature';\n\nexport const getViewTransition = createSelector(\n selectFeatureState,\n state => state.viewTransition.isViewTransition\n);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n// models\nimport { ViewTransitionState } from './interfaces';\n// constants\nimport { VIEW_TRANSITION_INITIAL_STATE } from '@optx/constants/grid';\n// redux\nimport * as actions from './actions';\n\nconst initialState: ViewTransitionState = VIEW_TRANSITION_INITIAL_STATE;\n\nexport const toggleViewTransitionReducer: CaseReducer<\n ViewTransitionState,\n PayloadAction<boolean>\n> = (draftState, action) => {\n draftState.isViewTransition = action.payload;\n};\n\nconst reducer = createReducer<ViewTransitionState>(initialState, builder =>\n builder.addCase(actions.toggleViewTransition, toggleViewTransitionReducer)\n);\n\nexport default reducer;\n","import { put, select, takeLatest } from 'redux-saga/effects';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport {\n actions as viewTransitionActions,\n selectors as viewTransitionSelectors,\n} from '@features/grid/view-transition';\n\nfunction* resetViewTransitionSaga() {\n const isViewTransition: boolean = yield select(viewTransitionSelectors.getViewTransition);\n\n if (isViewTransition) {\n yield put(viewTransitionActions.toggleViewTransition(false));\n }\n}\n\nexport default function* viewTransitionSaga() {\n yield takeLatest(searchActions.searchCompaniesSuccess, resetViewTransitionSaga);\n}\n","import styled, { css } from 'styled-components';\nimport { Dropdown, Typography, Menu } from 'antd';\nimport { styledColors } from '@optx/utils/theme/colors';\n\nconst DropdownWrapper = styled(Dropdown)`\n width: 210px;\n text-align: left;\n margin-right: 10px;\n`;\n\nconst TriggerWrapper = styled.div`\n display: flex;\n align-items: center;\n\n .anticon {\n margin-left: auto;\n }\n`;\n\nconst SelectedLabel = styled(Typography.Text)`\n color: ${styledColors.blue6};\n font-weight: 500;\n margin-left: 5px;\n`;\n\ninterface MenuWrapperProps {\n $customWidth?: string;\n}\n\nconst MenuWrapper = styled(Menu)<MenuWrapperProps>`\n ${props =>\n css`\n width: ${props.$customWidth ? props.$customWidth : null};\n `}\n max-height: 350px;\n overflow-y: auto;\n\n .ant-dropdown-menu-item {\n .anticon-ellipsis {\n visibility: hidden;\n transform: scale(1.7);\n color: ${styledColors.blue6};\n\n svg {\n width: 22px;\n height: 22px;\n }\n }\n\n &:hover {\n background-color: ${styledColors.blue1};\n .anticon-ellipsis {\n visibility: visible;\n }\n }\n }\n`;\n\nconst MenuItem = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n span.ant-typography-ellipsis-single-line {\n vertical-align: middle;\n }\n`;\n\nexport default {\n DropdownWrapper,\n TriggerWrapper,\n MenuWrapper,\n MenuItem,\n SelectedLabel,\n};\n","import React, { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Button, Menu, MenuProps, Typography, Tag } from 'antd';\nimport { ActionCreatorWithPayload } from '@reduxjs/toolkit';\n// models\nimport { ViewOption, View } from '@models/search';\n// utils\nimport { normalizeViewsColumns } from '@optx/utils/utils';\n// redux\nimport { selectors as savedSearchesSelectors } from '@redux/company/saved-searches';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { actions as modalActions } from '@redux/ui/modals/save-search';\nimport {\n selectors as columnSelectors,\n actions as columnActions,\n} from '@redux/ui/modals/display-column';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information/';\nimport { actions as viewActions } from '@features/grid/view';\n// components\nimport { EllipsisOutlined, DownOutlined } from '@ant-design/icons';\nimport Styled from './GridView.styles';\nimport { GridKeys, GridPayload } from '@optx/models/grid';\n\nconst { Item } = Menu;\nconst { Text } = Typography;\n\ninterface GridViewProps {\n gridKey: GridKeys;\n activeView: View;\n isFromSourcingOutReach?: boolean;\n applyView: ActionCreatorWithPayload<GridPayload<ViewOption>, string>;\n customWidth?: string;\n}\n\nconst GridView: React.FC<GridViewProps> = ({\n gridKey,\n activeView,\n applyView,\n customWidth,\n isFromSourcingOutReach,\n}) => {\n const dispatch = useDispatch();\n const defaultScoreValue = useSelector(userSelectors.getDefaultScore);\n\n const { views } = useSelector(savedSearchesSelectors.getViews);\n const isColumnModalOpen = useSelector(columnSelectors.displayDialog);\n const searchName = useSelector(searchSelectors.getSearchName);\n const [key, setKey] = useState(activeView.id);\n const [visible, setVisible] = useState(false);\n\n const handleItemClick: MenuProps['onClick'] = info => {\n // @ts-ignore\n setKey(info.key);\n setVisible(false);\n const viewData = views.find(view => view.unique_id.toString() === info.key) as ViewOption;\n\n const { validatedColumns, validatedColumnsOrder } = normalizeViewsColumns(\n viewData,\n defaultScoreValue\n );\n\n console.log('dispatch action, gridKey: ', gridKey);\n dispatch(\n applyView({\n gridKey: gridKey,\n data: { ...viewData, columns: validatedColumns, column_order: validatedColumnsOrder },\n })\n );\n };\n\n const handleButton = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n e.stopPropagation();\n const id = e.currentTarget.id;\n dispatch(modalActions.toggleSaveSearchModal(id));\n\n if (isColumnModalOpen) {\n dispatch(columnActions.toggleDisplayColumnDialog());\n }\n\n setVisible(false);\n };\n\n const handleVisible = () => {\n setVisible(!visible);\n };\n\n useEffect(() => {\n if (gridKey === 'myCompanies' && !activeView.label && views && views.length > 1) {\n dispatch(viewActions.checkView(gridKey));\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [views, gridKey]);\n\n useEffect(() => {\n if (activeView.label && !activeView.id) {\n setKey('default');\n } else {\n setKey(activeView.id);\n }\n }, [activeView, searchName]);\n\n const menu = (\n <Styled.MenuWrapper $customWidth={customWidth} selectedKeys={[key.toString()]}>\n {views.map(view => (\n <Item key={view.unique_id} data-label={view.title} onClick={handleItemClick}>\n <Styled.MenuItem>\n <Text\n style={{\n width: 200,\n }}\n ellipsis\n >\n {view.title}\n </Text>\n {view.is_default && <Tag color=\"volcano\">Default Search</Tag>}\n <EllipsisOutlined id={view.unique_id.toString()} onClick={handleButton} />\n </Styled.MenuItem>\n </Item>\n ))}\n </Styled.MenuWrapper>\n );\n\n return (\n <Styled.DropdownWrapper\n visible={visible}\n onVisibleChange={handleVisible}\n overlay={menu}\n trigger={['click']}\n placement=\"bottomLeft\"\n >\n <Button>\n <Styled.TriggerWrapper>\n Grid View:\n <Styled.SelectedLabel ellipsis>{activeView.label || 'Select View'}</Styled.SelectedLabel>\n <DownOutlined />\n </Styled.TriggerWrapper>\n </Button>\n </Styled.DropdownWrapper>\n );\n};\n\nexport default React.memo(GridView);\n","import { Gutter } from 'antd/lib/grid/row';\n\n/**\n * Default horizontal and vertical space between columns containing cards.\n */\nexport const cardRowGutter: [Gutter, Gutter] = [\n { xs: 20, sm: 20, lg: 20, xl: 42 },\n { xs: 20, sm: 20, lg: 20, xl: 42 },\n];\n","import styled, { css } from 'styled-components';\nimport { Tag as $Tag } from 'antd';\n\nconst ContentContainer = styled.div<{ isHeightOverflow?: boolean; isRationaleRequired?: boolean }>`\n .profile-information__subtitle {\n margin-top: 22px;\n padding-top: 14px;\n padding-bottom: ${({ isHeightOverflow }) => (isHeightOverflow ? '0' : '12px')};\n border-top: 1px solid #d9d9d9;\n\n ${({ isRationaleRequired }) =>\n isRationaleRequired &&\n css`\n .subtitle-additional-text {\n color: red;\n }\n `}\n }\n\n .rationale_select-async {\n display: block;\n width: 100%;\n }\n\n .ant-typography {\n padding-bottom: 2px;\n margin-bottom: 0 !important;\n }\n\n .ant-radio-group {\n width: 100%;\n\n .ant-radio-button-wrapper {\n width: 100%;\n }\n\n .ant-radio-button-wrapper-checked {\n z-index: auto;\n }\n }\n`;\n\nconst Tag = styled($Tag)`\n margin-top: 2px;\n margin-bottom: 2px;\n max-width: 100%;\n white-space: inherit;\n word-break: break-word;\n`;\n\nexport const Styled = {\n Tag,\n ContentContainer,\n};\n","import { Row, Typography, Col, Radio } from 'antd';\n// models\nimport { FormRationale } from '@optx/redux/company/filters/interfaces';\n// components\nimport CreateOtherRaionale from '@optx/features/company/edit-fields/components/CreateOtherRationale';\nimport { Styled } from './RationaleSection.styled';\n\nexport interface RationaleSectionProps {\n rationaleOptions: FormRationale[];\n rationaleValue: string | null;\n handleRationaleChange: (value: string) => void;\n showIsOtherOrTag?: (key?: string) => boolean;\n handleOtherChange?: (option: string | null) => void;\n otherRationaleValue?: string | null;\n isRationaleRequired?: boolean;\n isHeightOverflow?: boolean;\n isFromTouch?: boolean;\n}\n\nconst RationaleSection = ({\n rationaleOptions,\n rationaleValue,\n handleRationaleChange,\n showIsOtherOrTag,\n handleOtherChange,\n otherRationaleValue,\n isRationaleRequired,\n isHeightOverflow,\n isFromTouch,\n}: RationaleSectionProps) => {\n return (\n <Styled.ContentContainer\n isHeightOverflow={isHeightOverflow}\n isRationaleRequired={isRationaleRequired}\n >\n {!isFromTouch && (\n <Row className=\"profile-information__subtitle\">\n <Typography.Text>\n Train the algorithm and tell us why{' '}\n <span className=\"subtitle-additional-text\">\n ({isRationaleRequired ? 'required' : 'optional'})\n </span>\n </Typography.Text>\n </Row>\n )}\n <Radio.Group\n buttonStyle=\"solid\"\n onChange={e => handleRationaleChange(e.target.value)}\n value={rationaleValue}\n style={{ width: '100%' }}\n >\n {rationaleOptions?.map(option => (\n <Col key={option.value} style={{ textAlign: 'center', marginTop: 10, padding: 0 }}>\n <Radio.Button style={{ width: '100%' }} value={option.value}>\n {option.label}\n </Radio.Button>\n </Col>\n ))}\n </Radio.Group>\n {!!showIsOtherOrTag && showIsOtherOrTag() && (\n <Row style={{ marginTop: 20, padding: 0 }}>\n <Typography.Text>Please Explain</Typography.Text>\n {!!handleOtherChange && (\n <CreateOtherRaionale\n onInputChange={handleOtherChange}\n isHeightOwerflow={isHeightOverflow}\n />\n )}\n {showIsOtherOrTag('tag') && <Styled.Tag color=\"blue\">{otherRationaleValue}</Styled.Tag>}\n </Row>\n )}\n </Styled.ContentContainer>\n );\n};\n\nexport default RationaleSection;\n","import axios, { AxiosResponse } from 'axios';\nimport JWTStorage from '../storage/localStorage/jwtStorage';\n// constants\nimport appRoutes from '../constants/routes';\nimport { isInIframe } from '@optx/constants/plugin';\n// utils\nimport { deleteCookie } from '@optx/redux/login/utils';\nimport { sendToken } from '@optx/utils/window';\n// storage\nimport { checkPluginVersion } from '@optx/storage/localStorage/pluginStorage';\n// services\nimport NotificationService from '../services/NotificationService';\n\nexport const API_URL = process.env.REACT_APP_API_ROOT || 'http://localhost:8000';\n\nlet refreshToken: string | null = '';\nconst checkInterval = 60 * 1000;\n\nexport const setAxiosAuthorizationHeaders = (token: string | null) => {\n refreshToken = token;\n axios.defaults.headers.common.Authorization = `Bearer ${token}`;\n};\n\n// update axios token if we have it stored in local storage.\nif (JWTStorage.exists()) {\n const token = JWTStorage.getJWT();\n console.log('axios jwt: ', token);\n setAxiosAuthorizationHeaders(token);\n}\n\nlet checkRefreshToken = true;\n\nfunction handleRefreshToken(response: AxiosResponse<any>) {\n checkRefreshToken = false;\n // check usage in getJWT function\n const isPluginVersion2_3 = checkPluginVersion(2.3);\n\n const newRefreshToken = response.headers['jwt-refreshed'];\n\n if (newRefreshToken && newRefreshToken !== refreshToken) {\n setAxiosAuthorizationHeaders(newRefreshToken);\n\n if (!isPluginVersion2_3) {\n document.cookie = `optx_token=${newRefreshToken}; path=/; SameSite=None; Secure;`;\n }\n\n JWTStorage.setJWT(newRefreshToken);\n console.log('save 2: ', newRefreshToken);\n\n sendToken('save-data', newRefreshToken);\n }\n\n setTimeout(() => {\n checkRefreshToken = true;\n }, checkInterval);\n}\n\naxios.interceptors.response.use(\n function onFulfilled(response) {\n // Any status code that lie within the range of 2xx cause this function to trigger\n // Do something with response data\n console.log({ checkRefreshToken });\n\n if (checkRefreshToken) {\n handleRefreshToken(response);\n }\n\n return response;\n },\n function onRejected(error) {\n // Any status codes that falls outside the range of 2xx cause this function to trigger\n // Do something with response error\n if (error && error.response?.status === 401) {\n const authenticationURLRegex = /^.+\\/auth\\/token\\/?$/;\n // check usage in getJWT function\n const isPluginVersion2_3 = checkPluginVersion(2.3);\n\n if (!authenticationURLRegex.test(error.config.url)) {\n // clear JWT and redirect to login when user is not authorized.\n console.log('remove JWT');\n JWTStorage.removeJWT();\n\n const payload = { type: 'clear-data' };\n\n // send message to plugin to clear chrome storage local\n console.log('clear 2');\n\n if (isInIframe) {\n window.parent.postMessage(payload, '*');\n } else {\n window.postMessage(payload, '*');\n }\n\n if (!isPluginVersion2_3) {\n deleteCookie('optx_token');\n }\n\n // Disable notifications until redirect. The user is redirected and the forced lock state will be lost anyway.\n NotificationService.forceLock = true;\n // eslint-disable-next-line\n window.location.replace(appRoutes.login);\n }\n }\n\n return Promise.reject(error);\n }\n);\n","/**\n * @description The storage item name\n * @type {string}\n */\nexport const MENU_COLLAPSED = 'menu_collapsed';\n\n/**\n * @description Set value to localStorage\n * @param {boolean} value item value\n */\nconst setMenuCollapsed = (value: boolean) => {\n localStorage.setItem(MENU_COLLAPSED, value.toString());\n};\n\n/**\n * @description remove menu_collapsed from localStorage\n */\nconst removeMenuCollapsed = () => {\n localStorage.removeItem(MENU_COLLAPSED);\n};\n\nexport default {\n setMenuCollapsed,\n removeMenuCollapsed,\n};\n","import { createSelector } from 'reselect';\nimport { GridKeys } from '@optx/models/grid';\nimport { selectFeatureState } from '../../selectFeature';\n\nexport const getSearchCount = (gridName: GridKeys) =>\n createSelector(selectFeatureState, state => state.searchCount[gridName].searchCount);\n\nexport const getSearchCountLoading = (gridName: GridKeys) =>\n createSelector(selectFeatureState, state => state.searchCount[gridName].loading);\n","import { useEffect } from 'react';\n\nconst useInitialFetch = (\n shouldFetch: boolean,\n fetch: (...props: any) => void,\n ...fetchArgs: any\n) => {\n useEffect(() => {\n shouldFetch && fetch && fetch(...fetchArgs);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // [] is similar to component did mount so is called only once.\n};\n\nexport default useInitialFetch;\n","var _path, _path2, _path3, _path4, _path5;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgAddressBook(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 0v32h24v-32h-24zM18 8.010c2.203 0 3.99 1.786 3.99 3.99s-1.786 3.99-3.99 3.99-3.99-1.786-3.99-3.99 1.786-3.99 3.99-3.99v0zM24 24h-12v-2c0-2.209 1.791-4 4-4v0h4c2.209 0 4 1.791 4 4v2z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 2h3v6h-3v-6z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 10h3v6h-3v-6z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 18h3v6h-3v-6z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 26h3v6h-3v-6z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAddressBook);\nexport default __webpack_public_path__ + \"static/media/address-book.3cb394e6.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgStickyNoteO(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 28,\n viewBox: \"0 0 24 28\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.875 20h-3.875v3.875c0.266-0.094 0.531-0.234 0.641-0.344l2.891-2.891c0.109-0.109 0.25-0.375 0.344-0.641zM17.5 18h4.5v-14h-20v20h14v-4.5c0-0.828 0.672-1.5 1.5-1.5zM24 3.5v16c0 0.828-0.484 1.984-1.062 2.562l-2.875 2.875c-0.578 0.578-1.734 1.062-2.562 1.062h-16c-0.828 0-1.5-0.672-1.5-1.5v-21c0-0.828 0.672-1.5 1.5-1.5h21c0.828 0 1.5 0.672 1.5 1.5z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgStickyNoteO);\nexport default __webpack_public_path__ + \"static/media/sticky-note-o.6d3b4651.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgList(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h8v8h-8zM12 2h20v4h-20zM0 12h8v8h-8zM12 14h20v4h-20zM0 24h8v8h-8zM12 26h20v4h-20z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgList);\nexport default __webpack_public_path__ + \"static/media/list.0deef7cb.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgSearch(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"search\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.008 27.231l-7.58-6.447c-0.784-0.705-1.622-1.029-2.299-0.998 1.789-2.096 2.87-4.815 2.87-7.787 0-6.627-5.373-12-12-12s-12 5.373-12 12 5.373 12 12 12c2.972 0 5.691-1.081 7.787-2.87-0.031 0.677 0.293 1.515 0.998 2.299l6.447 7.58c1.104 1.226 2.907 1.33 4.007 0.23s0.997-2.903-0.23-4.007zM12 20c-4.418 0-8-3.582-8-8s3.582-8 8-8 8 3.582 8 8-3.582 8-8 8z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSearch);\nexport default __webpack_public_path__ + \"static/media/search.6ac6b6bc.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgFileText(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27 0h-24c-1.65 0-3 1.35-3 3v26c0 1.65 1.35 3 3 3h24c1.65 0 3-1.35 3-3v-26c0-1.65-1.35-3-3-3zM26 28h-22v-24h22v24zM8 14h14v2h-14zM8 18h14v2h-14zM8 22h14v2h-14zM8 10h14v2h-14z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFileText);\nexport default __webpack_public_path__ + \"static/media/file-text.001255b5.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgCheckmarkFill(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"checkmark\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27 4l-15 15-7-7-5 5 12 12 20-20z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCheckmarkFill);\nexport default __webpack_public_path__ + \"static/media/checkmark-fill.2f4b8fda.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgCapterra(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 25,\n height: 26,\n viewBox: \"0 0 25 26\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25 0L0 9.53333L11.6379 14.3L16.8103 26L25 0Z\",\n fill: \"#1890FF\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCapterra);\nexport default __webpack_public_path__ + \"static/media/capterra.702d0924.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgFacebook(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 34,\n height: 34,\n viewBox: \"0 0 34 34\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.0938 0.59375H1.90625C1.18027 0.59375 0.59375 1.18027 0.59375 1.90625V32.0938C0.59375 32.8197 1.18027 33.4062 1.90625 33.4062H32.0938C32.8197 33.4062 33.4062 32.8197 33.4062 32.0938V1.90625C33.4062 1.18027 32.8197 0.59375 32.0938 0.59375ZM30.7812 30.7812H23.2303V20.6996H27.4959L28.1357 15.749H23.2303V12.5867C23.2303 11.1512 23.6281 10.175 25.683 10.175H28.3039V5.74531C27.8486 5.68379 26.2941 5.54844 24.4813 5.54844C20.6996 5.54844 18.1115 7.85762 18.1115 12.0945V15.7449H13.8377V20.6955H18.1156V30.7812H3.21875V3.21875H30.7812V30.7812Z\",\n fill: \"white\",\n fillOpacity: 0.7\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFacebook);\nexport default __webpack_public_path__ + \"static/media/facebook.71aceada.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgLinkedin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 34,\n height: 34,\n viewBox: \"0 0 34 34\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.7689 0.59375H3.23105C1.775 0.59375 0.59375 1.775 0.59375 3.23105V30.7689C0.59375 32.225 1.775 33.4062 3.23105 33.4062H30.7689C32.225 33.4062 33.4062 32.225 33.4062 30.7689V3.23105C33.4062 1.775 32.225 0.59375 30.7689 0.59375V0.59375ZM30.7689 30.7812C12.4021 30.7771 3.21875 30.773 3.21875 30.7689C3.22285 12.4021 3.22695 3.21875 3.23105 3.21875C21.5979 3.22285 30.7812 3.22695 30.7812 3.23105C30.7771 21.5979 30.773 30.7812 30.7689 30.7812ZM5.4582 12.8943H10.3268V28.5541H5.4582V12.8943ZM7.89453 10.7533C9.44902 10.7533 10.7164 9.49004 10.7164 7.93145C10.7164 7.56087 10.6434 7.19393 10.5016 6.85156C10.3598 6.50919 10.1519 6.19811 9.8899 5.93608C9.62786 5.67404 9.31678 5.46619 8.97442 5.32437C8.63205 5.18256 8.26511 5.10957 7.89453 5.10957C7.52396 5.10957 7.15701 5.18256 6.81465 5.32437C6.47228 5.46619 6.1612 5.67404 5.89916 5.93608C5.63713 6.19811 5.42927 6.50919 5.28746 6.85156C5.14565 7.19393 5.07266 7.56087 5.07266 7.93145C5.06855 9.49004 6.33184 10.7533 7.89453 10.7533ZM18.2428 20.8062C18.2428 18.7637 18.6324 16.7867 21.1631 16.7867C23.6568 16.7867 23.6938 19.1205 23.6938 20.9375V28.5541H28.5582V19.9654C28.5582 15.749 27.6477 12.5047 22.7217 12.5047C20.3551 12.5047 18.7678 13.8049 18.1156 15.0354H18.05V12.8943H13.3783V28.5541H18.2428V20.8062Z\",\n fill: \"white\",\n fillOpacity: 0.7\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLinkedin);\nexport default __webpack_public_path__ + \"static/media/linkedin.0d6dde7d.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgTwitter(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.5 29.5V2.5H29.5V29.5H2.5ZM0 2C0 0.895431 0.895431 0 2 0H30C31.1046 0 32 0.895431 32 2V30C32 31.1046 31.1046 32 30 32H2C0.895431 32 0 31.1046 0 30V2ZM24.69 10.6755C25.6278 10.5743 26.5384 10.3145 27.3751 9.9536C26.7407 10.8778 25.945 11.7009 25.0372 12.3653C25.0509 12.5677 25.0509 12.77 25.0509 12.9724C25.0509 19.1384 20.3587 26.2423 11.7837 26.2423C9.1423 26.2423 6.68957 25.4767 4.62238 24.1505C4.99699 24.1942 5.35793 24.2079 5.74894 24.2079C7.92824 24.2079 9.93527 23.4696 11.5376 22.2145C9.48957 22.1708 7.76964 20.8282 7.17902 18.9798C7.46886 19.0208 7.75597 19.0509 8.05949 19.0509C8.47377 19.0497 8.88625 18.9964 9.28722 18.8923C7.15168 18.4602 5.54933 16.5817 5.54933 14.3149V14.2575C6.19558 14.6184 6.9179 14.8217 7.65754 14.8509C6.40246 14.0114 5.57941 12.5841 5.57941 10.9653C5.57671 10.138 5.79577 9.32501 6.21379 8.61102C8.50793 11.4411 11.9587 13.2895 15.8278 13.4919C15.7568 13.1446 15.713 12.7837 15.713 12.4227C15.713 9.85243 17.7911 7.7579 20.3751 7.7579C21.0138 7.75649 21.6459 7.88662 22.232 8.14019C22.8182 8.39375 23.3459 8.76532 23.7821 9.23173C24.826 9.02989 25.827 8.64873 26.7407 8.10516C26.3929 9.18305 25.6637 10.097 24.69 10.6755Z\",\n fill: \"#1890FF\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTwitter);\nexport default __webpack_public_path__ + \"static/media/twitter.147e0ddf.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgWebsite(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 38,\n height: 38,\n viewBox: \"0 0 38 38\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M33.0438 30.8494C33.052 30.8371 33.0643 30.8248 33.0725 30.8125C35.759 27.6174 37.375 23.4994 37.375 19C37.375 14.5006 35.759 10.3826 33.0766 7.1875C33.0684 7.1752 33.0561 7.16699 33.0479 7.15469C33.0027 7.10137 32.9617 7.05215 32.9166 7.00293C32.9002 6.98242 32.8838 6.96602 32.8674 6.94551L32.6992 6.75273L32.6951 6.74863C32.6336 6.67891 32.568 6.60918 32.5064 6.53945L32.5023 6.53535C32.3711 6.3959 32.2398 6.25645 32.1045 6.12109L32.1004 6.11699L31.9035 5.92012L31.8912 5.90781C31.8297 5.84629 31.7682 5.78887 31.7066 5.73145C31.6861 5.71094 31.6656 5.69043 31.641 5.66992C31.6 5.62891 31.559 5.59199 31.518 5.55508C31.5057 5.54277 31.4893 5.53047 31.477 5.51406C28.2039 2.47891 23.8193 0.625 19 0.625C14.1807 0.625 9.79609 2.47891 6.51895 5.51406C6.50664 5.52637 6.49023 5.53867 6.47793 5.55508C6.43691 5.59199 6.3959 5.63301 6.35488 5.67402C6.33437 5.69453 6.31387 5.71504 6.28926 5.73555C6.22773 5.79297 6.16621 5.85449 6.10469 5.91191L6.09238 5.92422L5.89551 6.12109L5.89141 6.1252C5.75605 6.26055 5.6248 6.4 5.49355 6.53945L5.48945 6.54355C5.42383 6.61328 5.3623 6.68301 5.30078 6.75273L5.29668 6.75684C5.23926 6.81836 5.18184 6.88398 5.12852 6.94961C5.11211 6.97012 5.0957 6.98652 5.0793 7.00703C5.03418 7.05625 4.99316 7.10957 4.94805 7.15879C4.93984 7.17109 4.92754 7.1793 4.91934 7.1916C2.24102 10.3826 0.625 14.5006 0.625 19C0.625 23.4994 2.24102 27.6174 4.92344 30.8125C4.93164 30.8248 4.94395 30.8371 4.95215 30.8494L5.0793 31.0012C5.0957 31.0217 5.11211 31.0381 5.12852 31.0586L5.29668 31.2514C5.29668 31.2555 5.30078 31.2555 5.30078 31.2596C5.3623 31.3293 5.42383 31.399 5.48945 31.4646L5.49355 31.4688C5.6248 31.6082 5.75605 31.7477 5.8873 31.883L5.89141 31.8871C5.95703 31.9527 6.01855 32.0184 6.08418 32.0799L6.09648 32.0922C6.23184 32.2275 6.37129 32.3588 6.51074 32.4859C9.79609 35.5211 14.1807 37.375 19 37.375C23.8193 37.375 28.2039 35.5211 31.4811 32.4859C31.6208 32.3579 31.7575 32.2266 31.8912 32.0922L31.9035 32.0799C31.9691 32.0143 32.0348 31.9527 32.0963 31.8871L32.1004 31.883C32.2357 31.7477 32.367 31.6082 32.4941 31.4688L32.4982 31.4646C32.5598 31.3949 32.6254 31.3293 32.6869 31.2596C32.6869 31.2555 32.691 31.2555 32.691 31.2514C32.7484 31.1898 32.8059 31.1242 32.8592 31.0586C32.8756 31.0381 32.892 31.0217 32.9084 31.0012C32.9548 30.9517 32.9999 30.9011 33.0438 30.8494V30.8494ZM33.2119 25.0006C32.6459 26.3377 31.8994 27.5764 30.9889 28.7002C29.9634 27.8139 28.8422 27.0449 27.6461 26.4074C28.1219 24.4838 28.4172 22.3715 28.4951 20.1484H34.3809C34.2578 21.826 33.8641 23.4543 33.2119 25.0006ZM34.3809 17.8516H28.4951C28.4172 15.6285 28.1219 13.5162 27.6461 11.5926C28.8479 10.9527 29.9676 10.1816 30.9889 9.2998C32.9682 11.736 34.1521 14.721 34.3809 17.8516V17.8516ZM25.0006 4.78809C26.6289 5.47715 28.1096 6.42871 29.4139 7.62637C28.6562 8.27151 27.8406 8.84543 26.9775 9.34082C26.3336 7.49512 25.5092 5.89141 24.5494 4.60762C24.7012 4.66504 24.8529 4.72656 25.0006 4.78809ZM21.2846 33.5236C20.9072 33.8189 20.5299 34.0445 20.1484 34.1963V26.5879C21.7759 26.7014 23.3763 27.0638 24.8939 27.6625C24.5535 28.6715 24.1598 29.6025 23.7045 30.4434C22.9908 31.7723 22.1541 32.8346 21.2846 33.5236ZM23.7045 7.55664C24.1557 8.40156 24.5535 9.33262 24.8939 10.3375C23.3763 10.9362 21.7759 11.2986 20.1484 11.4121V3.80781C20.5258 3.95957 20.9072 4.18105 21.2846 4.48047C22.1541 5.16543 22.9908 6.22773 23.7045 7.55664V7.55664ZM20.1484 24.2869V20.1484H26.1982C26.1326 21.9613 25.907 23.7209 25.5297 25.3902L25.5174 25.4395C23.7961 24.7867 21.986 24.3982 20.1484 24.2869V24.2869ZM20.1484 17.8516V13.7131C22.027 13.5982 23.8316 13.2004 25.5174 12.5605L25.5297 12.6098C25.907 14.2791 26.1326 16.0346 26.1982 17.8516H20.1484ZM17.8516 20.1484V24.2869C15.973 24.4018 14.1684 24.7996 12.4826 25.4395L12.4703 25.3902C12.093 23.7209 11.8674 21.9654 11.8018 20.1484H17.8516ZM11.8018 17.8516C11.8674 16.0387 12.093 14.2791 12.4703 12.6098L12.4826 12.5605C14.1684 13.2004 15.9689 13.5982 17.8516 13.7131V17.8516H11.8018ZM17.8516 26.5879V34.1922C17.4742 34.0404 17.0928 33.8189 16.7154 33.5195C15.8459 32.8346 15.0051 31.7682 14.2914 30.4393C13.8402 29.5943 13.4424 28.6633 13.102 27.6584C14.6277 27.0596 16.215 26.7027 17.8516 26.5879ZM17.8516 11.4121C16.2241 11.2986 14.6237 10.9362 13.1061 10.3375C13.4465 9.32852 13.8402 8.39746 14.2955 7.55664C15.0092 6.22773 15.8459 5.16133 16.7195 4.47637C17.0969 4.18105 17.4742 3.95547 17.8557 3.80371V11.4121H17.8516ZM12.9994 4.78809C13.1512 4.72656 13.2988 4.66504 13.4506 4.60762C12.4908 5.89141 11.6664 7.49512 11.0225 9.34082C10.1611 8.84863 9.34492 8.27441 8.58613 7.62637C9.89043 6.42871 11.3711 5.47715 12.9994 4.78809V4.78809ZM4.78809 12.9994C5.3541 11.6623 6.10059 10.4236 7.01113 9.2998C8.03242 10.1816 9.15215 10.9527 10.3539 11.5926C9.87813 13.5162 9.58281 15.6285 9.50488 17.8516H3.61914C3.74219 16.174 4.13594 14.5457 4.78809 12.9994ZM3.61914 20.1484H9.50488C9.58281 22.3715 9.87813 24.4838 10.3539 26.4074C9.15781 27.0449 8.03661 27.8139 7.01113 28.7002C5.03184 26.264 3.84788 23.279 3.61914 20.1484V20.1484ZM12.9994 33.2119C11.3711 32.5229 9.89043 31.5713 8.58613 30.3736C9.34492 29.7256 10.1611 29.1555 11.0225 28.6592C11.6664 30.5049 12.4908 32.1086 13.4506 33.3924C13.2988 33.335 13.1471 33.2734 12.9994 33.2119ZM25.0006 33.2119C24.8488 33.2734 24.7012 33.335 24.5494 33.3924C25.5092 32.1086 26.3336 30.5049 26.9775 28.6592C27.8389 29.1514 28.6551 29.7256 29.4139 30.3736C28.1168 31.5663 26.6238 32.5265 25.0006 33.2119V33.2119Z\",\n fill: \"white\",\n fillOpacity: 0.7\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWebsite);\nexport default __webpack_public_path__ + \"static/media/website.70313aac.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgCrunchbase(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.5 29.5V2.5H29.5V29.5H2.5ZM0 2C0 0.895431 0.895431 0 2 0H30C31.1046 0 32 0.895431 32 2V30C32 31.1046 31.1046 32 30 32H2C0.895431 32 0 31.1046 0 30V2ZM13.2077 18.5896L15.3233 19.344L14.9567 19.8589C14.6886 20.2356 14.4439 20.5398 14.2241 20.7596C13.1702 21.8135 11.8853 22.3461 10.3959 22.3461C8.91314 22.3461 7.63185 21.8169 6.57822 20.77L6.57603 20.7678C5.52875 19.7137 5 18.4292 5 16.9408C5 15.4579 5.5293 14.1791 6.57713 13.1313C7.63052 12.0779 8.91214 11.5448 10.3959 11.5448C11.8843 11.5448 13.1689 12.0736 14.223 13.1209L14.2295 13.1273C14.4433 13.348 14.6846 13.6439 14.9522 14.007L15.3281 14.5172L13.2108 15.305L12.9944 15.0416C12.8576 14.8751 12.7488 14.7493 12.6664 14.6609C12.0358 14.0387 11.2879 13.7323 10.3959 13.7323C9.50947 13.7323 8.76283 14.0422 8.13009 14.6749L8.12863 14.6764C7.49784 15.3017 7.18749 16.0473 7.18749 16.9408C7.18749 17.8341 7.49777 18.5834 8.12949 19.2154C8.76173 19.8418 9.50854 20.1492 10.3959 20.1492C11.2904 20.1492 12.04 19.8412 12.6717 19.2154C12.7489 19.1381 12.8557 19.0182 12.9944 18.8493L13.2077 18.5896ZM16.3294 7H18.4703V12.5317C19.4087 11.8787 20.456 11.5448 21.6041 11.5448C23.0932 11.5448 24.3755 12.0773 25.4234 13.1318C26.4713 14.18 27 15.4619 27 16.9501C27 18.4329 26.4708 19.7142 25.424 20.7678L25.4229 20.7689C24.3746 21.8172 23.0925 22.3461 21.6041 22.3461C20.4557 22.3461 19.4084 22.0102 18.4703 21.3537V22.1034H16.3294V7ZM18.4703 17.6845C18.5924 18.245 18.873 18.7542 19.3292 19.2163C19.9606 19.8415 20.71 20.1492 21.6041 20.1492C22.499 20.1492 23.2489 19.8409 23.8807 19.2145C24.5115 18.5892 24.8218 17.8436 24.8218 16.9501C24.8218 16.0565 24.5114 15.3071 23.8792 14.6749C23.2471 14.0428 22.4976 13.7323 21.6041 13.7323C20.7105 13.7323 19.961 14.0428 19.3289 14.6749C18.8736 15.1302 18.5926 15.6388 18.4703 16.2059V17.6845Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCrunchbase);\nexport default __webpack_public_path__ + \"static/media/crunchbase.aaf4f563.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgG2Crowd(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 35,\n height: 36,\n viewBox: \"0 0 35 36\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M18.3436 8.17352L21.6126 1.14025C20.2918 0.810053 17.6506 0.347755 14.5794 0.942133C11.3107 1.63554 8.438 3.02238 5.1687 6.39042C1.20661 11.5415 0.512882 14.5134 0.909123 19.8626C1.30536 25.2119 4.17834 29.6695 7.94239 32.3442C10.518 34.4244 15.075 35.8113 20.523 35.5141C23.2969 35.2169 26.3678 34.0282 28.5469 32.3442C28.4197 32.1216 28.119 31.6337 27.7235 30.9918C26.8868 29.6339 25.6254 27.5869 24.6835 25.9053C21.6127 28.5799 16.3625 28.679 13.5888 27.094C10.8151 25.509 8.73517 22.3391 8.33857 19.1692C7.9524 16.0827 8.68299 13.3937 11.2113 11.0463C13.9853 8.47068 16.6926 8.23956 18.3436 8.17352ZM29.6371 15.603H22.4057C21.8113 15.7021 21.6132 15.9993 21.4151 16.2964C21.2566 16.5342 18.7735 20.9523 17.5518 23.1316H25.6747C26.0709 23.1316 26.269 23.4288 26.4672 23.7259C26.4943 23.7666 26.762 24.2216 27.1592 24.8964L27.1594 24.8968C28.0503 26.4108 29.5923 29.0309 30.5286 30.5611C31.7834 28.4148 34.3524 24.0033 34.5901 23.5278C34.8093 23.0895 34.7052 22.9206 34.5957 22.7429C34.5567 22.6796 34.517 22.6152 34.491 22.5372C34.392 22.24 31.2817 16.9571 30.8258 16.1974C30.5286 15.7021 30.0333 15.603 29.6371 15.603ZM28.4156 10.3528H28.9804H31.0238C31.42 10.3528 31.6244 10.4891 31.6244 10.7863V12.1732C31.6244 12.5694 31.1291 12.5694 30.9309 12.5694H24.1949C23.6697 12.5694 23.6859 12.1055 23.6968 11.7924C23.6982 11.7511 23.6996 11.7125 23.6996 11.6779C23.6996 11.6084 23.6996 11.5605 23.7021 11.5128C23.7077 11.4076 23.7256 11.303 23.7831 10.9674C23.811 10.8049 23.8481 10.5882 23.8977 10.291C24.0457 9.40271 24.563 8.60618 25.1178 7.98504C25.3055 7.77498 25.4974 7.58498 25.6808 7.41827C25.8821 7.23521 26.0869 7.07582 26.29 6.93575C26.8702 6.53564 27.4372 6.29304 27.8745 6.10595C28.1125 6.0041 28.3121 5.91871 28.4544 5.83331C28.9497 5.53613 29.445 4.94177 29.1479 4.05023C28.6464 3.31952 27.4576 3.31951 26.6652 3.6167C26.6073 3.63841 26.5492 3.66721 26.4914 3.7018C26.0044 3.99334 25.5346 4.69626 25.3081 5.03523L25.308 5.03527C25.2439 5.13124 25.1993 5.19803 25.1793 5.21804L23.8915 3.93026C23.824 3.86275 23.778 3.81175 23.7485 3.77031C23.6768 3.66959 23.7025 3.62544 23.7532 3.53846L23.7532 3.53842C23.767 3.51475 23.7826 3.4879 23.7986 3.45587C23.8977 3.25774 24.492 2.56433 24.7892 2.26715C25.7736 1.45375 26.7637 1.16362 28.052 1.25564C29.4388 1.35469 30.3366 1.96996 30.6338 2.26715C31.2946 2.92797 31.6182 3.81482 31.6182 4.80542C31.6182 5.5979 31.1229 6.48944 30.4294 7.0838C30.1203 7.3488 29.1338 7.99185 28.4742 8.35279C28.3941 8.39663 28.3188 8.43631 28.2501 8.47065C28.1398 8.52579 27.9677 8.62408 27.7725 8.74872C27.4773 8.93724 27.1294 9.18602 26.8633 9.4369C26.6732 9.61611 26.5248 9.79639 26.467 9.95655C26.3232 10.3557 26.6326 10.354 26.8336 10.3529L26.8633 10.3528H27.5666H28.4156ZM30.9883 10.5679C30.9886 10.568 30.9827 10.5685 30.9694 10.5689C30.9812 10.5679 30.9879 10.5677 30.9883 10.5679Z\",\n fill: \"white\",\n fillOpacity: 0.7\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgG2Crowd);\nexport default __webpack_public_path__ + \"static/media/g2crowd.291a175b.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgSourcescrub(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 42,\n viewBox: \"0 0 24 42\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M18.1654 0.709352C19.27 1.00996 20.2518 1.37461 21.0427 1.73894L19.5021 4.33675L8.13157 23.5106L6.59399 26.1034C5.87524 25.59 5.08671 24.9045 4.31271 24.0688C0.815484 20.2928 -2.38531 13.4505 2.48603 5.56359C6.3499 -0.6922 13.4003 -0.587395 18.1654 0.709352ZM5.92376 21.3521L16.5676 3.4037C15.2076 3.1008 13.6854 2.92793 12.1731 3.02889C9.37386 3.21575 6.79127 4.30211 5.03842 7.14007C2.56837 11.1392 2.66143 14.6097 3.64745 17.376C4.19235 18.9048 5.02675 20.2536 5.92376 21.3521ZM5.6471 40.8734C4.54248 40.5727 3.56066 40.2081 2.76982 39.8438L4.31038 37.246L15.6809 18.0721L17.2185 15.4793C17.9373 15.9927 18.7258 16.6782 19.4998 17.5139C22.997 21.2899 26.1978 28.1322 21.3265 36.0191C17.4626 42.2749 10.4122 42.1701 5.6471 40.8734ZM17.8887 20.2306L7.24491 38.179C8.60487 38.4819 10.1271 38.6548 11.6394 38.5538C14.4386 38.367 17.0212 37.2806 18.7741 34.4426C21.2441 30.4435 21.1511 26.973 20.1651 24.2067C19.6202 22.6779 18.7858 21.3291 17.8887 20.2306Z\",\n fill: \"white\",\n fillOpacity: 0.7\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSourcescrub);\nexport default __webpack_public_path__ + \"static/media/sourcescrub.d7ee548e.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgEquitytouch(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.5 29.5V2.5H29.5V29.5H2.5ZM0 2C0 0.895431 0.895431 0 2 0H30C31.1046 0 32 0.895431 32 2V30C32 31.1046 31.1046 32 30 32H2C0.895431 32 0 31.1046 0 30V2ZM25.5794 9C26.6262 9 27 10.118 27 10.9565C27 11.795 27 12.5404 26.4766 13.9379C26.1222 14.7582 25.4299 15.3354 24.6822 14.9627C23.9653 14.6054 23.8671 13.7339 23.7943 13.0879L23.785 13.0062C23.7103 12.354 24.0093 9.09317 25.5794 9ZM3 22.2298V24C7.41121 21.5776 19.6729 15.9876 20.4206 16.8261C20.582 17.8318 18.1103 19.3683 16.6282 20.2897L16.6282 20.2897L16.6282 20.2897C16.0508 20.6486 15.6236 20.9142 15.5607 21.0186C15.3364 21.3913 15.7103 21.6708 16.3832 21.4845C17.0561 21.2981 19.7056 19.677 21.5 18L21.5614 17.9299C22.4428 16.9249 23.4078 15.8244 23.2617 12.8199C22.9626 10.3975 21.5421 9.74535 20.4206 9.55902C19.2991 9.37268 16.6075 9.18634 13.8411 9.55902C11.8972 9.93169 8.98131 11.1429 8.53271 11.4224C8.08411 11.7019 8.38318 11.9814 9.20561 11.8882C9.50803 11.8539 10.0502 11.7699 10.6745 11.6731L10.6745 11.6731L10.6746 11.6731C11.9202 11.4799 13.4927 11.236 14.1402 11.236C16.0025 11.236 16.9959 11.4766 17.586 11.6195C17.7303 11.6545 17.8504 11.6836 17.9533 11.7019C18.5514 11.795 18.7757 12.2609 18.4019 12.6335C12.8692 15.4286 3.97196 20.9255 3 22.2298Z\",\n fill: \"currentcolor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgEquitytouch);\nexport default __webpack_public_path__ + \"static/media/equitytouch.0096aadf.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgSimilarweb(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 37,\n height: 37,\n viewBox: \"0 0 37 37\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M13.1285 3.71468L15.4924 0L11.3523 1.49897C9.06799 2.32604 4.2374 5.45507 1.50321 11.6924C-0.245319 15.6813 -0.28947 19.7825 0.463329 23.2236C1.20532 26.6153 2.75769 29.5229 4.4156 31.1309C6.8656 33.6293 9.67634 35.0409 12.2038 35.7088C14.6827 36.3639 17.044 36.3405 18.5799 35.7645C19.5373 35.4055 21.1522 34.5691 22.4969 33.1222C23.8738 31.6406 24.9822 29.4921 24.7397 26.6446L24.736 26.6021L24.73 26.5598C24.5287 25.1509 24.1134 24.0116 23.4683 23.0068C22.8356 22.0214 22.0253 21.2349 21.1469 20.4875C20.6808 20.0911 20.1913 19.7002 19.673 19.2864L19.6729 19.2863C18.2033 18.113 16.5032 16.7556 14.4566 14.5654C10.5338 10.3673 11.9518 5.56367 13.1285 3.71468ZM4.25082 12.8969C5.5497 9.9338 7.38296 7.81887 9.03615 6.4166C8.55863 9.39563 9.04916 13.1725 12.2646 16.6136C14.4767 18.9809 16.4227 20.5338 17.9134 21.7234L17.9135 21.7235C18.3924 22.1057 18.8243 22.4504 19.2029 22.7725C19.9968 23.4479 20.5468 24.0093 20.9438 24.6276C21.323 25.2183 21.6041 25.927 21.7539 26.9412C21.8972 28.7649 21.2119 30.098 20.2993 31.08C19.3475 32.1042 18.1666 32.7155 17.5265 32.9556C16.7664 33.2406 15.0842 33.367 12.9703 32.8084C10.9101 32.264 8.58499 31.1028 6.54525 29.0178L6.53 29.0022L6.5143 28.9871C5.38301 27.8961 4.04755 25.5697 3.39402 22.5824C2.74888 19.6335 2.80436 16.1966 4.25082 12.8969ZM28.1159 18.3479L28.0792 18.3004L28.0406 18.2544C26.5242 16.4465 24.9351 15.1819 23.5349 14.08L23.3983 13.9724C22.0296 12.8957 20.8465 11.9648 19.6748 10.676C18.6575 9.55686 18.5655 8.79345 18.6004 8.30057C18.6457 7.66099 18.9545 6.92059 19.5525 5.97161C19.98 5.38853 21.2631 4.78822 22.9524 5.06977C24.6423 5.35142 28.513 6.73979 31.477 11.2772C34.4336 16.3376 33.6645 22.211 32.2299 25.16C32.0437 25.5427 31.8447 25.9087 31.6352 26.2587C31.5618 22.8334 29.7341 20.4421 28.1159 18.3479ZM17.455 12.694C14.4597 9.39916 15.6578 6.50371 17.0556 4.30715C18.3536 2.41012 21.0494 1.71122 23.4456 2.11059C25.8419 2.50996 30.5345 4.30715 34.029 9.69869C37.6234 15.7891 36.7248 22.7782 34.9276 26.4724C33.8372 28.7138 32.3911 30.4704 30.9139 31.8268C29.0097 33.5753 27.054 34.6589 25.742 35.2586C27.0958 33.792 27.8441 31.943 28.2389 30.1797C28.543 28.8218 28.6375 27.5148 28.6375 26.4724C28.6375 24.0761 27.4393 22.3788 25.742 20.1823C24.3863 18.5659 22.9534 17.4391 21.4932 16.2908C20.1573 15.2403 18.7985 14.1718 17.455 12.694Z\",\n fill: \"white\",\n fillOpacity: 0.7\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSimilarweb);\nexport default __webpack_public_path__ + \"static/media/similarweb.9cd6fd53.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _path4, _path5;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgBvdorbis(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n width: \"100%\",\n viewBox: \"0 0 274 267\",\n enableBackground: \"new 0 0 274 267\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FEFEFF\",\n opacity: 1,\n stroke: \"none\",\n d: \" M158.000000,268.000000 C105.333336,268.000000 53.166668,268.000000 1.000000,268.000000 C1.000000,179.000000 1.000000,90.000000 1.000000,1.000000 C92.333336,1.000000 183.666672,1.000000 275.000000,1.000000 C275.000000,90.000000 275.000000,179.000000 275.000000,268.000000 C236.166672,268.000000 197.333328,268.000000 158.000000,268.000000 M255.494217,182.975739 C287.905304,102.245888 234.538055,15.346217 148.191025,8.250389 C67.070320,1.584051 0.668422,73.905052 13.786524,154.635788 C22.763317,209.880295 67.257156,252.927261 122.506363,259.820190 C179.056244,266.875366 233.143799,235.821884 255.494217,182.975739 z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0050b3\",\n opacity: 1,\n stroke: \"none\",\n d: \" M255.322464,183.320160 C233.143799,235.821884 179.056244,266.875366 122.506363,259.820190 C67.257156,252.927261 22.763317,209.880295 13.786524,154.635788 C0.668422,73.905052 67.070320,1.584051 148.191025,8.250389 C234.538055,15.346217 287.905304,102.245888 255.322464,183.320160 M94.178009,212.342514 C112.052948,222.433640 131.151611,225.989670 151.478897,223.180801 C201.972321,216.203506 236.117722,168.347092 226.925217,117.393143 C218.137131,68.680862 168.591553,35.854282 120.025513,46.566399 C83.813889,54.553524 55.776043,83.559204 50.087345,118.918747 C43.985527,156.846130 60.285854,191.772766 94.178009,212.342514 z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FDFDFE\",\n opacity: 1,\n stroke: \"none\",\n d: \" M93.853561,212.171844 C60.285854,191.772766 43.985527,156.846130 50.087345,118.918747 C55.776043,83.559204 83.813889,54.553524 120.025513,46.566399 C168.591553,35.854282 218.137131,68.680862 226.925217,117.393143 C236.117722,168.347092 201.972321,216.203506 151.478897,223.180801 C131.151611,225.989670 112.052948,222.433640 93.853561,212.171844 M125.686676,169.216919 C139.533310,147.585571 153.379944,125.954239 167.391907,104.064613 C137.248016,104.064613 107.781097,104.064613 77.912476,104.064613 C92.897171,127.444710 107.589783,150.369095 122.566994,173.737518 C123.621132,172.190079 124.432320,170.999268 125.686676,169.216919 M176.076233,171.828003 C191.009140,165.387527 200.378220,152.566452 199.671234,138.510391 C198.912201,123.419624 191.673218,112.456841 177.655167,106.130714 C174.367188,104.646896 172.775497,105.357201 170.898087,108.343407 C160.003387,125.672493 148.885910,142.861526 137.846497,160.099655 C135.112106,164.369400 132.387802,168.645569 129.040482,173.887100 C139.357239,173.887100 148.453964,174.110001 157.533203,173.807831 C163.471024,173.610214 169.383514,172.651672 176.076233,171.828003 z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0050b3\",\n opacity: 1,\n stroke: \"none\",\n d: \" M125.465088,169.512695 C124.432320,170.999268 123.621132,172.190079 122.566994,173.737518 C107.589783,150.369095 92.897171,127.444710 77.912476,104.064613 C107.781097,104.064613 137.248016,104.064613 167.391907,104.064613 C153.379944,125.954239 139.533310,147.585571 125.465088,169.512695 z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8A8E8E\",\n opacity: 1,\n stroke: \"none\",\n d: \" M175.691803,171.930984 C169.383514,172.651672 163.471024,173.610214 157.533203,173.807831 C148.453964,174.110001 139.357239,173.887100 129.040482,173.887100 C132.387802,168.645569 135.112106,164.369400 137.846497,160.099655 C148.885910,142.861526 160.003387,125.672493 170.898087,108.343407 C172.775497,105.357201 174.367188,104.646896 177.655167,106.130714 C191.673218,112.456841 198.912201,123.419624 199.671234,138.510391 C200.378220,152.566452 191.009140,165.387527 175.691803,171.930984 z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgBvdorbis);\nexport default __webpack_public_path__ + \"static/media/bvdorbis.797a16f3.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgFullscreen(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14 28H10V38H20V34H14V28ZM10 20H14V14H20V10H10V20ZM34 34H28V38H38V28H34V34ZM28 10V14H34V20H38V10H28Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFullscreen);\nexport default __webpack_public_path__ + \"static/media/fullscreen.b37cd42e.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgFullscreenExit(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 48,\n height: 48,\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 32H16V38H20V28H10V32ZM16 16H10V20H20V10H16V16ZM28 38H32V32H38V28H28V38ZM32 16V10H28V20H38V16H32Z\",\n fill: \"#fff\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFullscreenExit);\nexport default __webpack_public_path__ + \"static/media/fullscreen-exit.18a0ce9e.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgPeopleOutlined(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 22,\n height: 14,\n viewBox: \"0 0 22 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.5 8C14.3 8 12.43 8.34 11 9C9.57 8.33 7.7 8 6.5 8C4.33 8 0 9.08 0 11.25V14H22V11.25C22 9.08 17.67 8 15.5 8ZM11.5 12.5H1.5V11.25C1.5 10.71 4.06 9.5 6.5 9.5C8.94 9.5 11.5 10.71 11.5 11.25V12.5ZM20.5 12.5H13V11.25C13 10.79 12.8 10.39 12.48 10.03C13.36 9.73 14.44 9.5 15.5 9.5C17.94 9.5 20.5 10.71 20.5 11.25V12.5ZM6.5 7C8.43 7 10 5.43 10 3.5C10 1.57 8.43 0 6.5 0C4.57 0 3 1.57 3 3.5C3 5.43 4.57 7 6.5 7ZM6.5 1.5C7.6 1.5 8.5 2.4 8.5 3.5C8.5 4.6 7.6 5.5 6.5 5.5C5.4 5.5 4.5 4.6 4.5 3.5C4.5 2.4 5.4 1.5 6.5 1.5ZM15.5 7C17.43 7 19 5.43 19 3.5C19 1.57 17.43 0 15.5 0C13.57 0 12 1.57 12 3.5C12 5.43 13.57 7 15.5 7ZM15.5 1.5C16.6 1.5 17.5 2.4 17.5 3.5C17.5 4.6 16.6 5.5 15.5 5.5C14.4 5.5 13.5 4.6 13.5 3.5C13.5 2.4 14.4 1.5 15.5 1.5Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPeopleOutlined);\nexport default __webpack_public_path__ + \"static/media/people-outlined.fde28359.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgPeople(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 22,\n height: 14,\n viewBox: \"0 0 22 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15 6C16.66 6 17.99 4.66 17.99 3C17.99 1.34 16.66 0 15 0C13.34 0 12 1.34 12 3C12 4.66 13.34 6 15 6ZM7 6C8.66 6 9.99 4.66 9.99 3C9.99 1.34 8.66 0 7 0C5.34 0 4 1.34 4 3C4 4.66 5.34 6 7 6ZM7 8C4.67 8 0 9.17 0 11.5V14H14V11.5C14 9.17 9.33 8 7 8ZM15 8C14.71 8 14.38 8.02 14.03 8.05C15.19 8.89 16 10.02 16 11.5V14H22V11.5C22 9.17 17.33 8 15 8Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPeople);\nexport default __webpack_public_path__ + \"static/media/people.f8e8e8a7.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgClose(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.2139 12L19.3662 4.66641C19.4694 4.54453 19.3826 4.35938 19.2233 4.35938H17.3529C17.2428 4.35938 17.1373 4.40859 17.0647 4.49297L11.9904 10.5422L6.91623 4.49297C6.84592 4.40859 6.74045 4.35938 6.62795 4.35938H4.75763C4.59826 4.35938 4.51154 4.54453 4.61467 4.66641L10.767 12L4.61467 19.3336C4.59156 19.3608 4.57674 19.394 4.57196 19.4293C4.56718 19.4647 4.57264 19.5006 4.5877 19.533C4.60275 19.5653 4.62676 19.5926 4.65689 19.6117C4.68701 19.6308 4.72197 19.6408 4.75763 19.6406H6.62795C6.7381 19.6406 6.84357 19.5914 6.91623 19.507L11.9904 13.4578L17.0647 19.507C17.135 19.5914 17.2404 19.6406 17.3529 19.6406H19.2233C19.3826 19.6406 19.4694 19.4555 19.3662 19.3336L13.2139 12Z\",\n fill: \"black\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgClose);\nexport default __webpack_public_path__ + \"static/media/close.0300e0b3.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgChromeClose(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.21388 8L15.3662 0.666406C15.4694 0.544531 15.3826 0.359375 15.2233 0.359375H13.3529C13.2428 0.359375 13.1373 0.408594 13.0647 0.492969L7.99045 6.54219L2.91623 0.492969C2.84592 0.408594 2.74045 0.359375 2.62795 0.359375H0.757634C0.598259 0.359375 0.51154 0.544531 0.614665 0.666406L6.76701 8L0.614665 15.3336C0.591564 15.3608 0.576744 15.394 0.571964 15.4293C0.567183 15.4647 0.572644 15.5006 0.587697 15.533C0.60275 15.5653 0.626763 15.5926 0.656886 15.6117C0.687008 15.6308 0.721975 15.6408 0.757634 15.6406H2.62795C2.7381 15.6406 2.84357 15.5914 2.91623 15.507L7.99045 9.45781L13.0647 15.507C13.135 15.5914 13.2404 15.6406 13.3529 15.6406H15.2233C15.3826 15.6406 15.4694 15.4555 15.3662 15.3336L9.21388 8Z\",\n fill: \"white\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgChromeClose);\nexport default __webpack_public_path__ + \"static/media/chrome-close.51e25547.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgPen(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 19,\n height: 19,\n viewBox: \"0 0 19 19\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 15.2501V19.0001H3.75L14.81 7.94006L11.06 4.19006L0 15.2501ZM17.71 5.04006C18.1 4.65006 18.1 4.02006 17.71 3.63006L15.37 1.29006C14.98 0.900059 14.35 0.900059 13.96 1.29006L12.13 3.12006L15.88 6.87006L17.71 5.04006Z\",\n fill: \"currentColor\",\n fillOpacity: 0.87\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPen);\nexport default __webpack_public_path__ + \"static/media/pen.49edaf44.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgThumbsUp(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 22,\n height: 20,\n viewBox: \"0 0 22 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 20H4V8H0V20ZM22 9C22 7.9 21.1 7 20 7H13.69L14.64 2.43L14.67 2.11C14.67 1.7 14.5 1.32 14.23 1.05L13.17 0L6.59 6.59C6.22 6.95 6 7.45 6 8V18C6 19.1 6.9 20 8 20H17C17.83 20 18.54 19.5 18.84 18.78L21.86 11.73C21.95 11.5 22 11.26 22 11V9.09L21.99 9.08L22 9Z\",\n fill: \"currentColor\",\n fillOpacity: 0.87\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgThumbsUp);\nexport default __webpack_public_path__ + \"static/media/thumbs-up.d563de3d.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgThumbsDown(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 22,\n height: 20,\n viewBox: \"0 0 22 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14 0H5C4.17 0 3.46 0.5 3.16 1.22L0.14 8.27C0.05 8.5 0 8.74 0 9V10.91L0.00999999 10.92L0 11C0 12.1 0.9 13 2 13H8.31L7.36 17.57L7.33 17.89C7.33 18.3 7.5 18.68 7.77 18.95L8.83 20L15.42 13.41C15.78 13.05 16 12.55 16 12V2C16 0.9 15.1 0 14 0ZM18 0V12H22V0H18Z\",\n fill: \"currentColor\",\n fillOpacity: 0.87\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgThumbsDown);\nexport default __webpack_public_path__ + \"static/media/thumbs-down.1b8b284d.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgThumbsUnknown(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 15,\n height: 15,\n viewBox: \"0 0 15 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.04395 0.674377C3.17832 0.674377 0.0439453 3.80875 0.0439453 7.67438C0.0439453 11.54 3.17832 14.6744 7.04395 14.6744C10.9096 14.6744 14.0439 11.54 14.0439 7.67438C14.0439 3.80875 10.9096 0.674377 7.04395 0.674377ZM7.04395 11.7369C6.69863 11.7369 6.41895 11.4572 6.41895 11.1119C6.41895 10.7666 6.69863 10.4869 7.04395 10.4869C7.38926 10.4869 7.66895 10.7666 7.66895 11.1119C7.66895 11.4572 7.38926 11.7369 7.04395 11.7369ZM8.02676 8.30719C7.88525 8.36183 7.7635 8.45785 7.67738 8.58272C7.59125 8.70758 7.54475 8.8555 7.54395 9.00719V9.36188C7.54395 9.43063 7.4877 9.48688 7.41895 9.48688H6.66895C6.6002 9.48688 6.54395 9.43063 6.54395 9.36188V9.02594C6.54395 8.665 6.64863 8.30875 6.85488 8.01188C7.05645 7.72125 7.3377 7.49938 7.66895 7.37282C8.2002 7.16813 8.54395 6.72282 8.54395 6.23688C8.54395 5.54781 7.87051 4.98688 7.04395 4.98688C6.21738 4.98688 5.54395 5.54781 5.54395 6.23688V6.35563C5.54395 6.42438 5.4877 6.48063 5.41895 6.48063H4.66895C4.6002 6.48063 4.54395 6.42438 4.54395 6.35563V6.23688C4.54395 5.62282 4.8127 5.04938 5.3002 4.62282C5.76895 4.21188 6.3877 3.98688 7.04395 3.98688C7.7002 3.98688 8.31894 4.21344 8.78769 4.62282C9.2752 5.04938 9.54395 5.62282 9.54395 6.23688C9.54395 7.14 8.94863 7.9525 8.02676 8.30719Z\",\n fill: \"currentColor\",\n fillOpacity: 0.87\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgThumbsUnknown);\nexport default __webpack_public_path__ + \"static/media/thumbs-unknown.23088329.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgOpenInNew(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 18,\n height: 18,\n viewBox: \"0 0 18 18\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 16H2V2H9V0H2C0.89 0 0 0.9 0 2V16C0 17.1 0.89 18 2 18H16C17.1 18 18 17.1 18 16V9H16V16ZM11 0V2H14.59L4.76 11.83L6.17 13.24L16 3.41V7H18V0H11Z\",\n fill: \"currentColor\",\n fillOpacity: 0.87\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgOpenInNew);\nexport default __webpack_public_path__ + \"static/media/open-in-new.a04c0141.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgBookmark(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 21,\n viewBox: \"0 0 16 21\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.5 0.9H12.5C13.6598 0.9 14.6 1.8402 14.6 3V18.5482C14.6 19.0728 13.9741 19.3448 13.5906 18.9868L8.95525 14.6605C8.41735 14.1584 7.58264 14.1584 7.04475 14.6605L2.40939 18.9868C2.02586 19.3448 1.4 19.0728 1.4 18.5482V3C1.4 1.8402 2.3402 0.9 3.5 0.9Z\",\n strokeWidth: 1.8\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgBookmark);\nexport default __webpack_public_path__ + \"static/media/bookmark.cb5969d0.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgPipeline(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 18,\n height: 16,\n viewBox: \"0 0 18 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17 9.8V6.2C17 5.09543 16.1046 4.2 15 4.2H12.2M17 9.8V13.4C17 14.5046 16.1046 15.4 15 15.4H3C1.89543 15.4 1 14.5046 1 13.4V9.8M17 9.8H12.2M1 9.8V6.2C1 5.09543 1.89543 4.2 3 4.2H5.8M1 9.8H5.8M5.8 9.8V8.2M5.8 9.8V11.4M5.8 9.8H12.2M12.2 9.8V8.2M12.2 9.8V11.4M12.2 4.2V3C12.2 1.89543 11.3046 1 10.2 1H7.8C6.69543 1 5.8 1.89543 5.8 3V4.2M12.2 4.2H5.8\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPipeline);\nexport default __webpack_public_path__ + \"static/media/pipeline.23de92af.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgBusiness(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 14,\n viewBox: \"0 0 16 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 3.25V0.25H0.5V13.75H15.5V3.25H8ZM3.5 12.25H2V10.75H3.5V12.25ZM3.5 9.25H2V7.75H3.5V9.25ZM3.5 6.25H2V4.75H3.5V6.25ZM3.5 3.25H2V1.75H3.5V3.25ZM6.5 12.25H5V10.75H6.5V12.25ZM6.5 9.25H5V7.75H6.5V9.25ZM6.5 6.25H5V4.75H6.5V6.25ZM6.5 3.25H5V1.75H6.5V3.25ZM14 12.25H8V10.75H9.5V9.25H8V7.75H9.5V6.25H8V4.75H14V12.25ZM12.5 6.25H11V7.75H12.5V6.25ZM12.5 9.25H11V10.75H12.5V9.25Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgBusiness);\nexport default __webpack_public_path__ + \"static/media/business.14e0c02c.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgThreeDots(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 8,\n viewBox: \"0 0 32 8\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 0C1.79 0 0 1.79 0 4C0 6.21 1.79 8 4 8C6.21 8 8 6.21 8 4C8 1.79 6.21 0 4 0ZM28 0C25.79 0 24 1.79 24 4C24 6.21 25.79 8 28 8C30.21 8 32 6.21 32 4C32 1.79 30.21 0 28 0ZM16 0C13.79 0 12 1.79 12 4C12 6.21 13.79 8 16 8C18.21 8 20 6.21 20 4C20 1.79 18.21 0 16 0Z\",\n fill: \"#1890FF\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgThreeDots);\nexport default __webpack_public_path__ + \"static/media/three-dots.1e49bf88.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgWebsiteRank(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 11,\n height: 12,\n viewBox: \"0 0 11 12\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.4375 9.65625H3.32812L2.54688 12H0.0546875L4.28906 0.625H6.46094L10.7188 12H8.22656L7.4375 9.65625ZM3.96094 7.75781H6.80469L5.375 3.5L3.96094 7.75781Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWebsiteRank);\nexport default __webpack_public_path__ + \"static/media/website-rank.a230c4cf.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgDollar(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 11,\n height: 18,\n viewBox: \"0 0 11 18\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.80007 7.9C3.53007 7.31 2.80007 6.7 2.80007 5.75C2.80007 4.66 3.81007 3.9 5.50007 3.9C7.28007 3.9 7.94007 4.75 8.00007 6H10.2101C10.1401 4.28 9.09007 2.7 7.00007 2.19V0H4.00007V2.16C2.06007 2.58 0.500068 3.84 0.500068 5.77C0.500068 8.08 2.41007 9.23 5.20007 9.9C7.70007 10.5 8.20007 11.38 8.20007 12.31C8.20007 13 7.71007 14.1 5.50007 14.1C3.44007 14.1 2.63007 13.18 2.52007 12H0.320068C0.440068 14.19 2.08007 15.42 4.00007 15.83V18H7.00007V15.85C8.95007 15.48 10.5001 14.35 10.5001 12.3C10.5001 9.46 8.07007 8.49 5.80007 7.9Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDollar);\nexport default __webpack_public_path__ + \"static/media/dollar.95c02644.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgPersonAdd(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 22,\n height: 16,\n viewBox: \"0 0 22 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14 8C16.21 8 18 6.21 18 4C18 1.79 16.21 0 14 0C11.79 0 10 1.79 10 4C10 6.21 11.79 8 14 8ZM5 6V3H3V6H0V8H3V11H5V8H8V6H5ZM14 10C11.33 10 6 11.34 6 14V16H22V14C22 11.34 16.67 10 14 10Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPersonAdd);\nexport default __webpack_public_path__ + \"static/media/person-add.0808019a.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgArrowDownEnd(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 18,\n height: 21,\n viewBox: \"0 0 18 21\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.5 19.75H1.5M9 16V1M9 16L13.375 11.625M9 16L4.625 11.625\",\n stroke: \"currentColor\",\n strokeWidth: 1.8,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgArrowDownEnd);\nexport default __webpack_public_path__ + \"static/media/arrow-down-end.ccc102fd.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgSalesloft(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 1855.73 455.59\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M218.26,255.07l.07-.15c-49.89-36.22-87.64-99.31-57.3-149.18h0c13.56-16.6,30.78-30.29,50-41.6,2.08-1,4.19-2,6.38-3-.36,0-.73,0-1.09-.07,93.47-51.94,229.4-50.44,229.4-50.44S206.15-16.8,78.19,105.46a190.13,190.13,0,0,0-55.75,80.45c0,.08-.07.16-.11.25l0,0A189.31,189.31,0,0,0,109,415.44,97.06,97.06,0,0,0,218.26,255.07Z\",\n fill: \"#2e94cf\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M305.35,92c-.86.23-97.74,40.11-37.46,105.52C318.43,252.36,344,275.07,328.61,347c-5.84,29.56-24.27,55.68-53.94,77.17A189.4,189.4,0,0,0,305.35,92Z\",\n fill: \"#2e94cf\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSalesloft);\nexport default __webpack_public_path__ + \"static/media/salesloft.0b242b38.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgTrendingDown(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 15,\n height: 8,\n viewBox: \"0 0 15 8\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.0911 8L11.6178 6.47333L8.36448 3.22L5.69781 5.88667L0.757812 0.94L1.69781 0L5.69781 4L8.36448 1.33333L12.5645 5.52667L14.0911 4V8H10.0911Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTrendingDown);\nexport default __webpack_public_path__ + \"static/media/trending-down.e9904d32.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgTrendingUp(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 14,\n height: 8,\n viewBox: \"0 0 14 8\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 7L4 4L7 7L13 1M13 1V6M13 1H8\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTrendingUp);\nexport default __webpack_public_path__ + \"static/media/trending-up.4282ef2e.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgIconGrid(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 22,\n viewBox: \"0 0 24 22\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 15.7143H24V12.5714H0V15.7143ZM0 22H24V18.8571H0V22ZM0 9.42857H24V6.28571H0V9.42857ZM0 0V3.14286H24V0H0Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconGrid);\nexport default __webpack_public_path__ + \"static/media/icon-grid.ddc11ad4.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgIconTiles(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 22,\n viewBox: \"0 0 24 22\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 15.7143H10V12.5714H0V15.7143ZM0 22H10V18.8571H0V22ZM0 9.42857H10V6.28571H0V9.42857ZM0 0V3.14286H10V0H0Z\",\n fill: \"currentColor\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24 0H13V22H24V0Z\",\n fill: \"currentColor\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconTiles);\nexport default __webpack_public_path__ + \"static/media/icon-tiles.ab218c73.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgGlassdoor(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 34,\n viewBox: \"0 0 24 34\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.2003 0C20.4733 0 21.6941 0.511693 22.5942 1.42251C23.4943 2.33333 24 3.56867 24 4.85676H4.80052V24.8027C4.80052 24.8497 4.78209 24.8947 4.74927 24.9279C4.71644 24.9611 4.67193 24.9798 4.62551 24.9798H0.17501C0.128594 24.9798 0.0840799 24.9611 0.0512591 24.9279C0.0184384 24.8947 0 24.8497 0 24.8027V4.85765C0 3.56956 0.505675 2.33422 1.40578 1.4234C2.30589 0.512579 3.5267 0.000885314 4.79965 0.000885314H19.2003V0ZM19.2003 29.1432H0C0 30.4313 0.505675 31.6667 1.40578 32.5775C2.30589 33.4883 3.5267 34 4.79965 34H19.2003C20.4733 34 21.6941 33.4883 22.5942 32.5775C23.4943 31.6667 24 30.4313 24 29.1432V29.1432V9.1973C24 9.15033 23.9816 9.10529 23.9487 9.07208C23.9159 9.03887 23.8714 9.02021 23.825 9.02021H19.3754C19.3289 9.02021 19.2844 9.03887 19.2516 9.07208C19.2188 9.10529 19.2003 9.15033 19.2003 9.1973V29.1432Z\",\n fill: \"#096DD9\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgGlassdoor);\nexport default __webpack_public_path__ + \"static/media/glassdoor.0860476e.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _defs;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgWebsiteRankBlue(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 30,\n height: 30,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h30v30H0V0Z\",\n fill: \"url(#a)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"a\",\n patternContentUnits: \"objectBoundingBox\",\n width: 1,\n height: 1\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#b\",\n transform: \"scale(.00455)\"\n })), /*#__PURE__*/React.createElement(\"image\", {\n id: \"b\",\n width: 220,\n height: 220,\n xlinkHref: \"data:image/png;base64,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\"\n }))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWebsiteRankBlue);\nexport default __webpack_public_path__ + \"static/media/website-rank-blue.24f62ef0.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgChromeNewTab(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 14,\n height: 18,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.76 13.533H1.634V2.406h5.563V.817H1.634c-.882 0-1.59.715-1.59 1.59v11.126c0 .874.708 1.59 1.59 1.59H12.76c.874 0 1.59-.716 1.59-1.59V7.97h-1.59v5.563ZM8.786.817v1.59h2.853l-7.812 7.812 1.12 1.12 7.813-7.812V6.38h1.59V.817H8.786Z\",\n fill: \"#fff\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgChromeNewTab);\nexport default __webpack_public_path__ + \"static/media/chrome-new-tab.416035bd.svg\";\nexport { ForwardRef as ReactComponent };","var _circle, _circle2, _circle3;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgChromeDotsButton(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 5,\n cy: 12,\n r: 2,\n fill: \"white\"\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 12,\n cy: 12,\n r: 2,\n fill: \"white\"\n })), _circle3 || (_circle3 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 19,\n cy: 12,\n r: 2,\n fill: \"white\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgChromeDotsButton);\nexport default __webpack_public_path__ + \"static/media/chrome-dots-button.92b8215c.svg\";\nexport { ForwardRef as ReactComponent };","var _rect, _path, _defs;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgChromeOptxLogo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 101,\n height: 36,\n viewBox: \"0 0 101 36\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.759033,\n y: 0.496826,\n width: 30.3928,\n height: 33.269,\n fill: \"url(#pattern0)\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M49.2296 24.7049C47.3431 24.7049 45.8727 24.2263 44.8184 23.2692C43.7641 22.312 43.2093 20.8902 43.1538 19.0036C43.1399 18.6013 43.133 18.0118 43.133 17.2349C43.133 16.4442 43.1399 15.8478 43.1538 15.4455C43.2093 13.6005 43.778 12.1856 44.86 11.2007C45.942 10.2158 47.3986 9.72335 49.2296 9.72335C51.0607 9.72335 52.5173 10.2158 53.5993 11.2007C54.6951 12.1856 55.2708 13.6005 55.3263 15.4455C55.354 16.25 55.3679 16.8465 55.3679 17.2349C55.3679 17.6095 55.354 18.199 55.3263 19.0036C55.2569 20.8902 54.6951 22.312 53.6409 23.2692C52.5866 24.2263 51.1162 24.7049 49.2296 24.7049ZM49.2296 22.312C50.159 22.312 50.9012 22.0346 51.4561 21.4797C52.0109 20.911 52.3092 20.0509 52.3508 18.8996C52.3785 18.0672 52.3924 17.5054 52.3924 17.2141C52.3924 16.8951 52.3785 16.3333 52.3508 15.5287C52.3092 14.3773 52.0109 13.5242 51.4561 12.9694C50.9012 12.4006 50.159 12.1162 49.2296 12.1162C48.3141 12.1162 47.5789 12.4006 47.024 12.9694C46.4691 13.5242 46.1709 14.3773 46.1293 15.5287C46.1154 15.931 46.1085 16.4928 46.1085 17.2141C46.1085 17.9216 46.1154 18.4834 46.1293 18.8996C46.1709 20.0509 46.4622 20.911 47.0032 21.4797C47.5581 22.0346 48.3002 22.312 49.2296 22.312ZM58.5996 24.4968C58.4609 24.4968 58.343 24.4483 58.2459 24.3512C58.1488 24.2541 58.1002 24.1362 58.1002 23.9974V10.4516C58.1002 10.299 58.1418 10.1742 58.2251 10.0771C58.3222 9.97998 58.447 9.93143 58.5996 9.93143H64.1761C65.8407 9.93143 67.1516 10.3268 68.1087 11.1175C69.0659 11.8943 69.5445 13.0387 69.5445 14.5507C69.5445 16.0628 69.0659 17.2072 68.1087 17.984C67.1655 18.747 65.8546 19.1284 64.1761 19.1284H61.0757V23.9974C61.0757 24.1362 61.0272 24.2541 60.9301 24.3512C60.8468 24.4483 60.7289 24.4968 60.5763 24.4968H58.5996ZM64.072 16.8188C64.8766 16.8188 65.4939 16.6315 65.9239 16.257C66.3539 15.8686 66.569 15.2998 66.569 14.5507C66.569 13.8294 66.3609 13.2676 65.9447 12.8653C65.5286 12.4492 64.9043 12.2411 64.072 12.2411H61.0341V16.8188H64.072ZM75.52 24.4968C75.3813 24.4968 75.2634 24.4483 75.1663 24.3512C75.0692 24.2541 75.0206 24.1362 75.0206 23.9974V12.4908H71.1712C71.0325 12.4908 70.9146 12.4422 70.8175 12.3451C70.7204 12.248 70.6718 12.1301 70.6718 11.9914V10.4516C70.6718 10.299 70.7134 10.1742 70.7967 10.0771C70.8938 9.97998 71.0186 9.93143 71.1712 9.93143H81.7831C81.9357 9.93143 82.0606 9.97998 82.1577 10.0771C82.2548 10.1742 82.3033 10.299 82.3033 10.4516V11.9914C82.3033 12.1301 82.2548 12.248 82.1577 12.3451C82.0606 12.4422 81.9357 12.4908 81.7831 12.4908H77.9545V23.9974C77.9545 24.1362 77.906 24.2541 77.8089 24.3512C77.7118 24.4483 77.5869 24.4968 77.4343 24.4968H75.52ZM83.6032 24.4968C83.4783 24.4968 83.3743 24.4552 83.291 24.372C83.2078 24.2887 83.1662 24.1847 83.1662 24.0599C83.1662 23.9766 83.187 23.8934 83.2286 23.8102L87.8895 17.0685L83.5199 10.6181C83.4783 10.5487 83.4575 10.4655 83.4575 10.3684C83.4575 10.2435 83.4991 10.1395 83.5824 10.0563C83.6656 9.97304 83.7696 9.93143 83.8945 9.93143H86.0169C86.2665 9.93143 86.4816 10.0632 86.6619 10.3268L89.7206 14.8212L92.8002 10.3268C92.9805 10.0632 93.1955 9.93143 93.4452 9.93143H95.4636C95.5884 9.93143 95.6924 9.97304 95.7757 10.0563C95.8589 10.1395 95.9005 10.2435 95.9005 10.3684C95.9005 10.4655 95.8728 10.5487 95.8173 10.6181L91.4685 17.0685L96.1294 23.8102C96.1849 23.9211 96.2126 24.0044 96.2126 24.0599C96.2126 24.1847 96.1641 24.2887 96.067 24.372C95.9837 24.4552 95.8866 24.4968 95.7757 24.4968H93.5701C93.3065 24.4968 93.0984 24.372 92.9458 24.1223L89.6166 19.4197L86.3498 24.1223C86.1694 24.372 85.9544 24.4968 85.7047 24.4968H83.6032Z\",\n fill: \"white\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"pattern0\",\n patternContentUnits: \"objectBoundingBox\",\n width: 1,\n height: 1\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#image0\",\n transform: \"translate(0 -0.00133749) scale(0.0121951 0.0111408)\"\n })), /*#__PURE__*/React.createElement(\"image\", {\n id: \"image0\",\n width: 82,\n height: 90,\n xlinkHref: \"data:image/png;base64,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\"\n }))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgChromeOptxLogo);\nexport default __webpack_public_path__ + \"static/media/chrome-optx-logo.a8422905.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgPin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 12,\n height: 15,\n viewBox: \"0 0 12 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.90891 13.6791C8.47127 12.1787 11.5 8.83934 11.5 5.5C11.5 2.46243 9.03757 0 6 0C2.96243 0 0.5 2.46243 0.5 5.5C0.5 8.83934 3.52873 12.1787 5.09109 13.6791C5.60601 14.1736 6.39399 14.1736 6.90891 13.6791ZM6 7.75C7.24264 7.75 8.25 6.74264 8.25 5.5C8.25 4.25736 7.24264 3.25 6 3.25C4.75736 3.25 3.75 4.25736 3.75 5.5C3.75 6.74264 4.75736 7.75 6 7.75Z\",\n fill: \"#90A0B7\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPin);\nexport default __webpack_public_path__ + \"static/media/pin.b367cef7.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgNoCompany(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 44,\n height: 40,\n viewBox: \"0 0 44 40\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.9999 9.16667V0.5H0.333252V39.5H43.6666V9.16667H21.9999ZM8.99992 35.1667H4.66659V30.8333H8.99992V35.1667ZM8.99992 26.5H4.66659V22.1667H8.99992V26.5ZM8.99992 17.8333H4.66659V13.5H8.99992V17.8333ZM8.99992 9.16667H4.66659V4.83333H8.99992V9.16667ZM17.6666 35.1667H13.3333V30.8333H17.6666V35.1667ZM17.6666 26.5H13.3333V22.1667H17.6666V26.5ZM17.6666 17.8333H13.3333V13.5H17.6666V17.8333ZM17.6666 9.16667H13.3333V4.83333H17.6666V9.16667ZM39.3333 35.1667H21.9999V30.8333H26.3333V26.5H21.9999V22.1667H26.3333V17.8333H21.9999V13.5H39.3333V35.1667ZM34.9999 17.8333H30.6666V22.1667H34.9999V17.8333ZM34.9999 26.5H30.6666V30.8333H34.9999V26.5Z\",\n fill: \"black\",\n fillOpacity: 0.87\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgNoCompany);\nexport default __webpack_public_path__ + \"static/media/no-company.7c2d1e52.svg\";\nexport { ForwardRef as ReactComponent };","var _g, _defs;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgDragAndDrop(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_1_4552)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip1_1_4552)\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 5.5,\n cy: 3,\n r: 1.5,\n fill: \"#1890FF\"\n }), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 10.5,\n cy: 3,\n r: 1.5,\n fill: \"#1890FF\"\n })), /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip2_1_4552)\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 5.5,\n cy: 8,\n r: 1.5,\n fill: \"#1890FF\"\n }), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 10.5,\n cy: 8,\n r: 1.5,\n fill: \"#1890FF\"\n })), /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip3_1_4552)\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 5.5,\n cy: 13,\n r: 1.5,\n fill: \"#1890FF\"\n }), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 10.5,\n cy: 13,\n r: 1.5,\n fill: \"#1890FF\"\n })))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_1_4552\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n width: 8,\n height: 13,\n fill: \"white\",\n transform: \"translate(4 1.5)\"\n })), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip1_1_4552\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n width: 8,\n height: 3,\n fill: \"white\",\n transform: \"translate(4 1.5)\"\n })), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip2_1_4552\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n width: 8,\n height: 3,\n fill: \"white\",\n transform: \"translate(4 6.5)\"\n })), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip3_1_4552\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n width: 8,\n height: 3,\n fill: \"white\",\n transform: \"translate(4 11.5)\"\n })))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDragAndDrop);\nexport default __webpack_public_path__ + \"static/media/drag-and-drop.5f6d481f.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgMap(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.37 2.49C19.9786 2.28595 20.6481 2.38638 21.17 2.76C21.6935 3.13758 22.0026 3.74457 22 4.39V18.28C22.02 19.1662 21.4543 19.9599 20.61 20.23L15.3 22C15.0986 22.0657 14.8815 22.0657 14.68 22L9.00002 20.05L4.63002 21.51C4.42702 21.578 4.21411 21.6118 4.00002 21.61C3.58168 21.6071 3.17393 21.4782 2.83002 21.24C2.30654 20.8624 1.99746 20.2554 2.00002 19.61V5.72C1.99923 4.85752 2.55144 4.09168 3.37002 3.82L8.68002 2H8.77002H9.00002L9.23002 2.05H9.32002L15 4L19.37 2.49ZM4.00002 19.61L8.00002 18.28V4.39L4.00002 5.72V19.61ZM14 19.61L10 18.28V4.39L14 5.72V19.61ZM16 19.61L20 18.28V4.39L16 5.72V19.61Z\",\n fill: \"#231F20\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgMap);\nexport default __webpack_public_path__ + \"static/media/map.b8b05b3a.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgReportCardIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 21,\n height: 18,\n viewBox: \"0 0 21 18\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.5 4.00073V0.000732422H0.5V18.0007H20.5V4.00073H10.5ZM4.5 16.0007H2.5V14.0007H4.5V16.0007ZM4.5 12.0007H2.5V10.0007H4.5V12.0007ZM4.5 8.00073H2.5V6.00073H4.5V8.00073ZM4.5 4.00073H2.5V2.00073H4.5V4.00073ZM8.5 16.0007H6.5V14.0007H8.5V16.0007ZM8.5 12.0007H6.5V10.0007H8.5V12.0007ZM8.5 8.00073H6.5V6.00073H8.5V8.00073ZM8.5 4.00073H6.5V2.00073H8.5V4.00073ZM18.5 16.0007H10.5V14.0007H12.5V12.0007H10.5V10.0007H12.5V8.00073H10.5V6.00073H18.5V16.0007ZM16.5 8.00073H14.5V10.0007H16.5V8.00073ZM16.5 12.0007H14.5V14.0007H16.5V12.0007Z\",\n fill: \"#096DD9\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgReportCardIcon);\nexport default __webpack_public_path__ + \"static/media/report-card-icon.f227ed89.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgArtificialIntelligence(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 14,\n height: 16,\n viewBox: \"0 0 14 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.7683 8.02465C6.18591 6.24437 6.53049 4.26855 5.7622 4.26855C5.16464 4.26855 4.60124 7.38441 3.62805 8.19538C2.34753 9.26246 0.341411 9.21977 0 10.0734C0.0426531 10.6283 2.85974 11.1832 3.79878 12.1222C4.69514 13.0186 5.20732 15.8356 5.7622 15.7929C6.31708 15.7503 7.03571 12.66 7.98171 11.9088C9.43291 10.7564 11.3536 10.671 11.5671 10.0734C11.3536 9.34782 8.79263 9.17709 7.7683 8.02465Z\",\n fill: \"black\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.0095 2.57325C11.1804 1.63699 11.3609 0.5979 10.9583 0.5979C10.6452 0.5979 10.35 2.23654 9.84007 2.66304C9.1691 3.22422 8.11792 3.20177 7.93903 3.65071C7.96138 3.94252 9.43749 4.23433 9.92953 4.72817C10.3992 5.19956 10.6676 6.68107 10.9583 6.65862C11.2491 6.63618 11.6256 5.01102 12.1213 4.61594C12.8817 4.00986 13.8882 3.96497 14 3.65071C13.8882 3.26911 12.5462 3.17932 12.0095 2.57325Z\",\n fill: \"black\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgArtificialIntelligence);\nexport default __webpack_public_path__ + \"static/media/artificial-intelligence.ac489a2c.svg\";\nexport { ForwardRef as ReactComponent };","var _rect, _defs;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgEmployeeGrowth(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 50,\n height: 50,\n viewBox: \"0 0 50 50\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 50,\n height: 50,\n fill: \"url(#employee-growth)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"employee-growth\",\n patternContentUnits: \"objectBoundingBox\",\n width: 1,\n height: 1\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#image0_896_4396\",\n transform: \"scale(0.0078125)\"\n })), /*#__PURE__*/React.createElement(\"image\", {\n id: \"image0_896_4396\",\n width: 128,\n height: 128,\n xlinkHref: \"data:image/png;base64,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\"\n }))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgEmployeeGrowth);\nexport default __webpack_public_path__ + \"static/media/employee-growth.fdd715af.svg\";\nexport { ForwardRef as ReactComponent };","var _rect, _defs;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgOptxScoreOver(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 41,\n height: 38,\n viewBox: \"0 0 41 38\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 41,\n height: 38,\n fill: \"url(#optx-score-over)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"optx-score-over\",\n patternContentUnits: \"objectBoundingBox\",\n width: 1,\n height: 1\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#image0_792_2744\",\n transform: \"matrix(0.00505051 0 0 0.00544923 0 -0.00132908)\"\n })), /*#__PURE__*/React.createElement(\"image\", {\n id: \"image0_792_2744\",\n width: 198,\n height: 184,\n xlinkHref: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMYAAAC4CAYAAAC4s5PsAAAACXBIWXMAABYlAAAWJQFJUiTwAAAfQElEQVR42u2de1hU95nHv3ODoDOAooaLVppUBtJ0RSZRoV2cRJt0vVSw2fWyJZCNwRTjitWnEtOUsTZGsxpJTcyja56Cdk1sG4Ulpk1K4jjpQvTJEEyTIJg2UAVMFLnMCMJczv4xZ+DMmTMwlzNnDjO/7/P4KCNz5sw5v89539/7e3/vK6EoCkQhVH1uKoBU+ifnv/Uj/59j0EfS5VBrsotajA2VoT4PCQEjJCDk0X8yAcR58a6LAJoAVCPHUB3GUFQCKARQ1WJsKCJgRAYQRQBKAcwN8Eh9AKoB6JBjaAsjKLQAzjJeeqDF2BAyayklI1YAIOpz2wD8hgcoQFuYQgBfoj63krZARASMCQNEJupzm2ggZgfpU5yA6MgFJ2BMBChKAXzMk4XwRuWoz20i1oOAIWYoKgEcCMEnzwXQhPrcTHITyORbjFAUhvgs+gCUIsdQKeKJtr/XSbBoFQEjvKBgwqFFjqFJhFBUANgcwCFeajE2lBJXamJAUSEiKABH5EovUreqkgbXX+AFsYTEYgQORR6A0yI9u4vIMYgODrUmOxOOBU6mUlkPlyoAbazfqW4xNjQRMMQPRTx98+JEfJYvIcdQKvZLSRb4wksVIocCADaTSBUBQ0hrkSqyecV4ABMRMASRLpA3F7xkhXqTBepNFpw6bw/2uS5Cfa6W3DICxoSyFk//1iYEHEUiv6ptGI1W9XFMvAkYE0ABDzLVJInQcBTSwQJRqsXY0AZAC6AdgJb+OWQiUSn/LEYbAkwM7B90uFOXOlyv//M/lmHVgqA9rx4T84o4caUmvhsVcLZsbAxwfLMc6SmCWo48cgMJGMESb5PYEMBBJuAEjKCJ1zUBgeGII6npBIwJAUYI4IhIMNSa7Ew6FcUrySfKF5NIJJkAQh5Vuf72wvhpcQoECw72hPzp39oAgLcJ+Zn6mz9Y/l2JGG5pE0VRvUJBAbryilqTrfUm30ouchi0iqjoMqvVopUrFJQi+g45IAnpOQcDCm/gyEiRIGNm4AO66e+W7THK2O2hvIYUZTffvmVWyuTyHqlUdsxqGdYFGRJm6k6FN3MtuUiBiJcrot6SSmULYxOmy2ITpkMRFR0RJt8THKZBniYZCdMxK21qqL+mEgDMvTen9Hx9bbPNZn0yKvqOx4eHbv+PWO6DXIxQyOTyT+6YNHlWYurdkMrkiDR1dFPouBn+60vK+KlQxk+Fufdm9LW2v1XJZPLv2WzWnxAwPEAxOW7KrMTZdwMALMND6O66CnPPTZvdbpOF+hz7zNmIUwbvsjVfpVDwa6uLhUhPkSB9Jj/zgu6uq2htbA/5vY6OmWSbMiNJFpswHcr4qZiljpZdafn8CUVU1F8tw8OHQn1+oopKyRSKF6PumDQCRX/3dXz56ce41dfzpt1uu4+iKEmo/8Qp5eeEhuL4ZjliY/j5jPL/+EZ+qK8hgClDgwPrr3e0X2lv/sRmt1kRHTMZs9T3yKwWyysSiSQ15A9psaSE0Bfjy2/eOw+KqGj0d1/HV1e+HKbs9gUURYln73J9bjWAlRMRCloPiKkeriIq+n9lcvnSWWn3yKQyOa5fbYO5t+ed4aHbPwgg+uTrHpk+OPKzmkRnMWQKxS+ck2y7zYqvr7TZKLv9YVFBQQd2JjAUoisSbRke+qHVMvxpd9dVAED8jCRYhocelkgk8T5CEe8nFKDfo6ePITpX6mFl3BQHvt3XIZPLjRRF6SE+NU1YKBzFoUUnm9Wa1/P1NdhtViiiohGjVFnhY15Xi7GhF47awP6qlD6GuCbfNosleZIqFgBg7r1ptQwPPS/SYIp+gkLB67nzKYqi2uQKxZXbAwOzJqliMUkVJ7dZrQvhY0WQFmNDpVqT3Qv37IQijCZ+tnMct6nF2FAt2qiUMzRrt9vNAHpFiUWOoRf1uTWBzjNCAIVowQAAqVT2+dDgrVnOh6NUKr3Dn+PQA7ya5WZpGWC0tRgbdBMqKjWBFHCPit1v2oSGol3MvTVkcvk1u80mHlDJGPcbjD6+DiYAFIBAhcrCRQQMf92pACtvOLe2zv+WIFD0gVQK8Ulycgn8VgUdBfGrrtShJ2TouClFylSJMOfqgDlSVQlgkS+Wk1iMwKyGLpBDCARFxFsLutnlYwAe87bxJbEYgcFRQdeuXSTisyyKcGvBhIPMMQQdeDxOxHnWS+Hc5ZVMvsVtNdogzuobFydCMWcCRnjDoad9WPFAQSqCEDBEAkelSOBwQEHmFQQMkcHxQAjnHDUECgKGmN2qTAifyboTOYY8AkUYgmG3WWG3WWGzDN8xweFoo1t8bRHAepwDMA85Bh0ZzuEIhkRivtL6ue1K6+c2q9VqRRA2BIUAkAo4CpztDAIg7XAUaRZld1YCBl+iqH+2DA81WYaHmkBRBUIV4xIAjl76aZ5KW5BAXKw+OJo2PoAcQ2o4VS63Wiy9twfMFgC4PWC2WC2WkN5/0gYgFHLUj9XScxHnH66cq4twNFBpAqAX27ZUfh0GiRbAWbkiymq1DMsBPBDKHZwEDCIxweFsc1wd6r3+BAwiIlHPMYiICBhEROKWS9q5WpOdypgMRqKa4KgY0UaGRoTPdyiKchar0gHYTC4JAEdI1KXOEFFkWoxKBKHs5ARWYYRbTkGl1mSnfm/hgoobN29+VyaVygHgzjtnnAfws1dffOGTkFiMtKyFmQA+JreHU/nsQlxEvAIRP2lSzPMDA4NPevqdlOSkEx2dXRuFtt5ysPL285cvxaYN65GSnBRRN6mjswsHDx/F6bfeZr6cCR5qSBFxQyGTyT4YGBi8d5z7si4mJuY+tSZ7gZBwSMHqa7dn57MRBwX9ZMKenc+SESsQFAD0NpvNBYrkpETM18xDclKiy+8PDg6myWSyD5hFl4WaYxARCalKAHOdP6iUSmzasB6F61aPRj9OnMTBw0dhMpsBADRElRBoG7FXYPSbzCjT7cJ7egNvH6xSKlG4bjU2bVhPhklkWYs8MAI9KqUSx48cQoZ6jmv0Y91qzNdkoaC4ZAQOACvVmuw8IeZ9Xi3wVZ14g1coAMBkNuPlI6+ho7OLjJbIcqEqma/t2FbqBoVTGeo52LHNrZ5DpRAulc+u1K2HA2+PNvmdktHJVVdXRM5pIlQulRsXa3OxasWyMd+wasUy1OkNzAdzHH0cnajAsN05T7CreKr2DE7XnuHlWDu2bvH4ZCISzFqUMl2oPTrvgh17dM/iweX5TJeqVK3JrghmlEq0k+9TtWfwtO5XvB2voLiE05clEkxFTGtRuG41YlVKr94Yq3LMR18+8hrTahQhiKVHSRIhkZBuFGNyvcanNxeuWwOVUunxeBFjMZy+J3GlwsKNysRoRyPkL1/qtbVgWo0l2lzmAuxstSY7k9lpNaRgyL76WFA4xpucEU0YN8pva8F8HyszoShYlsNnMJgRJT6UkkQiUhGgkUW55KREvy13hnoOkpMS0dl1jXnc0IFRuG4NOjq7UKc3MCMDASk5KTEic7ImsDuUCkelE2A0v05P/93ryaVhu1FLtIF1TFiiXYRjr5/0yp3610cf/+e53/m2Zsb0aYmfNbcsBICcBfe3AUBKctKn31u4oA4eyjR5BUasSknyiCIXBh0NwmyOXyln/C7gqHXVRP/Rtxgb9GAlqQbqGq9asYwJhhPSJrUmW3tX6uw1Uqn0uz29vXd13+yZBACffPa5y/v/VPf+IubDWZM5d/jf/+2RV+f9070ulkeSlrVQx/yCLcaGSB8MzB93etP6NgyvAZ8b124AmAY41i4+OvfngA9436Lvj3guCoXCZLFYVIEe85G8FTemJyTcV1qyoR1whGtdFkkKiksiMk2jo7MLZeW7iJkYdZH42s05zfkPqVSKqhMn/R5fHZ1dqDpxElLp6CoDH1AAwB+qa6dVv/XHj5gWg2xU8qyI26ik1mS7eBBOl2OJdhEW3JfFGWZtbrmMfpMJ//fh+duXWr+QDd6+rRjvc+Zr5iHfy6ijMwPignH8YapSKpGhnoP5mizEqlScE/1+kxnnP2pEnf4ccyLv4iU493w3gZEGTOR4QLUYG2ZGoAvVw3xtx9ZSl3Rwb5/s542NOPH7U/gry8fnGsj5K5ahaN1ql0BMR2cXKk+cxOnaM+MGfNK+dTce+/FaLNBk+RzMqTpxErv3uy2gT5GkZS1MBfAl4YBT84K1gCRSMIoA/CYQKJgqK9/lsu7ACrW6m+flS6GZNxfGjy+y1yvAtmDM4+QvXxpQcIgDjsfctrYmJEzFqhXLMD0hIaIIuN7djVO1Z9DdfZP5ch7Coeq690pl/hAIFIAjc5rpOh0/cgh1egPqzp7jHPin33p7TCDyly/FkgcWYYk2FwXFJSOuFfNz/FHhutVsMFLl7ItR/+4ZRKq2bSphR6WIAhBzTpCelgYAWKLNxRJtLnZs24LTtWdwuPIY+2HkOnNPmIriokeRv2KZy/wmPS1t5PjezD18FUkiJPKofpP/i7nsyNNMlu9vMplw3tg4JhQAcKP7Js4bG2EymcY8XiCRVK7v6XVKyMatZThvNPJ20afExWPLxiex9KHFZASKR3owIlJ1+nN+L8ix3RtndKjfZMbBw0fZi3Sjk3GVEibWQH2P3qj06FrHVuhYldIt2hTIhrc6/Tn2S01yb6HgeHNAMpnM+OmOZzH3O99GCqsqBFHI5DKfOl17xm8wrrKe4ClJSW4FDpiar5mHTRvWY74mCxeMjTh4+Kibi3TsdUeUatOG9ViizXX7vPka/740Rwa33stiCP0j/x6aG3jxguiLRwEAFEWh7uy5gCd5RPyoxdjQq9Zk14AuVnDB+DEuGBsxX5MVsCtVptvFORdIT5uDZ7aVunzGfE0Wjh85hAvGRjy3rwKXWi+PPlDNZuzeX+H2oPbXlbpgbGSfV02LsaHX5+zaobmP8wbGeHr73ffw+h/e5OWm79n5C2KZvFMFGFU8Dh4+iuNHfN/nz/bb2VColErs2FY6pkWar8lCzevHcKr2DA4ePuoSomUfz9/50MHDR7m+v3g3Kr397nv46Y5nwVdjm3/50Rr88c03CBzjWw29WpN9DsAi5wCs0xvcXJfx1NjkudXgU8WPo3DdGq83K61asQxLtItQdeIN5vZWrz/P89zCwAbsHJ34KN6o1JHKY+Cz29PQ0BDeePM0GfneySXTtKx8l0+uysHDR/Fp8yXOeUT1iWMjE2hfFKtyFGWrPnEM8zXuBTk+bb7E9fQf09Xb/otfUp6+t2jBqD5RhW/M5C8j45G8Fdj61E/IkPfOajQBeInp15ds3e6V+1RQXOL2VI9SKLBjaykvxSgy1HNw/Mgh7NhaiiiFa0rWy0deQ0FxiVduVcnW7TDfuiVhvPQSM8tB1CU6/1zzezJKQyedTCZb7Kwve6n1MsrKd3lMvbhgbETJT7dzRpzWPLKK9wBL4brVuNrZ5Rb2vWD8GA8uz8ehF/d6DBqUle9ymdDD0R1Xx3zBZzBij/G7Mjx92jQyBMVpNXrVmuwCmVT6gc1uVwKOlI2U5CS3sqoHDx/16Ps73aBgyNNxTWYzCoo34qnixznPlZV20gegiF2jyitXau0jP4JEIuH9i31j5kyywCdyl8pmt29iuyun6Lh/v8mMsvJdblAkhyjAwf7cl4+8hrLyXSOu1anaM1wAl3IlinplMZY+tBhLH1qMqhMnefsS996TDk0myXSfAHA4a8UecL72tO5XuH37Nk6eqmG7JFiszcUe3bO4X/t9wc+15vXjbsXHT7/1NppbL2P1qjzs3PNf7LdsaTE2VHIdyydXiizERSwcFXRRg0Lnazv37HP7PS7XRUjFqpQ4tH+vm2t3qfUyFxRVLcYGj5UM3VypU7WRm10byd/dCziK4Gja6SaVUonndT/3CEWGOi0o57TgPu7J9aYN6/HK/r3syoVsKIrGOrYcrMSxp3W/QvnuFxAdHRVRN35oaBjDw8Psl9sIEi6qALAWgMvguD8rc8wV7GBNvsfSEm0u7s/KxPuGv7D/axhe1LyV0yudrQBGsB4e5hwkkaZukP57I6JdKT0bCgB43/AXrFz7KI4fOeRxT7g/+Vbj6aqHRcd+kxkbt/7M0z6NKAB6tSZbO9buTCk9sSJ5Eu6KBqs/YQRDEU9DMVKtfMb06S6/c6n1MlauLUBzy2WOgWoKynlxrcY3tzjOgw3FtISpzB/jaDjix3KltABimS/mL18akV1bWfFtJRxbWysIFK5QpKfNobepnnNp1dDZdQ0FxSVcXZAEmyPu3lfhtsj4vO7nWKJdhILiEmYULY5hOXq5wHBp8v5+7amILZu5acN6PLhiFfMlYjFYjSSTkxJHXKZVK5YhIy3NpU+eyWzmta+JL2J/Lru/3/Ejh7BybQEzS3cuPDS8dItKRXItWVJH181a6MBqJHlo/wsu84gM9Ry8/9ZppKeJq8VCeprjvJi5WY5w7gvsaNVK+nu6WQyv1NxymdddfCnJSViiXRSSiAWR15Ntl8Jrh17cy5kEGKtSoub1Y3huXwXnltUP6j/0Kc3cW10wNnK+/uja1XjGgzuXoZ6DQy/uRUHxRubL5WpNdrXPSYR1egM2epFd6auq0k6i5vVjZBSK14Ua0Y6tpeNGlp7ZVooF92WhrHyXi59/8dPPsHJtAfbufJaX6NQFYyO2l+9yq1GlUjqKj4+3d2S+Jgs7tpayS+ZUMqcVXoHR3NI68m9rYuBfTH6tcSSS4e/WSaKgu1BzRwfSPK+zHpZoc/H+W6fx4Ip8l6IGjon5RuQvX4od27b4ZT36TWbs3neAs/aUSqXE+7WnvT5u4brVqNOfY0av5qo12TpnEW+fs2sHHnol4AvvbYZuv8mMS62tvNxsAp9PUSi/uqsyXav5mizO3vCn33obdXoDNm1Y71OK0ViFFAAgI22Oz7Dt0T2LlWsf5ewGK9r9GM5NL+wkNX8VaBnHCFIRWN1V/QlKZKTN4QQDGC1ocKr2jFshBC63iV0Qga8HX0pyksdusKLdwbd73wHeoHA+qUgulFdysRb+9stj65X9e93Swi+1XkZB8Ua63GajGxAFxSUoKN7oNg6SkxLxyv69vJyXp26wogVjx7YtvIYA85cvJY0uvYtEjXZXZZXF9EXsBD9H5Oo4nip+nMMqfIyC4o0oK98FY9NFlJXvQkHxRs6UjqeKH0fN68fdzstTQqE3bl++67iYrdZkZ4rWlYpVORZnyBxDULks9vL5IOk3mUcKGqxasQzP7a9wc7XGKuq8WJuLZ7aWjrh1gZQPZYujfZnvYEx6d6OgcJABLahSXeYJARQuYN+35pbWkTBqSnISDu3fiwvGRpTvfgF/b2v3eJxvps7GL3f8jPN4fD34OL5nqty7N47m0ztDrXwoPW0OGfhhLGYfi2bGPKGjswunas/gVO2ZMftlAMCXbe3YXr5rpOe702IwjxeMrbRegbFEm4vqE8eCsvJNJF51dHYFlCYzMzlpZOB/1nwJp2rPoI4u0OxJXEWdO7uu4eUjr+HlI69hMd1G4B9XO1w+J9Dv6RcYTnMTaE0gItGrGow0kDLdLr/Kc456BKM9LK599fWYyYX5y5eicN0aZKjnoLnlMqpOvME533iPAyxn7w1/VaZza0pa7dbOOJKzazs6u9jZtRHXzlityW4DIzKVnjaHs7o4l5pbLqO5tRUXPmrEeWPjuG5SclKim4vEvh/eulzJSYlYoMnC/PuykJGW5tVDvE5vwMHDR9nh4PYWY0OqJC1rYR6A02x6/YHjRnc3AGBaiNqU3ejuRr/JjLtSZ/sFBccTastYG+bDFAwtgLPcE+p5UKlUyKDD6M2tl2EymegMBe/WnFRKpaOrEt0yzFs5W5TV6Q3jNqtkQh2rUnKe8xhdmB5oMTboJWlZC+Ph2NscRzwJF/UByGwxNrRF2hdnN6nkS3elzsbJyqMBZdn2m8xYXbR+zEhWAHrMWU5HSu9eKqIHAtGoSiMRCsBRSwrAPACBRFvOwVH/9h3nC3wNZtZx3qE/J9BzncesMSWnL0Q1vepZCtYijw+ai9Edb71w1AMVUnx9fhsAXaRCwYCjCYBWrclOhWOHm5a+vpkM76IPo12Ymuhr1+Qspc+wPg+PukTnAlo45IiMvsEc0LQrmAnHmoxzLHOdcy8cW3arue61hK9S+2pNth50TwU4+gxoBTb/If18Io/3JR5Aj/PnxdpcHAogz4ndOxzAFK4924GKdG0lCrbl6QVQ4/z5Pb3B73SOfpOZDUVNMKAgYBAJpepx3CF/3aig1f0iYBAJDoa/xcE53kfAIJrw7tRI3VvnlmZfdMHYyF4rqQqWG0XAIBJSlcwffOmX5+H3K4N5sgQMIqGshh6MtQZnN1jv5haeu6sSMIjCQTrmD8/tOzBuhKrfZMZz+w6MeRyxg1EKx+JJH1jtcAVSqD+fyDurMRK67ey6xpXZ6qIynVv9qJpgWwtewXCulAIYs7x6EC96SD+fyOcHGADHukZZOTccZeW72Cnmgj30JHw2mSci8kZqTbZbRnd62hwUrluNmclJuNrZhaoTJ7kydvNbjA3VBAyicIajCL5l8D7mqZGkoGDQSYV5EXKfqon7JWo4BIXCIxiMtlKRskejj8xNQgZHKhzNeVZy/HcNQpT+72nPdyoia+OSszQjiWYJLHrQ59FZuMwtD03BXNkOxJXy1QecyBq3vS1RZIlMvomIOERWvomICBhERAQMIiK/JSeXIMSqz9VitMgAU71wbtrPMYR9GFkikcQDqJArohZaLcMfAiilKEp8UakQXZxMAPEURenDGARnxQ0tGH3uxlEfHOtKegDVyDG0hSEYpQAOxCZMR3/3dQDYQlFURcSDIZFIKgEU0j9WURRVFEYwOPvaFYFR/jIA1QCoQI4hbB4gMZOVlTFKVeH0mam4frUNg2ZT1eAtc8jGgJjmGIWJs+9G4uy7AaBQIpGkhgUQ9bk6OOotlfMEBeBYJT6L+lw97YqFx4RXJnf5m0y+acUmTEdswnRET5rcC1YTkwk6d2iigQhWFsEiGpBK2ioRhSMYYeQ6VcBRGHm2QJ9YCKAJ9bmZ5OITMMTqOlUD2ByCT58NQI/63CJyIwgYYptg68GdJSqU4gD8hsBBwBCT9PA+/BpsETgIGKKwFpUigsKpCjLnIGCEEooijK6/iElxAKpJtIqAEQooUuHYfSZWzYYANZgIGETu7or4dzpuDqdFQAKG+K2FFkGOQPUPAhcuU7hwmUL/YECHIlaDgCGYdMGGouAlKwp+7fhz6WpAOW2LiNUgYAg1t1gUbCgudfCa4EkKPRAwgq5SIaFQxQApgbdOX0kDTTRRwZBIJGLfQJUnJBTH/1OOlKkS0Z43H7IMD2UqoqIJGG4wSKVDluEhAEDUHTFKmVyeLVI3KhNBSA4cC4qMmRK+Pka08wy73Z4ePWmSExIMD92+RsAAIJcrLpp7bwIAYqdOByhsp7c7ik2ZExQK0YKhiIoqkcnliuiYyQCAgf4+q91m+xMBw/GUeLXn6y47AExSxSIqJmayXBF1LNzBEBAKAIgT2zxDIpFk2my2AzNmpkoBYMDUD8puvxXq7c2iAYOiqErKZjf1fN0FAEi5Wy2XyeVL5QrFWZFZjswJCoVTqSKCQiuRSs/HT5sRpYyfCgC4frXNBgn2hvzcRFYMQSuVyupmqe+RRcdMht1mxddX22Hq6R6WyxVnLcNDH4b6HDtqFjyZPC3qzgkKBY7WXnvniT2XQ3od5YqoeIqyr6IoKiVx9t1SJxTX2v+GW309V6wWyzcIGCzJ5PI9oLDNCYdzMmbuvQm7zRby87vxh2/ycpyS/7bhvU/sgkIBAC/8rhcv/K4n5NcxOmYSnEA4oTD1dA9Rdns6RVFtIZ/zis2Bt1mtZXKFou9Ky2e/nHJnsnzKjEQooqIxZUYSwkmmAdcH0qEngg+Fc/6WkDRZNNfBMjyEa21fWIdvD3ZRdvsPxQCFKMEAAKvF8rxEIvlj342v3+j5qutbyilTZcq4KaKoHgEkBOWoz71pw/HNcsTGBHkgDg1hwDQQ8qs4NHgL5t6b1tsDt+wymfxVm9WqC2WBtQkBBj0ZbwKQLpFIMgf6+4oG+nuXSKQyZajPq/OGKiV5WlTA1y1/oRQXvhh1DS91UCh4yRp0OKyDvX1f/eNqb4hvrhXAF5bhoTcAVFtsQ71iG3+kDYCvqs/Vg6c8qVPn7Xj6t67zpvQUSbDhyEeOoZrcyLFFcqV8F29Pt1ULpHj+xzKX15yWI8A0c0HOn4BBxBSvBZYFhyOMynoSMMQl3geWgHBcJLePgBEcBemJKxAcxFoQMIKqmgkKRyW5dQSMYCpoUR1PcAS4tRUA2iOhAQ0BI7TuVCWAdiHhINaCgDFRFNSB5oQjeaoEqhhHLlUA6oO461+JTmSBz185Kvw1QbhS/4FoJ3IMOnLTCBhCwZEH4LTIz7IdOYZUcrOIKyXkXKMaQYpQ8agicqMIGKEaeO0iPbedZKWbuFKhdKky4Vg8E1Md2yrkGIi1IBYjpC5VE8RVgeMiSOVBAoaI4JgHR2g0lDoHQIscA8miJa6U6NyqaoQmjEvcJ2IxRG05MiFstKoPwGMECmIxJor1yINjxTmY1qMGQClyDG3kghMwJhIc8fREuIhnQM4B0JFwLAEjXCxIEfzvxNROz18qiIUgYIQrJFo4QryZAOLhKJ05m2URAEc+VhMAPYFBOP0/SHv0m2eCG+4AAAAASUVORK5CYII=\"\n }))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgOptxScoreOver);\nexport default __webpack_public_path__ + \"static/media/optx-score-over.8a453bda.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgThumbUp(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 22,\n height: 20,\n viewBox: \"0 0 22 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 20H4V8H0V20ZM22 9C22 7.9 21.1 7 20 7H13.69L14.64 2.43L14.67 2.11C14.67 1.7 14.5 1.32 14.23 1.05L13.17 0L6.59 6.59C6.22 6.95 6 7.45 6 8V18C6 19.1 6.9 20 8 20H17C17.83 20 18.54 19.5 18.84 18.78L21.86 11.73C21.95 11.5 22 11.26 22 11V9.09L21.99 9.08L22 9Z\",\n fill: \"#D9D9D9\",\n fillOpacity: 0.87\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgThumbUp);\nexport default __webpack_public_path__ + \"static/media/thumb-up.927530d1.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgThumbDown(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 22,\n height: 20,\n viewBox: \"0 0 22 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14 0H5C4.17 0 3.46 0.5 3.16 1.22L0.14 8.27C0.05 8.5 0 8.74 0 9V10.91L0.00999999 10.92L0 11C0 12.1 0.9 13 2 13H8.31L7.36 17.57L7.33 17.89C7.33 18.3 7.5 18.68 7.77 18.95L8.83 20L15.42 13.41C15.78 13.05 16 12.55 16 12V2C16 0.9 15.1 0 14 0ZM18 0V12H22V0H18Z\",\n fill: \"#D9D9D9\",\n fillOpacity: 0.87\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgThumbDown);\nexport default __webpack_public_path__ + \"static/media/thumb-down.eae79ddd.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgReload(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.98 2.6791L13.9886 3.4543C12.6368 1.72637 10.5345 0.617188 8.17376 0.617188C4.09739 0.617188 0.79798 3.91309 0.792706 7.99121C0.787433 12.0729 4.09388 15.3828 8.17376 15.3828C11.3607 15.3828 14.0765 13.3613 15.1101 10.5295C15.1365 10.4557 15.0978 10.373 15.024 10.3484L14.0273 10.0057C13.9925 9.99375 13.9545 9.99591 13.9213 10.0117C13.8881 10.0274 13.8624 10.0556 13.8497 10.09C13.8181 10.1779 13.7829 10.2658 13.746 10.352C13.4419 11.0727 13.006 11.7195 12.4505 12.275C11.8995 12.827 11.2472 13.2675 10.5292 13.5723C9.78568 13.8869 8.9929 14.0469 8.17728 14.0469C7.35989 14.0469 6.56888 13.8869 5.82532 13.5723C5.10669 13.2688 4.45409 12.8282 3.90403 12.275C3.35155 11.7241 2.91154 11.0709 2.60853 10.352C2.29388 9.60664 2.13392 8.81563 2.13392 7.99824C2.13392 7.18086 2.29388 6.38984 2.60853 5.64453C2.91263 4.92383 3.34857 4.27695 3.90403 3.72148C4.4595 3.16602 5.10638 2.73008 5.82532 2.42422C6.56888 2.10957 7.36165 1.94961 8.17728 1.94961C8.99466 1.94961 9.78568 2.10957 10.5292 2.42422C11.2479 2.7277 11.9005 3.16833 12.4505 3.72148C12.6245 3.89551 12.788 4.08008 12.9392 4.27344L11.881 5.09961C11.8601 5.11581 11.8441 5.13758 11.835 5.16244C11.8259 5.18729 11.824 5.21421 11.8295 5.2401C11.835 5.26599 11.8477 5.2898 11.8661 5.3088C11.8846 5.32779 11.908 5.34119 11.9337 5.34746L15.0204 6.10332C15.1083 6.12441 15.1945 6.05762 15.1945 5.96797L15.2085 2.78809C15.2068 2.67207 15.0714 2.60703 14.98 2.6791Z\",\n fill: \"#D9D9D9\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgReload);\nexport default __webpack_public_path__ + \"static/media/reload.3ec470fb.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgNewOpportunities(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 11,\n viewBox: \"0 0 16 11\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.5 3.5H0.5V5H9.5V3.5ZM9.5 0.5H0.5V2H9.5V0.5ZM12.5 6.5V3.5H11V6.5H8V8H11V11H12.5V8H15.5V6.5H12.5ZM0.5 8H6.5V6.5H0.5V8Z\",\n fill: \"white\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgNewOpportunities);\nexport default __webpack_public_path__ + \"static/media/new_opportunities.eb9f70d2.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgContactPin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 33,\n height: 34,\n viewBox: \"0 0 33 34\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.125 3.36984H6.875C5.34875 3.36984 4.125 4.60734 4.125 6.11984V25.3698C4.125 26.8823 5.34875 28.1198 6.875 28.1198H12.375L16.5 32.2448L20.625 28.1198H26.125C27.6375 28.1198 28.875 26.8823 28.875 25.3698V6.11984C28.875 4.60734 27.6375 3.36984 26.125 3.36984ZM16.5 7.90734C18.5487 7.90734 20.2125 9.57109 20.2125 11.6198C20.2125 13.6686 18.5487 15.3323 16.5 15.3323C14.4513 15.3323 12.7875 13.6686 12.7875 11.6198C12.7875 9.57109 14.4513 7.90734 16.5 7.90734ZM24.75 22.6198H8.25V21.3823C8.25 18.6323 13.75 17.1198 16.5 17.1198C19.25 17.1198 24.75 18.6323 24.75 21.3823V22.6198Z\",\n fill: \"#08478A\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgContactPin);\nexport default __webpack_public_path__ + \"static/media/contact_pin.99994548.svg\";\nexport { ForwardRef as ReactComponent };","var _rect, _defs;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgPsgPin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 67,\n height: 26,\n viewBox: \"0 0 67 26\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 67,\n height: 26,\n fill: \"url(#pattern0_1375_607)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"pattern0_1375_607\",\n patternContentUnits: \"objectBoundingBox\",\n width: 1,\n height: 1\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#image0_1375_607\",\n transform: \"matrix(0.000879954 0 0 0.00226757 -0.00905337 0)\"\n })), /*#__PURE__*/React.createElement(\"image\", {\n id: \"image0_1375_607\",\n width: 1157,\n height: 441,\n xlinkHref: \"data:image/png;base64,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\"\n }))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPsgPin);\nexport default __webpack_public_path__ + \"static/media/PSG_pin.d4c5078d.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgIndustryPin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 33,\n height: 34,\n viewBox: \"0 0 33 34\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.5 10.2448V4.74484H2.75V29.4948H30.25V10.2448H16.5ZM8.25 26.7448H5.5V23.9948H8.25V26.7448ZM8.25 21.2448H5.5V18.4948H8.25V21.2448ZM8.25 15.7448H5.5V12.9948H8.25V15.7448ZM8.25 10.2448H5.5V7.49484H8.25V10.2448ZM13.75 26.7448H11V23.9948H13.75V26.7448ZM13.75 21.2448H11V18.4948H13.75V21.2448ZM13.75 15.7448H11V12.9948H13.75V15.7448ZM13.75 10.2448H11V7.49484H13.75V10.2448ZM27.5 26.7448H16.5V23.9948H19.25V21.2448H16.5V18.4948H19.25V15.7448H16.5V12.9948H27.5V26.7448ZM24.75 15.7448H22V18.4948H24.75V15.7448ZM24.75 21.2448H22V23.9948H24.75V21.2448Z\",\n fill: \"#08478A\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIndustryPin);\nexport default __webpack_public_path__ + \"static/media/industry_pin.0bb4f9e4.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgListsPin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 33,\n height: 34,\n viewBox: \"0 0 33 34\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.5 8.86984H2.75V28.1198C2.75 29.6323 3.9875 30.8698 5.5 30.8698H24.75V28.1198H5.5V8.86984ZM27.5 3.36984H11C9.4875 3.36984 8.25 4.60734 8.25 6.11984V22.6198C8.25 24.1323 9.4875 25.3698 11 25.3698H27.5C29.0125 25.3698 30.25 24.1323 30.25 22.6198V6.11984C30.25 4.60734 29.0125 3.36984 27.5 3.36984ZM27.5 17.1198L24.0625 15.0573L20.625 17.1198V6.11984H27.5V17.1198Z\",\n fill: \"#08478A\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgListsPin);\nexport default __webpack_public_path__ + \"static/media/lists_pin.4e93a9c5.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgReportsPin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 35,\n height: 34,\n viewBox: \"0 0 35 34\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.1055 18.7598C21.3691 18.7598 19.9609 20.1277 19.9609 21.8145C19.9609 23.5012 21.3691 24.8691 23.1055 24.8691C24.8418 24.8691 26.25 23.5012 26.25 21.8145C26.25 20.1277 24.8418 18.7598 23.1055 18.7598ZM23.1055 22.9434C22.4629 22.9434 21.9434 22.4387 21.9434 21.8145C21.9434 21.1902 22.4629 20.6855 23.1055 20.6855C23.748 20.6855 24.2676 21.1902 24.2676 21.8145C24.2676 22.4387 23.748 22.9434 23.1055 22.9434ZM30.0781 5.57812H22.832C22.832 4.55215 21.9741 3.71875 20.918 3.71875H18.1836C17.1274 3.71875 16.2695 4.55215 16.2695 5.57812H9.02344C8.41846 5.57812 7.92969 6.05293 7.92969 6.64062V13.2812H4.92188C4.31689 13.2812 3.82812 13.7561 3.82812 14.3438V29.2188C3.82812 29.8064 4.31689 30.2812 4.92188 30.2812H16.4062C17.0112 30.2812 17.5 29.8064 17.5 29.2188V28.6875H30.0781C30.6831 28.6875 31.1719 28.2127 31.1719 27.625V6.64062C31.1719 6.05293 30.6831 5.57812 30.0781 5.57812ZM15.9961 7.70312H18.457V5.84375H20.6445V7.70312H23.1055V9.29688H15.9961V7.70312ZM15.3125 28.1562H6.01562V20.4531H15.3125V28.1562ZM15.3125 18.3281H6.01562V15.4062H15.3125V18.3281ZM28.7109 26.2969H17.5V14.3438C17.5 13.7561 17.0112 13.2812 16.4062 13.2812H10.3906V7.96875H13.8086V11.4219H25.293V7.96875H28.7109V26.2969ZM24.0625 13.5469V16.7344C24.0625 16.8805 24.1855 17 24.3359 17H25.9766C26.127 17 26.25 16.8805 26.25 16.7344V13.5469C26.25 13.4008 26.127 13.2812 25.9766 13.2812H24.3359C24.1855 13.2812 24.0625 13.4008 24.0625 13.5469ZM20.2344 17H21.875C22.0254 17 22.1484 16.8805 22.1484 16.7344V14.875C22.1484 14.7289 22.0254 14.6094 21.875 14.6094H20.2344C20.084 14.6094 19.9609 14.7289 19.9609 14.875V16.7344C19.9609 16.8805 20.084 17 20.2344 17Z\",\n fill: \"#08478A\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgReportsPin);\nexport default __webpack_public_path__ + \"static/media/reports_pin.d157c53b.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _path4;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgAutosaveSaving(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 15,\n height: 15,\n viewBox: \"0 0 15 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.97339 1.31006L12.4734 3.81006L9.97339 6.31006\",\n stroke: \"#595959\",\n fill: \"none\",\n strokeWidth: 1,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1.47339 6.81006L1.47339 4.81006C1.47339 4.54484 1.57879 4.29049 1.76629 4.10295C1.95379 3.91542 2.20819 3.81006 2.47339 3.81006L12.4734 3.81006\",\n stroke: \"#595959\",\n fill: \"none\",\n strokeWidth: 1,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.97339 14.3101L3.47339 11.8101L5.97339 9.31006\",\n stroke: \"#595959\",\n fill: \"none\",\n strokeWidth: 1,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.4734 8.81006L14.4734 10.8101C14.4734 11.0753 14.368 11.3297 14.1805 11.5172C13.993 11.7047 13.7386 11.8101 13.4734 11.8101L3.47339 11.8101\",\n stroke: \"#595959\",\n fill: \"none\",\n strokeWidth: 1,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAutosaveSaving);\nexport default __webpack_public_path__ + \"static/media/autosave-saving.28901a15.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgAutosaveSaved(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 15,\n height: 12,\n viewBox: \"0 0 15 12\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.7633 7.83789L7.55733 11.4446L5.95435 10.2424\",\n stroke: \"#219653\",\n fill: \"none\",\n strokeWidth: 1,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.7331 10.281C12.4012 10.277 13.0447 10.0281 13.5417 9.58148C14.0386 9.13491 14.3546 8.5216 14.4298 7.85769C14.5049 7.19377 14.334 6.52534 13.9494 5.97898C13.5648 5.43262 12.9932 5.04625 12.3428 4.89303C12.2979 4.87962 12.2578 4.85365 12.2271 4.81817C12.1965 4.78269 12.1766 4.73919 12.1699 4.6928C12.0895 3.81171 11.7095 2.98482 11.0932 2.35001C10.477 1.7152 9.66168 1.31085 8.78336 1.20439C7.90504 1.09792 7.01677 1.29578 6.26667 1.76498C5.51658 2.23417 4.95 2.94631 4.66143 3.78268C4.64234 3.82168 4.61248 3.85441 4.57539 3.87699C4.53829 3.89956 4.49552 3.91105 4.4521 3.9101C4.03379 3.93818 3.6251 4.0484 3.24938 4.23443C2.87365 4.42046 2.53825 4.67867 2.26232 4.99433C1.70505 5.63182 1.42384 6.46457 1.48057 7.30939C1.53729 8.15422 1.9273 8.94191 2.56478 9.49918C3.02871 9.90468 3.59604 10.1641 4.19619 10.2534\",\n stroke: \"#595959\",\n fill: \"none\",\n strokeWidth: 1,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAutosaveSaved);\nexport default __webpack_public_path__ + \"static/media/autosave-saved.3bdbc6e0.svg\";\nexport { ForwardRef as ReactComponent };","var _mask, _rect, _path, _line, _circle, _circle2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgAutosaveRefresh(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 53,\n height: 50,\n viewBox: \"0 0 53 50\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _mask || (_mask = /*#__PURE__*/React.createElement(\"mask\", {\n id: \"path-1-inside-1_2599_15590\",\n fill: \"white\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.957642,\n y: 0.898438,\n width: 52.0393,\n height: 48.3275,\n rx: 2\n }))), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.957642,\n y: 0.898438,\n width: 52.0393,\n height: 48.3275,\n rx: 2,\n fill: \"white\",\n stroke: \"black\",\n strokeWidth: 8,\n mask: \"url(#path-1-inside-1_2599_15590)\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M36.2838 23.3968L34.962 24.4304C33.1596 22.1265 30.3565 20.6476 27.2088 20.6476C21.7737 20.6476 17.3745 25.0421 17.3674 30.4796C17.3604 35.9218 21.769 40.3351 27.2088 40.3351C31.4581 40.3351 35.0792 37.6398 36.4573 33.864C36.4924 33.7656 36.4409 33.6554 36.3424 33.6226L35.0135 33.1656C34.9672 33.1497 34.9165 33.1525 34.8723 33.1736C34.828 33.1946 34.7938 33.2321 34.7768 33.2781C34.7346 33.3952 34.6878 33.5124 34.6385 33.6273C34.2331 34.5882 33.6518 35.4507 32.9112 36.1913C32.1765 36.9274 31.3067 37.5147 30.3495 37.921C29.3581 38.3406 28.301 38.5538 27.2135 38.5538C26.1237 38.5538 25.069 38.3406 24.0776 37.921C23.1194 37.5164 22.2493 36.9289 21.5159 36.1913C20.7792 35.4568 20.1926 34.5859 19.7885 33.6273C19.369 32.6335 19.1557 31.5788 19.1557 30.489C19.1557 29.3991 19.369 28.3445 19.7885 27.3507C20.194 26.3898 20.7753 25.5273 21.5159 24.7866C22.2565 24.046 23.119 23.4648 24.0776 23.057C25.069 22.6374 26.126 22.4241 27.2135 22.4241C28.3034 22.4241 29.3581 22.6374 30.3495 23.057C31.3077 23.4616 32.1778 24.0491 32.9112 24.7866C33.1432 25.0187 33.3612 25.2648 33.5628 25.5226L32.1518 26.6241C32.1239 26.6457 32.1026 26.6748 32.0905 26.7079C32.0783 26.7411 32.0758 26.7769 32.0831 26.8115C32.0905 26.846 32.1074 26.8777 32.132 26.9031C32.1566 26.9284 32.1878 26.9463 32.2221 26.9546L36.3378 27.9624C36.4549 27.9906 36.5698 27.9015 36.5698 27.782L36.5885 23.5421C36.5862 23.3874 36.4057 23.3007 36.2838 23.3968Z\",\n fill: \"black\"\n })), _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n x1: 1.77625,\n y1: 15.4913,\n x2: 52.1781,\n y2: 15.4913,\n stroke: \"black\",\n strokeWidth: 2\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 44.3776,\n cy: 9.85315,\n r: 1.75,\n fill: \"white\",\n stroke: \"black\",\n strokeWidth: 1.5\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 37.8151,\n cy: 9.85315,\n r: 1.75,\n fill: \"white\",\n stroke: \"black\",\n strokeWidth: 1.5\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAutosaveRefresh);\nexport default __webpack_public_path__ + \"static/media/autosave-refresh.871737ac.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgPitchbook(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 173,\n height: 180,\n viewBox: \"0 0 173 180\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67.7671 107.511C38.3681 113.155 18.9221 124.45 4.50505 142.56C4.00955 140.288 3.57817 137.453 3.30547 134.123C2.76482 127.521 2.87071 119.25 4.20307 110.135C6.8685 91.8988 14.4148 70.4479 31.3178 52.1867C60.5554 20.6 96.0398 8.93756 122.737 4.60202C68.7679 43.3057 65.5056 88.0525 67.7671 107.511Z\",\n stroke: \"#0050B3\",\n strokeWidth: 12\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M141.347 21.5318C147.757 20.0268 154.663 18.5719 160.95 17.3262C153.69 23.7985 147.504 31.5096 142.314 39.2056C134.771 50.3887 129.21 61.7265 125.465 69.5519C118.14 84.8579 110.786 110.976 117.895 139.802C109.796 139.459 100.061 140.691 90.4604 142.732C78.9917 145.17 67.4141 148.829 58.5389 152.637C49.1181 156.68 43.0528 163.748 39.2726 169.399C38.1828 171.028 37.2699 172.56 36.5219 173.874C36.4311 173.675 36.3385 173.472 36.2442 173.263C34.9243 170.348 33.2808 166.504 31.7443 162.366C30.2038 158.218 28.7934 153.836 27.9157 149.832C27.0914 146.071 26.8062 142.939 27.1299 140.717C28.2069 139.286 30.1652 137.557 33.1183 135.671C36.3378 133.616 40.5231 131.512 45.5079 129.504C55.4739 125.49 68.4305 121.946 82.7935 119.935L85.8613 119.505L85.3337 116.453C76.9543 67.9727 113.556 33.6778 119.348 28.3862C119.522 28.2273 120.154 27.8182 121.536 27.2317C122.827 26.6838 124.513 26.0859 126.534 25.4532C130.57 24.1895 135.745 22.8471 141.347 21.5318Z\",\n stroke: \"#0050B3\",\n strokeWidth: 12\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPitchbook);\nexport default __webpack_public_path__ + \"static/media/pitchbook.f3816555.svg\";\nexport { ForwardRef as ReactComponent };","var _rect, _rect2, _circle;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgGrata(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 141,\n height: 142,\n viewBox: \"0 0 141 142\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 3,\n y: 4,\n width: 88,\n height: 89,\n rx: 17,\n stroke: \"#0050B3\",\n strokeWidth: 11\n })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 49,\n y: 48,\n width: 88,\n height: 89,\n rx: 17,\n stroke: \"#0050B3\",\n strokeWidth: 11\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 122,\n cy: 18,\n r: 14,\n stroke: \"#0050B3\",\n strokeWidth: 10\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgGrata);\nexport default __webpack_public_path__ + \"static/media/grata.626c8e4a.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgPieIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.2494 12.1415H11.8588V3.75086C11.8588 3.64774 11.7744 3.56336 11.6713 3.56336H11.0619C9.83073 3.56135 8.61131 3.80279 7.4738 4.27381C6.33629 4.74482 5.30313 5.43611 4.43378 6.3079C3.57763 7.1614 2.89546 8.17311 2.42519 9.2868C1.93582 10.4419 1.68471 11.6839 1.6869 12.9384C1.68489 14.1695 1.92633 15.389 2.39735 16.5265C2.86836 17.664 3.55965 18.6971 4.43144 19.5665C5.29159 20.4266 6.29472 21.104 7.41034 21.5751C8.56543 22.0644 9.80743 22.3156 11.0619 22.3134C12.2931 22.3154 13.5125 22.0739 14.65 21.6029C15.7875 21.1319 16.8207 20.4406 17.69 19.5688C18.5502 18.7087 19.2275 17.7056 19.6986 16.5899C20.188 15.4348 20.4391 14.1928 20.4369 12.9384V12.329C20.4369 12.2259 20.3525 12.1415 20.2494 12.1415ZM16.5392 18.4649C15.8135 19.185 14.9528 19.7548 14.0065 20.1417C13.0601 20.5286 12.0468 20.725 11.0244 20.7196C8.95956 20.7102 7.01894 19.9016 5.55878 18.4415C4.08925 16.972 3.28065 15.0173 3.28065 12.9384C3.28065 10.8595 4.08925 8.90477 5.55878 7.43524C6.83847 6.15555 8.48612 5.37508 10.265 5.19696V13.7352H18.8033C18.6228 15.5235 17.8353 17.1806 16.5392 18.4649ZM22.3119 10.8384L22.251 10.1774C22.0517 8.01883 21.0932 5.98211 19.551 4.44461C18.0077 2.90429 15.9752 1.95102 13.8041 1.7493L13.1408 1.68836C13.0307 1.67899 12.9369 1.76336 12.9369 1.87352V10.8759C12.9369 10.979 13.0213 11.0634 13.1244 11.0634L22.1244 11.0399C22.2346 11.0399 22.3213 10.9462 22.3119 10.8384ZM14.526 9.4743V3.46024C16.0024 3.76926 17.3573 4.50044 18.426 5.56493C19.4971 6.63368 20.2307 7.99305 20.5353 9.4579L14.526 9.4743Z\",\n fill: \"#0050B3\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPieIcon);\nexport default __webpack_public_path__ + \"static/media/pie-icon.837b2de5.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgBarChart(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 30,\n height: 28,\n viewBox: \"0 0 30 28\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.6875 24.9375H2.8125V0.5625C2.8125 0.390625 2.67188 0.25 2.5 0.25H0.3125C0.140625 0.25 0 0.390625 0 0.5625V27.4375C0 27.6094 0.140625 27.75 0.3125 27.75H29.6875C29.8594 27.75 30 27.6094 30 27.4375V25.25C30 25.0781 29.8594 24.9375 29.6875 24.9375ZM6.25 21.8125H8.4375C8.60938 21.8125 8.75 21.6719 8.75 21.5V15.875C8.75 15.7031 8.60938 15.5625 8.4375 15.5625H6.25C6.07812 15.5625 5.9375 15.7031 5.9375 15.875V21.5C5.9375 21.6719 6.07812 21.8125 6.25 21.8125ZM12.1875 21.8125H14.375C14.5469 21.8125 14.6875 21.6719 14.6875 21.5V9C14.6875 8.82812 14.5469 8.6875 14.375 8.6875H12.1875C12.0156 8.6875 11.875 8.82812 11.875 9V21.5C11.875 21.6719 12.0156 21.8125 12.1875 21.8125ZM18.125 21.8125H20.3125C20.4844 21.8125 20.625 21.6719 20.625 21.5V12.0469C20.625 11.875 20.4844 11.7344 20.3125 11.7344H18.125C17.9531 11.7344 17.8125 11.875 17.8125 12.0469V21.5C17.8125 21.6719 17.9531 21.8125 18.125 21.8125ZM24.0625 21.8125H26.25C26.4219 21.8125 26.5625 21.6719 26.5625 21.5V5.875C26.5625 5.70312 26.4219 5.5625 26.25 5.5625H24.0625C23.8906 5.5625 23.75 5.70312 23.75 5.875V21.5C23.75 21.6719 23.8906 21.8125 24.0625 21.8125Z\",\n fill: \"#08478A\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgBarChart);\nexport default __webpack_public_path__ + \"static/media/bar-chart.7aa98caf.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgMyCompanies(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 26,\n height: 29,\n viewBox: \"0 0 26 29\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.625 3.3653H16.8775C16.3 1.7703 14.7875 0.615295 13 0.615295C11.2125 0.615295 9.7 1.7703 9.1225 3.3653H3.375C1.8625 3.3653 0.625 4.6028 0.625 6.1153V25.3653C0.625 26.8778 1.8625 28.1153 3.375 28.1153H22.625C24.1375 28.1153 25.375 26.8778 25.375 25.3653V6.1153C25.375 4.6028 24.1375 3.3653 22.625 3.3653ZM13 3.3653C13.7563 3.3653 14.375 3.98405 14.375 4.7403C14.375 5.49655 13.7563 6.1153 13 6.1153C12.2437 6.1153 11.625 5.49655 11.625 4.7403C11.625 3.98405 12.2437 3.3653 13 3.3653ZM15.75 22.6153H6.125V19.8653H15.75V22.6153ZM19.875 17.1153H6.125V14.3653H19.875V17.1153ZM19.875 11.6153H6.125V8.8653H19.875V11.6153Z\",\n fill: \"#08478A\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgMyCompanies);\nexport default __webpack_public_path__ + \"static/media/my-companies.a44b3add.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport classnames from 'classnames';\nimport { IconName } from './interfaces';\nimport { ReactComponent as AddressBookIcon } from '../../../assets/svg/icons/address-book.svg';\nimport { ReactComponent as StickyNoteIcon } from '../../../assets/svg/icons/sticky-note-o.svg';\nimport { ReactComponent as ListIcon } from '../../../assets/svg/icons/list.svg';\nimport { ReactComponent as SearchIcon } from '../../../assets/svg/icons/search.svg';\nimport { ReactComponent as FileTextIcon } from '../../../assets/svg/icons/file-text.svg';\nimport { ReactComponent as CheckmarkFill } from '../../../assets/svg/icons/checkmark-fill.svg';\nimport { ReactComponent as CapterraIcon } from '../../../assets/svg/icons/capterra.svg';\nimport { ReactComponent as FacebookIcon } from '../../../assets/svg/icons/facebook.svg';\nimport { ReactComponent as LinkedinIcon } from '../../../assets/svg/icons/linkedin.svg';\nimport { ReactComponent as TwitterIcon } from '../../../assets/svg/icons/twitter.svg';\nimport { ReactComponent as WebsiteIcon } from '../../../assets/svg/icons/website.svg';\nimport { ReactComponent as CrunchbaseIcon } from '../../../assets/svg/icons/crunchbase.svg';\nimport { ReactComponent as G2CrowdIcon } from '../../../assets/svg/icons/g2crowd.svg';\nimport { ReactComponent as SourceScrubIcon } from '../../../assets/svg/icons/sourcescrub.svg';\nimport { ReactComponent as EquityTouchIcon } from '../../../assets/svg/icons/equitytouch.svg';\nimport { ReactComponent as SimilarWebIcon } from '../../../assets/svg/icons/similarweb.svg';\nimport { ReactComponent as BVDOrbisWebIcon } from '../../../assets/svg/icons/bvdorbis.svg';\nimport { ReactComponent as Fullscreen } from '../../../assets/svg/icons/fullscreen.svg';\nimport { ReactComponent as FullscreenExit } from '../../../assets/svg/icons/fullscreen-exit.svg';\nimport { ReactComponent as PeopleOutlined } from '../../../assets/svg/icons/social/people-outlined.svg';\nimport { ReactComponent as People } from '../../../assets/svg/icons/social/people.svg';\nimport { ReactComponent as Close } from '../../../assets/svg/icons/close.svg';\nimport { ReactComponent as ChromeCloseIcon } from '../../../assets/svg/icons/chrome-close.svg';\nimport { ReactComponent as Pen } from '../../../assets/svg/icons/pen.svg';\nimport { ReactComponent as ThumbsUp } from '../../../assets/svg/icons/thumbs-up.svg';\nimport { ReactComponent as ThumbsDown } from '../../../assets/svg/icons/thumbs-down.svg';\nimport { ReactComponent as ThumbsUnknown } from '../../../assets/svg/icons/thumbs-unknown.svg';\nimport { ReactComponent as OpenInNew } from '../../../assets/svg/icons/open-in-new.svg';\nimport { ReactComponent as Bookmark } from '../../../assets/svg/icons/bookmark.svg';\nimport { ReactComponent as PipelineIcon } from '../../../assets/svg/icons/pipeline.svg';\nimport { ReactComponent as BusinessIcon } from '../../../assets/svg/icons/business.svg';\nimport { ReactComponent as ThreeDotsIcon } from '../../../assets/svg/icons/three-dots.svg';\nimport { ReactComponent as WebsiteRankIcon } from '../../../assets/svg/icons/website-rank.svg';\nimport { ReactComponent as DollarIcon } from '../../../assets/svg/icons/dollar.svg';\nimport { ReactComponent as PersonAdd } from '../../../assets/svg/icons/person-add.svg';\nimport { ReactComponent as ArrowDownEnd } from '../../../assets/svg/icons/arrow-down-end.svg';\nimport { ReactComponent as Salesloft } from '../../../assets/svg/icons/salesloft.svg';\nimport { ReactComponent as TrendingDown } from '../../../assets/svg/icons/trending-down.svg';\nimport { ReactComponent as TrendingUp } from '../../../assets/svg/icons/trending-up.svg';\nimport { ReactComponent as GridIcon } from '../../../assets/svg/icons/icon-grid.svg';\nimport { ReactComponent as TilesIcon } from '../../../assets/svg/icons/icon-tiles.svg';\nimport { ReactComponent as GlassdoorIcon } from '../../../assets/svg/icons/glassdoor.svg';\nimport { ReactComponent as WebsiteRankBlueIcon } from '../../../assets/svg/icons/website-rank-blue.svg';\nimport { ReactComponent as ChromeNewTabIcon } from '../../../assets/svg/icons/chrome-new-tab.svg';\nimport { ReactComponent as ChromeDotsButtonIcon } from '../../../assets/svg/icons/chrome-dots-button.svg';\nimport { ReactComponent as ChromeOptxLogoIcon } from '../../../assets/svg/icons/chrome-optx-logo.svg';\nimport { ReactComponent as PinIcon } from '../../../assets/svg/icons/pin.svg';\nimport { ReactComponent as NoCompanyIcon } from '../../../assets/svg/icons/no-company.svg';\nimport { ReactComponent as DragAndDrop } from '../../../assets/svg/icons/drag-and-drop.svg';\nimport { ReactComponent as MapIcon } from '../../../assets/svg/icons/map.svg';\nimport { ReactComponent as ReportCardIcon } from '../../../assets/svg/icons/report-card-icon.svg';\nimport { ReactComponent as ArtificialIntelligenceIcon } from '../../../assets/svg/icons/artificial-intelligence.svg';\nimport { ReactComponent as EmployeeGrowthIcon } from '../../../assets/svg/icons/employee-growth.svg';\nimport { ReactComponent as OPTXScoreOverIcon } from '../../../assets/svg/icons/optx-score-over.svg';\nimport { ReactComponent as ThumbUpIcon } from '../../../assets/svg/icons/thumb-up.svg';\nimport { ReactComponent as ThumbDownIcon } from '../../../assets/svg/icons/thumb-down.svg';\nimport { ReactComponent as ReloadIcon } from '../../../assets/svg/icons/reload.svg';\nimport { ReactComponent as NewOpportunitiesIcon } from '../../../assets/svg/icons/new_opportunities.svg';\nimport { ReactComponent as ContactIcon } from '../../../assets/svg/icons/contact_pin.svg';\nimport { ReactComponent as PSGIcon } from '../../../assets/svg/icons/PSG_pin.svg';\nimport { ReactComponent as IndustryIcon } from '../../../assets/svg/icons/industry_pin.svg';\nimport { ReactComponent as ListsIcon } from '../../../assets/svg/icons/lists_pin.svg';\nimport { ReactComponent as ReportsIcon } from '../../../assets/svg/icons/reports_pin.svg';\nimport { ReactComponent as AutosaveSavingIcon } from '../../../assets/svg/icons/autosave-saving.svg';\nimport { ReactComponent as AutosaveSavedIcon } from '../../../assets/svg/icons/autosave-saved.svg';\nimport { ReactComponent as AutosaveRefreshIcon } from '../../../assets/svg/icons/autosave-refresh.svg';\nimport { ReactComponent as PitchbookIcon } from '../../../assets/svg/icons/pitchbook.svg';\nimport { ReactComponent as GrataIcon } from '../../../assets/svg/icons/grata.svg';\nimport { ReactComponent as PieIcon } from '../../../assets/svg/icons/pie-icon.svg';\nimport { ReactComponent as BarChartIcon } from '../../../assets/svg/icons/bar-chart.svg';\nimport { ReactComponent as MyCompaniesIcon } from '../../../assets/svg/icons/my-companies.svg';\n\nexport interface IconProps extends React.SVGProps<SVGSVGElement> {\n iconName: IconName;\n}\n\nconst Icon: React.FC<IconProps> = ({ iconName, className, ...iconProps }) => {\n const iconClassName = classnames(`icon icon-${iconName}`, className);\n\n switch (iconName) {\n case 'address-book':\n return <AddressBookIcon {...iconProps} className={iconClassName} />;\n case 'website-rank':\n return <WebsiteRankIcon {...iconProps} className={iconClassName} />;\n case 'sub-sector':\n return <PieIcon {...iconProps} className={iconClassName} />;\n case 'arrow-down-end':\n return <ArrowDownEnd {...iconProps} className={iconClassName} />;\n case 'bookmark':\n return <Bookmark {...iconProps} className={iconClassName} />;\n case 'business':\n return <BusinessIcon {...iconProps} className={iconClassName} />;\n case 'dollar':\n return <DollarIcon {...iconProps} className={iconClassName} />;\n case 'sticky-note-o':\n return <StickyNoteIcon {...iconProps} className={iconClassName} />;\n case 'list':\n return <ListIcon {...iconProps} className={iconClassName} />;\n case 'search':\n return <SearchIcon {...iconProps} className={iconClassName} />;\n case 'file-text':\n return <FileTextIcon {...iconProps} className={iconClassName} />;\n case 'checkmark-fill':\n return <CheckmarkFill {...iconProps} className={iconClassName} />;\n case 'capterra':\n return <CapterraIcon {...iconProps} className={iconClassName} />;\n case 'chrome-new-tab':\n return <ChromeNewTabIcon {...iconProps} className={iconClassName} />;\n case 'chrome-dots-button':\n return <ChromeDotsButtonIcon {...iconProps} className={iconClassName} />;\n case 'chrome-optx-logo':\n return <ChromeOptxLogoIcon {...iconProps} className={iconClassName} />;\n case 'facebook':\n return <FacebookIcon {...iconProps} className={iconClassName} />;\n case 'linkedin':\n return <LinkedinIcon {...iconProps} className={iconClassName} />;\n case 'twitter':\n return <TwitterIcon {...iconProps} className={iconClassName} />;\n case 'website':\n return <WebsiteIcon {...iconProps} className={iconClassName} />;\n case 'crunchbase':\n return <CrunchbaseIcon {...iconProps} className={iconClassName} />;\n case 'g2crowd':\n return <G2CrowdIcon {...iconProps} className={iconClassName} />;\n case 'sourcescrub':\n return <SourceScrubIcon {...iconProps} className={iconClassName} />;\n case 'equitytouch':\n return <EquityTouchIcon {...iconProps} className={iconClassName} />;\n case 'similarweb':\n return <SimilarWebIcon {...iconProps} className={iconClassName} />;\n case 'bvdorbis':\n return <BVDOrbisWebIcon {...iconProps} className={iconClassName} />;\n case 'fullscreen':\n return <Fullscreen {...iconProps} className={iconClassName} />;\n case 'fullscreen-exit':\n return <FullscreenExit {...iconProps} className={iconClassName} />;\n case 'people':\n return <People {...iconProps} className={iconClassName} />;\n case 'people-outlined':\n return <PeopleOutlined {...iconProps} className={iconClassName} />;\n case 'close':\n return <Close {...iconProps} className={iconClassName} />;\n case 'pen':\n return <Pen {...iconProps} className={iconClassName} />;\n case 'person-add':\n return <PersonAdd {...iconProps} className={iconClassName} />;\n case 'thumbs-up':\n return <ThumbsUp {...iconProps} className={iconClassName} />;\n case 'thumbs-down':\n return <ThumbsDown {...iconProps} className={iconClassName} />;\n case 'thumbs-unknown':\n return <ThumbsUnknown {...iconProps} className={iconClassName} />;\n case 'trending-down':\n return <TrendingDown {...iconProps} className={iconClassName} />;\n case 'trending-up':\n return <TrendingUp {...iconProps} className={iconClassName} />;\n case 'open-in-new':\n return <OpenInNew {...iconProps} className={iconClassName} />;\n case 'pipeline':\n return <PipelineIcon {...iconProps} className={iconClassName} />;\n case 'three-dots':\n return <ThreeDotsIcon {...iconProps} className={iconClassName} />;\n case 'salesloft':\n return <Salesloft {...iconProps} className={iconClassName} />;\n case 'grid':\n return <GridIcon {...iconProps} className={iconClassName} />;\n case 'tiles':\n return <TilesIcon {...iconProps} className={iconClassName} />;\n case 'pin':\n return <PinIcon {...iconProps} className={iconClassName} />;\n case 'no-company':\n return <NoCompanyIcon {...iconProps} className={iconClassName} />;\n case 'glassdoor':\n return <GlassdoorIcon {...iconProps} className={iconClassName} />;\n case 'website-rank-blue':\n return <WebsiteRankBlueIcon {...iconProps} className={iconClassName} />;\n case 'chrome-close':\n return <ChromeCloseIcon {...iconProps} className={iconClassName} />;\n case 'drag-and-drop':\n return <DragAndDrop {...iconProps} className={iconClassName} />;\n case 'map':\n return <MapIcon {...iconProps} className={iconClassName} />;\n case 'report-card-icon':\n return <ReportCardIcon {...iconProps} className={iconClassName} />;\n case 'artificial-intelligence':\n return <ArtificialIntelligenceIcon {...iconProps} className={iconClassName} />;\n case 'employee-growth':\n return <EmployeeGrowthIcon {...iconProps} className={iconClassName} />;\n case 'optx-score-over':\n return <OPTXScoreOverIcon {...iconProps} className={iconClassName} />;\n case 'thumb-up':\n return <ThumbUpIcon {...iconProps} className={iconClassName} />;\n case 'thumb-down':\n return <ThumbDownIcon {...iconProps} className={iconClassName} />;\n case 'reload':\n return <ReloadIcon {...iconProps} className={iconClassName} />;\n case 'new-opportunities':\n return <NewOpportunitiesIcon {...iconProps} className={iconClassName} />;\n case 'find-company':\n return <SearchIcon {...iconProps} className={iconClassName} />;\n case 'find-contact':\n return <ContactIcon {...iconProps} className={iconClassName} />;\n case 'psg-portfolio-company':\n return <PSGIcon {...iconProps} className={iconClassName} />;\n case 'browse-industry-lists':\n return <IndustryIcon {...iconProps} className={iconClassName} />;\n case 'view-my-lists':\n return <ListsIcon {...iconProps} className={iconClassName} />;\n case 'weekly-leads-report':\n return <ReportsIcon {...iconProps} className={iconClassName} />;\n case 'pipeline-reports':\n return <BarChartIcon {...iconProps} className={iconClassName} />;\n case 'my-companies':\n return <MyCompaniesIcon {...iconProps} className={iconClassName} />;\n case 'autosave-saving':\n return <AutosaveSavingIcon {...iconProps} className={iconClassName} />;\n case 'autosave-saved':\n return <AutosaveSavedIcon {...iconProps} className={iconClassName} />;\n case 'autosave-refresh':\n return <AutosaveRefreshIcon {...iconProps} className={iconClassName} />;\n case 'pitchbook':\n return <PitchbookIcon {...iconProps} className={iconClassName} />;\n case 'grata':\n return <GrataIcon {...iconProps} className={iconClassName} />;\n\n default:\n return null;\n }\n};\n\nexport default Icon;\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { SortByRule } from '@models/table/sorting';\nimport { UserManagement, UserEdit, UserInfo } from '@models/UserManagement';\n// constants\nimport * as types from './types';\n\nexport const fetchUserManagement = createAction<Array<SortByRule<any>> | undefined>(\n types.FETCH_USER_MANAGEMENT\n);\nexport const fetchUserManagementSuccess = createAction<Array<UserManagement>>(\n types.FETCH_USER_MANAGEMENT_SUCCESS\n);\nexport const fetchUserManagementFail = createAction<string>(types.FETCH_USER_MANAGEMENT_FAIL);\n\nexport const resendUserInvite = createAction<{ userId: number }>(types.RESEND_USER_INVITE);\nexport const resendUserInviteSuccess = createAction<Array<{ userId: number }>>(\n types.RESEND_USER_INVITE_SUCCESS\n);\nexport const resendUserInviteFail = createAction<string>(types.RESEND_USER_INVITE_FAIL);\n\nexport const disableUser = createAction<number>(types.USER_DISABLE);\n\nexport const disableUserSuccess = createAction<number>(types.USER_DISABLE_SUCCESS);\n\nexport const unlockUser = createAction<number>(types.USER_UNLOCK);\nexport const unlockUserSuccess = createAction<number>(types.USER_UNLOCK_SUCCESS);\nexport const unlockUserFail = createAction<string>(types.USER_UNLOCK_FAIL);\n\n// editing\nexport const fetchUserEditInfo = createAction<number>(types.FETCH_USER_EDIT_INFO);\n\nexport const fetchUserEditInfoSuccess = createAction<UserEdit>(types.FETCH_USER_EDIT_INFO_SUCCESS);\n\nexport const fetchUserEditInfoFail = createAction<string>(types.FETCH_USER_EDIT_INFO_FAIL);\n\nexport const submitUserInfo = createAction<UserInfo>(types.SUBMIT_USER_INFO);\n\nexport const submitUserInfoSuccess = createAction<UserInfo>(types.SUBMIT_USER_INFO_SUCCESS);\n\n// sorting\nexport const changeSortSuccess = createAction<Array<SortByRule<any>>>(types.CHANGE_SORT_SUCCESS);\n","export const FETCH_USER_MANAGEMENT = 'FETCH_USER_MANAGEMENT';\nexport const FETCH_USER_MANAGEMENT_SUCCESS = 'FETCH_USER_MANAGEMENT_SUCCESS';\nexport const FETCH_USER_MANAGEMENT_FAIL = 'FETCH_USER_MANAGEMENT_FAIL';\nexport const GET_RELOADED_DATA = 'GET_RELOADED_DATA';\nexport const RESEND_USER_INVITE = 'RESEND_USER_INVITE';\nexport const RESEND_USER_INVITE_SUCCESS = 'RESEND_USER_INVITE_SUCCESS';\nexport const RESEND_USER_INVITE_FAIL = 'RESEND_USER_INVITE_FAIL';\nexport const USER_DISABLE = 'USER_DISABLE';\nexport const USER_DISABLE_SUCCESS = 'USER_DISABLE_SUCCESS';\nexport const USER_UNLOCK = 'USER_UNLOCK';\nexport const USER_UNLOCK_SUCCESS = 'USER_UNLOCK_SUCCESS';\nexport const USER_UNLOCK_FAIL = 'USER_UNLOCK_FAIL';\n\nexport const FETCH_USER_EDIT_INFO = 'FETCH_USER_EDIT_INFO';\nexport const FETCH_USER_EDIT_INFO_SUCCESS = 'FETCH_USER_EDIT_INFO_SUCCESS';\nexport const FETCH_USER_EDIT_INFO_FAIL = 'FETCH_USER_EDIT_INFO_FAIL';\n\nexport const SUBMIT_USER_INFO = 'SUBMIT_USER_INFO';\nexport const SUBMIT_USER_INFO_SUCCESS = 'SUBMIT_USER_INFO_SUCCESS';\nexport const SUBMIT_USER_INFO_FAIL = 'SUBMIT_USER_INFO_FAIL';\n\nexport const CHANGE_SORT_SUCCESS = 'CHANGE_SORT_SUCCESS';\n","import React from 'react';\nimport { Button } from 'antd';\nimport styled from 'styled-components';\n// models\nimport { Cell } from '@models/table/Cell';\nimport { UserManagement } from '@optx/models/UserManagement';\n// constants\nimport { ALL_USERS } from '@optx/constants/pendoActions';\n// components\nimport { useResendUserInvitation } from '@components/pages/UserManagement/hooks';\n\nconst TableCellStatusContainer = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst StatusText = styled.span`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst TableCellStatus: React.FC<Cell<UserManagement>> = ({ value, record }) => {\n const userResendInvitation = useResendUserInvitation();\n\n const handleClick = () => {\n userResendInvitation(record.id);\n\n window.pendo.track(`${ALL_USERS}_Status_Resend`);\n };\n\n return (\n <TableCellStatusContainer>\n {value === 'Invitation Sent' || value === 'No Access' ? (\n <>\n <StatusText>{value}</StatusText>\n {record.email && (\n <Button type=\"link\" style={{ padding: 0 }} onClick={handleClick}>\n (Resend)\n </Button>\n )}\n </>\n ) : record.locked ? (\n value + ' / Locked'\n ) : (\n value\n )}\n </TableCellStatusContainer>\n );\n};\n\nexport default TableCellStatus;\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { actions } from '../../../redux/user-management';\n\nexport const useResendUserInvitation = () => {\n const dispatch = useDispatch();\n const resendUserInvite = useCallback(\n payload => dispatch(actions.resendUserInvite(payload)),\n [dispatch]\n );\n\n return resendUserInvite;\n};\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Dropdown, Menu } from 'antd';\nimport { EllipsisOutlined } from '@ant-design/icons';\n// models\nimport { UserManagement } from '@optx/models/UserManagement';\nimport { Cell } from '@models/table/Cell';\n// constants\nimport { ALL_USERS } from '@optx/constants/pendoActions';\n// redux\nimport { actions as userEditmodalActions } from '@redux/ui/modals/user-edit';\nimport { actions } from '@redux/user-management';\n// styles\nimport Styles from '@components/pages/UserManagement/UserManagement.style';\n\nconst TableCellActions: React.FC<Cell<UserManagement>> = ({ record }) => {\n const dispatch = useDispatch();\n\n const handleDisable = () => {\n dispatch(actions.disableUser(record.id));\n\n window.pendo.track(`${ALL_USERS}_Action_ThreeDots_DisableUserAccess`);\n };\n\n const handleUnlock = () => {\n dispatch(actions.unlockUser(record.id));\n };\n\n const handleEdit = () => {\n dispatch(actions.fetchUserEditInfo(record.id));\n dispatch(userEditmodalActions.toggleUserEditModal());\n };\n\n const menu = (\n <Styles.MenuWrapper>\n <Menu.Item key=\"disable-user-access-menu\">\n <button disabled={record.status === 'No Access'} type=\"button\" onClick={handleDisable}>\n Disable User Access\n </button>\n </Menu.Item>\n {record.locked && (\n <Menu.Item key=\"unlock-menu\">\n <button type=\"button\" onClick={handleUnlock}>\n Unlock\n </button>\n </Menu.Item>\n )}\n <Menu.Item key=\"edit-user-menu\">\n <button type=\"button\" onClick={handleEdit}>\n Edit User\n </button>\n </Menu.Item>\n </Styles.MenuWrapper>\n );\n\n return (\n <Dropdown overlay={menu} trigger={['click']} placement=\"bottomRight\">\n <EllipsisOutlined onClick={() => window.pendo.track(`${ALL_USERS}_Action_ThreeDots`)} />\n </Dropdown>\n );\n};\n\nexport default TableCellActions;\n","import React from 'react';\nimport { ColumnType } from 'antd/lib/table';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\nimport globalConfig from '@optx/constants/config';\n// models\nimport { UserManagement } from '@models/UserManagement';\n// cells\nimport {\n TableCellDefault,\n TableCellEmail,\n TableCellDate,\n} from '@components/common/table/AntTable/cells';\nimport { TableCellActions, TableCellStatus } from './cells';\n\nconst columns: ColumnType<UserManagement>[] = [\n {\n dataIndex: 'display_name',\n title: 'User',\n width: 130,\n render: TableCellDefault,\n sorter: true,\n },\n {\n dataIndex: 'email',\n title: 'Email',\n width: 130,\n render: TableCellEmail,\n sorter: true,\n },\n {\n dataIndex: 'last_activity',\n title: 'Last Activity',\n width: 70,\n render: (value: string | null, record: UserManagement, index: number) => (\n <TableCellDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={!value || value === DEFAULT_CELL_VALUE ? DEFAULT_CELL_VALUE : undefined}\n />\n ),\n sorter: true,\n },\n {\n dataIndex: 'role',\n title: 'Role',\n width: 60,\n render: TableCellDefault,\n sorter: true,\n },\n {\n dataIndex: 'status',\n title: 'Status',\n render: (value: string, record: UserManagement) => (\n <TableCellStatus value={value} record={record} />\n ),\n sorter: true,\n width: 80,\n },\n {\n dataIndex: 'row_actions',\n title: 'Action',\n className: 'row_actions',\n render: (value: string, record: UserManagement) => (\n <TableCellActions value={value} record={record} />\n ),\n width: 65,\n },\n];\n\nexport default columns;\n","import { createSelector } from 'reselect';\n// constants\nimport { defaultColumns } from '@components/common/table/TableUserManagement';\n// utils\nimport { sortColumns } from '@optx/utils/table/sorting';\n// models/interfaces\nimport { AppState } from '@optx/redux/interfaces';\n// redux\nimport { getDefaultScore } from '../user/information/selectors';\n\nconst userManagementState = (state: AppState) => state.userManagement;\nconst userEditModalState = (state: AppState) => state.userManagement.edit;\n\nexport const isLoading = createSelector(userManagementState, state => state.loading);\nexport const shouldFetch = createSelector(\n userManagementState,\n state => !state.loading && !state.fetchedAt\n);\nexport const userManagementData = createSelector(userManagementState, state => state.data);\n\nexport const getSorting = createSelector(userManagementState, state => state.sortBy);\n\nexport const getGridColumns = createSelector(\n getSorting,\n getDefaultScore,\n (sorting, defaultOptxScore) => sortColumns(defaultColumns, sorting, defaultOptxScore)\n);\n\n// editing\nexport const modalLoading = createSelector(userEditModalState, state => state.loading);\n\nexport const getEditData = createSelector(userEditModalState, state => state.data);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// constants\nimport { USER_DEFAULT_SORT } from '@constants/table/sort/defaultSort';\n// models/interfaces\nimport { SortByRule } from '@models/table/sorting';\nimport { UserManagement, UserInfo, UserEdit } from '@models/UserManagement';\nimport { UserManagementState } from './interfaces';\n// redux\nimport * as actions from './actions';\n// external reducers\nimport { fetchReducer, fetchFailReducer, fetchSuccessReducer } from '../feature/fetch/reducers';\n\nconst initialState: UserManagementState = {\n loading: false,\n error: '',\n data: [],\n fetchedAt: '',\n sortBy: USER_DEFAULT_SORT,\n edit: {\n loading: false,\n error: '',\n data: {\n access_role_options: [],\n user_info: {\n user_id: null,\n display_name: '',\n role_id: null,\n email_list: [],\n },\n },\n },\n};\n\nconst fetchUserManagementReducer: CaseReducer<\n UserManagementState,\n PayloadAction<Array<SortByRule<any>> | undefined>\n> = draftState => {\n fetchReducer(draftState);\n};\n\nconst fetchUserManagementReducerSuccess: CaseReducer<\n UserManagementState,\n PayloadAction<Array<UserManagement>>\n> = (draftState, action) => {\n fetchSuccessReducer(draftState, action);\n draftState.fetchedAt = new Date().toISOString();\n};\n\nconst resendUserInviteSuccessReducer: CaseReducer<\n UserManagementState,\n PayloadAction<Array<{ userId: number }>>\n> = draftState => {\n draftState.loading = false;\n};\n\nconst disableUserSuccessReducer: CaseReducer<UserManagementState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n const index = draftState.data.findIndex(item => item.id === action.payload);\n\n if (index !== -1) {\n draftState.data[index].status = 'No Access';\n }\n};\n\nconst unlockUserSuccessReducer: CaseReducer<UserManagementState, PayloadAction<number>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n const index = draftState.data.findIndex(item => item.id === action.payload);\n\n if (index !== -1) {\n draftState.data[index].locked = false;\n }\n};\n\nconst submitUserInfoSuccessReducer: CaseReducer<UserManagementState, PayloadAction<UserInfo>> = (\n draftState,\n action\n) => {\n const { payload } = action;\n const index = draftState.data.findIndex(user => user.id === payload.user_id);\n\n if (index !== -1) {\n draftState.data[index].display_name = payload.display_name;\n draftState.data[index].email = payload.email_list as string;\n draftState.data[index].role = payload.roleName as string;\n }\n};\n\nconst changeSortSuccessReducer: CaseReducer<\n UserManagementState,\n PayloadAction<Array<SortByRule<any>>>\n> = (draftState, action) => {\n draftState.sortBy = action.payload;\n};\n\n// editing\nconst fetchUserEditInfoReducer: CaseReducer<UserManagementState> = draftState => {\n fetchReducer(draftState.edit);\n};\n\nconst fetchUserEditInfoSuccessReducer: CaseReducer<UserManagementState, PayloadAction<UserEdit>> = (\n draftState,\n action\n) => {\n fetchSuccessReducer(draftState.edit, action);\n};\n\nconst fetchUserEditInfoFailReducer: CaseReducer<UserManagementState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n fetchFailReducer(draftState.edit, action);\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchUserManagement, fetchUserManagementReducer)\n .addCase(actions.fetchUserManagementSuccess, fetchUserManagementReducerSuccess)\n .addCase(actions.fetchUserManagementFail, fetchFailReducer)\n .addCase(actions.resendUserInvite, fetchReducer)\n .addCase(actions.resendUserInviteSuccess, resendUserInviteSuccessReducer)\n .addCase(actions.resendUserInviteFail, fetchFailReducer)\n .addCase(actions.disableUserSuccess, disableUserSuccessReducer)\n .addCase(actions.unlockUser, fetchReducer)\n .addCase(actions.unlockUserSuccess, unlockUserSuccessReducer)\n .addCase(actions.unlockUserFail, fetchFailReducer)\n .addCase(actions.submitUserInfoSuccess, submitUserInfoSuccessReducer)\n .addCase(actions.changeSortSuccess, changeSortSuccessReducer)\n // edit\n .addCase(actions.fetchUserEditInfo, fetchUserEditInfoReducer)\n .addCase(actions.fetchUserEditInfoSuccess, fetchUserEditInfoSuccessReducer)\n .addCase(actions.fetchUserEditInfoFail, fetchUserEditInfoFailReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { values as _values } from 'lodash';\n// models\nimport { SortByRule } from '@models/table/sorting';\nimport {\n UserInfo,\n UserEdit,\n UserManagement as UserManagementType,\n} from '@optx/models/UserManagement';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { UserManagement, UserService } from '@services/api';\n// utils\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport { AxiosResponse } from 'axios';\nimport * as selectors from './selectors';\nimport * as actions from './actions';\n\nexport function* fetchUserManagementSaga(\n action: PayloadAction<Array<SortByRule<any>> | undefined>\n) {\n let sorting: SortByRule<any>[] = yield select(selectors.getSorting);\n\n if (action.payload) {\n sorting = action.payload;\n }\n\n try {\n const res: AxiosResponse<UserManagementType[]> = yield call(\n UserManagement.getUserList,\n sorting\n );\n\n if (res.data) {\n yield put(actions.fetchUserManagementSuccess(res.data));\n\n if (action.payload) {\n yield put(actions.changeSortSuccess(action.payload));\n }\n } else {\n const errorMessage = 'Failed to fetch User Information!';\n yield put(actions.fetchUserManagementFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch User Information!';\n yield put(actions.fetchUserManagementFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* resendUserInviteSaga(action: PayloadAction<{ userId: number }>) {\n try {\n const res: AxiosResponse<\n {\n userId: number;\n }[]\n > = yield call(UserManagement.setResendInvitation, action.payload);\n\n if (!res.data) {\n yield put(actions.resendUserInviteSuccess(res.data));\n NotificationService.success('Invitation Sent!');\n } else {\n const errorMessage = 'Failed to resend User Invitation!';\n yield put(actions.resendUserInviteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n let errorMessage = 'Failed to resend User Invitation!';\n\n if (error.response.data && error.response.data.errors) {\n errorMessage = _values(error.response.data.errors).toString();\n }\n\n yield put(actions.resendUserInviteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* disableUserSaga(action: PayloadAction<number>) {\n const { payload } = action;\n\n try {\n yield call(UserService.disableUser, payload);\n yield put(actions.disableUserSuccess(payload));\n } catch (error: any) {\n const errorMessage = 'Failed to disable user!';\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* unlockUserSaga(action: PayloadAction<number>) {\n const { payload } = action;\n\n try {\n yield call(UserService.unlockUser, payload);\n yield put(actions.unlockUserSuccess(payload));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to unlock user!');\n NotificationService.error(errorMessage);\n yield put(actions.unlockUserFail(errorMessage));\n }\n}\n\nexport function* fetchUserEditInfoSaga(action: PayloadAction<number>) {\n const { payload } = action;\n\n try {\n const res: AxiosResponse<UserEdit> = yield call(UserManagement.getUserEditInfo, payload);\n\n if (res.data) {\n yield put(actions.fetchUserEditInfoSuccess(res.data));\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to load user information');\n NotificationService.error(errorMessage);\n yield put(actions.fetchUserManagementFail(errorMessage));\n }\n}\n\nexport function* submitUserInfoSaga(action: PayloadAction<UserInfo>) {\n const { payload } = action;\n const postData = { ...payload, email_list: (payload.email_list as string).split(',') };\n const roleList: UserEdit = yield select(selectors.getEditData);\n const roleName = roleList.access_role_options.find(role => role.value === payload.role_id)?.label;\n\n try {\n const res: AxiosResponse<boolean> = yield call(UserManagement.postUserInfo, postData);\n\n if (res.data) {\n yield put(actions.submitUserInfoSuccess({ ...payload, roleName }));\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to update user information');\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* userManagementSaga() {\n yield takeLatest(actions.fetchUserManagement, fetchUserManagementSaga);\n yield takeLatest(actions.resendUserInvite, resendUserInviteSaga);\n yield takeLatest(actions.disableUser, disableUserSaga);\n yield takeLatest(actions.unlockUser, unlockUserSaga);\n yield takeLatest(actions.fetchUserEditInfo, fetchUserEditInfoSaga);\n yield takeLatest(actions.submitUserInfo, submitUserInfoSaga);\n}\n","import { combineReducers } from 'redux';\n// models\nimport { UIModalsState } from './interfaces';\n// reducers\nimport displayColumnDialogReducer from './display-column';\nimport comanyNotesModal from './company-notes';\nimport comanyTouchesModal from './company-touches';\nimport UserInvitationModal from './user-invitation';\nimport userEditModal from './user-edit';\nimport myWatchListsCSVErrorModal from './my-watchlist-csv-error';\nimport editProfileContactReducer from './edit-profile-contact';\nimport saveSearchReducer from './save-search';\nimport gridToggleReducer from './gridModals';\nimport documentUploadTouchModalReducer from './add-document-upload-touch';\nimport recentActivityModalReducer from './recent-activity';\n\nconst reducer = combineReducers<UIModalsState>({\n displayColumn: displayColumnDialogReducer,\n companyNotes: comanyNotesModal,\n companyTouches: comanyTouchesModal,\n userInvitation: UserInvitationModal,\n userEdit: userEditModal,\n myWatchListCSVError: myWatchListsCSVErrorModal,\n editProfileContact: editProfileContactReducer,\n saveSearch: saveSearchReducer,\n gridModals: gridToggleReducer,\n documentUploadTouchModal: documentUploadTouchModalReducer,\n recentActivity: recentActivityModalReducer,\n});\n\nexport default reducer;\n","import { createAction } from '@reduxjs/toolkit';\nimport { TOGGLE_COMPANY_FILTER_INFO } from './actionTypes';\n\nexport const toggle = createAction(TOGGLE_COMPANY_FILTER_INFO);\n","export const TOGGLE_COMPANY_FILTER_INFO = 'TOGGLE_COMPANY_FILTER_INFO';\n","import { createReducer } from '@reduxjs/toolkit';\nimport { toggle } from './actions';\nimport { toggleReducer } from '../../../feature/toggle/reducers';\n\nconst companyFilterInfoReducer = createReducer(false, buider =>\n buider.addCase(toggle, toggleReducer)\n);\n\nexport default companyFilterInfoReducer;\n","import { combineReducers } from 'redux';\n\nimport { MessagesState } from './interfaces';\nimport companyInfoFilter from './company-filter-info';\n\nconst reducer = combineReducers<MessagesState>({ companyFilterInfo: companyInfoFilter });\n\nexport default reducer;\n","import { combineReducers } from 'redux';\nimport { UIState } from './interfaces';\nimport modalsReducer from './modals';\nimport fullscreenReducer from './settings/fullscreen';\nimport messagesReducer from './messages';\n\nconst uiReducer = combineReducers<UIState>({\n modals: modalsReducer,\n fullscreen: fullscreenReducer,\n messages: messagesReducer,\n});\n\nexport default uiReducer;\n","import { createActionTypes } from '@features/request/utils';\nimport { createFeatureActionType } from '@utils/feature';\nimport { featureName } from '../featureName';\n\nexport const checkSimilarCompanies = createActionTypes(featureName, 'CHECK_SIMILAR_COMPANIES');\nexport const checkUrl = createActionTypes(featureName, 'CHECK_URL');\nexport const resetUrlData = createFeatureActionType(featureName, 'RESET_URL_DATA');\nexport const addCompany = createActionTypes(featureName, 'ADD_COMPANY');\n","import { createAction } from '@reduxjs/toolkit';\nimport Company from '@models/Company';\nimport { UrlDataResponse } from './interfaces';\nimport * as types from './types';\nimport { AddedCompany } from '../models';\n\nexport const checkSimilarCompanies = createAction<string>(types.checkSimilarCompanies.REQUEST);\nexport const checkSimilarCompaniesSuccess = createAction<Company[]>(\n types.checkSimilarCompanies.SUCCESS\n);\nexport const checkSimilarCompaniesFail = createAction(types.checkSimilarCompanies.FAILURE);\n\nexport const checkUrl = createAction<string>(types.checkUrl.REQUEST);\nexport const checkUrlSuccess = createAction<UrlDataResponse>(types.checkUrl.SUCCESS);\nexport const checkUrlFail = createAction(types.checkUrl.FAILURE);\n\nexport const resetUrlData = createAction(types.resetUrlData);\n\nexport const addCompany = createAction<any>(types.addCompany.REQUEST);\nexport const addCompanySuccess = createAction<AddedCompany>(types.addCompany.SUCCESS);\nexport const addCompanyFail = createAction(types.addCompany.FAILURE);\n","import { createSelector } from 'reselect';\nimport { featureName } from '../featureName';\nimport { AddCompanyState } from './interfaces';\n\nconst selectFeatureState = (state: any) => state[featureName] as AddCompanyState;\n\nexport const getSimilarCompanies = createSelector(\n selectFeatureState,\n state => state.similarCompanies\n);\n\nexport const getAddedCompany = createSelector(selectFeatureState, state => state.addedCompany);\n\nexport const isLoading = createSelector(selectFeatureState, state => state.loading);\n\nexport const getUrlData = createSelector(selectFeatureState, state => state.urlData);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n// models\nimport Company from '@models/Company';\nimport { AddCompanyState, UrlDataResponse } from './interfaces';\n// constants\nimport { STATE_INITIAL_VALUES } from '../constants';\n// redux\nimport * as actions from './actions';\nimport { AddedCompany } from '../models';\n\nconst setStateLoading = (draftState: AddCompanyState, loading: boolean) => {\n draftState.loading = loading;\n};\n\nconst checkSimilarCompaniesReducer: CaseReducer<AddCompanyState> = draftState => {\n setStateLoading(draftState, true);\n};\n\nconst checkSimilarCompaniesSuccessReducer: CaseReducer<\n AddCompanyState,\n PayloadAction<Company[]>\n> = (draftState, action) => {\n draftState.similarCompanies = action.payload;\n setStateLoading(draftState, false);\n};\n\nconst checkSimilarCompaniesFailReducer: CaseReducer<AddCompanyState> = draftState => {\n setStateLoading(draftState, false);\n};\n\nconst checkUrlReducer: CaseReducer<AddCompanyState> = draftState => {\n draftState.urlData = {\n loading: true,\n isValid: false,\n };\n};\n\nconst checkUrlSuccessReducer: CaseReducer<AddCompanyState, PayloadAction<UrlDataResponse>> = (\n draftState,\n action\n) => {\n const { available, company_id, message } = action.payload;\n\n draftState.urlData = {\n loading: false,\n isValid: available,\n foundCompanyId: company_id ?? null,\n message: message ?? null,\n };\n draftState.similarCompanies = null;\n};\n\nconst checkUrlFailReducer: CaseReducer<AddCompanyState> = draftState => {\n draftState.urlData = {\n loading: false,\n isValid: false,\n };\n};\n\nconst resetUrlDataReducer: CaseReducer<AddCompanyState> = draftState => {\n draftState.urlData = null;\n};\n\nconst addCompanyReducer: CaseReducer<AddCompanyState> = draftState => {\n setStateLoading(draftState, true);\n};\n\nconst addCompanySuccessReducer: CaseReducer<AddCompanyState, PayloadAction<AddedCompany>> = (\n draftState,\n action\n) => {\n const { company_name, company_id, company_et_id, company_url, company_et_url } = action.payload;\n\n draftState.addedCompany = {\n company_name,\n company_id,\n company_url,\n company_et_id,\n company_et_url,\n };\n\n setStateLoading(draftState, false);\n};\n\nconst addCompanyFailReducer: CaseReducer<AddCompanyState> = draftState => {\n setStateLoading(draftState, false);\n};\n\nconst reducer = createReducer<AddCompanyState>(STATE_INITIAL_VALUES, builder =>\n builder\n .addCase(actions.checkSimilarCompanies, checkSimilarCompaniesReducer)\n .addCase(actions.checkSimilarCompaniesSuccess, checkSimilarCompaniesSuccessReducer)\n .addCase(actions.checkSimilarCompaniesFail, checkSimilarCompaniesFailReducer)\n .addCase(actions.checkUrl, checkUrlReducer)\n .addCase(actions.checkUrlSuccess, checkUrlSuccessReducer)\n .addCase(actions.checkUrlFail, checkUrlFailReducer)\n .addCase(actions.resetUrlData, resetUrlDataReducer)\n .addCase(actions.addCompany, addCompanyReducer)\n .addCase(actions.addCompanySuccess, addCompanySuccessReducer)\n .addCase(actions.addCompanyFail, addCompanyFailReducer)\n);\n\nexport default reducer;\n","import { takeLatest, call, put } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport Company from '@models/Company';\nimport { AddCompanyResponse, UrlDataResponse } from './interfaces';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { CompanyService, SearchService } from '@services/api';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport * as actions from './actions';\n\nfunction* checkUrlSaga(action: PayloadAction<string>) {\n const url = action.payload;\n\n try {\n const res: AxiosResponse<UrlDataResponse> = yield call(SearchService.getIsUrlAvailable, url);\n\n if (res.data) {\n yield put(actions.checkUrlSuccess(res.data));\n } else {\n NotificationService.error(\"Couldn't check for url, Server Error!\");\n yield put(actions.checkUrlFail());\n }\n } catch (error: any) {\n NotificationService.error(getErrorMessage(error, \"Couldn't check for url, Server Error!\"));\n yield put(actions.checkUrlFail());\n }\n}\n\nfunction* checkSimilarCompaniesSaga(action: PayloadAction<string>) {\n const url = action.payload;\n\n try {\n const res: AxiosResponse<Company[]> = yield call(SearchService.getSimilarCompaniesByURL, url);\n\n if (res.data) {\n yield put(actions.checkSimilarCompaniesSuccess(res.data));\n } else {\n NotificationService.error(\"Couldn't fetch similar companies, Server Error!\");\n yield put(actions.checkSimilarCompaniesFail());\n }\n } catch (error: any) {\n NotificationService.error(\"Couldn't fetch similar companies, Server Error!\");\n yield put(actions.checkSimilarCompaniesFail());\n }\n}\n\nfunction* addCompanySaga(action: PayloadAction<any>) {\n const companyData = action.payload;\n\n try {\n const res: AxiosResponse<AddCompanyResponse> = yield call(\n CompanyService.addCompany,\n companyData\n );\n\n if (res.data) {\n const addedCompanyData = res.data[0];\n const data = { ...addedCompanyData, company_url: action.payload.company_url };\n\n yield put(actions.addCompanySuccess(data));\n } else {\n NotificationService.error(\"Couldn't add company, Server Error!\");\n yield put(actions.addCompanyFail());\n }\n } catch (error: any) {\n NotificationService.error(getErrorMessage(error, \"Couldn't add company, Server Error!\"));\n yield put(actions.addCompanyFail());\n }\n}\n\nexport default function* AddCompanySaga() {\n yield takeLatest(actions.checkUrl, checkUrlSaga);\n yield takeLatest(actions.checkSimilarCompanies, checkSimilarCompaniesSaga);\n yield takeLatest(actions.addCompany, addCompanySaga);\n}\n","import React, { useMemo, useRef, useState, useEffect } from 'react';\nimport AsyncSelect from 'react-select/async';\nimport AsyncCreatable from 'react-select/async-creatable';\nimport { ValueType } from 'react-select';\nimport { SelectComponents } from 'react-select/src/components';\n// interface\nimport { SelectOption } from '@optx/models/Option';\n// hooks\nimport useAutoFocusSelect from '@optx/common/hooks/useAutoFocusSelect';\n// components\nimport {\n MultiValueRemove,\n MultiValueLabel,\n ValueContainer,\n DropdownIndicator,\n Option,\n MultiSelectTags,\n} from '../components';\n// Local\nimport { AsyncSelectProps } from '../interfaces';\nimport { isOptionDisabled } from '../utils';\nimport { Styled } from '../MultiSelect/MultiSelect.styled';\n\nconst defaultComponents: Partial<SelectComponents<SelectOption>> = {\n MultiValueLabel,\n MultiValueRemove,\n ValueContainer,\n DropdownIndicator,\n Option,\n};\n\ninterface AsyncMultiSelectProps extends AsyncSelectProps {\n isCreatable?: boolean;\n autoFocus?: boolean;\n}\n\nconst AsyncMultiSelect: React.FC<AsyncMultiSelectProps> = ({\n onChange,\n className,\n components,\n defaultValue,\n isCreatable,\n autoFocus = true,\n ...restProps\n}) => {\n // Compute value needed for tags. In AsyncSelect the props value and options can't control select.\n const [value, setValue] = useState<ValueType<SelectOption>>(defaultValue);\n const selectRef = useRef<AsyncSelect<SelectOption> | null>(null);\n\n useAutoFocusSelect(selectRef, autoFocus, 'multiselect__input');\n\n const handleChange = (value: ValueType<SelectOption>, actionMeta: any) => {\n setValue(value);\n onChange && onChange(value, actionMeta);\n };\n\n const handleTagChange = (value: ValueType<SelectOption>, actionMeta: any) => {\n if (selectRef.current && selectRef.current.select) {\n // @ts-ignore select is actually StateManager,\n // but the Typescript is different for some reason and thinks is a Ref object.\n selectRef.current.select.onChange(value, actionMeta);\n }\n };\n\n const selectComponents = useMemo(() => {\n if (components) {\n return {\n ...defaultComponents,\n ...components,\n };\n }\n\n return defaultComponents;\n }, [components]);\n\n useEffect(() => {\n if (!defaultValue) {\n setValue([]);\n } else {\n setValue(defaultValue);\n }\n }, [defaultValue]);\n\n return (\n <Styled.MultiSelectWrapper className={className}>\n {isCreatable ? (\n <AsyncCreatable\n ref={selectRef as any}\n onChange={handleChange}\n components={selectComponents}\n defaultValue={defaultValue}\n value={value}\n {...restProps}\n // Leave properties at the end to not be overriden.\n backspaceRemovesValue={false}\n isMulti\n />\n ) : (\n <AsyncSelect\n ref={selectRef}\n onChange={handleChange}\n components={selectComponents}\n defaultValue={defaultValue}\n value={value}\n {...restProps}\n // Leave properties at the end to not be overriden.\n backspaceRemovesValue={false}\n isMulti\n />\n )}\n <MultiSelectTags\n value={value as Array<SelectOption>}\n options={[]}\n onChange={handleTagChange}\n />\n </Styled.MultiSelectWrapper>\n );\n};\n\nAsyncMultiSelect.defaultProps = {\n placeholder: 'search',\n classNamePrefix: 'multiselect',\n isClearable: false,\n hideSelectedOptions: false,\n closeMenuOnSelect: false,\n controlShouldRenderValue: false,\n isOptionDisabled,\n};\n\nexport default AsyncMultiSelect;\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const INCREMENT_FETCHED_COUNT = createFeatureActionType(\n featureName,\n 'INCREMENT_FETCHED_COUNT'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { GridKeys } from '@optx/models/grid';\nimport * as types from './types';\n\nexport const incrementFetchedCount = createAction<GridKeys>(types.INCREMENT_FETCHED_COUNT);\n","export const MAX_CHAR_LENGTH = 240;\nexport const NOTES_ENABLED = false;\n","import { ListAccessRights } from '@models/WatchList';\n\nexport const hasEditPermission = (permission: ListAccessRights) =>\n permission === 2 || permission === 3;\nexport const hasViewPermission = (permission: ListAccessRights) => permission === 1;\n","import React, { useRef, useState } from 'react';\nimport AsyncCreatable from 'react-select/async-creatable';\nimport { ActionMeta, InputActionMeta } from 'react-select';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// constants\nimport { COMPANY_RATIONALE_ENDPOINT } from '@constants/asyncEndpoints';\n// hooks\nimport { useToggle } from '@optx/common/hooks/modal';\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\n\ninterface CreateOtherRaionale {\n onInputChange: (e: any) => void;\n isDisabled?: boolean;\n isHeightOwerflow?: boolean;\n isSoftwareModal?: boolean;\n}\n\nconst CreateOtherRaionale: React.FC<CreateOtherRaionale> = ({\n onInputChange,\n isDisabled,\n isHeightOwerflow,\n isSoftwareModal,\n}) => {\n const [showAddButton, toggleShowAddButton] = useToggle(false);\n const [inputValue, setInputValue] = useState<SelectOption | null>(null);\n\n const onChange = (option: any, actionMeta: ActionMeta<SelectOption<string | number>>) => {\n switch (actionMeta.action) {\n // @ts-ignore\n case 'select-option':\n onInputChange(option.value);\n setInputValue(option);\n\n // eslint-disable-next-line no-fallthrough\n case 'create-option': {\n onInputChange(option.value);\n setInputValue(option);\n\n toggleShowAddButton();\n break;\n }\n\n default:\n break;\n }\n };\n\n const { loadOptions } = useAsyncSearch({\n endpoint: COMPANY_RATIONALE_ENDPOINT,\n });\n\n const selectRef = useRef<AsyncCreatable<SelectOption> | null>(null);\n\n const handleMenuClose = () => {\n if (!showAddButton) {\n toggleShowAddButton();\n }\n\n setInputValue(null);\n };\n\n const handleInputChange = (newValue: string, { action }: InputActionMeta) => {\n switch (action) {\n case 'input-change': {\n // This prevents a bug where the query is called without the last letter of previous query\n // eg: If user writes 'auto', query is 'auto'. If the second time user writes 'auto', query will be 'aut'.\n // This seems to fix above problem;\n loadOptionsAfterInputChange(newValue, () => {});\n break;\n }\n\n default:\n break;\n }\n };\n\n const loadOptionsAfterInputChange = (query: string, callback: SuccessErrorCallback) => {\n loadOptions(query, options => {\n const callbackResult = callback(options);\n\n return callbackResult;\n });\n };\n\n return (\n <AsyncCreatable\n isDisabled={!!isDisabled}\n value={inputValue}\n loadOptions={loadOptionsAfterInputChange}\n className=\"rationale_select-async\"\n onChange={onChange}\n onInputChange={handleInputChange}\n controlShouldRenderValue\n selectRef={selectRef}\n onMenuClose={handleMenuClose}\n closeMenuOnSelect\n bodyDisplay={false}\n disableValueRemove\n maxMenuHeight={isHeightOwerflow ? 80 : undefined}\n menuPlacement={isSoftwareModal ? 'top' : 'auto'}\n />\n );\n};\n\nexport default CreateOtherRaionale;\n","import React from 'react';\nimport { Popconfirm as PopconfirmAntd } from 'antd';\n\ninterface PopconfirmProps {\n onConfirm?: () => void;\n onCancel?: () => void;\n title?: string;\n disabled?: boolean;\n action: 'Delete' | 'Remove';\n}\n\nconst Popconfirm: React.FC<PopconfirmProps> = ({\n onConfirm,\n onCancel,\n title,\n disabled = false,\n children,\n action,\n}) => (\n <PopconfirmAntd\n title={`Are you sure you want to ${action} ${title}?`}\n onConfirm={() => onConfirm && onConfirm()}\n onCancel={() => onCancel && onCancel()}\n okText={`${action} ${title}`}\n okButtonProps={{\n type: 'primary',\n danger: true,\n }}\n cancelText=\"Cancel\"\n disabled={disabled}\n >\n {children}\n </PopconfirmAntd>\n);\n\nexport default Popconfirm;\n","import React from 'react';\n\nconst LoadIcon16: React.FC<React.SVGProps<SVGSVGElement>> = () => (\n <svg className=\"load__icon__16\">\n <path fill=\"#4ce1b6\" d=\"M12,4V2A10,10 0 0,0 2,12H4A8,8 0 0,1 12,4Z\" />\n </svg>\n);\n\nconst LoadIcon32: React.FC<React.SVGProps<SVGSVGElement>> = () => (\n <svg className=\"load__icon\">\n <path fill=\"#4ce1b6\" d=\"M12,4V2A10,10 0 0,0 2,12H4A8,8 0 0,1 12,4Z\" />\n </svg>\n);\n\nexport { LoadIcon16, LoadIcon32 };\n","import { createSelector } from 'reselect';\nimport { NotificationDetails } from '@optx/models/notifications';\nimport { NotificationsState } from './interfaces';\nimport { featureName } from '../featureName';\n\nconst alertsState = (state: Record<typeof featureName, NotificationsState>) => state[featureName];\n\nexport const alertsInboxState = createSelector(alertsState, state => state.inbox);\nexport const alertsHistoryState = createSelector(alertsState, state => state.history);\nexport const alertsUpcomingTouchesState = createSelector(\n alertsState,\n state => state.touches.upcoming\n);\nexport const alertsPastDueTouchesState = createSelector(\n alertsState,\n state => state.touches.pastDue\n);\n\nexport const alertsNewList = createSelector(alertsState, state => {\n const alerts: Array<number> = [];\n\n if (state.inbox.data.length) {\n state.inbox.data.forEach((alert: NotificationDetails) => {\n if (!alert.viewed_at) {\n alerts.push(alert.id);\n }\n });\n }\n\n return alerts;\n});\n\nexport const touchesNewList = createSelector(alertsState, state => {\n const touches: Array<number> = [];\n\n if (state.touches.upcoming.data.length) {\n state.touches.upcoming.data.forEach(touch => {\n if (!touch.viewed_at) {\n touches.push(touch.unique_id);\n }\n });\n }\n\n return touches;\n});\n\nexport const getRoadmapUrl = createSelector(alertsState, state => state.roadmapUrl);\n\nexport const getAlertsPageNumber = createSelector(alertsState, state => state?.inbox?.pageNr);\n\nexport const getTotalCount = createSelector(alertsState, state => state.totalCount);\n\nexport const getNewUpcomingTouches = createSelector(\n alertsState,\n state => state.touches.upcoming.newUpcomingCount\n);\n","import React from 'react';\nimport { Menu, MenuProps } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport { useSelector } from 'react-redux';\n// constants\nimport appRoutes from '@constants/routes';\nimport { ADVANCED_SEARCH, MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\n// redux\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\n// hooks\nimport { useDisplayColumnModal } from '@optx/common/hooks/init';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\nimport useUserRole from '@hooks/useUserRole';\n\nconst DisplayColumnToggle = ({ onClick, ...restProps }: MenuItemProps) => {\n const searchView = useSelector(viewTypeSelectors.searchView('advancedSearch'));\n const myCompaniesView = useSelector(viewTypeSelectors.searchView('myCompanies'));\n const listView = useSelector(viewTypeSelectors.searchView('lists'));\n const companyOutReachView = useSelector(viewTypeSelectors.searchView('outreachDetails'));\n const [, toggleModalDisplay] = useDisplayColumnModal();\n const { advancedSearchPathname } = useUserRole();\n const currentGridName = useCurrentGridName();\n\n const handleClick: MenuProps['onClick'] = info => {\n toggleModalDisplay();\n\n if (currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_TopRibbon_ColumnsAndSourceManagement`);\n }\n\n if (currentGridName === 'My Companies') {\n sendPendoData(`${MY_COMPANIES_PENDO}_ColumnsandSourceManagement_ColumnsandSourceManagement`);\n }\n\n onClick && onClick(info);\n };\n\n if (window.location.pathname === advancedSearchPathname && searchView === 'long-card') {\n return null;\n }\n\n if (window.location.pathname.startsWith('/user-lists') && listView === 'long-card') {\n return null;\n }\n\n if (window.location.pathname.startsWith('/ss-lists') && listView === 'long-card') {\n return null;\n }\n\n if (window.location.pathname === appRoutes.myCompanies && myCompaniesView === 'long-card') {\n return null;\n }\n\n if (window.location.pathname.startsWith('/all-reports') && companyOutReachView === 'long-card') {\n return null;\n }\n\n return (\n <Menu.Item onClick={handleClick} {...restProps}>\n Columns and Source Management\n </Menu.Item>\n );\n};\n\nexport default DisplayColumnToggle;\n","// constants\nimport { FEATURE } from '../constants';\n\nconst FEATURE_SLICE = `${FEATURE} search`;\n\nexport const SEARCH = FEATURE_SLICE;\nexport const SEARCH_SUCCESS = `${FEATURE_SLICE}/success`;\nexport const SEARCH_FAIL = `${FEATURE_SLICE}/fail`;\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\n\n// fetch\nexport const search = createAction(types.SEARCH);\nexport const searchSuccess = createAction<any>(types.SEARCH_SUCCESS);\nexport const searchFail = createAction<string>(types.SEARCH_FAIL);\n","import { selectors as fetchSelectors } from '@optx/redux/feature/fetch';\n\nimport { AnalystsLeaderboardSearchState } from './interfaces';\n\nexport const isLoading = (state: AnalystsLeaderboardSearchState) =>\n fetchSelectors.isLoadingSelector(state);\n\nexport const getChartInfo = (state: AnalystsLeaderboardSearchState) =>\n state.data ? state.data.data : [];\n\nexport const getData = (state: AnalystsLeaderboardSearchState) => state.data;\n","import { createReducer } from '@reduxjs/toolkit';\nimport { reducers } from '@redux/feature/fetch';\n// Local\n// models\nimport { AnalystsLeaderboardSearchState } from './interfaces';\n// redux\nimport * as actions from './actions';\n\nconst initialState: AnalystsLeaderboardSearchState = {\n data: null,\n error: '',\n loading: false,\n fetchedAt: null,\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.search, reducers.fetchReducer)\n .addCase(actions.searchSuccess, reducers.fetchSuccessReducer)\n .addCase(actions.searchFail, reducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { FEATURE } from '../constants';\n\nconst FEATURE_SLICE = `${FEATURE} touchesAcrossRegion`;\n\nexport const FETCH = `${FEATURE_SLICE}/fetch`;\nexport const FETCH_SUCCESS = `${FEATURE_SLICE}/fetch success`;\nexport const FETCH_FAIL = `${FEATURE_SLICE}/fetch fail`;\n","import { createAction } from '@reduxjs/toolkit';\nimport { TouchesAcrossRegionResponse } from '@models/feature/analystsLeaderboard/touchesAcrossRegion';\nimport * as types from './types';\n\nexport const fetchTouchesAcrossRegion = createAction(types.FETCH);\nexport const fetchTouchesAcrossRegionSuccess = createAction<TouchesAcrossRegionResponse>(\n types.FETCH_SUCCESS\n);\nexport const fetchTouchesAcrossRegionFail = createAction<string>(types.FETCH_FAIL);\n","import { selectors as fetchSelectors } from '@optx/redux/feature/fetch';\nimport { createSelector } from 'reselect';\nimport { TouchesAcrossRegionState } from './interfaces';\n\nexport const getTouchesAcrossRegion = (state: TouchesAcrossRegionState) => state.data;\n\nexport const isLoading = (state: TouchesAcrossRegionState) =>\n fetchSelectors.isLoadingSelector(state);\n\nexport const getLocations = createSelector(getTouchesAcrossRegion, touches => {\n if (!touches) {\n return [];\n }\n\n return touches.locations;\n});\n\nexport const topTouches = createSelector(getTouchesAcrossRegion, touches => {\n if (!touches) {\n return [];\n }\n\n return touches.top_five;\n});\n","import { createReducer } from '@reduxjs/toolkit';\nimport { reducers } from '@redux/feature/fetch';\n// Local\n// models\nimport { TouchesAcrossRegionState } from './interfaces';\n// redux\nimport * as actions from './actions';\n\nconst initialState: TouchesAcrossRegionState = {\n data: null,\n error: '',\n loading: false,\n fetchedAt: null,\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchTouchesAcrossRegion, reducers.fetchReducer)\n .addCase(actions.fetchTouchesAcrossRegionSuccess, reducers.fetchSuccessReducer)\n .addCase(actions.fetchTouchesAcrossRegionFail, reducers.fetchFailReducer)\n);\n\nexport default reducer;\n","export const featureName = 'company-card';\nexport const featureNamePluginPrimaryContact = 'plugin-primary-contact';\n","import { createAction } from '@reduxjs/toolkit';\nimport { TOGGLE_DISPLAY_COLUMN_DIALOG } from './actionTypes';\n\nexport const toggleDisplayColumnDialog = createAction(TOGGLE_DISPLAY_COLUMN_DIALOG);\n","export const TOGGLE_DISPLAY_COLUMN_DIALOG = 'TOGGLE_DISPLAY_COLUMN_DIALOG';\n","import { AppState } from '@optx/redux/interfaces';\n\nexport const displayDialog = (state: AppState) => state.ui.modals.displayColumn;\n","import { createReducer } from '@reduxjs/toolkit';\nimport { toggleDisplayColumnDialog } from './actions';\nimport { toggleReducer } from '../../../feature/toggle/reducers';\n\nconst reducer = createReducer(false, builder =>\n builder.addCase(toggleDisplayColumnDialog, toggleReducer)\n);\n\nexport default reducer;\n","import { createAction } from '@reduxjs/toolkit';\nimport { TOGGLE_COMPANY_NOTES_DIALOG } from './actionTypes';\nimport { EditCompanyNotes } from './interfaces';\n\nexport const toggleCompanyNotesDialog = createAction<EditCompanyNotes>(TOGGLE_COMPANY_NOTES_DIALOG);\n","export const TOGGLE_COMPANY_NOTES_DIALOG = 'TOGGLE_COMPANY_NOTES_DIALOG';\n","import { AppState } from '@optx/redux/interfaces';\nimport { createSelector } from 'reselect';\n\nconst getModalState = (state: AppState) => state.ui.modals.companyNotes;\n\nexport const isOpen = createSelector(getModalState, state => state.open);\n\nexport const getCompanyInfo = createSelector(getModalState, state => {\n const info = {\n company_id: state.companyId,\n company_name: state.companyName,\n };\n\n return info;\n});\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport * as actions from './actions';\nimport { CompanyNotesDialogState, EditCompanyNotes } from './interfaces';\n\nconst initialState: CompanyNotesDialogState = {\n open: false,\n companyId: -1,\n companyName: '',\n};\n\nconst companyNotesReducer: CaseReducer<CompanyNotesDialogState, PayloadAction<EditCompanyNotes>> = (\n draftState,\n action\n) => {\n const { companyId, companyName } = action.payload;\n draftState.open = !draftState.open;\n draftState.companyId = companyId;\n draftState.companyName = companyName;\n};\n\nexport default createReducer(initialState, builder =>\n builder.addCase(actions.toggleCompanyNotesDialog, companyNotesReducer)\n);\n","const predefinedFilters = {\n number_of_companies_in_et: {\n source_tag_filter: [\n {\n in: true,\n label: 'EquityTouch',\n notIn: false,\n value: 'et',\n },\n ],\n },\n number_of_companies_not_in_et: {\n source_tag_filter: [\n {\n in: false,\n label: 'EquityTouch',\n notIn: true,\n value: 'et',\n },\n ],\n },\n\n number_of_last_touch_over_6_months: {\n last_touch_date: [\n { label: '7-12 Months Ago', value: '12_6', checked: true },\n { label: '+1 Year', value: '120_12', checked: true },\n { label: 'Never', value: 'blank', checked: true },\n ],\n source_tag_filter: [\n {\n in: true,\n label: 'EquityTouch',\n notIn: false,\n value: 'et',\n },\n ],\n },\n\n number_of_future_touches: {\n next_touch_date: [\n { label: 'Past Due', value: 'day_-120_day_0', checked: true },\n { label: 'This Month', value: 'month_0_month_1', checked: true },\n { label: 'Next Month', value: 'month_1_month_2', checked: true },\n { label: 'Next 2-3 Months', value: 'month_2_month_3', checked: true },\n { label: 'Next 3-6 Months', value: 'month_3_month_6', checked: true },\n { label: '6+ Months', value: 'month_6_month_120', checked: true },\n ],\n },\n};\n\nexport default predefinedFilters;\n","export const FETCH_SALESLOFT_AUTH_URL = 'FETCH_SALESLOFT_AUTH_URL';\nexport const FETCH_SALESLOFT_AUTH_URL_SUCCESS = 'FETCH_SALESLOFT_AUTH_URL_SUCCESS';\n\nexport const FETCH_SALESLOFT_CADENCES = 'FETCH_SALESLOFT_CADENCES';\nexport const FETCH_SALESLOFT_CADENCES_SUCCESS = 'FETCH_SALESLOFT_CADENCES_SUCCESS';\n\nexport const POST_SALESLOFT_DATA = 'POST_SALESLOFT_DATA';\nexport const POST_SALESLOFT_DATA_SUCCESS = 'POST_SALESLOFT_DATA_SUCCESS';\nexport const POST_SALESLOFT_DATA_FAIL = 'POST_SALESLOFT_DATA_FAIL';\n\nexport const SALESLOFT_PRELOAD_CONTACTS = 'SALESLOFT_PRELOAD_CONTACTS';\n\nexport const SALESLOFT_SELECT_CONTACT = 'SALESLOFT_SELECT_CONTACT';\nexport const SALESLOFT_SELECT_CADENCE = 'SALESLOFT_SELECT_CADENCE';\n\nexport const SALESLOFT_RESET = 'SALESLOFT_RESET';\n","import { createAction } from '@reduxjs/toolkit';\nimport { SalesloftCadences, SalesloftResponse } from '@models/Salesloft';\nimport * as types from './types';\nimport { PostSalesloftData } from './interfaces';\n\nexport const fetchSalesloftAuthUrl = createAction(\n types.FETCH_SALESLOFT_AUTH_URL,\n (payload: string, callback: (url: string) => void) => ({\n payload,\n meta: callback,\n })\n);\nexport const fetchSalesloftAuthUrlSuccess = createAction<string>(\n types.FETCH_SALESLOFT_AUTH_URL_SUCCESS\n);\n\nexport const fetchSalesloftCadences = createAction(\n types.FETCH_SALESLOFT_CADENCES,\n (payload: string, callback?: () => void | undefined) => ({\n payload,\n meta: callback,\n })\n);\nexport const fetchSalesloftCadencesSuccess = createAction<Array<SalesloftCadences>>(\n types.FETCH_SALESLOFT_CADENCES_SUCCESS\n);\n\nexport const postSalesloftData = createAction(\n types.POST_SALESLOFT_DATA,\n (payload: PostSalesloftData, callback: (res: SalesloftResponse) => void) => ({\n payload: { ...payload },\n meta: callback,\n })\n);\n\nexport const postSalesloftDataSuccess = createAction(types.POST_SALESLOFT_DATA_SUCCESS);\nexport const postSalesloftDataFail = createAction(types.POST_SALESLOFT_DATA_FAIL);\n\nexport const salesloftPreloadContacts = createAction(types.SALESLOFT_PRELOAD_CONTACTS);\n\nexport const salesloftSelectContacts = createAction<number[]>(types.SALESLOFT_SELECT_CONTACT);\nexport const salesloftSelectCadence = createAction<SalesloftCadences | undefined>(\n types.SALESLOFT_SELECT_CADENCE\n);\n\nexport const salesloftReset = createAction(types.SALESLOFT_RESET);\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst salesloftState = (state: AppState) => state.salesloft;\n\nexport const isLoading = createSelector(salesloftState, state => state.loading);\n\nexport const getAuthUrl = createSelector(salesloftState, state => state.authUrl);\n\nexport const getCadences = createSelector(salesloftState, state => {\n return state?.cadences || [];\n});\n\nexport const getPostData = createSelector(salesloftState, state => state.postData);\n","/* eslint-disable no-param-reassign */\nimport { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { parse } from 'query-string';\n// models\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { SalesloftCadences, SalesloftPostData } from '@models/Salesloft';\n// utils\nimport { stripUrlSlashes } from '@utils/url';\n// redux\nimport { actions as contactActions } from '@redux/company/primary-contacts';\nimport { actions as eqtActions } from '@redux/company/equity-touch';\nimport { fetchReducer } from '../../feature/fetch/reducers';\nimport { SalesloftState } from './interfaces';\nimport * as actions from './actions';\n\nconst initialState: SalesloftState = {\n loading: false,\n error: '',\n authUrl: '',\n cadences: [],\n postData: {\n contactIds: [],\n },\n};\n\nconst updateCompanyInfo = (\n postData: SalesloftPostData,\n id: number | undefined,\n name: string | undefined,\n url: string | null | undefined\n) => {\n postData.company_id = id;\n postData.company_name = name;\n postData.company_website = url;\n};\n\nconst fetchSalesloftAuthUrlSuccessReducer: CaseReducer<SalesloftState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n draftState.authUrl = action.payload;\n};\n\nconst fetchSalesloftCadencesSuccessReducer: CaseReducer<\n SalesloftState,\n PayloadAction<Array<SalesloftCadences>>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.cadences = action.payload;\n};\n\nconst submitSalesloftFormSuccessReducer: CaseReducer<SalesloftState> = draftState => {\n draftState.loading = false;\n};\n\nconst fetchPrimaryContactsSuccessReducer: CaseReducer<\n SalesloftState,\n PayloadAction<CompanyUserContact[]>\n> = (draftState, action) => {\n draftState.loading = false;\n\n if (!action.payload.length) {\n const searchParams = parse(window.location.search);\n updateCompanyInfo(\n draftState.postData,\n Number(searchParams.id),\n searchParams?.name as string,\n searchParams.url ? stripUrlSlashes(searchParams.url as string) : null\n );\n } else {\n const { company_id: id, company_name: name, company_url: url } = action.payload[0];\n updateCompanyInfo(draftState.postData, id, name, url);\n }\n};\n\nconst salesloftSelectCadenceReducer: CaseReducer<\n SalesloftState,\n PayloadAction<SalesloftCadences | undefined>\n> = (draftState, action) => {\n if (!action.payload) {\n draftState.postData.cadence_id = undefined;\n draftState.postData.cadence_name = undefined;\n draftState.postData.team_cadence = undefined;\n draftState.postData.company_id = undefined;\n } else {\n const { id, name, team_cadence: teamCadence, company_id: companyId } = action.payload;\n draftState.postData.cadence_id = id;\n draftState.postData.cadence_name = name;\n draftState.postData.team_cadence = teamCadence;\n draftState.postData.company_id = companyId;\n }\n};\n\nconst salesloftSelectContactReducer: CaseReducer<SalesloftState, PayloadAction<number[]>> = (\n draftState,\n action\n) => {\n draftState.postData.contactIds = action.payload;\n};\n\nconst salesloftResetReducer: CaseReducer<SalesloftState> = (draftState, action) => {\n draftState.postData = initialState.postData;\n};\n\nconst postSalesloftDataFailReducer: CaseReducer<SalesloftState> = draftState => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // url\n .addCase(actions.fetchSalesloftAuthUrl, fetchReducer)\n .addCase(actions.fetchSalesloftAuthUrlSuccess, fetchSalesloftAuthUrlSuccessReducer)\n // cadences\n .addCase(actions.fetchSalesloftCadences, fetchReducer)\n .addCase(actions.fetchSalesloftCadencesSuccess, fetchSalesloftCadencesSuccessReducer)\n // post data\n .addCase(actions.postSalesloftData, fetchReducer)\n .addCase(actions.postSalesloftDataSuccess, submitSalesloftFormSuccessReducer)\n .addCase(actions.postSalesloftDataFail, postSalesloftDataFailReducer)\n // select data\n .addCase(actions.salesloftSelectCadence, salesloftSelectCadenceReducer)\n .addCase(actions.salesloftSelectContacts, salesloftSelectContactReducer)\n // resset\n .addCase(actions.salesloftReset, salesloftResetReducer)\n // external\n .addCase(contactActions.fetchPrimaryContacts, fetchReducer)\n .addCase(contactActions.fetchPrimaryContactsSuccess, fetchPrimaryContactsSuccessReducer)\n .addCase(eqtActions.resetAddToEquityTouch, salesloftResetReducer)\n);\n\nexport default reducer;\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// models\nimport { SalesloftCadences, SalesloftPostData, SalesloftRequest } from '@models/Salesloft';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport { PostSalesloftData } from '@redux/contacts/salesloft/interfaces';\n// services\nimport { SalesloftService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { handleSalesloftError, getSelectedContacts } from '@optx/utils/salesloft';\n// redux\nimport { selectors as contactSelectors } from '@redux/company/primary-contacts';\nimport { AxiosResponse } from 'axios';\nimport { ResolveSalesloftSuccess } from '@optx/models/bulkActions';\nimport * as types from './types';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\n\nexport function* fetchSalesloftAuthSaga(action: PayloadAction<boolean, any, SuccessErrorCallback>) {\n const { meta: callback } = action;\n\n try {\n const res: AxiosResponse<string> = yield call(SalesloftService.getAuthUrl);\n\n if (res.data) {\n yield put(actions.fetchSalesloftAuthUrlSuccess(res.data));\n callback && callback(res.data);\n } else {\n const errorMessage = 'Failed to fetch Salesloft authentication URL!';\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch Salesloft authentication URL!';\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchSalesloftCadencesSaga(\n action: PayloadAction<boolean, any, SuccessErrorCallback>\n) {\n const { meta: callback } = action;\n\n try {\n const res: AxiosResponse<SalesloftCadences[]> = yield call(SalesloftService.getCadences);\n\n if (res.data) {\n yield put(actions.fetchSalesloftCadencesSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch Salesloft cadences!';\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n if (error.response.status === 424) {\n callback && callback(false);\n } else {\n const errorMessage = 'Failed to fetch Salesloft cadences!';\n NotificationService.error(errorMessage);\n }\n }\n}\n\nexport function* postSalesloftDataSaga(\n action: PayloadAction<PostSalesloftData, any, SuccessErrorCallback>\n) {\n const { payload, meta: callback } = action;\n const postData: SalesloftPostData = yield select(selectors.getPostData);\n const contacts: CompanyUserContact[] = yield select(contactSelectors.getPrimaryContacts);\n // keep fields that are not null\n const requestData: SalesloftRequest = {\n cadence_id: postData.cadence_id,\n cadence_name: postData.cadence_name,\n team_cadence: postData.team_cadence,\n company_name: payload.company_name ? payload.company_name : postData.company_name,\n company_website: payload.company_url ? payload.company_url : postData.company_website,\n company_id: postData.company_id,\n contacts: getSelectedContacts(contacts, postData.contactIds),\n };\n\n try {\n const res: AxiosResponse<ResolveSalesloftSuccess> = yield call(\n SalesloftService.postSalesloftData,\n requestData\n );\n\n if (res) {\n yield put(actions.postSalesloftDataSuccess());\n callback && callback(res.data);\n } else {\n yield put(actions.postSalesloftDataFail());\n }\n } catch (error: any) {\n yield put(actions.postSalesloftDataFail());\n const errorMessage = handleSalesloftError(\n error.response,\n 'Failed to submit Salesloft form!',\n callback\n );\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* preloadContactsSaga() {\n try {\n yield call(SalesloftService.preloadContacts);\n } catch (error: any) {\n const errorMessage = 'Failed to preload contacts!';\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* salesloftSaga() {\n yield takeLatest(types.FETCH_SALESLOFT_AUTH_URL, fetchSalesloftAuthSaga);\n yield takeLatest(types.FETCH_SALESLOFT_CADENCES, fetchSalesloftCadencesSaga);\n yield takeLatest(types.POST_SALESLOFT_DATA, postSalesloftDataSaga);\n yield takeLatest(types.SALESLOFT_PRELOAD_CONTACTS, preloadContactsSaga);\n}\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from './state';\nimport featureName from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","import { useInitialFetch } from '@optx/common/hooks/fetch';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { selectors as companyEditSelectors } from '@components/feature/company-individual-edit/state';\nimport { actions as editActions } from '../state/companyIndividualEdit';\n\nexport const useInitialFetchEditOptions = () => {\n const dispatch = useDispatch();\n\n const shouldInitialFetchEditOptions = useSelector(\n companyEditSelectors.companyIndividualEdit.shouldInitialFetch\n );\n const fetchCompanyIndividualEditOptionsSelectOptions = () =>\n dispatch(editActions.fetchSelectOptions(''));\n useInitialFetch(shouldInitialFetchEditOptions, fetchCompanyIndividualEditOptionsSelectOptions);\n};\n","// utils\nimport { createFeatureActionType } from '@optx/utils/feature';\n// local\nimport { featureName } from '../featureName';\n\nexport const FETCH_PIPELINE_REPORT_COMPANY = createFeatureActionType(\n featureName,\n 'FETCH_PIPELINE_REPORT_COMPANY'\n);\nexport const FETCH_PIPELINE_REPORT_COMPANY_SUCCESS = createFeatureActionType(\n featureName,\n 'FETCH_PIPELINE_REPORT_COMPANY_SUCCESS'\n);\nexport const FETCH_PIPELINE_REPORT_COMPANY_FAIL = createFeatureActionType(\n featureName,\n 'FETCH_PIPELINE_REPORT_COMPANY_FAIL'\n);\n\nexport const FETCH_PIPELINE_REPORT_COMPANY_COUNT = createFeatureActionType(\n featureName,\n 'FETCH_PIPELINE_REPORT_COMPANY_COUNT'\n);\nexport const FETCH_PIPELINE_REPORT_COMPANY_COUNT_SUCCESS = createFeatureActionType(\n featureName,\n 'FETCH_PIPELINE_REPORT_COMPANY_COUNT_SUCCESS'\n);\nexport const FETCH_PIPELINE_REPORT_COMPANY_COUNT_FAIL = createFeatureActionType(\n featureName,\n 'FETCH_PIPELINE_REPORT_COMPANY_COUNT_FAIL'\n);\n\nexport const FETCH_PIPELINE_REPORT_CARD = createFeatureActionType(\n featureName,\n 'FETCH_PIPELINE_REPORT_CARD'\n);\nexport const FETCH_PIPELINE_REPORT_CARD_SUCCESS = createFeatureActionType(\n featureName,\n 'FETCH_PIPELINE_REPORT_CARD_SUCCESS'\n);\nexport const FETCH_PIPELINE_REPORT_CARD_FAIL = createFeatureActionType(\n featureName,\n 'FETCH_PIPELINE_REPORT_CARD_FAIL'\n);\n\n// save search as list\nexport const SAVE_SEARCH_AS_LIST = createFeatureActionType(featureName, 'SAVE_SEARCH_AS_LIST');\nexport const SAVE_SEARCH_AS_LIST_SUCCESS = createFeatureActionType(\n featureName,\n 'SAVE_SEARCH_AS_LIST_SUCCESS'\n);\nexport const SAVE_SEARCH_AS_LIST_FAIL = createFeatureActionType(\n featureName,\n 'SAVE_SEARCH_AS_LIST_FAIL'\n);\n// filterss\nexport const FETCH_FILTERS = createFeatureActionType(featureName, 'FETCH_FILTERS');\nexport const FETCH_FILTERS_SUCCESS = createFeatureActionType(featureName, 'FETCH_FILTERS_SUCCESS');\nexport const FETCH_FILTERS_FAIL = createFeatureActionType(featureName, 'FETCH_FILTER_FAIL');\nexport const FILTER_CLEAR = createFeatureActionType(featureName, 'FILTER_CLEAR');\nexport const FILTER_RESET = createFeatureActionType(featureName, 'FILTER_RESET');\nexport const UPDATE_VALUE = createFeatureActionType(featureName, 'UPDATE_VALUE');\nexport const RESET_TO_DEFAULT = createFeatureActionType(featureName, 'RESET_TO_DEFAULT');\nexport const APPLY_FILTERS = createFeatureActionType(featureName, 'APPLY_FILTERS');\n\n// ui\nexport const TOGGLE_FILTERS_MODAL = createFeatureActionType(featureName, 'TOGGLE_FILTERS_MODAL');\n\n// actions\nexport const COMPANY_ACTION = createFeatureActionType(featureName, 'COMPANY_ACTION');\nexport const COMPANY_ACTION_SUCCESS = createFeatureActionType(\n featureName,\n 'COMPANY_ACTION_SUCCESS'\n);\nexport const COMPANY_ACTION_FAIL = createFeatureActionType(featureName, 'COMPANY_ACTION_FAIL');\n\n// hide cards\nexport const HIDE_CARDS_TOGGLE = createFeatureActionType(featureName, 'HIDE_CARDS_TOGGLE');\n","import { createAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { CompanyWatchList } from '@optx/models/WatchList';\n// local\nimport {\n PipelineReportCardResponse,\n PipelineReportFetchFiltersSuccessPayload,\n PipelineReportFundAssociation,\n PipelineReportResetFilterPayload,\n PipelineReportSingleSelectPayload,\n} from './interfaces';\nimport * as types from './types';\nimport { PipelineReportCompanies } from '../models';\n\nexport const fetchPipelineReportCompany = createAction<\n undefined | boolean | PipelineReportFundAssociation | PipelineReportSingleSelectPayload\n>(types.FETCH_PIPELINE_REPORT_COMPANY);\nexport const fetchPipelineReportCompanySuccess = createAction<{\n companies: PipelineReportCompanies[];\n total_count: number;\n}>(types.FETCH_PIPELINE_REPORT_COMPANY_SUCCESS);\nexport const fetchPipelineReportCompanyFail = createAction<string>(\n types.FETCH_PIPELINE_REPORT_COMPANY_FAIL\n);\n\nexport const fetchPipelineReportCompanyCount = createAction<string>(\n types.FETCH_PIPELINE_REPORT_COMPANY_COUNT\n);\nexport const fetchPipelineReportCompanyCountSuccess = createAction<number>(\n types.FETCH_PIPELINE_REPORT_COMPANY_COUNT_SUCCESS\n);\nexport const fetchPipelineReportCompanyCountFail = createAction<string>(\n types.FETCH_PIPELINE_REPORT_COMPANY_COUNT_FAIL\n);\n\nexport const fetchPipelineReportCard = createAction<\n undefined | boolean | PipelineReportSingleSelectPayload\n>(types.FETCH_PIPELINE_REPORT_CARD);\nexport const fetchPipelineReportCardSuccess = createAction<PipelineReportCardResponse>(\n types.FETCH_PIPELINE_REPORT_CARD_SUCCESS\n);\nexport const fetchPipelineReportCardFail = createAction<string>(\n types.FETCH_PIPELINE_REPORT_CARD_FAIL\n);\n\n// save search as list\nexport const saveSearchAsList = createAction<{ title: string }>(types.SAVE_SEARCH_AS_LIST);\n\nexport const saveSearchAsListSuccess = createAction<Dictionary<CompanyWatchList>>(\n types.SAVE_SEARCH_AS_LIST_SUCCESS\n);\nexport const saveSearchAsListFail = createAction<string>(types.SAVE_SEARCH_AS_LIST_FAIL);\n\n// filters\nexport const fetchFilters = createAction(types.FETCH_FILTERS);\nexport const fetchFiltersSuccess = createAction<PipelineReportFetchFiltersSuccessPayload>(\n types.FETCH_FILTERS_SUCCESS\n);\nexport const fetchFiltersFail = createAction<string>(types.FETCH_FILTERS_FAIL);\nexport const clearFilters = createAction(types.FILTER_CLEAR);\nexport const resetToDefault = createAction(types.RESET_TO_DEFAULT);\nexport const resetFilter = createAction<PipelineReportResetFilterPayload>(types.FILTER_RESET);\nexport const updateValue = createAction<PipelineReportSingleSelectPayload>(types.UPDATE_VALUE);\nexport const applyFilters = createAction<Dictionary<PreselectedFilter>>(types.APPLY_FILTERS);\n\n// ui\nexport const toggleFiltersModal = createAction(types.TOGGLE_FILTERS_MODAL);\n\n// hide cards\nexport const hideCardsToggle = createAction(types.HIDE_CARDS_TOGGLE);\n","import { createSelector } from 'reselect';\n// models\nimport { PipelineReportState } from './interfaces';\nimport { featureName } from '../featureName';\n// utils\nimport mapTags from '@optx/utils/filters/mapTags';\n\nconst pipelineReportState = (state: Record<typeof featureName, PipelineReportState>) =>\n state[featureName];\n\nexport const pipelineReportCompanies = createSelector(\n pipelineReportState,\n state => state.companies.data\n);\nexport const companiesCount = createSelector(\n pipelineReportState,\n state => state.companies.count ?? 0\n);\nexport const pipelineReportFilters = createSelector(pipelineReportState, state => state.filters);\nexport const pipelineReportOpportunities = createSelector(\n pipelineReportState,\n state => state.opportunities\n);\nexport const pipelineReportCardLoading = createSelector(\n pipelineReportState,\n state => state.loading\n);\n\nexport const pipelineReportCompanyLoading = createSelector(\n pipelineReportState,\n state => state.companies.loading\n);\n\nexport const pipelineReportLoading = createSelector(\n pipelineReportState,\n state => state.companies.loading || state.loading\n);\n\nexport const filterModalIsOpen = createSelector(pipelineReportState, state => state.modalIsOpen);\nexport const totalFund = createSelector(pipelineReportState, state => state.totalFund);\nexport const fundAssociation = createSelector(pipelineReportState, state => state.fundAssociation);\n\nexport const getFilters = createSelector(pipelineReportState, state => {\n const { normalized, filter, values, clear } = state.filters;\n\n return { normalized, filter, values, clear };\n});\n\nexport const getValues = createSelector(pipelineReportState, state => {\n const { values } = state.filters;\n\n return { ...values };\n});\n\nexport const getFilterSources = createSelector(pipelineReportState, state => {\n const { data } = state.filters;\n\n return data;\n});\n\nexport const getTags = createSelector(pipelineReportFilters, filters => {\n const { data, values, clear } = filters;\n\n return mapTags(values, data, clear, []);\n});\n\nexport const isClearedFilter = createSelector(getTags, tags => {\n const tagNotDefault = tags.find(tag => {\n if (tag.isDefault === false && tag.values?.length > 0) {\n return true;\n }\n\n return false;\n });\n\n return !!tagNotDefault;\n});\n\nexport const saveSearchLoading = createSelector(\n pipelineReportState,\n state => state.saveSearchLoading\n);\n\nexport const getCardStatus = createSelector(pipelineReportState, state => state.cardHidden);\n","import { Dictionary } from 'lodash';\nimport { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { UserInformation } from '@optx/models/user';\nimport { SelectOption } from '@optx/models/Option';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { Addon, OpportunityPresentation } from '@optx/models/Company';\nimport {\n CustomValue,\n EditFieldSuccess,\n UpdateFieldsPayload,\n MultipleFieldsValue,\n} from '@optx/features/company/edit-fields/state/interfaces';\nimport { EditCompanyFund } from '@optx/components/feature/company-individual-edit/state/fund/interfaces';\nimport { PipelineReportCompanies } from '../models';\n// utils\nimport { mapPreselectedFilters } from '@optx/utils/filters/preselectedValues';\nimport { injectFilter } from '@optx/utils/filters/injectFilter';\nimport { normalizeFiltersByColumn } from '@optx/utils/filters/normalize';\nimport { parseFilter } from '@optx/utils/filters/parseFilters';\nimport { showRationaleForStage } from '@optx/utils/helpers';\n// redux\nimport { fetchReducer } from '@redux/feature/fetch/reducers';\nimport { actions as fundActions } from '@components/feature/company-individual-edit/state/fund';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { actions as companyEditFields } from '@features/company/edit-fields/state';\nimport { actions as opportunityPresentationActions } from '@redux/company/opportunity-presentation';\n// local\nimport {\n PipelineReportState,\n PipelineReportFundAssociation,\n PipelineReportCardResponse,\n PipelineReportSingleSelectPayload,\n PipelineReportResetFilterPayload,\n PipelineReportFetchFiltersSuccessPayload,\n} from './interfaces';\nimport * as actions from './actions';\n\nconst initialState: PipelineReportState = {\n companies: {\n data: [],\n count: 0,\n loading: true,\n },\n filters: {\n data: [],\n filter: {},\n values: {},\n clear: {},\n preselected: {},\n persistedFilter: '',\n normalized: {},\n fetchedAt: null,\n },\n fundAssociation: [],\n totalFund: 0,\n cardHidden: false,\n opportunities: [],\n loading: false,\n error: '',\n modalIsOpen: false,\n saveSearchLoading: false,\n};\n\nconst fetchPipelineReportCompanyReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<\n boolean | undefined | PipelineReportFundAssociation | PipelineReportSingleSelectPayload\n >\n> = (draftState, action) => {\n if (\n !action.payload &&\n (!action.payload as unknown as PipelineReportFundAssociation)?.isFundEdited\n ) {\n fetchReducer(draftState);\n }\n};\n\nconst fetchPipelineReportCardReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<boolean | undefined | PipelineReportSingleSelectPayload>\n> = (draftState, action) => {\n draftState.loading = true;\n draftState.error = '';\n};\n\nconst fetchPipelineReportCompanyFailReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<string>\n> = (draftState, action) => {\n draftState.companies.loading = false;\n draftState.error = action.payload;\n};\n\nconst fetchPipelineReportCardFailReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<string>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.error = action.payload;\n};\n\nconst fetchFiltersSuccessReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<PipelineReportFetchFiltersSuccessPayload>\n> = (draftState, action) => {\n const { filters, defaultScore } = action.payload;\n\n const sourceData = filters[0].data;\n const sources = filters.flatMap(item => ({ ...item, data: sourceData }));\n const preselected = mapPreselectedFilters(sources, true, 2);\n\n draftState.filters.preselected = preselected;\n const clearedFilter = mapPreselectedFilters(sources, false);\n const normalized = normalizeFiltersByColumn(filters);\n // @ts-ignore for now\n draftState.filters.normalized = normalized;\n\n const defaultAnalysts: PreselectedFilter = normalized.company_owner_id\n ? normalized.company_owner_id?.data\n : [];\n const defaultFund = normalized.fund.data;\n\n if (draftState.filters.persistedFilter !== undefined) {\n const persistedFilter = draftState.filters.persistedFilter;\n\n const [parsedFilters] = parseFilter(persistedFilter, filters, true);\n\n const parsedFiltersData = {\n ...parsedFilters,\n company_owner_id: parsedFilters.company_owner_id\n ? parsedFilters.company_owner_id\n : parsedFilters.company_owner_id === undefined &&\n persistedFilter.includes('company_owner_id')\n ? []\n : defaultAnalysts,\n ...(Array.isArray(parsedFilters.fund) && parsedFilters.fund?.length !== 0\n ? { fund: parsedFilters.fund }\n : { fund: parsedFilters.country ? undefined : defaultFund }),\n ...(parsedFilters.is_addon ? { is_addon: parsedFilters.is_addon } : {}),\n country: parsedFilters.country || undefined,\n };\n\n draftState.filters.values = parsedFiltersData;\n draftState.filters.filter = parsedFiltersData;\n }\n\n draftState.filters.clear = {\n ...clearedFilter,\n company_owner_id: normalized.company_owner_id.data,\n country: defaultScore === 'il' ? 'Israel' : 'All Regions',\n fund: defaultScore === 'il' ? undefined : defaultFund,\n };\n draftState.filters.preselected = {\n ...preselected,\n company_owner_id: draftState.filters.filter.company_owner_id,\n country: defaultScore === 'il' ? 'Israel' : 'All Regions',\n };\n draftState.filters.data = sources;\n\n const { filters: pipelineFilters } = draftState;\n const { filter, values } = pipelineFilters;\n\n const deleteFundAndCountry = () => {\n delete filter.fund;\n delete values.fund;\n delete filter.country;\n delete values.country;\n };\n\n if (defaultScore === 'il' && draftState.filters.persistedFilter === '') {\n const newData = {} as Record<string, string>;\n deleteFundAndCountry();\n newData.country = 'Israel';\n draftState.filters.filter = { ...draftState.filters.filter, ...newData };\n draftState.filters.values = { ...draftState.filters.values, ...newData };\n }\n\n draftState.error = '';\n};\n\nconst fetchETCompaniesSuccessReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<{ companies: PipelineReportCompanies[]; total_count: number }>\n> = (draftState, action) => {\n const { companies, total_count: count } = action.payload;\n\n // companies\n draftState.companies.data = companies;\n draftState.companies.count = count;\n // standard\n draftState.error = '';\n draftState.companies.loading = false;\n};\n\nconst fetchPipelineReportCardSuccessReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<PipelineReportCardResponse>\n> = (draftState, action) => {\n const {\n fund_association: fundAssociation,\n total_fund: totalFund,\n opportunities,\n } = action.payload;\n\n // opportunities\n draftState.opportunities = opportunities;\n\n // fund Association\n draftState.fundAssociation = fundAssociation;\n draftState.totalFund = totalFund;\n\n // standard\n draftState.error = '';\n draftState.loading = false;\n};\n\nconst clearFiltersReducer: CaseReducer<PipelineReportState> = draftState => {\n draftState.filters.filter = draftState.filters.clear;\n draftState.filters.values = draftState.filters.clear;\n};\n\nconst resetFilterReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<PipelineReportResetFilterPayload>\n> = (draftState, action) => {\n const { tag, defaultScore } = action.payload;\n const { normalized, clear, filter } = draftState.filters;\n fetchReducer(draftState);\n\n if (tag.filter === 'country') {\n const newRegion = defaultScore === 'il' ? 'Israel' : 'All Regions';\n\n draftState.filters.filter.fund = undefined;\n draftState.filters.filter.country = newRegion;\n\n draftState.filters.values.fund = undefined;\n draftState.filters.values.country = newRegion;\n } else {\n const newFilters = injectFilter(normalized, filter, clear, tag.filter, tag.optionId);\n draftState.filters.filter = newFilters;\n draftState.filters.values = newFilters;\n }\n};\n\nconst toggleFiltersModalReducer: CaseReducer<PipelineReportState> = draftState => {\n draftState.modalIsOpen = !draftState.modalIsOpen;\n};\n\nconst updateValueReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<PipelineReportSingleSelectPayload>\n> = (draftState, action) => {\n const { key, value } = action.payload.filter;\n\n const newData = { [key]: value };\n\n const { filters } = draftState;\n const { filter, values } = filters;\n\n const deleteFundAndCountry = () => {\n delete filter.fund;\n delete values.fund;\n delete filter.country;\n delete values.country;\n };\n\n const deleteIlOptxScore = () => {\n delete filter.is_il_optx_score;\n delete values.is_il_optx_score;\n };\n\n if (key === 'is_il_optx_score') {\n deleteFundAndCountry();\n newData.country = 'Israel';\n } else if (key === 'fund') {\n deleteIlOptxScore();\n deleteFundAndCountry();\n } else if (key === 'country') {\n deleteIlOptxScore();\n\n if ((value as string).includes('Europe')) {\n newData.country = 'Europe';\n } else if (value === '') {\n newData.country = 'All Regions';\n } else {\n newData.country = 'North America + Israel';\n }\n }\n\n draftState.filters.filter = { ...draftState.filters.filter, ...newData };\n draftState.filters.values = { ...draftState.filters.values, ...newData };\n draftState.loading = true;\n};\n\n// External reducers\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccess: CaseReducer<\n PipelineReportState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const sessionSettings = action.payload.settings.session_settings;\n const persistedFilter = sessionSettings ? sessionSettings.pipeline_report : undefined;\n const hiddenCard = sessionSettings.bi_weekly_pipeline_report_show_cards\n ? sessionSettings.bi_weekly_pipeline_report_show_cards\n : false;\n const persistedRegionFilter = sessionSettings\n ? sessionSettings.bi_weekly_pipeline_report_region\n : undefined;\n\n draftState.cardHidden = hiddenCard;\n\n if (persistedFilter !== undefined) {\n draftState.filters.persistedFilter = persistedFilter;\n }\n\n if (persistedRegionFilter !== undefined) {\n draftState.filters.filter.country = persistedRegionFilter;\n draftState.filters.values.country = persistedRegionFilter;\n }\n};\n\nconst resetToDefaultReducer: CaseReducer<PipelineReportState> = draftState => {\n draftState.filters.filter = draftState.filters.preselected;\n draftState.filters.values = draftState.filters.preselected;\n};\n\nconst applyFiltersReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<Dictionary<PreselectedFilter>>\n> = (draftState, action) => {\n draftState.filters.filter = action.payload;\n draftState.filters.values = action.payload;\n draftState.loading = true;\n};\n\nconst loadingActiveReducer: CaseReducer<PipelineReportState> = draftState => {\n draftState.saveSearchLoading = true;\n};\n\nconst loadingDeActiveReducer: CaseReducer<PipelineReportState> = draftState => {\n draftState.saveSearchLoading = false;\n};\n\nconst updateFieldsSuccessReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<EditFieldSuccess>\n> = (draftState, action) => {\n const { companyId, fieldName, value } = action.payload;\n const companyIndex: number = draftState.companies.data.findIndex(\n item => item.company_id === companyId\n );\n\n if (companyIndex !== -1) {\n const optionSelected = (value as UpdateFieldsPayload).value as SelectOption;\n const rationale = (value as UpdateFieldsPayload).rationale;\n\n if (!Array.isArray(fieldName)) {\n if (fieldName === 'Asking Amount') {\n draftState.companies.data[companyIndex].asking_amount = (value as UpdateFieldsPayload)\n .value as string;\n }\n\n if (fieldName === 'Lead Source') {\n draftState.companies.data[companyIndex].lead_source = optionSelected.label;\n }\n\n if (fieldName === 'Stage') {\n draftState.companies.data[companyIndex].stage = optionSelected.label;\n\n if (showRationaleForStage(optionSelected.label)) {\n draftState.companies.data[companyIndex].stage_rationale = rationale as string;\n } else {\n draftState.companies.data[companyIndex].stage_rationale = null;\n }\n }\n\n if (fieldName === 'Fund') {\n const company = draftState.companies.data[companyIndex];\n const fundList = draftState.filters.filter.fund as SelectOption[] | undefined;\n const fundListValues = fundList?.map(fund => fund.value);\n const fund = optionSelected.label;\n\n company.fund = fund;\n\n if (fund === 'PEP Flagship' || (fundListValues && !fundListValues.includes(fund))) {\n draftState.companies.data.splice(companyIndex, 1);\n }\n }\n\n if (fieldName === 'Add-on') {\n const optionalValue = ((value as UpdateFieldsPayload).value as CustomValue).optionalValue;\n\n if (optionalValue === null) {\n draftState.companies.data[companyIndex].addon = null;\n draftState.companies.data[companyIndex].addon_company_id = null;\n } else {\n draftState.companies.data[companyIndex].addon = optionalValue as Addon;\n draftState.companies.data[companyIndex].addon_company_id = (\n (value as UpdateFieldsPayload).value as CustomValue\n ).additionalValue as number;\n }\n }\n\n if (fieldName === 'Website Status') {\n draftState.companies.data[companyIndex].url_status = optionSelected\n ? 'active'\n : 'not active';\n }\n\n if (fieldName === 'Next Steps') {\n draftState.companies.data[companyIndex].next_steps = optionSelected.label;\n draftState.companies.data[companyIndex].next_steps_opinion = (value as UpdateFieldsPayload)\n .extraValues\n ? ((value as UpdateFieldsPayload).extraValues as string[])[0]\n : null;\n }\n } else {\n if (fieldName.includes('Stage')) {\n const optionSelected = (value as MultipleFieldsValue).value.Stage;\n\n draftState.companies.data[companyIndex].stage = optionSelected.label;\n\n if (showRationaleForStage(optionSelected.label)) {\n draftState.companies.data[companyIndex].stage_rationale = rationale as string;\n } else {\n draftState.companies.data[companyIndex].stage_rationale = null;\n }\n }\n }\n }\n};\n\nconst addCompanyFundSuccessReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<EditCompanyFund>\n> = (draftState, action) => {\n const { companyId, fundName } = action.payload;\n\n const companyIndex: number = draftState.companies.data.findIndex(\n item => item.company_id === companyId\n );\n\n if (companyIndex !== -1) {\n draftState.companies.data[companyIndex].fund = fundName;\n }\n};\n\nexport const updateValueAskingAmount: CaseReducer<\n PipelineReportState,\n PayloadAction<OpportunityPresentation>\n> = (draftState, action) => {\n const { company_id: companyId, deal_preparation } = action.payload;\n\n if (deal_preparation) {\n const { asking_amount: askingAmount } = deal_preparation;\n\n const companyIndex = draftState.companies.data.findIndex(item => item.company_id === companyId);\n\n if (companyIndex !== -1) {\n draftState.companies.data[companyIndex].asking_amount = askingAmount as string;\n }\n }\n};\n\nexport const fetchPipelineReportCompanyCountSuccessReducer: CaseReducer<\n PipelineReportState,\n PayloadAction<number>\n> = (draftState, action) => {\n draftState.companies.count = action.payload;\n};\n\nexport const hideCardsToggleReducer: CaseReducer<PipelineReportState> = draftState => {\n draftState.cardHidden = !draftState.cardHidden;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchPipelineReportCompany, fetchPipelineReportCompanyReducer)\n .addCase(actions.fetchPipelineReportCompanySuccess, fetchETCompaniesSuccessReducer)\n .addCase(actions.fetchPipelineReportCompanyFail, fetchPipelineReportCompanyFailReducer)\n .addCase(actions.fetchPipelineReportCard, fetchPipelineReportCardReducer)\n .addCase(actions.fetchPipelineReportCardSuccess, fetchPipelineReportCardSuccessReducer)\n .addCase(actions.fetchPipelineReportCardFail, fetchPipelineReportCardFailReducer)\n .addCase(\n actions.fetchPipelineReportCompanyCountSuccess,\n fetchPipelineReportCompanyCountSuccessReducer\n )\n // filters\n .addCase(actions.fetchFilters, fetchReducer)\n .addCase(actions.fetchFiltersSuccess, fetchFiltersSuccessReducer)\n .addCase(actions.clearFilters, clearFiltersReducer)\n .addCase(actions.resetFilter, resetFilterReducer)\n .addCase(actions.updateValue, updateValueReducer)\n .addCase(actions.resetToDefault, resetToDefaultReducer)\n .addCase(actions.applyFilters, applyFiltersReducer)\n // save search\n .addCase(actions.saveSearchAsList, loadingActiveReducer)\n .addCase(actions.saveSearchAsListSuccess, loadingDeActiveReducer)\n .addCase(actions.saveSearchAsListFail, loadingDeActiveReducer)\n // external\n .addCase(companyEditFields.updateFieldsSuccess, updateFieldsSuccessReducer)\n .addCase(fundActions.addFundSuccess, addCompanyFundSuccessReducer)\n // ui\n .addCase(actions.toggleFiltersModal, toggleFiltersModalReducer)\n // actions\n // card hide\n .addCase(actions.hideCardsToggle, hideCardsToggleReducer)\n // External reducers\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccess)\n .addCase(\n opportunityPresentationActions.updateOpportunityPresentationSuccess,\n updateValueAskingAmount\n )\n);\n\nexport default reducer;\n","import { call, put, takeLatest, take, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\nimport queryString from 'query-string';\n// services\nimport { AnalystService, FilterService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// constants\nimport { FAVORITE_LIST_OWNER } from '@optx/constants/lists';\nimport { defaultSearchType } from '@optx/features/grid/search-type/state/constants';\n// models\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { AxiosResponse } from 'axios';\nimport { SelectOption } from '@optx/models/Option';\nimport { PipelineReportCompanies } from '../models';\nimport { PipelineReportSingleSelectPayload } from './interfaces';\nimport { FilterGroup, PreselectedFilter } from '@optx/models/filters';\nimport { CompanyWatchList } from '@optx/models/WatchList';\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\n// utils\nimport mapFiltersToURLParams from '@optx/utils/filters/mapFiltersToURLParams';\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { actions as gridSearchCountActions } from '@features/grid/search-count';\nimport {\n selectors as userSelectors,\n actions as userInformationActions,\n} from '@redux/user/information';\nimport { actions as fundActions } from '@components/feature/company-individual-edit/state/fund';\nimport { actions as companyEditFields } from '@features/company/edit-fields/state';\n// local\nimport * as actions from './actions';\nimport * as selectors from './selectors';\n\nfunction* getFilterQuery(\n action?: PayloadAction<PipelineReportSingleSelectPayload | undefined>,\n includePagination: boolean = true\n) {\n const { normalized, filter, clear } = yield select(selectors.getFilters);\n\n const pagination: PageInfo = yield select(paginationSelectors.getPagination('pipelineReport'));\n\n let queryData: Dictionary<PreselectedFilter | number> = {};\n\n if (action?.payload?.shouldClear) {\n const defaultScore: string = yield select(userSelectors.getDefaultScore);\n\n const normalizedFilter = {\n ...clear,\n ...(clear.company_owner_id && {\n company_owner_id: clear.company_owner_id.length === 0 ? [''] : clear.company_owner_id,\n }),\n };\n\n queryData = {\n ...mapFiltersToURLParams(normalized, normalizedFilter),\n ...(defaultScore === 'il' ? { is_il_optx_score: true } : {}),\n country: undefined,\n page: pagination.pageNumber,\n per_page: pagination.pageSize,\n };\n } else {\n const normalizedFilter = {\n ...filter,\n ...(filter.company_owner_id && {\n company_owner_id: filter.company_owner_id.length === 0 ? [''] : filter.company_owner_id,\n }),\n };\n\n const mappedFiltersURLParams = mapFiltersToURLParams(normalized, normalizedFilter);\n\n queryData = {\n ...mappedFiltersURLParams,\n country: undefined,\n page: pagination.pageNumber,\n per_page: pagination.pageSize,\n };\n\n if (normalizedFilter.country === 'Israel') {\n delete queryData.fund;\n queryData.is_il_optx_score = true;\n }\n\n if (queryData.fund === '') {\n delete queryData.fund;\n }\n }\n\n if (!includePagination) {\n delete queryData.page;\n delete queryData.per_page;\n }\n\n return queryString.stringify(queryData, {\n arrayFormat: 'comma',\n });\n}\n\nexport function* fetchPipelineReportSaga(\n action?: PayloadAction<PipelineReportSingleSelectPayload | undefined>\n) {\n const query: string = yield call(getFilterQuery, action);\n const countQuery: string = yield call(getFilterQuery, action, false);\n const pagination: PageInfo = yield select(paginationSelectors.getPagination('pipelineReport'));\n\n try {\n const res: AxiosResponse = yield call(AnalystService.getPipelineReportsCompany, query);\n\n if (res.data) {\n yield put(actions.fetchPipelineReportCompanyCount(countQuery));\n yield put(actions.fetchPipelineReportCompanySuccess(res.data));\n yield put(\n userInformationActions.updateUserSettings({\n pipeline_report: decodeURIComponent(query),\n bi_weekly_pipeline_report_page_number: pagination.pageNumber,\n bi_weekly_pipeline_report_per_page: pagination.pageSize,\n })\n );\n } else {\n const errorMessage = 'Bi-Weekly Pipeline Report fail!';\n yield put(actions.fetchPipelineReportCompanyFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Bi-Weekly Pipeline Report fail, Server error!');\n yield put(actions.fetchPipelineReportCompanyFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchPipelineReportCardSaga(\n action?: PayloadAction<PipelineReportSingleSelectPayload | undefined>\n) {\n const query: string = yield call(getFilterQuery, action, false);\n\n try {\n const res: AxiosResponse = yield call(AnalystService.getPipelineReportsCard, query);\n\n if (res.data) {\n yield put(actions.fetchPipelineReportCardSuccess(res.data));\n } else {\n const errorMessage = 'Bi-Weekly Pipeline Report fail!';\n yield put(actions.fetchPipelineReportCardFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Bi-Weekly Pipeline Report fail, Server error!');\n yield put(actions.fetchPipelineReportCardFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchPipelineReportCompanyCountSaga(query: PayloadAction<string>) {\n try {\n const res: AxiosResponse<number> = yield call(\n AnalystService.getPipelineReportsCompanyCount,\n query.payload\n );\n\n if (typeof res.data === 'number') {\n yield put(actions.fetchPipelineReportCompanyCountSuccess(res.data));\n yield put(\n gridSearchCountActions.searchCountSuccess({\n gridName: 'pipelineReport',\n searchCount: res.data,\n })\n );\n } else {\n const errorMessage = 'Bi-Weekly Pipeline Report fail!';\n yield put(actions.fetchPipelineReportCompanyCountFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Bi-Weekly Pipeline Report fail, Server error!');\n yield put(actions.fetchPipelineReportCompanyCountFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchFiltersSaga() {\n try {\n const shouldFetchUserInformation: boolean = yield select(userSelectors.shouldFetch);\n\n if (shouldFetchUserInformation) {\n yield take(userInformationActions.fetchUserInformationSuccess);\n }\n\n const defaultScore: string = yield select(userSelectors.getDefaultScore);\n\n const res: AxiosResponse = yield call(FilterService.getOptions, FilterGroup.PipelineReport);\n\n yield put(actions.fetchFiltersSuccess({ filters: res.data.filters, defaultScore }));\n\n yield put(actions.fetchPipelineReportCard());\n\n yield take(actions.fetchPipelineReportCardSuccess);\n\n yield put(actions.fetchPipelineReportCompany());\n } catch (error: any) {\n const errorMessage = getErrorMessage(\n error as Error,\n 'Failed to fetch filters for Bi-Weekly Pipeline Report!'\n );\n\n yield put(actions.fetchFiltersFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* saveSearchAsListSaga(action: PayloadAction<{ title: string }>) {\n const { title } = action.payload;\n\n const { normalized, filter } = yield select(selectors.getFilters);\n\n const filterQuery = mapFiltersToURLParams(normalized, filter);\n const userName: string = yield select(userSelectors.getFullName);\n const companyData: PipelineReportCompanies[] = yield select(selectors.pipelineReportCompanies);\n\n const searchData: SearchPayloadRequest = {\n searchKey: '',\n searchType: defaultSearchType,\n filter: { ...filterQuery, fund: filter?.fund.map((item: SelectOption) => item.value) },\n pagination: { pageNumber: 0, pageSize: 0 },\n sortBy: [],\n };\n\n try {\n const res: AxiosResponse<Dictionary<CompanyWatchList>> = yield call(\n AnalystService.saveAsListPipelineReport,\n title,\n searchData\n );\n\n const getKeys = Object.keys(res.data)[0];\n const value = res.data[getKeys];\n\n res.data[Object.keys(res.data)[0]] = {\n ...res.data[Object.keys(res.data)[0]],\n owner_name: userName,\n origin: FAVORITE_LIST_OWNER,\n };\n\n yield put(\n actions.saveSearchAsListSuccess({ [getKeys]: { ...value, count: companyData.length } })\n );\n NotificationService.success(`Create watchlist ${title} success!`);\n } catch (e: any) {\n // save the title to reducer, create a new action\n const message = `Create watchlist ${title} failed!`;\n yield put(actions.saveSearchAsListFail(message));\n NotificationService.error(message);\n }\n}\n\nfunction* updateFilterSaga(action?: PayloadAction<PipelineReportSingleSelectPayload>) {\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey: 'pipelineReport',\n data: {\n pageSize: 50,\n pageNumber: 1,\n },\n })\n );\n\n yield put(actions.fetchPipelineReportCard(action?.payload));\n\n yield take(actions.fetchPipelineReportCardSuccess);\n\n yield put(actions.fetchPipelineReportCompany(action?.payload));\n\n if (action?.payload.filter.key === 'country') {\n yield put(\n userInformationActions.updateUserSettings({\n bi_weekly_pipeline_report_region: action?.payload.filter.value as string,\n })\n );\n }\n}\n\n/**\n * reset filter saga is separated from the update one\n * because the action payload mustn't be passed on the saga,\n * only on the reducer.\n */\nfunction* resetFilterSaga() {\n yield put(actions.fetchPipelineReportCard());\n\n yield take(actions.fetchPipelineReportCardSuccess);\n\n yield put(actions.fetchPipelineReportCompany());\n}\n\nfunction* clearFiltersSaga() {\n const payload = { filter: { key: '', value: '' }, shouldClear: true };\n\n yield put(actions.fetchPipelineReportCard(payload));\n\n yield take(actions.fetchPipelineReportCardSuccess);\n\n yield put(actions.fetchPipelineReportCompany(payload));\n}\n\nexport default function* alertsSaga() {\n yield takeLatest(actions.fetchPipelineReportCompany, fetchPipelineReportSaga);\n yield takeLatest(actions.fetchPipelineReportCard, fetchPipelineReportCardSaga);\n yield takeLatest(actions.fetchPipelineReportCompanyCount, fetchPipelineReportCompanyCountSaga);\n // filters\n yield takeLatest(actions.fetchFilters, fetchFiltersSaga);\n yield takeLatest(actions.updateValue, updateFilterSaga);\n yield takeLatest(actions.clearFilters, clearFiltersSaga);\n yield takeLatest(actions.resetToDefault, updateFilterSaga);\n yield takeLatest(actions.applyFilters, updateFilterSaga);\n yield takeLatest(actions.resetFilter, resetFilterSaga);\n yield takeLatest(actions.saveSearchAsList, saveSearchAsListSaga);\n // external\n yield takeLatest(companyEditFields.updateFieldsSuccess, fetchPipelineReportCardSaga);\n yield takeLatest(fundActions.addFundSuccess, fetchPipelineReportCardSaga);\n}\n","// constants\nimport { isInIframe } from '@optx/constants/plugin';\nimport appRoutes from '@constants/routes';\n// utils\nimport { getPluginOrigin } from './pluginManager';\n// storage\nimport { JWTStorage } from '@optx/storage/localStorage';\nimport { setAxiosAuthorizationHeaders } from '@optx/modules/axios';\n\n/**\n * will communicate with the extension on UI. Extension catches the message on its side.\n * @param {string} type type of post message to iframe\n * @param {any} message can be everything it will pass to the extension\n */\nexport const iframePostMessage = (type: string, message: any) =>\n window.parent.postMessage(\n {\n type,\n message,\n },\n '*'\n );\n\n/**\n * Sends a token message to a specified target, either to a parent window or the current window,\n * depending on the execution context. This function is typically used to communicate with a plugin\n * for storing the token in Chrome's local storage.\n *\n * @param {string} type - The type of the message being sent. This could represent the nature or\n * category of the token.\n * @param {string} token - The token to be sent. This is the main content of the message and is\n * intended to be stored by the receiving plugin.\n *\n * The function constructs a payload object containing the message type and token. If the code is\n * running inside an iframe, it also includes the sender's origin in the payload. The message is\n * then dispatched using the `postMessage` API. If running within an iframe, the message is sent to\n * the parent window using the origin obtained from `getPluginOrigin()`. Otherwise, the message is\n * sent to the current window using its origin.\n */\nexport const sendToken = (type: string, token: string) => {\n const payload = {\n type,\n message: token,\n ...(!isInIframe && { sender: window.location.origin }),\n };\n\n // send token to plugin to be saved in chrome storage local\n if (isInIframe) {\n const iframeOrigin = getPluginOrigin();\n\n window.parent.postMessage(payload, iframeOrigin);\n } else {\n window.postMessage(payload, window.location.origin);\n }\n};\n\n/**\n * Saves the provided encrypted token and updates the application's authorization state.\n *\n * This function performs the following actions:\n * 1. Retrieves the current JWT from storage and logs it for debugging purposes.\n * 2. Sets the authorization headers for Axios using the provided encrypted token.\n * 3. Stores the new encrypted token in the JWT storage.\n * 4. If no current JWT is found, it redirects the user to the appropriate route based on the context:\n * - If the application is running inside an iframe, it redirects to the Chrome extension route.\n * - Otherwise, it redirects to the login route.\n *\n * @param {string} encryptedToken - The encrypted token to be saved and used for authorization.\n */\nexport const saveToken = (encryptedToken: string) => {\n const currentJwt = JWTStorage.getJWT();\n console.log('window jwt: ', currentJwt);\n\n setAxiosAuthorizationHeaders(encryptedToken);\n JWTStorage.setJWT(encryptedToken);\n\n if (!currentJwt) {\n console.log('redirect: ', currentJwt);\n\n if (isInIframe) {\n window.location.href = `${origin}${appRoutes.chromeExtension}`;\n } else {\n window.location.href = `${origin}${appRoutes.login}`;\n }\n }\n};\n","import Option, { DateRangeOption, SelectOption } from '@optx/models/Option';\n\ninterface Pagination {\n pageNumber: number;\n pageSize: number;\n}\n\nexport interface ScheduledTouchesState {\n dashboard: ScheduledTouchesDashboardState;\n touches: TouchesState;\n count: ScheduledTouchesCount;\n sortBy: ScheduledTouchesSortBy;\n pagination: Pagination;\n stageType: string;\n touchType: string;\n rankType: string;\n selectedTab: string;\n selectedPeriod: string;\n remainedTouches: number;\n totalTouches: number;\n insight: Record<string, number>;\n insightTotal: number;\n selectedDateRage: [string | null, string | null];\n}\n\nexport interface ScheduledTouchesFilterTags {\n stageType: string;\n selectedPeriod: string;\n selectedDateRange: [string | null, string | null];\n touchType: string;\n rankType: string;\n}\n\nexport interface ScheduledTouchesDashboardState {\n inputDates: DateRangeOption[];\n cards: Period;\n tabs: Tabs;\n stages: {\n name: string;\n value: string;\n }[];\n ranks: string[];\n touchTypes: Option[];\n loading: boolean;\n error: string | null;\n fetchedAt: string | null;\n}\n\nexport interface TouchesState {\n data: ScheduledTouch[] | null;\n loading: boolean;\n error: string | null;\n fetchedAt: string | null;\n}\n\nexport interface ScheduledTouchesCount {\n data: ScheduledTouchesCountResponse | null;\n loading: boolean;\n error: string | null;\n fetchedAt: string | null;\n}\n\nexport interface ScheduledTouchesCountResponse {\n cards: CardsCount;\n tabs: TabsCount;\n insight: Record<string, number>;\n}\n\nexport interface Period {\n [key: string]: DateRangeOption[];\n}\n\nexport interface Cards {\n card1: DateRangeOption;\n card2?: DateRangeOption;\n}\n\nexport interface Tabs {\n [key: string]: string;\n}\n\nexport interface CardCount {\n scheduled: number | null;\n past_due: number | null;\n}\n\nexport interface CardsCount {\n [key: string]: CardCount;\n}\n\nexport interface TabsCount {\n [key: string]: number | null;\n}\n\nexport interface DashboardSuccess {\n input_dates: DateRangeOption[];\n cards: Period;\n tabs: Tabs;\n touch_types: Option[];\n pipeline_rank: string[];\n stages: {\n name: string;\n value: string;\n }[];\n sortBy?: ScheduledTouchesSortBy;\n}\n\nexport interface ScheduledTouchesResponse {\n count: number;\n remained_touch_count: number;\n result: ScheduledTouch[];\n}\n\nexport interface ScheduledTouch {\n company_id: number;\n company_name: string;\n score: number | null;\n il_optx_score: number | null;\n score_growth: number | null;\n score_v3: number | null;\n score_v3_growth: number | null;\n il_score_growth: number | null;\n last_touch_date: string | null;\n next_touch_date: string[];\n created_date: string;\n logo_url: string | null;\n stage: string | null;\n pipeline_rank: number | string | null;\n touch_id: number;\n subject: string | null;\n is_psg_company: boolean | null;\n touch_start_date: string;\n touch_status: 'Scheduled' | 'Past Due' | 'Completed';\n touch_type:\n | 'Voice Mail'\n | 'Contact Import'\n | 'Document Upload'\n | 'CrunchBase'\n | 'Stage Modified'\n | 'E-mail received'\n | 'Internal Note'\n | 'Meeting'\n | 'NDA Signed'\n | 'Call'\n | 'E-mail';\n}\n\nexport enum ScheduledTouchesSortByEnum {\n 'score.desc' = 'OPTX Score descending',\n 'score.asc' = 'OPTX Score ascending',\n 'touch_start_date.desc' = 'Date Newest to Oldest',\n 'touch_start_date.asc' = 'Date Oldest to Newest',\n}\n\nexport type ScheduledTouchesSortBy = keyof typeof ScheduledTouchesSortByEnum;\n\nexport const SCHEDULED_TOUCHES_DEFAULT_SORT: ScheduledTouchesSortBy = 'touch_start_date.asc';\n\nexport const scheduledTouchesSortBy = (defaultOptxScore: string) =>\n Object.entries(ScheduledTouchesSortByEnum).reduce((acc: Array<SelectOption>, [key, value]) => {\n if (defaultOptxScore === 'il') {\n const ilItem = { label: '', value: '' };\n\n if (key === 'score.desc') {\n ilItem.value = 'il_optx_score.desc';\n ilItem.label = 'IL OPTX Score descending';\n acc.push(ilItem);\n\n return acc;\n }\n\n if (key === 'score.asc') {\n ilItem.value = 'il_optx_score.asc';\n ilItem.label = 'IL OPTX Score ascending';\n acc.push(ilItem);\n\n return acc;\n }\n }\n\n acc.push({ label: value, value: key });\n\n return acc;\n }, []);\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE = createFeatureActionType(\n featureName,\n 'FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE'\n);\nexport const FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE_FAILURE = createFeatureActionType(\n featureName,\n 'FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE_FAILURE'\n);\nexport const FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE_SUCCESS = createFeatureActionType(\n featureName,\n 'FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE_SUCCESS'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { SearchAutocomplete } from '@optx/models/search-autocomplete';\nimport {\n FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE,\n FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE_SUCCESS,\n} from './types';\n\nexport const fetchSearchAutocomplete = createAction(FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE);\n\nexport const fetchSearchAutocompleteSuccess = createAction<Array<SearchAutocomplete>>(\n FETCH_USER_LISTS_SEARCH_AUTOCOMPLETE_SUCCESS\n);\n","import { createSelector } from 'reselect';\nimport { selectFeatureState } from '../../selectFeature';\n\nexport const getAutocompleteList = createSelector(selectFeatureState, state => state.autocomplete);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n// redux\nimport { actions } from '..';\nimport { SearchAutocomplete } from '@optx/models/search-autocomplete';\n\nconst initialState: SearchAutocomplete[] = [];\n\nexport const fetchSearchAutocompleteSuccessReducer: CaseReducer<\n SearchAutocomplete[],\n PayloadAction<Array<SearchAutocomplete>>\n> = (draftState, action) => {\n return action.payload;\n};\n\nconst reducer = createReducer<SearchAutocomplete[]>(initialState, builder =>\n builder.addCase(actions.fetchSearchAutocompleteSuccess, fetchSearchAutocompleteSuccessReducer)\n);\n\nexport default reducer;\n","import { takeLatest, call, put, select, take } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\n// models\nimport { FilterSource } from '@optx/models/filters';\nimport { SearchAutocomplete } from '@optx/models/search-autocomplete';\n// utils\nimport { getLocationGridKey } from '@optx/utils/grid';\nimport { mapPreselectedFilters } from '@utils/filters/preselectedValues';\n// services\nimport { SearchService, SavedSearchesService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport {\n actions as filterSourcesActions,\n selectors as filterSourcesSelectors,\n} from '@redux/company/filters';\nimport { actions as suggestedSearchActions } from '@redux/company/suggested-searches';\nimport { fetchSearchAutocomplete, fetchSearchAutocompleteSuccess } from './actions';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\n\nexport function* fetchSearchAutocompleteSaga() {\n try {\n const gridKey = getLocationGridKey();\n\n if (gridKey === 'advancedSearch') {\n let filterSources: FilterSource[] = yield select(filterSourcesSelectors.getCompanyFilters);\n\n if (!filterSources.length) {\n yield take(filterSourcesActions.fetchCompanyFiltersSuccess);\n filterSources = yield select(filterSourcesSelectors.getCompanyFilters);\n }\n\n // @ts-ignore\n const res = yield call(SavedSearchesService.getSuggestedSearches);\n const isAnalyst: boolean = yield select(userInformationSelectors.getIsAnalyst);\n\n if (res.data) {\n yield put(\n suggestedSearchActions.fetchSuggestedSearchesSuccess(\n res.data.lists,\n filterSources,\n mapPreselectedFilters(filterSources, false),\n res.data.total_list_count,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n isAnalyst\n )\n );\n }\n }\n\n const res: AxiosResponse<Array<SearchAutocomplete>> = yield call(\n SearchService.getCompanySearchAutocomplete\n );\n\n yield put(fetchSearchAutocompleteSuccess(res.data));\n } catch (error: any) {\n NotificationService.error('Error fetching search autocomplete!');\n }\n}\n\nexport default function* searchAutocompleteSaga() {\n yield takeLatest(fetchSearchAutocomplete, fetchSearchAutocompleteSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\n\n// set initial tab on lists (My Pipeline) page\nexport const setInitialListTab = createAction<string>(types.INITIAL_LIST_TAB);\n// set is loading\nexport const setLoading = createAction<boolean>(types.IS_LOADING);\n","export const INITIAL_LIST_TAB = 'pipeline/INITIAL_LIST_TAB';\nexport const IS_LOADING = 'pipeline/IS_LOADING';\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\n// specific selectors\nconst selectMyPipelineState = (state: AppState) => state.myPipeline;\n\nexport const getInitialTab = createSelector(selectMyPipelineState, state => state.initialTab);\nexport const isLoading = createSelector(selectMyPipelineState, state => state.loading);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport * as actions from './actions';\nimport { MyPipelineState } from './interfaces';\n\nexport const initialState: MyPipelineState = {\n initialTab: '2',\n loading: false,\n};\n\n// set initial lists tab number\nconst setInitialListTabReducer: CaseReducer<MyPipelineState, PayloadAction<string>> = (\n draftState,\n action\n) => {\n draftState.initialTab = action.payload;\n};\n\nconst setIsLoadingReducer: CaseReducer<MyPipelineState, PayloadAction<boolean>> = (\n draftState,\n action\n) => {\n draftState.loading = action.payload;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.setInitialListTab, setInitialListTabReducer)\n .addCase(actions.setLoading, setIsLoadingReducer)\n);\n\nexport default reducer;\n","import queryString from 'query-string';\nimport { Dictionary } from 'lodash';\nimport fileDownload from 'js-file-download';\n// models\nimport {\n CompanyProfile,\n ScoreGrowth,\n CompanyDatePresented,\n UpdateOpportunity,\n Addon,\n} from '@models/Company';\nimport {\n EquityTouchSubmitField,\n GroupsSubmitField,\n EquityTouchContactPost,\n WatchlistsSubmitField,\n} from '@models/equityTouch';\nimport { CompanyMergesResponse } from '@models/company/CompanyMerges';\nimport { CompanyTouchesResponse } from '@models/company/CompanyTouch';\nimport { PreselectedFilter } from '@models/filters';\nimport { PinNote, EditNote, FetchNote } from '@models/Notes';\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { SelectedCompaniesKeys } from '@models/bulkActions';\nimport { CompanyPortfolio } from '@redux/company/portfolio/interfaces';\nimport {\n SearchTouchesPayload,\n TouchesDocumentUploadPayload,\n} from '@features/company-touches/state/interfaces';\nimport { CompanyImportPayload } from '@optx/features/list-import/state/interfaces';\nimport { CompanyMergesPayload } from '@features/company/merges/state/interfaces';\nimport { WebsiteRankPayload } from '@optx/models/company/SocialMedia';\nimport { ChangedCompanyFieldsPayload } from '@optx/features/company/audit-trail/state/interfaces';\nimport {\n CustomValue,\n UpdateFieldsPayload,\n} from '@optx/features/company/edit-fields/state/interfaces';\nimport { SelectOption } from '@optx/models/Option';\nimport {\n AddonManagementCountPayload,\n AddonManagementPayload,\n BulkRemoveAddonPayload,\n} from '@optx/redux/company/addon-management/interfaces';\nimport { UpcomingTouchesNotificationDetails } from '@optx/models/notifications';\nimport { AddYearSuccessPayload } from '@optx/redux/company/opportunity-presentation/interfaces';\nimport { SalesloftEditData } from '../../models/Salesloft';\nimport { CompanyTabListPaginationState } from '../../redux/company/lists/interfaces';\nimport { TouchesCreateForm, TouchesFinancialPayload } from '../../models/api/touches';\nimport { FilesPayload } from '@optx/models/files';\nimport { CompanyEditAllDataPayload } from '@models/api/editAllInfo';\nimport {\n OpinionAiDescription,\n RegenerateAiDescription,\n AiRelationshipSummary,\n} from '@optx/redux/company/profile/interfaces';\nimport { AddCompanyPayload } from '@optx/features/company/add-company/state/interfaces';\nimport { FilterExportPayload } from '@models/api/exportCSV';\nimport { TouchType } from '@optx/features/alerts/state/interfaces';\n// constants\nimport SORT_ORDER from '@optx/constants/table/sortOrder';\nimport { searchTypeKey } from '@optx/features/grid/search-type/state/constants';\n// services\nimport SearchService from './SearchService';\nimport ApiClient, { API_URL } from './axios-client';\n// utils\nimport { mapSortQuery } from '@optx/utils/search';\nimport { cleanPayload } from '@utils/api/cleanPayload';\n\nclass CompanyService {\n static client: ApiClient = new ApiClient(`${API_URL}/company`);\n\n static getProfile(companyId: number, visited?: boolean) {\n const payload = {\n company_id: companyId,\n ...(visited !== undefined && { visited }),\n };\n\n return CompanyService.client.get<CompanyProfile>(`/profile?${queryString.stringify(payload)}`);\n }\n\n static getPluginPrimaryContact(companyId: number) {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get<CompanyProfile>(\n `/plugin_primary_contact_data?${queryString.stringify(payload)}`\n );\n }\n\n static getUpcomingTouches(payload: { company_id?: string } = {}) {\n let query = queryString.stringify(payload);\n query = query && `?${query}`;\n\n return CompanyService.client.get<Array<UpcomingTouchesNotificationDetails>>(\n `/reminders${query}`\n );\n }\n\n static updateUpcomingTouches = (ids: Array<number>) => {\n return CompanyService.client.put(\n '/reminders/viewed',\n queryString.stringify({ unique_ids: ids }, { arrayFormat: 'comma' })\n );\n };\n\n static sortUpcomingTouches(touchType: TouchType, sorting: string) {\n const payload = {\n tab_name: touchType === 'upcoming' ? 'upcoming_touches' : 'past_due_touches',\n sort_order: sorting,\n };\n\n const query = queryString.stringify(payload);\n\n return CompanyService.client.get<Array<UpcomingTouchesNotificationDetails>>(\n `/reminders?${query}`\n );\n }\n\n static deleteTouch(touchId: number) {\n const payload = {\n unique_id: touchId,\n };\n\n return CompanyService.client.put<void>(`/reminders/dismiss?${queryString.stringify(payload)}`);\n }\n\n static deleteAllTouches(touchType: string) {\n const payload = {\n tab_name: touchType === 'upcoming' ? 'upcoming_touches' : touchType,\n };\n\n const query = queryString.stringify(payload);\n\n return CompanyService.client.put<void>(`/reminders/dismiss_all?${query}`);\n }\n\n static getEmployeeGrowth(companyId: number) {\n const payload = {\n company_id: companyId,\n };\n const query = queryString.stringify(payload);\n\n return CompanyService.client.get(`/employee_growth_series?${query}`);\n }\n\n static revenueGrowth(companyId: number) {\n const payload = {\n company_id: companyId,\n };\n const query = queryString.stringify(payload);\n\n return CompanyService.client.get(`/revenue_growth_series?${query}`);\n }\n\n static getCompaniesInET = (query: string) => {\n return CompanyService.client.get(`/et_merge_history?${query}`);\n };\n\n // Opportunity Presentation\n static getOpportunityPresentation(companyId: number) {\n return CompanyService.client.get(`/presentation/latest?company_id=${companyId}`);\n }\n\n static addYearToOpportunityPresentation(payload: AddYearSuccessPayload) {\n return CompanyService.client.post('/presentation/add_year', payload);\n }\n\n static deleteYearToOpportunityPresentation(query: string) {\n return CompanyService.client.delete(`/presentation/year?${query}`);\n }\n\n static exportPropietaryInfoToExcel(payload: {}) {\n return CompanyService.client.post('/presentation/excel_export', payload, {\n responseType: 'blob',\n });\n }\n\n static addOpportunityPresentation(presentation: UpdateOpportunity | UpdateFieldsPayload) {\n let payload = presentation;\n\n if ('value' in presentation) {\n const fieldName = Object.keys((presentation as UpdateFieldsPayload).value!);\n payload = { company_id: presentation.companyId };\n\n fieldName.forEach(field => {\n payload = {\n ...payload,\n //@ts-ignore\n [field]: (presentation as UpdateFieldsPayload).value![field],\n };\n });\n }\n\n return CompanyService.client.put('/presentation', payload);\n }\n\n // update date presented\n static updateDatePresented(date: CompanyDatePresented | UpdateFieldsPayload) {\n const payload = {\n company_id: date.companyId,\n new_date: (date as CompanyDatePresented).newDate\n ? (date as CompanyDatePresented).newDate\n : (date as UpdateFieldsPayload).value,\n };\n\n const formattedPayload =\n 'value' in date && Array.isArray(date.value) ? payload : queryString.stringify(payload);\n\n return CompanyService.client.put('/presentation/date_presented', formattedPayload);\n }\n\n static updateCompanyData = (payload: UpdateFieldsPayload) => {\n let customPayload = null;\n\n if (payload.customData) {\n customPayload = {\n company_id: payload.companyId,\n ...payload.customData,\n };\n } else {\n const isSelectOption =\n payload.value &&\n typeof payload.value === 'object' &&\n 'label' in payload.value &&\n 'value' in payload.value;\n\n const value =\n payload.fieldKey === 'num_employees' ? (payload.value as number) ?? 'blank' : payload.value;\n\n customPayload = {\n company_id: payload.companyId,\n ...(payload.fieldKey && {\n [payload.fieldKey]: isSelectOption ? (payload.value as SelectOption).value : value,\n }),\n };\n }\n\n return CompanyService.client.post(\n `/update_company_data?${queryString.stringify(customPayload)}`\n );\n };\n\n // addon\n static updateAddon = (payload: UpdateFieldsPayload) => {\n const customPayload = {\n company_id: payload.companyId,\n addon_bool: ((payload as UpdateFieldsPayload).value as CustomValue).value,\n addon_company: Object.keys(\n ((payload as UpdateFieldsPayload).value as CustomValue).optionalValue as Addon\n ),\n };\n\n return CompanyService.client.put(\n `/set_addon?${queryString.stringify(customPayload, { arrayFormat: 'comma' })}`\n );\n };\n\n // addon checkbox\n static updateAddonCheckbox = (companyId: number, addonChecked: boolean) => {\n const payload = {\n company_id: companyId,\n addon_bool: addonChecked,\n };\n\n return CompanyService.client.put(`/set_addon_checkbox?${queryString.stringify(payload)}`);\n };\n\n // portfolio\n static updatePortfolio = (portfolioData: CompanyPortfolio | UpdateFieldsPayload) => {\n const customPayload: CompanyPortfolio = {\n company_id:\n (portfolioData as CompanyPortfolio).company_id ||\n (portfolioData as UpdateFieldsPayload).companyId,\n is_portfolio:\n (portfolioData as CompanyPortfolio).is_portfolio ||\n ((portfolioData as UpdateFieldsPayload).value as unknown as boolean),\n };\n\n return CompanyService.client.post('/portfolio', customPayload);\n };\n\n // equity touch\n static checkEquityTouchAvailability = (companyId: string) =>\n CompanyService.client.get(`/equity_touch/available?company_id=${companyId}`);\n\n static fetchEquityTouchFormData = (payload: { companyId: number; isFirstStep?: boolean }) => {\n const { companyId, isFirstStep } = payload;\n\n return CompanyService.client.get(\n `/equity_touch/form_data?company_id=${companyId}${\n isFirstStep ? `&is_first_step=${isFirstStep}` : ''\n }`\n );\n };\n\n static addEquityTouch = (payload: {\n id: string;\n formData: Dictionary<\n | string\n | EquityTouchSubmitField\n | GroupsSubmitField\n | EquityTouchContactPost[]\n | WatchlistsSubmitField[]\n >;\n }) => {\n const { id } = payload;\n\n return CompanyService.client.post(`/equity_touch?company_id=${id}`, payload.formData);\n };\n\n static addEquityTouchBulk = (\n bulkData: Dictionary<\n string | number | EquityTouchSubmitField | GroupsSubmitField | WatchlistsSubmitField[]\n >[]\n ) => CompanyService.client.post('/equity_touch_bulk', bulkData);\n\n // touches\n static fetchTouches(searchPayload: SearchTouchesPayload) {\n const payload = {\n company_id: searchPayload.companyId,\n per_page: searchPayload.pagination.pageSize,\n page: searchPayload.pagination.pageNumber,\n initiator_id: searchPayload.initiatorId !== '*' ? searchPayload.initiatorId : undefined,\n touch_type: searchPayload.touchType,\n };\n\n return CompanyService.client.get<CompanyTouchesResponse>(\n `/touches?${queryString.stringify(payload)}`\n );\n }\n\n static fetchTouchesFilters = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(`/touches/options?${queryString.stringify(payload)}`);\n };\n\n static addTouches(touch: TouchesCreateForm) {\n const payload = {\n touchId: touch.touchId ? touch.touchId : null,\n editable: true,\n touchType: touch.type,\n date: touch.touchDate,\n time: touch.touchTime[0],\n endDate: touch.touchDate,\n endTime: touch.touchTime[1],\n isComplete: touch.touchType === 'complete',\n initiatorId: touch.initiatorId?.toString(),\n is_optx_id: touch.is_optx_id,\n companyId: touch.companyId.toString(),\n psgParticipants: touch.attendees?.length ? [...touch.attendees] : [],\n externalParticipants: touch.externalAttendees?.length\n ? [...touch.externalAttendees].join().split(',')\n : [],\n subject: touch.subject,\n notesHTML: touch.textarea,\n attachments: null,\n };\n\n return CompanyService.client.put('/touches/upsert_note', payload);\n }\n\n static fetchAddonFilters = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(\n `/addon_management/data_settings?${queryString.stringify(payload)}`\n );\n };\n\n // Update Company Touches Informations\n static updateCompanyInfo(touchFinancialData: Partial<TouchesFinancialPayload>) {\n return CompanyService.client.post('/log_notes', touchFinancialData);\n }\n\n static getCompanyInfo(companyId: string | number) {\n const payload = {\n company_id: companyId.toString(),\n };\n\n return CompanyService.client.get(`/log_notes?${queryString.stringify(payload)}`);\n }\n\n // Update Company Informations\n static updateEditAllCompanyInfo(companyEditAllData: Partial<CompanyEditAllDataPayload>) {\n return CompanyService.client.put('/update_all_fields', companyEditAllData);\n }\n\n static getEditAllCompanyInfo(companyId: string | number) {\n const payload = {\n company_id: companyId.toString(),\n add_favorites_section: true,\n };\n\n return CompanyService.client.get(`/all_fields_tabs?${queryString.stringify(payload)}`);\n }\n\n // export list of companies to CSV\n static exportToCSV = (\n filters: FilterExportPayload,\n body: {\n columns: Dictionary<string>;\n }\n ) => {\n const cleanFilter = cleanPayload(filters);\n\n const headers = {\n responseType: 'blob',\n ...SearchService.searchHeaders.headers,\n };\n\n const updatedBody = {\n ...body,\n ...cleanFilter,\n };\n\n return CompanyService.client.post<string>('/csv_export', updatedBody, {\n headers,\n });\n };\n\n // export list of addons companies to CSV\n static exportCompanyAddonsToCSV = (\n filters: FilterExportPayload,\n body: {\n columns: Dictionary<string>;\n }\n ) => {\n const cleanFilter = cleanPayload(filters);\n\n const headers = {\n responseType: 'blob',\n ...SearchService.searchHeaders.headers,\n };\n const updatedBody = {\n ...body,\n ...cleanFilter,\n };\n\n return CompanyService.client.post<string>('/addon_management/csv_export', updatedBody, {\n headers,\n });\n };\n\n // export list of ETIntegration companies to CSV\n static exportETIntegrationToCSV = (\n query: string,\n body: {\n columns: Dictionary<string>;\n }\n ) => {\n const headers = {\n responseType: 'blob',\n ...SearchService.searchHeaders.headers,\n };\n\n return CompanyService.client.post<string>(`/et_merge_history/csv_export?${query}`, body, {\n headers,\n });\n };\n\n // export list of contacts to CSB\n static exportContactsToCSV = (\n filters: Dictionary<string>,\n body: {\n columns: Dictionary<string>;\n }\n ) => {\n const filterValues = Object.values(filters).filter(item => item !== '');\n const queryString = filterValues.join('&');\n\n const headers = {\n responseType: 'blob',\n ...SearchService.searchHeaders.headers,\n };\n\n return CompanyService.client.post<string>(`/contacts_csv_export?${queryString}`, body, {\n headers,\n });\n };\n\n /**\n * Import favorite list from CSV file.\n * @param payload company import payload.\n */\n static importFavoriteList = (payload: CompanyImportPayload) => {\n const { title } = payload;\n\n return CompanyService.client.put<string>(\n `/csv_import?title=${encodeURIComponent(title)}`,\n payload\n );\n };\n\n // get updated filters and updated histograms\n static getHistograms = (parameters: {\n histogramList: Array<string>;\n filterQuery: Dictionary<PreselectedFilter>;\n companyId?: number;\n filterOrigin?: string;\n }) => {\n const payload: Dictionary<PreselectedFilter> = {};\n\n Object.keys(parameters.filterQuery).forEach(key => {\n payload[key] = parameters.filterQuery[key];\n });\n\n payload.histograms = parameters.histogramList;\n\n const updatedPayload = cleanPayload(payload);\n\n if (parameters.filterOrigin) {\n updatedPayload.filter_origin = parameters.filterOrigin;\n }\n\n if (parameters.companyId) {\n updatedPayload.company_id = parameters.companyId;\n }\n\n return CompanyService.client.post('/getHistograms', updatedPayload);\n };\n\n // get files\n static getFiles({ companyId, sortBy, filters }: FilesPayload) {\n const payload = {\n company_id: companyId,\n sort_field: sortBy[0].id,\n sort_order: sortBy[0].desc ? SORT_ORDER.DESCENDING : SORT_ORDER.ASCENDING,\n ...(filters ? filters : {}),\n };\n\n const query = queryString.stringify(payload, { arrayFormat: 'comma' });\n\n return CompanyService.client.get(`/files?${query}`);\n }\n\n static getFilesDataSettings(companyId: number) {\n const payload = {\n company_id: companyId,\n };\n\n const query = queryString.stringify(payload);\n\n return CompanyService.client.get(`/touches/document_upload/data_settings?${query}`);\n }\n\n // download file\n static downloadFile(data: { id: number; name: string }) {\n const { id, name } = data;\n const payload = {\n file_id: id,\n };\n\n return CompanyService.client\n .get<Blob>(`/files/download?${queryString.stringify(payload)}`, { responseType: 'blob' })\n .then(response => {\n fileDownload(response.data, name);\n\n return response;\n });\n }\n\n static touchesDocumentUpload(payload: TouchesDocumentUploadPayload) {\n return CompanyService.client.post('/touches/document_upload', payload);\n }\n\n static getCompanyFundingRounds = (companyId: number) => {\n return CompanyService.client.get(`/funding_rounds?company_id=${companyId}`);\n };\n\n static getCompanyTabLists = (data: CompanyTabListPaginationState) => {\n const payload = {\n company_id: data.companyId,\n page: data.pageNumber,\n per_page: data.pageSize,\n ...(data.sortBy.length && { sort_by: data.sortBy[0].id }),\n ...(data.sortBy.length && { sort_order: data.sortBy[0].desc ? 'desc' : 'asc' }),\n };\n const query = queryString.stringify(payload);\n\n return CompanyService.client.get(`/list_tab?${query}`);\n };\n\n static getCompaniesContacts(companyIds: number[]) {\n return CompanyService.client.post('/get_companies_primary_contacts', {\n company_ids: companyIds,\n });\n }\n\n // get primary contacts\n static getPrimaryContacts(companyId: string | number) {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(`/get_contacts?${queryString.stringify(payload)}`);\n }\n\n // get PSG primary contacts\n static getPsgContacts() {\n return CompanyService.client.get('/get_contacts?company_id=1&psg=True');\n }\n\n // edit primary contact\n static editPrimaryContact(contact: Partial<CompanyUserContact>) {\n return CompanyService.client.put('/add_contact', contact);\n }\n\n // add new contact\n static addContactToOptx(contact: Partial<CompanyUserContact>) {\n return CompanyService.client.put('/add_contact_to_optx', contact);\n }\n\n // set company primary contact\n static setPrimaryContact(contact: SalesloftEditData) {\n return CompanyService.client.post('/set_contact_as_primary', {\n company_id: contact.company_id,\n person_id: contact.person_id,\n });\n }\n\n // get notes for profile page\n static getProfileNotes(data: FetchNote) {\n const payload = {\n company_id: data.companyId,\n sorting: data.sorting,\n };\n\n return CompanyService.client.get(`/notes?${queryString.stringify(payload)}`);\n }\n\n // pin note\n static pinNote(note: PinNote) {\n const payload = {\n pin_id: note.pinId,\n action: note.action,\n };\n\n return CompanyService.client.post('/notes/pin', queryString.stringify(payload));\n }\n\n // edit note\n static editNote(note: EditNote) {\n const payload = {\n pin_id: note.pinId,\n new_text: note.newText,\n };\n\n return CompanyService.client.put('/notes/edit', queryString.stringify(payload));\n }\n\n // delete profile note\n static deleteProfileNote(pinId: number) {\n const payload = {\n pin_id: pinId,\n };\n\n return CompanyService.client.delete(`/notes/delete?${queryString.stringify(payload)}`);\n }\n\n // fetch optx score growth\n static getScoreGrowth(payload: ScoreGrowth, scoreType?: string) {\n const queryData = {\n company_id: payload.company_id,\n company_url: payload.company_url,\n score: scoreType === 'il' ? scoreType : undefined,\n };\n\n return CompanyService.client.get(`/score_history?${queryString.stringify(queryData)}`);\n }\n\n static getEquityTouchSelectOptions(fields: string | null) {\n return CompanyService.client.get(`/get_et_form_data?${queryString.stringify({ fields })}`);\n }\n\n static updateCompanyRationale = (payload: UpdateFieldsPayload) => {\n const customPayload = {\n company_id: payload.companyId,\n rationale: payload.value?.toString() || payload.rationale?.toString() || 'blank',\n };\n\n return CompanyService.client.post(\n `/update_company_data?${queryString.stringify(customPayload)}`\n );\n };\n\n static updateCompanyNumOfEmployees = (payload: UpdateFieldsPayload) => {\n const customPayload = {\n company_id: payload.companyId,\n number_employees: (payload.value as number) || 'blank',\n };\n\n return CompanyService.client.post(\n `/update_company_data?${queryString.stringify(customPayload)}`\n );\n };\n\n /**\n * Delete company user added tag.\n * Tags added by the system can't be deleted.\n * @param id tag identifier.\n * @param companyId company identifier.\n */\n static deleteTag = (id: number, companyId: number) => {\n const queryPayload = {\n company_id: companyId,\n tag_id: id,\n };\n const query = queryString.stringify(queryPayload);\n\n return CompanyService.client.delete(`/tags?${query}`);\n };\n\n static bulkEdit = (\n companyIds: number[],\n field: SelectedCompaniesKeys,\n fieldValue: string | string[] | number,\n extraOptions?: Dictionary<string>\n ) => {\n const payload = {\n company_id: companyIds,\n [field === 'cs_tags' ? 'tags' : field]: fieldValue,\n ...extraOptions,\n };\n\n return CompanyService.client.post(\n `/bulk_update_company_data?${queryString.stringify(payload, { arrayFormat: 'comma' })}`\n );\n };\n\n static getBulkEditData = (companyIds: number[]) => {\n const payload = {\n company_id: companyIds,\n };\n\n return CompanyService.client.post(\n `/equity_touch/get_et_data?${queryString.stringify(payload, { arrayFormat: 'comma' })}`\n );\n };\n\n static bulkRemoveAddon = (payload: BulkRemoveAddonPayload[]) => {\n return CompanyService.client.put('/bulk_remove_company_addon', payload);\n };\n\n static getCompanyMerges = (searchPayload: CompanyMergesPayload) => {\n const payload = {\n company_id: searchPayload.companyId,\n page: searchPayload.page,\n };\n\n return CompanyService.client.get<CompanyMergesResponse>(\n `/merge_history?${queryString.stringify(payload)}`\n );\n };\n\n // SOCIAL MEDIA\n\n static getCompanySocialMediaWebsiteRank = (searchPayload: WebsiteRankPayload) => {\n const payload = {\n company_id: searchPayload.companyId,\n us_only: searchPayload.usOnly,\n };\n\n return CompanyService.client.get(\n `/social_media_website_rank?${queryString.stringify(payload)}`\n );\n };\n\n static getCompanySocialMediaG2 = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(`/social_media_g2?${queryString.stringify(payload)}`);\n };\n\n static getCompanySocialMediaCapterra = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(`/social_media_capterra?${queryString.stringify(payload)}`);\n };\n\n static getCompanySocialMediaTwitter = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(`/social_media_twitter?${queryString.stringify(payload)}`);\n };\n\n static getCompanySocialMediaLinkedin = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(`/social_media_linkedin?${queryString.stringify(payload)}`);\n };\n\n static getCompanySocialMediaFacebook = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(`/social_media_facebook?${queryString.stringify(payload)}`);\n };\n\n static getCompanySocialMediaCrunchbase = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(`/social_media_crunchbase?${queryString.stringify(payload)}`);\n };\n\n static getCompanySocialMediaGlassdoor = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(`/social_media_glassdoor?${queryString.stringify(payload)}`);\n };\n\n static fetchCompanyChangedFields = (searchPayload: ChangedCompanyFieldsPayload) => {\n const payload = {\n company_id: searchPayload.companyId,\n start_date: searchPayload.startDate,\n end_date: searchPayload.endDate,\n internal: searchPayload.internal,\n optx: searchPayload.optx,\n field: searchPayload.field,\n page: searchPayload.pagination.pageNumber,\n per_page: searchPayload.pagination.pageSize,\n };\n\n return CompanyService.client.get(`/history/fields?${queryString.stringify(payload)}`);\n };\n\n // update LinkedIn URL\n\n static updateLinkedinURL = (payload: UpdateFieldsPayload) => {\n const customPayload = {\n linkedin_url: payload.value,\n entity_type: payload.entityType,\n id: payload.companyId,\n };\n\n return CompanyService.client.post('/edit_linkedin_url', customPayload);\n };\n\n // Extension\n static getExtensionCompanies = (companyURL: string) => {\n return CompanyService.client.get(`/extension_url?company_url=${companyURL}`);\n };\n\n static fetchCompanyAddonManagement = (searchPayload: AddonManagementPayload) => {\n const cleanFilter = cleanPayload(searchPayload.filter);\n const { sortBy, pagination } = searchPayload;\n\n const convertSortBy = mapSortQuery(sortBy);\n const pageNumber = pagination.pageNumber;\n const pageSize = searchPayload.perPage ? searchPayload.perPage : pagination.pageSize;\n\n const payload = {\n company_id: searchPayload.companyId,\n ...cleanFilter,\n ...convertSortBy,\n page: pageNumber,\n per_page: pageSize,\n per_multiple_pages: searchPayload.perMultiplePages\n ? searchPayload.perMultiplePages\n : undefined,\n ...(searchPayload.searchKey && searchPayload.searchType\n ? { [searchTypeKey[searchPayload.searchType]]: searchPayload.searchKey }\n : {}),\n };\n\n return CompanyService.client.post('/addon_management', payload);\n };\n\n static fetchCompanyAddonManagementCount = (searchPayload: AddonManagementCountPayload) => {\n const cleanFilter = cleanPayload(searchPayload.filter);\n\n const { sortBy } = searchPayload;\n\n const convertSortBy = mapSortQuery(sortBy);\n\n const payload = {\n company_id: searchPayload.companyId,\n ...cleanFilter,\n ...convertSortBy,\n ...(searchPayload.searchKey && searchPayload.searchType\n ? { [searchTypeKey[searchPayload.searchType]]: searchPayload.searchKey }\n : {}),\n };\n\n return CompanyService.client.post('/addon_management/count', payload);\n };\n\n static fetchRelationshipManagement = (companyId: number) => {\n const payload = {\n company_id: companyId,\n };\n\n return CompanyService.client.get(`/relationship_management?${queryString.stringify(payload)}`);\n };\n\n static fetchRegenerateAiDescription = (searchPayload: RegenerateAiDescription) => {\n const payload = {\n company_id: searchPayload.companyId,\n company_name: searchPayload.companyName,\n company_url: searchPayload.companyUrl,\n };\n\n return CompanyService.client.get(\n `/ai_description/regenerate?${queryString.stringify(payload)}`\n );\n };\n\n static fetchOpinionAiDescription = (searchPayload: OpinionAiDescription) => {\n const body = {\n company_id: searchPayload.companyId,\n company_name: searchPayload.companyName,\n company_url: searchPayload.companyUrl,\n opinion_type: searchPayload.opinion,\n };\n\n return CompanyService.client.put('/ai_description/opinion', body);\n };\n\n static addCompany = (payload: AddCompanyPayload) => {\n return CompanyService.client.post('/create_company', payload);\n };\n\n static fetchAiRelationshipSummary = (searchPayload: AiRelationshipSummary) => {\n const body: {\n company_id: number;\n company_name: string;\n opinion_status: boolean;\n company_url: string | null;\n company_owner?: string;\n } = {\n company_id: searchPayload.companyId,\n company_name: searchPayload.companyName,\n opinion_status: searchPayload.opinion,\n company_url: searchPayload.companyUrl,\n };\n\n if (searchPayload.companyOwner) {\n body.company_owner = searchPayload.companyOwner;\n }\n\n return CompanyService.client.put('/ai_highlights/opinion', body);\n };\n}\n\nexport default CompanyService;\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\nimport { errorSelector } from '@optx/redux/feature/fetch/selectors';\n\nconst getCompanyProfileState = (state: AppState) => state.companyProfile;\n\nexport const shouldInitialFetch = createSelector(getCompanyProfileState, state => !state.loading);\n\nexport const getError = createSelector(getCompanyProfileState, errorSelector);\n\nexport const getSelectedDescription = createSelector(\n getCompanyProfileState,\n state => state.data?.selectedDescription\n);\n\nexport const isLoading = createSelector(getCompanyProfileState, state => state.loading);\n\nexport const getProfile = createSelector(getCompanyProfileState, state => state.data);\n\nexport const getProfileProductCategory = createSelector(getCompanyProfileState, state =>\n state.data ? state.data.product_category : ''\n);\n\nexport const getProfileContacts = createSelector(getCompanyProfileState, state =>\n state.data ? state.data.contacts : []\n);\n\nexport const getProfileOptxScore = createSelector(getCompanyProfileState, state =>\n state.data ? state.data.score : null\n);\n\nexport const getCompanySources = createSelector(getCompanyProfileState, state =>\n state.data ? state.data.sources : []\n);\n\nexport const getIsInBusiness = createSelector(\n getCompanyProfileState,\n state => state.data?.is_in_business || false\n);\n\nexport const getCompanyId = createSelector(getCompanyProfileState, state => state.data?.company_id);\nexport const getCompanyUrl = createSelector(\n getCompanyProfileState,\n state => state.data?.company_url\n);\n\nexport const getCompanyName = createSelector(\n getCompanyProfileState,\n state => state.data?.company_name || ''\n);\n","import { ColumnType } from 'antd/lib/table';\n// constants\nimport globalConfig from '@optx/constants/config';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport {\n YEARS_LABELS,\n generateArrCurrentColumnKey,\n generateArrPast1YearColumnKey,\n generateEbitdaCurrentColumnKey,\n generateEbitdaPast1YearColumnKey,\n generateGrowthCurrentColumnKey,\n generateGrowthPast1YearColumnKey,\n} from '@optx/constants/search';\nimport {\n DEFAULT_CELL_VALUE,\n DEFAULT_LAST_TOUCH,\n DEFAULT_NEXT_TOUCH,\n} from '@optx/constants/table/cells';\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\nimport { NEXT_STEPS_OPINION_ENDPOINT } from '@constants/asyncEndpoints';\n// models\nimport { CompanyKeys } from '@optx/models/table/Columns';\nimport Company, {\n CompanyProfile,\n CompanySourceTag,\n URLStatus,\n ProductCategory,\n CompanyUserValuesKeys,\n} from '@optx/models/Company';\n// constants\nimport { ManageMyPipeline } from '@constants/pendoActions';\n// utils\nimport { roundNumber } from '@optx/utils/number';\n// components\nimport {\n EditFieldMultiSelect,\n EditFieldMultiSelectAsyncProductCategory,\n EditFieldMultiSelectAsyncCreatable,\n EditFieldRadio,\n EditFieldSingleSelect,\n EditFieldCheckboxText,\n EditFieldSingleSelectOther,\n EditFieldText,\n EditFieldDate,\n EditFieldTextarea,\n} from '@optx/features/company/edit-fields/components';\nimport { CompanyService, UserService } from '@optx/services/api';\nimport {\n TableCellListDefault,\n TableCellNumber,\n TableCellDate,\n TableCellFormatMoney,\n TableCellListDate,\n} from '@optx/components/common/table/AntTable/cells';\nimport {\n TableCellActions,\n TableCellPercentageGrowth,\n TableCellStringList,\n TableCellDescription,\n TableCellScoreAdmin,\n TableCellRadioAdmin,\n TableCellOPTXScore,\n TableCellInvestors,\n TableCellAddon,\n TableCellNewMatched,\n TableCellDealTeams,\n} from '@optx/components/common/table/Companies/cells';\nimport {\n TableCellName,\n TableCellCompanyURL,\n} from '@optx/components/common/table/Companies/styled-cells';\nimport { TableCellEditFinancialField } from '../cells/TableCellEditFinancialField';\nimport TableCellDefaultRender from '../../AntTable/cells/TableCellDefault';\n\nexport interface CompanyColumnType extends ColumnType<CompanyProfile> {\n dataIndex: CompanyKeys;\n}\n\nexport const columns: Array<CompanyColumnType> = [\n {\n dataIndex: 'company_url',\n title: '',\n className: 'company_url',\n render: (value: string | null, record: Company, index: number) => (\n <TableCellCompanyURL value={value} record={record} />\n ),\n width: 42,\n fixed: 'left',\n align: 'center',\n },\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n className: 'company_name',\n sorter: true,\n render: (value: string, record: CompanyProfile, index: number) => (\n <TableCellName value={value} record={record} />\n ),\n width: 240,\n fixed: 'left',\n ellipsis: true,\n },\n {\n dataIndex: 'score',\n title: 'OPTX Score',\n className: 'score',\n sorter: true,\n width: 150,\n render: (value: number, record: Company) => (\n <TableCellScoreAdmin record={record}>\n <TableCellOPTXScore company={record} />\n </TableCellScoreAdmin>\n ),\n fixed: 'left',\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'score_v3',\n title: 'OPTX Score BETA',\n className: 'score_v3',\n sorter: true,\n width: 150,\n render: (value: number, record: Company) => (\n <TableCellScoreAdmin record={record} isNewScore>\n <TableCellOPTXScore company={record} isNewScore />\n </TableCellScoreAdmin>\n ),\n fixed: 'left',\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'il_optx_score',\n title: 'IL OPTX Score',\n className: 'il_optx_score',\n sorter: true,\n width: 150,\n render: (value: number, record: Company) => (\n <TableCellScoreAdmin record={record}>\n <TableCellOPTXScore company={record} />\n </TableCellScoreAdmin>\n ),\n fixed: 'left',\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'sub_sector',\n title: 'Sub-sector',\n className: 'sub_sector',\n sorter: true,\n render: (value: string, company: Company) => (\n <EditFieldSingleSelect\n isFromGrid\n value={value === 'None' ? DEFAULT_EMPTY_VALUE : value}\n record={company}\n service={CompanyService.updateCompanyData}\n successMessage=\"Company sub-sector updated successfully!\"\n errorMessage=\"Company sub-sector update failed, Server error!\"\n fieldName=\"Sub-Sector\"\n fieldKey=\"sub_sector\"\n />\n ),\n width: 100,\n ellipsis: true,\n },\n {\n dataIndex: 'parentcompany',\n className: 'parentcompany',\n title: 'Parent Company',\n sorter: true,\n render: TableCellDefaultRender,\n width: 240,\n fixed: false,\n ellipsis: true,\n },\n {\n dataIndex: 'is_in_et',\n title: 'In Equity Touch',\n className: 'is_in_et',\n sorter: true,\n render: (value: boolean, record: Company, index: number) => (value ? 'Yes' : 'No'),\n width: 85,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'company_description',\n title: 'Description',\n className: 'company_description',\n sorter: false,\n render: (value: string, record: Company, index: number) => (\n <TableCellDescription value={value} record={record} />\n ),\n width: 520,\n ellipsis: true,\n },\n {\n dataIndex: 'year_founded',\n title: 'Year Founded',\n className: 'year_founded',\n sorter: true,\n width: 90,\n align: 'left',\n ellipsis: true,\n render: (value: boolean | null, record: Company, index: number) => (\n <EditFieldSingleSelect\n fieldName=\"Year Founded\"\n fieldKey=\"year_founded\"\n value={record.year_founded === 'None' ? DEFAULT_CELL_VALUE : record.year_founded}\n record={record}\n service={CompanyService.updateCompanyData}\n successMessage=\"Company year founded updated successfully!\"\n errorMessage=\"Company year founded update failed, Server error!\"\n isFromGrid\n />\n ),\n },\n {\n dataIndex: 'is_software',\n title: 'Software',\n className: 'is_software',\n sorter: true,\n width: 85,\n render: (value: boolean | null, record: Company, index: number) => (\n <TableCellRadioAdmin\n value={value}\n record={record}\n fieldName=\"Software Company\"\n service={UserService.addCompanySoftwareEvaluation}\n successMessage=\"Company software company updated successfully!\"\n errorMessage=\"Failed to update value!\"\n destroyOnHide\n isFromGrid\n />\n ),\n },\n {\n dataIndex: 'is_interesting',\n title: 'PSG Fit',\n className: 'is_interesting',\n sorter: true,\n render: (value: boolean | null, record: Company, index: number) => (\n <TableCellRadioAdmin\n value={value}\n record={record}\n fieldName=\"PSG Fit\"\n service={UserService.updateFitEvaluation}\n successMessage=\"Company PSG fit updated successfully!\"\n errorMessage=\"Failed to update value!\"\n destroyOnHide\n isFromGrid\n />\n ),\n width: 110,\n align: 'center',\n ellipsis: true,\n },\n {\n dataIndex: 'diversity',\n title: 'Diversity Spotlight',\n className: 'diversity',\n sorter: true,\n render: TableCellStringList,\n width: 200,\n ellipsis: true,\n },\n {\n dataIndex: 'addon_bool',\n title: 'Show Add-Ons',\n className: 'addon_bool',\n sorter: true,\n render: (value: boolean) => (value ? 'Yes' : 'No'),\n width: 150,\n ellipsis: true,\n },\n {\n dataIndex: 'addon',\n title: 'Add-On for a Specific Company',\n className: 'addon',\n sorter: true,\n render: (value, record) => <TableCellAddon value={value} record={record} />,\n width: 200,\n ellipsis: true,\n },\n {\n dataIndex: 'company_owner',\n title: 'Company Owner',\n className: 'company_owner',\n sorter: true,\n render: (value: string | null, record: Company) =>\n record.source_tag.includes('et') ? (\n <EditFieldSingleSelect\n isFromGrid\n value={value}\n record={record}\n fieldName=\"Company Owner\"\n fieldKey=\"deal_team_leader\"\n successMessage=\"Company owner updated successfully!\"\n errorMessage=\"Company owner update failed, Server error!\"\n service={CompanyService.updateCompanyData}\n actionPendo={ManageMyPipeline.myCompanies.editOwner}\n />\n ) : (\n value\n ),\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'psg_attendees',\n title: 'PSG Attendees',\n className: 'psg_attendees',\n sorter: true,\n render: (value: string[], record: Company) => (\n <TableCellListDefault value={value} record={record} />\n ),\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'senior_advisor_thesis',\n title: 'Senior Advisor Thesis',\n className: 'senior_advisor_thesis',\n sorter: true,\n render: (value: string | null, record: Company) =>\n record.source_tag.includes('et') ? (\n <EditFieldSingleSelect\n isFromGrid\n value={value}\n record={record}\n fieldName=\"Senior Advisor Thesis\"\n successMessage=\"Senior Advisor Thesis updated successfully!\"\n errorMessage=\"Senior Advisor Thesis update failed, Server error!\"\n service={CompanyService.updateCompanyData}\n fieldKey=\"senior_advisor_thesis\"\n />\n ) : (\n value\n ),\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'lead_source',\n title: 'Lead Source',\n className: 'lead_source',\n sorter: true,\n render: (value: string | null, record: Company) =>\n record.source_tag.includes('et') ? (\n <EditFieldSingleSelect\n isFromGrid\n value={value}\n record={record}\n service={CompanyService.updateCompanyData}\n successMessage=\"Lead Source updated successfully!\"\n errorMessage=\"Lead Source update failed, Server error!\"\n fieldName=\"Lead Source\"\n fieldKey=\"lead_source\"\n />\n ) : (\n value\n ),\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'pipeline_rank',\n title: 'Pipeline Rank',\n className: 'pipeline_rank',\n sorter: true,\n render: (value: number, record: Company) =>\n record.source_tag.includes('et') ? (\n <EditFieldSingleSelect\n isFromGrid\n fieldName=\"Pipeline Rank\"\n value={value}\n service={CompanyService.updateCompanyData}\n successMessage=\"Pipeline rank updated successfully!\"\n errorMessage=\"Pipeline rank update failed, Server error!\"\n record={record}\n fieldKey={'rank' as CompanyUserValuesKeys}\n actionPendo={ManageMyPipeline.myCompanies.editPipelineRank}\n />\n ) : (\n <span className=\"not_editable\">{value}</span>\n ),\n width: 85,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'stage',\n title: 'Stage',\n className: 'stage',\n sorter: true,\n render: (value: string, record: Company) =>\n record.source_tag.includes('et') ? (\n <EditFieldSingleSelect\n isFromGrid\n service={CompanyService.updateCompanyData}\n fieldName=\"Stage\"\n value={value}\n successMessage=\"Company stage updated successfully!\"\n errorMessage=\"Company stage update failed, Server error!\"\n record={record}\n fieldKey=\"stage\"\n actionPendo={ManageMyPipeline.myCompanies.editStage}\n />\n ) : (\n value\n ),\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'fund',\n title: 'Fund',\n className: 'fund',\n sorter: true,\n render: (value: string | null, record: Company) =>\n record.source_tag.includes('et') ? (\n <EditFieldSingleSelect\n isFromGrid\n fieldName=\"Fund\"\n fieldKey=\"fund\"\n service={CompanyService.updateCompanyData}\n value={value}\n successMessage=\"Company fund updated successfully!\"\n errorMessage=\"Company fund update failed, Server error!\"\n record={record}\n />\n ) : (\n value\n ),\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'num_employees',\n title: 'Number of Employees',\n className: 'num_employees',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldText\n value={value}\n record={record}\n isFromGrid\n service={CompanyService.updateCompanyData}\n fieldName=\"Number of Employees\"\n actionPendo={ManageMyPipeline.myCompanies.numberOfEmployees}\n />\n ),\n width: 140,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'emp_growth_percent',\n title: 'Employee Growth Percentage Y/Y',\n className: 'emp_growth_percent',\n sorter: true,\n render: (value: number | string, record: Company, index: number) =>\n value !== null && value !== '-' ? (\n <TableCellPercentageGrowth value={value} record={record} />\n ) : (\n DEFAULT_EMPTY_VALUE\n ),\n width: 150,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'job_openings',\n title: 'Job Openings',\n className: 'job_openings',\n sorter: true,\n width: 90,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'job_openings_percent',\n title: 'Job Openings %',\n className: 'job_openings_percent',\n sorter: true,\n render: (value: string, record: Company, index: number) => (\n <TableCellPercentageGrowth value={value} record={record} />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'sw_website_rank',\n title: 'WW Website Rank',\n className: 'sw_website_rank',\n sorter: true,\n render: (value: string, record: Company, index: number) => (\n <TableCellNumber value={value} record={record} />\n ),\n width: 140,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'sw_website_rank_per_country',\n title: 'US Website Rank',\n className: 'sw_website_rank_per_country',\n sorter: true,\n render: (value: string, record: Company, index: number) => (\n <TableCellNumber value={value} record={record} />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'opportunity_type',\n title: 'Opportunity Type',\n className: 'opportunity_type',\n sorter: true,\n width: 110,\n ellipsis: true,\n render: (value: string, company: Company) =>\n company.source_tag.includes('et') ? (\n <EditFieldSingleSelect\n isFromGrid\n service={CompanyService.updateCompanyData}\n fieldName=\"Opportunity Type\"\n fieldKey=\"opportunity_type\"\n value={value}\n successMessage=\"Opportunity Type updated successfully!\"\n errorMessage=\"Opportunity Type update failed, Server error!\"\n record={company}\n />\n ) : (\n value\n ),\n },\n {\n dataIndex: 'company_type',\n title: 'Company Type',\n className: 'company_type',\n sorter: true,\n width: 110,\n ellipsis: true,\n render: (value: string, company: Company) => (\n <EditFieldSingleSelect\n isFromGrid\n service={CompanyService.updateCompanyData}\n fieldName=\"Company Type\"\n fieldKey=\"company_type\"\n value={company.company_type || DEFAULT_EMPTY_VALUE}\n successMessage=\"Company Type updated successfully!\"\n errorMessage=\"Company Type update failed, Server error!\"\n record={company}\n />\n ),\n },\n {\n dataIndex: 'customer_type',\n title: 'Customer Type',\n className: 'customer_type',\n sorter: true,\n render: (value: string[], record: CompanyProfile) => (\n <EditFieldMultiSelect\n record={record}\n fieldName=\"Customer Type\"\n isFromGrid={true}\n successMessage=\"Customer Type updated successfully!\"\n errorMessage=\"Customer Type update failed, Server error!\"\n value={value}\n destroyOnHide={true}\n fieldRationaleValue={\n // temporary added to the condition checking on 'undefined' value\n // while api will make migration and bring this field to the Company object\n record.customer_other_rationale === undefined ? '' : record.customer_other_rationale\n }\n />\n ),\n width: 110,\n align: 'left',\n ellipsis: true,\n },\n {\n dataIndex: 'sales_and_marketing',\n title: 'Sales & Marketing',\n className: 'sales_and_marketing',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldSingleSelect\n isFromGrid\n value={value || DEFAULT_EMPTY_VALUE}\n record={record}\n fieldName=\"Sales and Marketing\"\n successMessage=\"Sales and Marketing updated successfully!\"\n errorMessage=\"Sales and Marketing update failed, Server error!\"\n fieldKey=\"sales_and_marketing\"\n />\n ),\n width: 190,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'sales_cycle',\n title: 'Sales Cycle',\n className: 'sales_cycle',\n sorter: true,\n render: (value: number, company: CompanyProfile) => (\n <EditFieldMultiSelect\n fieldName=\"Sales Cycle\"\n record={company}\n isFromGrid={true}\n successMessage=\"Sales Cycle updated successfully!\"\n errorMessage=\"Sales Cycle update failed, Server error!\"\n value={company.sales_cycle}\n destroyOnHide={true}\n />\n ),\n width: 130,\n align: 'left',\n ellipsis: true,\n },\n {\n dataIndex: 'delivery_model',\n title: 'Delivery Model',\n className: 'delivery_model',\n sorter: true,\n render: (value: number, company: CompanyProfile) => (\n <EditFieldMultiSelect\n fieldName=\"Delivery Model\"\n record={company}\n isFromGrid={true}\n successMessage=\"Delivery Model updated successfully!\"\n errorMessage=\"Delivery Model update failed, Server error!\"\n value={company.delivery_model}\n destroyOnHide={true}\n />\n ),\n width: 130,\n align: 'left',\n ellipsis: true,\n },\n {\n dataIndex: 'cloud_provider',\n title: 'Cloud Provider',\n className: 'cloud_provider',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return (\n <EditFieldSingleSelect\n isFromGrid\n value={record.cloud_provider || DEFAULT_EMPTY_VALUE}\n record={record}\n fieldName=\"Cloud Provider\"\n successMessage=\"Cloud Provider updated successfully!\"\n errorMessage=\"Cloud Provider update failed, Server error!\"\n fieldKey={'cloud_provider' as CompanyUserValuesKeys}\n />\n );\n },\n width: 100,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'architecture',\n title: 'Architecture',\n className: 'architecture',\n sorter: true,\n render: (value: number, company: CompanyProfile) => (\n <EditFieldMultiSelect\n fieldName=\"Architecture\"\n record={company}\n isFromGrid={true}\n successMessage=\"Architecture updated successfully!\"\n errorMessage=\"Architecture update failed, Server error!\"\n value={company.architecture}\n destroyOnHide={true}\n />\n ),\n width: 130,\n align: 'left',\n ellipsis: true,\n },\n\n {\n dataIndex: 'sector',\n title: 'Sector',\n className: 'sector',\n sorter: true,\n render: (value: string, company: Company) => (\n <EditFieldSingleSelect\n isFromGrid\n fieldName=\"Sector\"\n fieldKey=\"sector\"\n value={value === 'None' ? DEFAULT_EMPTY_VALUE : value}\n service={CompanyService.updateCompanyData}\n successMessage=\"Company sector updated successfully!\"\n errorMessage=\"Company sector update failed, Server error!\"\n record={company}\n />\n ),\n width: 100,\n ellipsis: true,\n },\n {\n dataIndex: 'product_category',\n title: 'Product Category',\n className: 'product_category',\n sorter: true,\n render: (value: ProductCategory[], company: Company) => (\n <EditFieldMultiSelectAsyncProductCategory\n fieldName=\"Product Category\"\n value={value}\n record={company}\n service={CompanyService.updateCompanyData}\n fieldKey=\"product_category\"\n asyncSearchEndpoint=\"/search/company_product_category\"\n successMessage=\"Product category updated successfully!\"\n isFromGrid\n />\n ),\n width: 100,\n ellipsis: true,\n },\n\n {\n dataIndex: 'sub_vertical',\n title: 'Sub Vertical',\n className: 'sub_vertical',\n sorter: true,\n render: (value: string[], company: Company) => (\n <EditFieldMultiSelectAsyncCreatable\n fieldName=\"Sub Vertical\"\n value={value}\n record={company}\n service={UserService.subVertical}\n fieldKey={'sub_vertical' as CompanyUserValuesKeys}\n asyncSearchEndpoint=\"/search/sub_vertical\"\n successMessage=\"Sub Vertical updated successfully!\"\n errorMessage=\"Sub Vertical update failed, Server error!\"\n isFromGrid\n />\n ),\n width: 250,\n ellipsis: true,\n },\n {\n dataIndex: 'raise_date',\n title: 'Last Funding Date',\n className: 'raise_date',\n sorter: true,\n render: (value: string, record: CompanyProfile) => (\n <EditFieldDate\n value={value}\n fieldKey=\"raise_date\"\n fieldName=\"Last Funding Date\"\n service={UserService.updateCompanyUserValues}\n isFromGrid\n record={record}\n destroyOnHide\n format={globalConfig.grid_date.DATE_FORMAT}\n actionPendo={ManageMyPipeline.myCompanies.lastFunding}\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'last_round',\n title: 'Last Round',\n className: 'last_round',\n sorter: true,\n render: TableCellDefaultRender,\n width: 115,\n ellipsis: true,\n },\n {\n dataIndex: 'last_raised_amount',\n title: 'Last Raised Amount',\n className: 'last_raised_amount',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <EditFieldText\n value={value}\n record={record}\n isFromGrid\n service={UserService.updateCompanyUserValues}\n fieldName=\"Last Raised Amount\"\n actionPendo={ManageMyPipeline.myCompanies.lastRaisedAmount}\n />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'active_investors',\n title: 'Active Investors',\n className: 'active_investors',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <TableCellInvestors value={value} record={record} />\n ),\n width: 200,\n ellipsis: true,\n },\n {\n dataIndex: 'capital_raised',\n title: 'Total Raised',\n className: 'capital_raised',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <EditFieldText\n value={value}\n record={record}\n isFromGrid\n service={UserService.updateCompanyUserValues}\n fieldName=\"Capital Raised\"\n actionPendo={ManageMyPipeline.myCompanies.totalRaised}\n />\n ),\n width: 210,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'last_valuation',\n title: 'Valuation',\n className: 'last_valuation',\n sorter: true,\n render: (value: number, record: Company, index: number) => (\n <TableCellFormatMoney\n value={value}\n record={record}\n formatValue={val => roundNumber(val, `$${NUMBER_FORMAT}`).toUpperCase()}\n />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'date_presented',\n title: 'Date Presented',\n className: 'date_presented',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return (\n <EditFieldDate\n record={record}\n value={record.date_presented}\n fieldKey=\"date_presented\"\n isFromGrid\n service={CompanyService.updateDatePresented}\n successMessage=\"Success updating company presentation!\"\n fieldName=\"Date Presented\"\n format={globalConfig.grid_date.DATE_FORMAT}\n destroyOnHide\n />\n );\n },\n width: 200,\n ellipsis: true,\n },\n {\n dataIndex: 'deal_type',\n title: 'Deal Type',\n className: 'deal_type',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldSingleSelect\n isFromGrid\n value={value || DEFAULT_EMPTY_VALUE}\n record={record}\n fieldName=\"Deal Type\"\n successMessage=\"Deal Type updated successfully!\"\n errorMessage=\"Deal Type update failed, Server error!\"\n service={CompanyService.addOpportunityPresentation}\n fieldKey={'deal_type' as CompanyUserValuesKeys}\n />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'banker_name',\n title: 'Banker',\n className: 'banker_name',\n sorter: true,\n render: (value: number, company: CompanyProfile) => (\n <EditFieldCheckboxText\n companyId={company.company_id}\n checkboxKey=\"banker\"\n textInputKey=\"banker_name\"\n checkValue={(company.banker as boolean) ?? null}\n textValue={company.banker_name ?? undefined}\n isFromGrid\n isCheckbox\n />\n ),\n width: 130,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'asking_amount',\n title: 'Equity Check (Ask Amount)',\n className: 'asking_amount',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldText record={record} value={value} isFromGrid fieldName=\"Asking Amount\" />\n ),\n\n width: 200,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'last_arr_value',\n title: 'ARR',\n className: 'last_arr_value',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"annual_recurring_revenue\"\n fieldName=\"ARR\"\n filterName=\"last_arr_value\"\n service={CompanyService.addOpportunityPresentation}\n isFromGrid={true}\n />\n ),\n width: 100,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: generateArrPast1YearColumnKey,\n title: `${YEARS_LABELS['past 1 year']} ARR`,\n className: generateArrPast1YearColumnKey,\n align: 'right',\n width: 150,\n sorter: true,\n ellipsis: true,\n render: (value: number | string | undefined, record: Company) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"annual_recurring_revenue\"\n fieldName=\"ARR\"\n filterName=\"last_arr_value\"\n service={CompanyService.addOpportunityPresentation}\n isFromGrid={true}\n customFinancialYear={Number(YEARS_LABELS['past 1 year'])}\n />\n ),\n },\n {\n dataIndex: generateArrCurrentColumnKey,\n title: `${YEARS_LABELS.current} ARR`,\n className: generateArrCurrentColumnKey,\n align: 'right',\n width: 150,\n sorter: true,\n ellipsis: true,\n render: (value: number | string | undefined, record: Company) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"annual_recurring_revenue\"\n fieldName=\"ARR\"\n filterName=\"last_arr_value\"\n service={CompanyService.addOpportunityPresentation}\n isFromGrid={true}\n customFinancialYear={Number(YEARS_LABELS.current)}\n />\n ),\n },\n {\n dataIndex: 'last_rev_update_amount',\n title: 'Revenue',\n className: 'last_rev_update_amount',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"revenue_list\"\n fieldName=\"Revenue\"\n filterName=\"last_rev_update_amount\"\n extraKeys={['last_rev_update_amount', 'last_rev_update_year']}\n service={UserService.updateCompanyUserValues}\n isFromGrid={true}\n actionPendo={ManageMyPipeline.myCompanies.revenueYear}\n />\n ),\n width: 130,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'last_rev_growth',\n title: 'Growth %',\n className: 'last_rev_growth',\n sorter: true,\n width: 100,\n align: 'left',\n ellipsis: true,\n render: (value: number | string, record: Company, index: number) =>\n value !== null && value !== undefined && value !== DEFAULT_EMPTY_VALUE ? (\n <TableCellPercentageGrowth value={value} record={record} />\n ) : (\n DEFAULT_EMPTY_VALUE\n ),\n },\n {\n dataIndex: generateGrowthPast1YearColumnKey,\n title: `${YEARS_LABELS['past 1 year']} Growth %`,\n className: generateGrowthPast1YearColumnKey,\n sorter: true,\n width: 100,\n align: 'left',\n ellipsis: true,\n render: (value: number | string | undefined, record: Company, index: number) =>\n value !== null && value !== undefined && value !== DEFAULT_EMPTY_VALUE ? (\n <TableCellPercentageGrowth value={value} record={record} />\n ) : (\n DEFAULT_EMPTY_VALUE\n ),\n },\n {\n dataIndex: generateGrowthCurrentColumnKey,\n title: `${YEARS_LABELS.current} Growth %`,\n className: generateGrowthCurrentColumnKey,\n sorter: true,\n width: 100,\n align: 'left',\n ellipsis: true,\n render: (value: number | string | undefined, record: Company, index: number) =>\n value !== null && value !== undefined && value !== DEFAULT_EMPTY_VALUE ? (\n <TableCellPercentageGrowth value={value} record={record} />\n ) : (\n DEFAULT_EMPTY_VALUE\n ),\n },\n {\n dataIndex: 'last_gross_margin',\n title: 'GM %',\n className: 'last_gross_margin',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"gross_margin_list\"\n fieldName=\"GM %\"\n filterName=\"last_gross_margin\"\n service={CompanyService.addOpportunityPresentation}\n isFromGrid={true}\n />\n ),\n width: 100,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'ebitda_amount',\n title: 'EBITDA ',\n className: 'ebitda_amount',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"ebitda_list\"\n fieldName=\"EBITDA\"\n filterName=\"ebitda_numeric\"\n extraKeys={['ebitda_amount', 'ebitda_year']}\n service={UserService.updateCompanyUserValues}\n isFromGrid={true}\n />\n ),\n width: 100,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: generateEbitdaPast1YearColumnKey,\n title: `${YEARS_LABELS['past 1 year']} EBITDA`,\n className: generateEbitdaCurrentColumnKey,\n align: 'right',\n width: 150,\n sorter: true,\n ellipsis: true,\n render: (value: number | string | undefined, record: Company) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"ebitda_list\"\n fieldName=\"EBITDA\"\n filterName=\"ebitda_numeric\"\n extraKeys={['ebitda_amount', 'ebitda_year']}\n service={UserService.updateCompanyUserValues}\n isFromGrid={true}\n customFinancialYear={Number(YEARS_LABELS['past 1 year'])}\n />\n ),\n },\n {\n dataIndex: generateEbitdaCurrentColumnKey,\n title: `${YEARS_LABELS.current} EBITDA`,\n className: generateEbitdaCurrentColumnKey,\n align: 'right',\n width: 150,\n sorter: true,\n ellipsis: true,\n render: (value: number | string | undefined, record: Company) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"ebitda_list\"\n fieldName=\"EBITDA\"\n filterName=\"ebitda_numeric\"\n extraKeys={['ebitda_amount', 'ebitda_year']}\n service={UserService.updateCompanyUserValues}\n isFromGrid={true}\n customFinancialYear={Number(YEARS_LABELS.current)}\n />\n ),\n },\n {\n dataIndex: 'last_ebitda_margin',\n title: 'EBITDA Margin',\n className: 'last_ebitda_margin',\n sorter: true,\n render: (value: string, record: Company, index: number) =>\n value !== null && value !== undefined && value !== DEFAULT_EMPTY_VALUE ? (\n <TableCellPercentageGrowth value={value} record={record} />\n ) : (\n DEFAULT_EMPTY_VALUE\n ),\n width: 120,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'revenue_model',\n title: 'Revenue Model',\n className: 'revenue_model',\n sorter: true,\n render: (value: number, company: CompanyProfile) => (\n <EditFieldMultiSelect\n fieldName=\"Revenue Model\"\n record={company}\n isFromGrid={true}\n successMessage=\"Revenue Model updated successfully!\"\n errorMessage=\"Revenue Model update failed, Server error!\"\n value={company.revenue_model}\n destroyOnHide={true}\n />\n ),\n width: 130,\n align: 'left',\n },\n {\n dataIndex: 'cashflow',\n title: 'Cashflow',\n className: 'cashflow',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return (\n <EditFieldSingleSelect\n isFromGrid\n value={value || DEFAULT_EMPTY_VALUE}\n record={record}\n fieldName=\"Cashflow\"\n successMessage=\"Cashflow updated successfully!\"\n errorMessage=\"Cashflow update failed, Server error!\"\n fieldKey={'cashflow' as CompanyUserValuesKeys}\n />\n );\n },\n width: 160,\n ellipsis: true,\n align: 'right',\n },\n {\n dataIndex: 'last_touch_date',\n title: 'Last Touch',\n className: 'last_touch_date',\n sorter: true,\n render: (value: string, record: Company, index: number) => (\n <TableCellDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={\n value !== DEFAULT_LAST_TOUCH && value !== DEFAULT_NEXT_TOUCH ? undefined : value\n }\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'next_touch_date',\n title: 'Scheduled Touch',\n className: 'next_touch_date',\n sorter: true,\n render: (value: string | string[], record: Company, index: number) => (\n <TableCellListDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={typeof value === 'string' ? value : undefined}\n />\n ),\n width: 140,\n ellipsis: true,\n },\n {\n dataIndex: 'next_touch_initiator_name',\n title: 'Scheduled Touch Initiated By',\n className: 'next_touch_initiator_name',\n sorter: true,\n render: (value: Array<string>, record: Company, index: number) => (\n <TableCellListDefault value={value} record={record} />\n ),\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'last_touch_initiator_name',\n title: 'Last Touch Initiated By',\n className: 'last_touch_initiator_name',\n sorter: true,\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'current_ceo',\n title: 'CEO',\n className: 'current_ceo',\n sorter: true,\n render: TableCellDefaultRender,\n width: 90,\n ellipsis: true,\n },\n {\n dataIndex: 'ceo_approval',\n title: 'CEO Approval',\n className: 'ceo_approval',\n sorter: true,\n width: 90,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'g2_rating',\n title: 'G2Crowd Rating',\n className: 'g2_rating',\n sorter: true,\n width: 90,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'g2_review_count',\n title: 'G2Crowd Reviews',\n className: 'g2_review_count',\n sorter: true,\n width: 90,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'ct_rating',\n title: 'Capterra Rating',\n className: 'ct_rating',\n sorter: true,\n width: 90,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'ct_review_count',\n title: 'Capterra Reviews',\n className: 'ct_review_count',\n sorter: true,\n width: 90,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'cb_rank',\n title: 'Crunchbase Rank',\n className: 'cb_rank',\n sorter: true,\n render: (value: number | null, record: Company, index: number) => (\n <TableCellNumber value={value} record={record} />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'size_multiple',\n title: 'Size Multiple',\n className: 'size_multiple',\n sorter: true,\n render: (value: number | null | string, record: Company) => (\n <TableCellNumber value={value} record={record} />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'city',\n title: 'Town/City',\n className: 'city',\n sorter: true,\n render: TableCellDefaultRender,\n width: 100,\n ellipsis: true,\n },\n {\n dataIndex: 'state',\n title: 'State/Province',\n className: 'state',\n sorter: true,\n render: TableCellDefaultRender,\n width: 130,\n ellipsis: true,\n },\n {\n dataIndex: 'country',\n title: 'Country',\n className: 'country',\n sorter: true,\n render: TableCellDefaultRender,\n width: 100,\n ellipsis: true,\n },\n {\n dataIndex: 'source_tag',\n title: 'Source',\n ellipsis: false,\n className: 'source_tag',\n sorter: true,\n render: (value: Array<CompanySourceTag>, record: Company, index: number) => (\n <TableCellListDefault value={value} record={record} shouldBeInUpperCase />\n ),\n width: 180,\n },\n {\n dataIndex: 'linkedin',\n title: 'Linkedin Profile',\n className: 'linkedin',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldText\n value={value}\n record={record}\n isFromGrid\n service={CompanyService.updateLinkedinURL}\n fieldName=\"Linkedin Profile\"\n entityType=\"company\"\n isURL\n />\n ),\n width: 90,\n ellipsis: true,\n },\n {\n dataIndex: 'is_in_business',\n title: 'In Business',\n className: 'is_in_business',\n sorter: true,\n render: (value, record, index) => (\n <EditFieldRadio\n value={value}\n record={record}\n fieldName=\"In Business\"\n service={UserService.addCompanyInBusinessEvaluation}\n successMessage=\"Company in business state updated successfully!\"\n errorMessage=\"Failed to update company in business state!\"\n isFromGrid\n />\n ),\n width: 90,\n ellipsis: true,\n },\n {\n dataIndex: 'active',\n title: 'Active on Pipeline',\n className: 'active',\n sorter: true,\n render: (value, record, index) => (\n <EditFieldRadio\n value={value}\n record={record}\n service={UserService.updateCompanyUserValues}\n fieldName=\"Active on Pipeline\"\n successMessage=\"Company active state updated successfully!\"\n errorMessage=\"Failed to update company active state!\"\n isFromGrid\n />\n ),\n width: 90,\n ellipsis: true,\n },\n {\n dataIndex: 'url_status',\n title: 'Website',\n className: 'url_status',\n sorter: true,\n render: (value: URLStatus | null, record: Company) => (\n <EditFieldRadio\n value={value}\n record={record}\n fieldName=\"Website Status\"\n service={UserService.updateCompanyUserValues}\n successMessage=\"Company website status updated successfully!\"\n errorMessage=\"Failed to update value!\"\n isFromGrid\n isFromHistory\n />\n ),\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'created_on_optx',\n title: 'Date Created',\n className: 'created_on_optx',\n sorter: true,\n render: (value: string, record: Company) => (\n <TableCellDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={!value || value === DEFAULT_CELL_VALUE ? DEFAULT_CELL_VALUE : undefined}\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'transaction_notes',\n title: 'Commentary',\n className: 'transaction_notes',\n sorter: false,\n render: (value: string, record: CompanyProfile) => (\n <EditFieldTextarea\n value={value}\n record={record}\n fieldName=\"Commentary\"\n isFromGrid\n service={CompanyService.addOpportunityPresentation}\n successMessage=\"Company commentary updated successfully!\"\n errorMessage=\"Company commentary update failed, Server error!\"\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'next_steps',\n title: 'Next Steps',\n className: 'next_steps',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldSingleSelectOther\n isFromGrid\n service={UserService.updateCompanyUserValues}\n fieldName=\"Next Steps\"\n fieldOtherKey={'next_steps_opinion'}\n fieldOtherValue={record.next_steps_opinion}\n value={value}\n successMessage=\"Company next steps updated successfully!\"\n errorMessage=\"Company next steps update failed, Server error!\"\n record={record}\n otherEndpoint={NEXT_STEPS_OPINION_ENDPOINT}\n defaultMenuIsOpen\n />\n ),\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'senior_deal_team_lead',\n title: 'Senior Deal Team Lead',\n className: 'senior_deal_team_lead',\n sorter: true,\n render: (value: string) => (\n <TableCellDealTeams value={value} fieldType=\"Senior Deal Team Lead\" />\n ),\n width: 150,\n ellipsis: true,\n },\n {\n dataIndex: 'date_matched',\n title: 'Date Matched',\n className: 'date_matched',\n sorter: true,\n render: (value: string, record: CompanyProfile, index: number) => (\n <TableCellNewMatched\n value={value}\n record={record}\n index={index}\n isNewMatched={record.is_new_matched}\n format={globalConfig.short_date.DATE_FORMAT}\n />\n ),\n width: 240,\n },\n {\n dataIndex: 'deal_team',\n title: 'Deal Team',\n className: 'deal_team',\n sorter: true,\n render: (value: number[] | null) => <TableCellDealTeams value={value} fieldType=\"Deal Team\" />,\n width: 150,\n ellipsis: true,\n },\n {\n dataIndex: 'prev_stage',\n title: 'Previous Stage',\n className: 'prev_stage',\n sorter: true,\n render: TableCellDefaultRender,\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'is_ai_ml',\n title: 'AI / ML',\n className: 'is_ai_ml',\n sorter: true,\n render: (value: boolean | null, record: Company, index: number) => (\n <EditFieldRadio\n value={value}\n record={record}\n fieldName=\"AI / ML\"\n service={UserService.updateAiMl}\n successMessage=\"Company AI / ML updated successfully!\"\n errorMessage=\"Failed to update value!\"\n isFromGrid\n />\n ),\n width: 110,\n align: 'center',\n ellipsis: true,\n },\n {\n dataIndex: 'last_viewed',\n title: 'Last Viewed',\n className: 'last_viewed',\n sorter: true,\n render: (value: string, record: Company) => (\n <TableCellDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={!value || value === DEFAULT_CELL_VALUE ? DEFAULT_CELL_VALUE : undefined}\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'row_actions',\n title: 'Action',\n className: 'row_actions',\n render: (value: unknown, record: CompanyProfile, index: number) => (\n <TableCellActions value={value} record={record} index={index} />\n ),\n width: 65,\n fixed: 'right',\n },\n];\n\nexport default columns;\n","import { RefObject } from 'react';\nimport { PlacementValues } from '@optx/models/DropdownAdd';\n\n/**\n * toggle popover-visible class on body depending on visible param\n * @param {boolean} visible param of menu visibility\n */\nexport const handleMenuVisibleChange = (visible: boolean) => {\n // Use timeout due to menu transition animation being blocked/delayed while the DOM changes and API call are made.\n setTimeout(() => {\n if (!visible) {\n document.body.classList.remove('popover-visible');\n } else {\n document.body.classList.add('popover-visible');\n }\n }, 0);\n};\n\ninterface MenuOptions {\n itemLength: number;\n itemHeight?: number;\n menuPadding?: number;\n initialPlacement?: PlacementValues;\n secondPlacement?: PlacementValues;\n}\n\n/**\n * Determines the optimal placement for a menu based on the available space and provided options.\n * By default antd already does this in cases where there is no space for the dropdown menu to be displayed\n * in the defined position from the placement prop. This solution is used in places where there is space,\n * but we don't want the user to scroll the page in order to see the menu.\n * To get an estimated height of the dropdown menu this function is using information related to\n * number of items, height of a menu item and padding around the menu itself. This is done to avoid\n * layout shifting.\n *\n * @param {RefObject<HTMLDivElement>} triggerRef - A reference to the HTML element that triggers the menu.\n * @param {MenuOptions} options - Configuration options for determining the menu placement.\n * @param {number} options.itemLength - The number of items in the menu.\n * @param {number} [options.itemHeight=32] - The height of each menu item in pixels. Defaults to 32.\n * @param {number} [options.menuPadding=8] - The padding around the menu in pixels. Defaults to 8.\n * @param {string} [options.initialPlacement='bottomRight'] - The initial preferred placement of the menu.\n * Defaults to 'bottomRight'.\n * @param {string} [options.secondPlacement='topLeft'] - The secondary placement of the menu if the initial\n * placement does not fit. Defaults to 'topLeft'.\n *\n * @returns {string} - The determined placement for the menu, either the initial or secondary placement.\n */\nexport const getPlacement = (\n triggerRef: RefObject<HTMLDivElement>,\n {\n itemLength,\n itemHeight = 32,\n menuPadding = 8,\n initialPlacement = 'bottomRight',\n secondPlacement = 'topRight',\n }: MenuOptions\n) => {\n const rect = triggerRef?.current?.getBoundingClientRect();\n const menuHeight = itemLength * itemHeight + menuPadding;\n\n if (rect?.bottom! + menuHeight > window.innerHeight) {\n return secondPlacement;\n } else {\n return initialPlacement;\n }\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport { CompanyIsInBusinessResponse } from './interfaces';\n\nexport const addCompanyInBusinessEvaluation = createAction(\n types.ADD_COMPANY_IN_BUSINESS_EVALUATION,\n (companyId: number, isInBusiness = true, isFromHistory?: boolean) => ({\n payload: {\n companyId,\n isInBusiness,\n isFromHistory,\n },\n })\n);\n\nexport const addCompanyInBusinessEvaluationSuccess = createAction(\n types.ADD_COMPANY_IN_BUSINESS_EVALUATION_SUCCESS,\n (res: CompanyIsInBusinessResponse, companyId: number, isInBusiness = true) => ({\n payload: {\n score: res.optx_score,\n score_v3: res.score_v3,\n il_score: res.il_optx_score,\n il_score_growth: res.il_optx_score_growth,\n scoreGrowth: res.optx_score_growth,\n newScoreGrowth: res.score_v3_growth,\n companyId,\n isInBusiness,\n },\n })\n);\n\nexport const addCompanyInBusinessEvaluationFail = createAction<string>(\n types.ADD_COMPANY_IN_BUSINESS_EVALUATION_FAIL\n);\n","export const ADD_COMPANY_IN_BUSINESS_EVALUATION = 'ADD_COMPANY_IN_BUSINESS_EVALUATION';\nexport const ADD_COMPANY_IN_BUSINESS_EVALUATION_SUCCESS =\n 'ADD_COMPANY_IN_BUSINESS_EVALUATION_SUCCESS';\nexport const ADD_COMPANY_IN_BUSINESS_EVALUATION_FAIL = 'ADD_COMPANY_IN_BUSINESS_EVALUATION_FAIL';\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst selectInBusinessEvaluation = (state: AppState) => state.companyInBusinessEvaluation;\n\nexport const isLoading = createSelector(selectInBusinessEvaluation, state => state.loading);\n\nexport const getCurrentCompany = createSelector(\n selectInBusinessEvaluation,\n state => state.companyId\n);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport * as actions from './actions';\nimport { CompanyIsInBusinessPayload, CompanyIsInBusinessState } from './interfaces';\n\nconst initialState: CompanyIsInBusinessState = {\n companyId: null,\n error: '',\n loading: false,\n};\n\nconst addCompanyInBusinessEvaluationReducer: CaseReducer<\n CompanyIsInBusinessState,\n PayloadAction<CompanyIsInBusinessPayload>\n> = (draftState, action) => {\n draftState.companyId = action.payload.companyId;\n draftState.loading = true;\n draftState.error = '';\n};\n\nconst addCompanyInBusinessEvaluationSuccessReducer: CaseReducer<\n CompanyIsInBusinessState,\n PayloadAction<{ score: number; companyId: number; isInBusiness: boolean }>\n> = draftState => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addCompanyInBusinessEvaluation, addCompanyInBusinessEvaluationReducer)\n .addCase(\n actions.addCompanyInBusinessEvaluationSuccess,\n addCompanyInBusinessEvaluationSuccessReducer\n )\n .addCase(actions.addCompanyInBusinessEvaluationFail, fetchFailReducer)\n);\n\nexport default reducer;\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, put, takeLatest, select } from 'redux-saga/effects';\n// models\nimport { APIBoolean } from '@optx/models/api/generic';\n// services\nimport { UserService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport {\n actions as auditActions,\n selectors as auditSelectors,\n} from '@features/company/audit-trail/state';\nimport { actions as userValuesActions } from '@redux/company/user-values';\nimport { UpdateFieldsPayload } from '@optx/features/company/edit-fields/state/interfaces';\nimport * as actions from './actions';\nimport { CompanyIsInBusinessPayload } from './interfaces';\n\nexport function* addInBusinessEvaluationSaga(action: PayloadAction<CompanyIsInBusinessPayload>) {\n const { companyId, isInBusiness, isFromHistory } = action.payload;\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n\n try {\n const customPayload: UpdateFieldsPayload = {\n companyId,\n value: isInBusiness,\n };\n\n // @ts-ignore\n const res = yield call(UserService.addCompanyInBusinessEvaluation, customPayload);\n yield put(actions.addCompanyInBusinessEvaluationSuccess(res.data, companyId, isInBusiness));\n yield put(\n userValuesActions.updateCompanyTrendingLines({\n employeeCountTrends: res.data?.employee_count_trends,\n optxScoreTrends: res.data?.optx_score_trends,\n newOptxScoreTrends: res.data?.optx_score_v3_trends,\n companyId: action.payload.companyId,\n })\n );\n\n if (isFromHistory) {\n const { pageSize } = yield select(auditSelectors.getPagination);\n const field: string = yield select(auditSelectors.getSearchQuery);\n const optx: APIBoolean = yield select(auditSelectors.getOPTX);\n const internal: APIBoolean = yield select(auditSelectors.getInternal);\n const startDate: string = yield select(auditSelectors.getStartDate);\n const endDate: string = yield select(auditSelectors.getEndDate);\n\n yield put(\n auditActions.fetchChangedCompanyFields({\n companyId,\n pagination: {\n pageNumber: 1,\n pageSize,\n },\n field,\n internal,\n optx,\n startDate,\n endDate,\n })\n );\n }\n\n NotificationService.success('Company in business state updated successfully!');\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n } catch (e: any) {\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n const errorMessage = getErrorMessage(e, 'Failed to update company in business state!');\n yield put(actions.addCompanyInBusinessEvaluationFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* inBusinessEvaluationSaga() {\n yield takeLatest(actions.addCompanyInBusinessEvaluation, addInBusinessEvaluationSaga);\n}\n","import { selectors as fetchSelectors } from '@optx/redux/feature/fetch';\nimport { AnalystsEmailStatisticsState } from './interfaces';\n\nexport const selectEmailStatistics = (state: AnalystsEmailStatisticsState) => state.data;\nexport const isLoading = (state: AnalystsEmailStatisticsState) =>\n fetchSelectors.isLoadingSelector(state);\n","import { FEATURE } from '../constants';\n\nconst FEATURE_SLICE = `${FEATURE} email-statistics`;\n\n// fetch\nexport const FETCH = `${FEATURE_SLICE}/fetch`;\nexport const FETCH_SUCCESS = `${FEATURE_SLICE}/fetch success`;\nexport const FETCH_FAIL = `${FEATURE_SLICE}/fetch fail`;\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { EmailStatistics } from '@optx/models/feature/analystsLeaderboard/EmailStatistics';\n// types\nimport * as types from './types';\n\n// fetch\nexport const fetch = createAction(types.FETCH);\nexport const fetchSuccess = createAction<EmailStatistics>(types.FETCH_SUCCESS);\nexport const fetchFail = createAction<string>(types.FETCH_FAIL);\n","import { createReducer } from '@reduxjs/toolkit';\n// redux\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n// local\nimport { AnalystsEmailStatisticsState } from './interfaces';\n// redux\nimport * as actions from './actions';\n\nconst initialState: AnalystsEmailStatisticsState = {\n data: null,\n error: '',\n loading: false,\n fetchedAt: null,\n};\n\n/**\n * Interval grouping does not show more than 12 data points:\n * 1 Day = grouped by 2 hours\n * 2 days – 12 days = day\n * 13 days – 84 days = week\n * 84 days – 1 year = month\n * > 1 year = year\n */\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetch, fetchReducers.fetchReducer)\n .addCase(actions.fetchSuccess, fetchReducers.fetchSuccessReducer)\n .addCase(actions.fetchFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { selectors as fetchSelectors } from '@optx/redux/feature/fetch';\nimport { AnalystsSmartTouchScoreState } from './interfaces';\n\nexport const selectSmartTouchScore = (state: AnalystsSmartTouchScoreState) => state.data;\nexport const isLoading = (state: AnalystsSmartTouchScoreState) =>\n fetchSelectors.isLoadingSelector(state);\n","import { FEATURE } from '../constants';\n\nconst FEATURE_SLICE = `${FEATURE} smart-touch-score`;\n\n// fetch\nexport const FETCH = `${FEATURE_SLICE}/fetch`;\nexport const FETCH_SUCCESS = `${FEATURE_SLICE}/fetch success`;\nexport const FETCH_FAIL = `${FEATURE_SLICE}/fetch fail`;\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { SmartTouchScore } from '@optx/models/feature/analystsLeaderboard/SmartTouchScore';\n// types\nimport * as types from './types';\n\n// fetch\nexport const fetch = createAction(types.FETCH);\nexport const fetchSuccess = createAction<SmartTouchScore>(types.FETCH_SUCCESS);\nexport const fetchFail = createAction<string>(types.FETCH_FAIL);\n","import { createReducer } from '@reduxjs/toolkit';\n// redux\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n// local\nimport { AnalystsSmartTouchScoreState } from './interfaces';\nimport * as actions from './actions';\n\nconst initialState: AnalystsSmartTouchScoreState = {\n data: null,\n error: '',\n loading: false,\n fetchedAt: null,\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetch, fetchReducers.fetchReducer)\n .addCase(actions.fetchSuccess, fetchReducers.fetchSuccessReducer)\n .addCase(actions.fetchFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { CloseCircleTwoTone } from '@ant-design/icons';\nimport { Button, DatePicker, Tooltip } from 'antd';\nimport styled from 'styled-components';\n\nconst DefaultTooltip = styled(Tooltip)`\n display: block;\n`;\n\nconst CustomDatePicker = styled(DatePicker)`\n &.ant-picker {\n margin: 5px 0;\n cursor: text;\n }\n\n .ant-picker-input > input {\n pointer-events: none;\n }\n`;\n\nconst CloseIcon = styled(CloseCircleTwoTone)`\n font-size: 19px;\n margin-top: 12px;\n margin-left: 10px;\n`;\n\nconst AddDateButton = styled(Button)`\n margin-top: 10px;\n width: 90%;\n color: #1890ff;\n`;\n\nexport const Styled = {\n DefaultTooltip,\n CustomDatePicker,\n CloseIcon,\n AddDateButton,\n};\n","import React, { useEffect, useState, useRef } from 'react';\nimport { Button, Row } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\nimport moment, { Moment } from 'moment';\nimport { useLocation } from 'react-router';\nimport { findDOMNode } from 'react-dom';\n// models\nimport Company, { CompanyProfile, CompanyUserValuesKeys } from '@optx/models/Company';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\nimport { LIST_OF_FUTURE_DATE_FIELDS } from '@optx/constants/future-date-fields';\nimport { ADVANCED_SEARCH } from '@optx/constants/pendoAction';\n// utils\nimport { isFutureDate, getLastRoundDisabledDate } from '@optx/utils/date';\nimport { sendPendoData } from '@optx/utils/utils';\n// redux\nimport {\n actions as fundingRoundsActions,\n selectors as fundingRoundsSelectors,\n} from '@redux/company/funding-rounds';\n// hooks\nimport useUpdateFields from '../hooks/useUpdateFields';\nimport { ServiceType } from '../state/interfaces';\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\n// components\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n// styles\nimport { Styled as TableCellStyled } from '@optx/features/company/edit-fields/components/TableCellFit.styled';\nimport { Styled as EditFieldDateStyled } from '@optx/features/company/edit-fields/components/EditFieldDate.styled';\n\nconst loadValue = (dateValue: string | string[] | null, dateformat: string) => {\n if (dateValue && typeof dateValue === 'string') {\n const date = moment(dateValue, ISO_DATE_FORMAT).format(dateformat);\n if (date.toLocaleLowerCase() === 'invalid date') return [DEFAULT_CELL_VALUE];\n\n return [date];\n }\n\n if (Array.isArray(dateValue) && dateValue.length !== 0) {\n const dates = dateValue\n .filter(\n date =>\n moment(date, ISO_DATE_FORMAT).format(dateformat).toLocaleLowerCase() !== 'invalid date'\n )\n .map(date => moment(date, ISO_DATE_FORMAT).format(dateformat));\n\n return dates;\n }\n\n return [DEFAULT_CELL_VALUE];\n};\n\nconst resetOpenDatePicker = (dates: Array<Moment | null>) => dates.map((_, index) => index === 0);\n\ninterface EditFielDateProps {\n value: string | string[] | null;\n fieldName: 'Last Funding Date' | 'Date Presented' | 'Expected Close Date' | 'IC Status Date';\n isFromGrid: boolean;\n fieldKey: CompanyUserValuesKeys;\n hidePenIcon?: boolean;\n service: ServiceType;\n successMessage?: string;\n errorMessage?: string;\n record: Company | CompanyProfile;\n format: string;\n getPopupContainer?: ((triggerNode: HTMLElement) => HTMLElement) | undefined;\n isFromHistory?: boolean;\n isDynamicPopoverHeight?: boolean;\n destroyOnHide?: boolean;\n actionPendo?: string;\n}\n\nconst EditFieldDate: React.FC<EditFielDateProps> = ({\n record,\n value,\n fieldName,\n isFromGrid,\n hidePenIcon,\n service,\n successMessage,\n errorMessage,\n format,\n isFromHistory,\n fieldKey,\n getPopupContainer,\n isDynamicPopoverHeight,\n actionPendo,\n}) => {\n const dispatch = useDispatch();\n const location = useLocation();\n const { updateField } = useUpdateFields({\n fieldName,\n companyId: record.company_id,\n companyUrl: record.company_url,\n service,\n successMessage,\n errorMessage,\n isFromHistory,\n });\n\n const [dateValues, setDateValues] = useState<Array<string | number>>(loadValue(value, format));\n const [displayedDates, setDisplayedDates] = useState<Array<Moment | null>>([]);\n const formattedValue = loadValue(value, format);\n const [closePopup, setClosePopup] = useState<boolean>(false);\n const [openDatePicker, setOpenDatePicker] = useState<boolean[]>([true]);\n const [isShowingToolTip, setIsShowingToolTip] = useState<boolean>(false);\n const [forceRenderKey, setForceRenderKey] = useState(0);\n const changedValue = useRef<string | number | undefined>(undefined);\n const [focus, setFocus] = useState<boolean>(false);\n const lastValue = useRef<Array<string | number>>([]);\n const datePickerRefs = useRef<any[]>([]);\n const title = `Edit \"${fieldName}\" value`;\n const label = formattedValue.join(', ');\n const currentGridName = useCurrentGridName();\n\n const secondToLastRoundDate = useSelector(fundingRoundsSelectors.getSecondToLastRoundDate);\n const numberOfRounds = useSelector(fundingRoundsSelectors.getNumberOfRounds);\n\n const popoverContentRef = useRef(null);\n\n const isDatePresented = fieldKey === 'date_presented';\n\n const handleDateChange = (value: Moment | null, dateString: string, index: number) => {\n const newDateValues = [...dateValues];\n const newDates = [...displayedDates];\n newDates[index] = value;\n newDateValues[index] = dateString;\n\n setDateValues(newDateValues);\n lastValue.current = newDateValues;\n setDisplayedDates(newDates);\n changedValue.current = dateString;\n\n setOpenDatePicker(prevState => {\n const newState = [...prevState];\n newState[index] = false;\n\n return newState;\n });\n };\n\n const updateFieldCallback = () => {\n if (fieldName === 'Last Funding Date' && location.pathname.includes('profile')) {\n dispatch(fundingRoundsActions.getCompanyFundingRounds(record.company_id));\n }\n\n handlePendoActionCallBack();\n };\n\n const handleSave = () => {\n if (fieldName === 'Date Presented') {\n const values = lastValue.current\n .reduce((acc: Array<string>, value) => {\n if (value && moment(value, format).isValid()) {\n acc.push(moment(value, format).format(ISO_DATE_FORMAT));\n }\n\n return acc;\n }, [])\n .sort()\n .reverse();\n\n updateField(values.length !== 0 ? values : null, fieldKey, undefined);\n } else {\n updateField(\n lastValue.current[0] ? moment(lastValue.current[0], format).format(ISO_DATE_FORMAT) : null,\n fieldKey,\n undefined,\n updateFieldCallback\n );\n }\n\n setClosePopup(true);\n changedValue.current = undefined;\n handleCancel();\n\n if (actionPendo) {\n window.pendo.track(`${actionPendo}_Save`);\n }\n };\n\n const handleCancel = () => {\n setClosePopup(true);\n setFocus(false);\n setForceRenderKey(prevKey => prevKey + 1);\n changedValue.current = undefined;\n\n if (typeof value === 'string' && value && value !== DEFAULT_CELL_VALUE) {\n setDisplayedDates([moment(value)]);\n setDateValues(loadValue(value, format));\n lastValue.current = loadValue(value, format);\n } else if (Array.isArray(value) && value.length !== 0) {\n const dates = value\n .filter(date => moment(date).format(format).toLocaleLowerCase() !== 'invalid date')\n .map(date => moment(date));\n setDisplayedDates(dates);\n setDateValues(loadValue(value, format));\n lastValue.current = loadValue(value, format);\n } else {\n setDisplayedDates([null]);\n setDateValues(loadValue(value, format));\n lastValue.current = loadValue(value, format);\n }\n };\n\n const handleAddDate = () => {\n if (displayedDates.length >= 10) return;\n\n setDisplayedDates(prevState => [...prevState, null]);\n };\n\n const handleRemoveDate = (itemIndex: number) => {\n setDisplayedDates(prevState => [...prevState].filter((item, index) => index !== itemIndex));\n setDateValues(prevState => [...prevState].filter((item, index) => index !== itemIndex));\n changedValue.current = '';\n };\n\n useEffect(() => {\n if (datePickerRefs.current[0]) {\n const element = findDOMNode(datePickerRefs.current[0]) as HTMLElement;\n\n if (element) {\n setTimeout(() => {\n const inputContainer = element.getElementsByClassName(\n 'ant-picker-input'\n )[0] as HTMLElement;\n\n if (inputContainer) {\n const inputElement = inputContainer.querySelector('input') as HTMLElement;\n\n if (inputElement && focus) {\n inputElement.focus({ preventScroll: true });\n } else {\n inputElement.blur();\n }\n }\n }, 100);\n }\n }\n }, [datePickerRefs.current.length, focus]);\n\n useEffect(() => {\n lastValue.current = [...dateValues];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dateValues.length]);\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n setTimeout(() => {\n handleSave();\n }, 400);\n }\n };\n\n const lastRoundDisabledDate = getLastRoundDisabledDate(\n moment(value, ISO_DATE_FORMAT),\n moment(secondToLastRoundDate, ISO_DATE_FORMAT),\n numberOfRounds\n );\n\n useOnClickOutside(popoverContentRef, handleCancel);\n\n const handlePendoAction = (value: string) => {\n if (fieldName === 'Last Funding Date' && currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_LastFunding_${value}`);\n }\n };\n\n const handlePendoActionCallBack = () => {\n handlePendoAction('Save');\n };\n\n const content = (\n <div\n ref={popoverContentRef}\n style={{ width: '320px' }}\n role=\"presentation\"\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n >\n {displayedDates.map((date, index) => (\n <Row key={index} style={{ padding: 0, height: '100%' }}>\n <EditFieldDateStyled.CustomDatePicker\n ref={el => (datePickerRefs.current[index] = el)}\n key={forceRenderKey}\n onFocus={() =>\n setOpenDatePicker(prevState => {\n const newState = [...prevState];\n newState[index] = true;\n\n return newState;\n })\n }\n onBlur={() => {\n setFocus(false);\n setOpenDatePicker(prevState => {\n const newState = [...prevState];\n newState[index] = false;\n\n return newState;\n });\n }}\n onChange={(value, dateString) => handleDateChange(value, dateString, index)}\n allowClear={fieldName !== 'Last Funding Date'}\n disabledDate={\n LIST_OF_FUTURE_DATE_FIELDS.includes(fieldName)\n ? undefined\n : fieldName === 'Last Funding Date'\n ? lastRoundDisabledDate\n : isFutureDate\n }\n value={date || undefined}\n defaultValue={date || undefined}\n style={{ width: isDatePresented ? '90%' : '100%' }}\n format={format}\n open={openDatePicker[index]}\n getPopupContainer={trigger => trigger.parentNode as HTMLElement}\n />\n {fieldName === 'Date Presented' && index > 0 && (\n <EditFieldDateStyled.CloseIcon\n className=\"remove_icon\"\n twoToneColor=\"#f5222d\"\n onClick={() => handleRemoveDate(index)}\n />\n )}\n </Row>\n ))}\n {fieldName === 'Date Presented' && displayedDates.length < 10 && (\n <EditFieldDateStyled.AddDateButton size=\"small\" onClick={handleAddDate}>\n Add Another Date\n </EditFieldDateStyled.AddDateButton>\n )}\n\n <div className=\"profile-information__popover-buttons\">\n <Button\n className=\"profile-information__cancel\"\n onClick={() => {\n handleCancel();\n handlePendoAction('Cancel');\n\n if (actionPendo) {\n window.pendo.track(`${actionPendo}_Cancel`);\n }\n }}\n >\n Cancel\n </Button>\n <Button\n disabled={\n typeof changedValue.current !== 'string' || changedValue.current === formattedValue[0]\n }\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSave}\n >\n Save\n </Button>\n </div>\n </div>\n );\n\n useEffect(() => {\n setDateValues(loadValue(value, format));\n lastValue.current = loadValue(value, format);\n\n if (typeof value === 'string' && value && value !== DEFAULT_CELL_VALUE) {\n setDisplayedDates([moment(value)]);\n setOpenDatePicker(resetOpenDatePicker([moment(value)]));\n } else if (Array.isArray(value) && value.length !== 0) {\n const dates = value\n .filter(date => moment(date).format(format).toLocaleLowerCase() !== 'invalid date')\n .map(date => moment(date));\n setDisplayedDates(dates);\n setOpenDatePicker(resetOpenDatePicker(dates));\n } else {\n setDisplayedDates([null]);\n setOpenDatePicker([true]);\n }\n }, [format, value]);\n\n if (!isFromGrid) {\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n onVisibilityChange={() => setIsShowingToolTip(false)}\n onVisibilityUpdate={visibility => {\n setOpenDatePicker(resetOpenDatePicker(displayedDates));\n\n setFocus(visibility);\n }}\n onClick={() => {\n setIsShowingToolTip(true);\n setFocus(true);\n }}\n hidePenIcon={hidePenIcon}\n setClosePopup={setClosePopup}\n isDynamicPopoverHeight={isDynamicPopoverHeight}\n getPopupContainer={getPopupContainer}\n actionPendo={actionPendo}\n >\n {isFromHistory ? (\n !isShowingToolTip ? (\n <TruncateTooltip overlayInnerStyle={{ padding: 6 }} title={label} placement=\"topLeft\">\n {hidePenIcon ? 'Edit Field' : label}\n </TruncateTooltip>\n ) : hidePenIcon ? (\n 'Edit Field'\n ) : (\n label\n )\n ) : (\n <TruncateTooltip\n overlayClassName={'ant-tooltip-custom'}\n overlayInnerStyle={{ padding: 6 }}\n title={label}\n placement=\"topLeft\"\n >\n {hidePenIcon ? 'Edit Field' : label}\n </TruncateTooltip>\n )}\n </EditPopover>\n );\n }\n\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n onClick={() => setFocus(true)}\n getPopupContainer={getPopupContainer}\n onVisibilityUpdate={visibility => {\n setOpenDatePicker(resetOpenDatePicker(displayedDates));\n\n setFocus(visibility);\n }}\n />\n }\n fill\n >\n <TruncateTooltip title={label} placement=\"topLeft\">\n <TableCellStyled.TableCellInner>{label}</TableCellStyled.TableCellInner>\n </TruncateTooltip>\n </InlineEdit>\n );\n};\n\nexport default React.memo(EditFieldDate);\n","/**\n * Convert base64 to raw binary data held in a string\n * OBS: doesn't handle URLEncoded DataURIs\n * @param dataURI base64 string\n * @returns binary data\n */\nexport function dataURItoBlob(dataURI: string) {\n try {\n const byteString = atob(dataURI.split(',')[1]);\n\n // separate out the mime component\n const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n\n // write the bytes of the string to an ArrayBuffer\n const ab = new ArrayBuffer(byteString.length);\n const ia = new Uint8Array(ab);\n\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n\n // write the ArrayBuffer to a blob\n const bb = new Blob([ab], { type: mimeString });\n\n return bb;\n } catch (error: any) {\n return null;\n }\n}\n\n/**\n * Regular expression for matching date strings in the format 'YYYY-MM-DD'.\n */\nexport const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n/**\n * Check if value is ISO 8601 formmated string YYYY-MM-DD.\n * @param value\n */\nexport const isIsoDateString = (value: any) => {\n if (typeof value !== 'string') {\n return false;\n }\n\n return dateRegex.test(value);\n};\n\n/**\n * Removes all spaces from the given string.\n *\n * @param value - The input string from which spaces are to be removed.\n * @returns A new string with all spaces removed.\n */\nexport const removeSpace = (value: string = '') => value.replace(/\\s+/g, '');\n\n/**\n * Validates the provided string value for creating an option.\n *\n * @param value - The string value to be validated.\n * @returns Returns true if the value is not empty after trimming, otherwise false.\n */\nexport const isNotOnlyEmptySpaces = (value: string) => {\n if (value.trim() === '') {\n return false;\n }\n\n return true;\n};\n","export const featureName = 'company-audit-trail';\n","export const SEND_OPTX_SCORE_RATIONALE = 'SEND_OPTX_SCORE_RATIONALE';\nexport const SEND_NEW_OPTX_SCORE_RATIONALE = 'SEND_NEW_OPTX_SCORE_RATIONALE';\nexport const SEND_OPTX_SCORE_RATIONALE_SUCCESS = 'SEND_OPTX_SCORE_RATIONALE_SUCCESS';\nexport const SEND_NEW_OPTX_SCORE_RATIONALE_SUCCESS = 'SEND_NEW_OPTX_SCORE_RATIONALE_SUCCESS';\n","export default 'lists-and-searches';\n","import { takeLatest, put, call, select, take } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { push } from 'react-router-redux';\n// models\nimport { AxiosResponse } from 'axios';\nimport { CompanyBulkEditingResults } from '@optx/models/bulkActions';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport {\n BULK_EDIT_COMPANY_LIMIT_ADD_TO_WATCHLIST,\n BULK_EDIT_COMPANY_LIMIT_REMOVE_FROM_WATCHLIST,\n} from '@optx/config/bulkConfig';\nimport { LISTS_ROUTES } from '@optx/constants/routes';\n// services\nimport { UserService } from '@optx/services/api';\nimport NotificationService from '@optx/services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport {\n addCompanyToListBulkActionSuccess,\n initialFetchFavoritesLists,\n} from '@redux/favorite-lists/lists/actions';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { actions as searchActions } from '@features/grid/search';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { initialFetchFavoritesListsPopup } from '@optx/redux/favorite-lists/lists-popup/actions';\nimport { actions as listActions } from '@redux/favorite-lists/lists';\nimport { actions as editFieldActions } from '@features/bulk-actions/edit-fields';\nimport * as actions from './actions';\nimport { BulkAddToWatchList, BulkRemoveFromWatchList, BulkWatchlistResponse } from './interfaces';\n\nfunction* bulkAddToWatchListSaga(action: PayloadAction<BulkAddToWatchList>) {\n const { selectedCompanies, selectedData, field } = action.payload;\n const companies = [...selectedCompanies];\n\n const existingListIds: number[] = [];\n const newTitles: string[] = [];\n\n selectedData.flat().map(data => {\n if (data.value !== data.label) {\n return existingListIds.push(Number(data.value));\n }\n\n return newTitles.push(data.label.toString());\n });\n\n const selectedCompaniesCount: number = yield select(\n bulkActionsSelectors.editFields.selectedCompaniesCount\n );\n\n const companiesBatch = companies.slice(0, BULK_EDIT_COMPANY_LIMIT_ADD_TO_WATCHLIST);\n const company_ids = companiesBatch.map(company => company.company_id);\n\n try {\n const res: AxiosResponse<BulkWatchlistResponse[]> = yield call(\n UserService.bulkAddToWatchlist,\n company_ids,\n existingListIds,\n newTitles\n );\n\n if (res.data) {\n const failedCompanies = res.data;\n const currentResults: CompanyBulkEditingResults[] = yield select(\n bulkActionsSelectors.editFields.results\n );\n const nextResults: CompanyBulkEditingResults[] = [];\n\n yield put(\n editFieldActions.updatePercentage(\n Math.round((BULK_EDIT_COMPANY_LIMIT_ADD_TO_WATCHLIST / selectedCompaniesCount) * 100)\n )\n );\n\n companiesBatch.forEach(company => {\n const { company_id: id, company_url, company_name, raw_url } = company;\n\n const failedCompany = failedCompanies.filter(company => company.company_id === id);\n const failedIds = failedCompany.reduce((acc: number[], item) => {\n if (!item.status) {\n if (acc.length === 0) {\n return [item.list_id];\n }\n\n acc.push(item.list_id);\n\n return acc;\n }\n\n return acc;\n }, []);\n\n const allErrorMessage = failedCompany\n .filter(item => item.message !== 'Success')\n .map(item => item.message);\n const errorMessage = failedCompany[0].message;\n\n const errorForSomeList = `Company was not added to: '${selectedData\n .flat()\n .reduce((acc: string[], item: SelectOption) => {\n if (failedIds.includes(Number(item.value)) && item.label) {\n if (acc.length === 0) {\n return [item.label];\n }\n\n acc.push(item.label);\n\n return acc;\n }\n\n return acc;\n }, [])\n .join(', ')}'\\n \\n Reason: ${Array.from(new Set(allErrorMessage)).join(', ')}`;\n\n nextResults.push({\n company_id: id,\n company_url,\n raw_url,\n company_name,\n sync_status: errorMessage === 'Success' && failedIds.length === 0,\n error_reason:\n errorMessage === 'Success' && failedIds.length === 0 ? '' : errorForSomeList,\n });\n });\n\n const listIds = failedCompanies.map(company => company.list_id);\n const uniqueListIds = listIds.filter((listId, index, arr) => arr.indexOf(listId) === index);\n let updatedSelectedData: SelectOption[] = [];\n\n // replacing temporary string ids with final ids for newly created lists\n selectedData.flat().map((data, index) => {\n const updatedData: SelectOption = {\n value: uniqueListIds[index].toString(),\n label: data.label,\n isET: data.isET,\n };\n updatedSelectedData = [...updatedSelectedData, updatedData];\n\n return updatedSelectedData;\n });\n\n const finalResults = [...currentResults, ...nextResults];\n\n yield put(editFieldActions.saveResults(finalResults));\n\n companies.splice(0, BULK_EDIT_COMPANY_LIMIT_ADD_TO_WATCHLIST);\n const cancelSearch: boolean = yield select(bulkActionsSelectors.editFields.cancel);\n\n if (!cancelSearch) {\n if (companies.length) {\n yield put(\n actions.bulkAddToWatchList({\n selectedCompanies: companies,\n selectedData: updatedSelectedData,\n field,\n })\n );\n } else {\n yield put(editFieldActions.updateProgress(false));\n yield put(editFieldActions.updateCompleted(true));\n yield put(editFieldActions.updatePercentage(100));\n\n const successfulResults = finalResults.filter(company => company.sync_status);\n\n if (successfulResults) {\n yield put(\n editFieldActions.bulkEditFieldSuccess({\n companyIds: successfulResults.map(company => company.company_id),\n selectedData: updatedSelectedData,\n field,\n })\n );\n\n if (field === 'watchlist') {\n const ownerName: string = yield select(userSelectors.getFullName);\n\n yield put(\n addCompanyToListBulkActionSuccess({\n companyIds: successfulResults.map(company => company.company_id),\n watchLists: updatedSelectedData,\n ownerName,\n })\n );\n yield put(initialFetchFavoritesLists());\n yield put(initialFetchFavoritesListsPopup());\n }\n }\n }\n } else {\n const canceledCompanies: CompanyBulkEditingResults[] = [];\n const prevResults: CompanyBulkEditingResults[] = yield select(\n bulkActionsSelectors.editFields.results\n );\n\n if (companies.length) {\n companies.forEach(company => {\n const { company_id: id, company_url, company_name, raw_url } = company;\n canceledCompanies.push({\n company_id: id,\n company_url,\n raw_url,\n company_name,\n sync_status: false,\n error_reason: 'Canceled by user',\n });\n });\n }\n\n yield put(editFieldActions.saveResults([...prevResults, ...canceledCompanies]));\n yield put(editFieldActions.updateProgress(false));\n yield put(editFieldActions.updateCompleted(true));\n yield put(editFieldActions.cancel(false));\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n }\n } catch (e: any) {\n const message = getErrorMessage(e, 'Failed to add to Watchlist!');\n yield put(editFieldActions.updateProgress(false));\n yield put(editFieldActions.updateCompleted(true));\n yield put(editFieldActions.updatePercentage(100));\n NotificationService.error(message);\n }\n}\n\nfunction* bulkRemoveFromWatchListSaga(action: PayloadAction<BulkRemoveFromWatchList>) {\n const { selectedCompanies, listId, listDetailCount, isRemoveFromAddonManagement } =\n action.payload;\n const companies = [...selectedCompanies];\n\n const companiesBatch = selectedCompanies.slice(0, BULK_EDIT_COMPANY_LIMIT_REMOVE_FROM_WATCHLIST);\n\n const listDetailCountBatch = listDetailCount - companiesBatch.length;\n const company_ids = companiesBatch.map(company => company.company_id);\n\n const selectedCompaniesCount: number = yield select(\n bulkActionsSelectors.editFields.selectedCompaniesCount\n );\n\n const { pageNumber, pageSize } = yield select(paginationSelectors.getPagination('lists'));\n\n try {\n const res: AxiosResponse<BulkWatchlistResponse[]> = yield call(\n UserService.bulkRemoveFromWatchList,\n company_ids,\n listId\n );\n companies.splice(0, BULK_EDIT_COMPANY_LIMIT_REMOVE_FROM_WATCHLIST);\n const cancelSearch: boolean = yield select(bulkActionsSelectors.editFields.cancel);\n\n if (res.data) {\n const failedCompanies = res.data;\n const currentResults: CompanyBulkEditingResults[] = yield select(\n bulkActionsSelectors.editFields.results\n );\n const nextResults: CompanyBulkEditingResults[] = [];\n\n yield put(\n editFieldActions.updatePercentage(\n Math.round((BULK_EDIT_COMPANY_LIMIT_REMOVE_FROM_WATCHLIST / selectedCompaniesCount) * 100)\n )\n );\n\n companiesBatch.forEach(company => {\n const { company_id: id, company_url, company_name, raw_url } = company;\n const failedCompany = failedCompanies.filter(company => company.company_id === id);\n const errorMessage = failedCompany[0].message;\n\n nextResults.push({\n company_id: id,\n company_url,\n raw_url,\n company_name,\n sync_status: errorMessage === 'Success',\n error_reason: errorMessage === 'Success' ? '' : errorMessage,\n });\n });\n\n const finalResults = [...currentResults, ...nextResults];\n yield put(editFieldActions.saveResults(finalResults));\n }\n\n if (!cancelSearch) {\n if (companies.length) {\n yield put(\n actions.bulkRemoveFromWatchList({\n listId: listId,\n selectedCompanies: companies,\n listDetailCount: listDetailCountBatch,\n isRemoveFromAddonManagement,\n })\n );\n } else {\n yield put(editFieldActions.updateProgress(false));\n yield put(editFieldActions.updateCompleted(true));\n yield put(editFieldActions.updatePercentage(100));\n\n if (listId !== 'favorites') {\n yield put(\n listActions.updateFavoriteListCount({\n list_id: listId,\n count: listDetailCountBatch,\n })\n );\n }\n\n yield take(searchActions.initialCompaniesSearch);\n\n if (listDetailCountBatch === 0) {\n const isSourceScrub = window.location.pathname.substr(1).startsWith('ss');\n\n if (isSourceScrub) {\n yield put(push(LISTS_ROUTES.sourceScrubLists));\n } else {\n yield put(push(LISTS_ROUTES.myWatchList));\n }\n } else {\n // if current page is the last and all companies were removed, then set pagination to the new last (previous)\n const newLastPageNumber = Math.ceil(listDetailCountBatch / pageSize);\n const shouldAdjustPagination = pageNumber !== 1 && pageNumber > newLastPageNumber;\n\n if (shouldAdjustPagination) {\n yield put(\n paginationActions.changePagination({\n gridKey: 'lists',\n data: { pageNumber: pageNumber - 1, pageSize },\n })\n );\n }\n }\n }\n } else {\n yield put(editFieldActions.updateProgress(false));\n yield put(editFieldActions.updateCompleted(true));\n yield put(editFieldActions.cancel(false));\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n\n if (listId !== 'favorites') {\n yield put(\n listActions.updateFavoriteListCount({\n list_id: listId,\n count: listDetailCountBatch,\n })\n );\n }\n }\n } catch (e: any) {\n const message = getErrorMessage(e, 'Failed to remove to Watchlist!');\n yield put(editFieldActions.updateProgress(false));\n yield put(editFieldActions.updateCompleted(true));\n yield put(editFieldActions.updatePercentage(100));\n\n NotificationService.error(message);\n }\n}\n\nexport default function* bulkEditSaga() {\n yield takeLatest(actions.bulkAddToWatchList, bulkAddToWatchListSaga);\n yield takeLatest(actions.bulkRemoveFromWatchList, bulkRemoveFromWatchListSaga);\n}\n","import styled from 'styled-components';\nimport { Divider as dividerComp } from 'antd';\n\nconst CreateListWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: 60px;\n\n button {\n &.btn-create-list {\n &-closed {\n height: max-content;\n padding-top: 0;\n padding-bottom: 0;\n }\n }\n }\n`;\n\nconst Divider = styled(dividerComp)`\n margin: 30px 0 20px -30px;\n width: calc(100% + 60px);\n`;\n\nexport const Styled = {\n CreateListWrapper,\n Divider,\n};\n","import React, { useState, useContext, Context, useEffect, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Input, Space, Typography } from 'antd';\nimport { CloseOutlined } from '@ant-design/icons';\nimport { ValueType } from 'react-select';\nimport styled from 'styled-components';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n// constants\nimport { FAVORITE_LIST_SELECT_OPTIONS } from '@optx/constants/lists';\n// redux\nimport {\n selectors as watchListsPopupSelectors,\n actions as watchListsActions,\n} from '@redux/favorite-lists/lists-popup';\n// components\nimport { MultiSelectCreatable, SingleSelect } from '@optx/shared/view/molecules/Select';\n// styles\nimport { Styled } from './EditWatchlist.styled';\n\ninterface EditWatchListProps {\n context: Context<BulkEditFieldContext>;\n}\n\nconst { Text } = Typography;\n\nconst ErrorMessage = styled(Text)`\n position: absolute;\n bottom: -35px;\n left: 0;\n font-size: 14px;\n`;\n\nexport const EditWatchList: React.FC<EditWatchListProps> = ({ context }) => {\n const { setSelectedData } = useContext(context);\n const [title, setTitle] = useState('');\n const [isCreateList, setIsCreateList] = useState(false);\n const [watchListError, setWatchListError] = useState({ title: 'duplicating', status: false });\n const [selectedValue, setSelectedValue] = useState<SelectOption[]>([]);\n const [selectBoxOptions, setSelectBoxOptions] = useState<SelectOption[]>([]);\n const [newLists, setNewLists] = useState<SelectOption[]>([]);\n\n const dispatch = useDispatch();\n const sortActive = useSelector(watchListsPopupSelectors.getSortSelect);\n const defaultValue = [\n {\n value: sortActive.value,\n label: sortActive.label,\n },\n ];\n useEffect(() => {\n setSelectBoxOptions([...newLists, ...selectOptions]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sortActive]);\n\n const getWatchlistsById = useSelector(watchListsPopupSelectors.getWatchlistsById());\n\n const selectOptions = getWatchlistsById.map(list => ({\n value: list.unique_id as string,\n label: `${list.title} (@${list.owner_name}) - (${list.count})`,\n isET: list.is_et_group,\n isPublic: list.is_public,\n }));\n\n const closeCreateList = () => {\n setTitle('');\n setIsCreateList(false);\n setWatchListError(prev => {\n return { ...prev, status: false };\n });\n };\n\n const handleCreateOption = (option: string, fromInput?: string) => {\n const newOption = {\n value: option,\n label: option,\n isET: false,\n isPublic: false,\n className: 'primary',\n };\n\n const options = selectBoxOptions;\n setNewLists(prevState => [newOption as SelectOption, ...prevState]);\n setSelectBoxOptions([newOption, ...options]);\n\n // @ts-ignore\n setSelectedValue(prevState => [...prevState, newOption as SelectOption]);\n setSelectedData([newOption as SelectOption].concat(selectedValue));\n setWatchListError(prev => {\n return { ...prev, status: false };\n });\n };\n\n const handleTitleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setWatchListError(prev => {\n return { ...prev, status: false };\n });\n setTitle(event.target.value);\n };\n\n const changeButtonAction = () => {\n if (!isCreateList) {\n setTitle('');\n setIsCreateList(true);\n } else if (title.length) {\n const listTitleIndex = getWatchlistsById.findIndex(x => x.title === title.trim());\n const selectedValueTitleIndex = selectedValue.findIndex(x => x.label === title.trim());\n const inCurrentList = selectBoxOptions.findIndex(x => x.label === title.trim());\n\n if (listTitleIndex !== -1 || selectedValueTitleIndex !== -1 || inCurrentList !== -1) {\n setWatchListError({ title: 'duplicating', status: true });\n } else if (!title.trim().length) {\n setWatchListError({ title: 'without chars', status: true });\n } else {\n handleCreateOption(title.trim(), 'but');\n setIsCreateList(false);\n }\n }\n };\n\n const handleSorting = useCallback(\n (selectedValue: ValueType<SelectOption>) => {\n dispatch(\n watchListsActions.sortFavoriteListsPopup({\n sorting: (selectedValue as SelectOption).value,\n })\n );\n },\n [dispatch]\n );\n\n return (\n <>\n <Typography.Text className=\"ant-modal-title\">Select Watchlist(s)</Typography.Text>\n\n <MultiSelectCreatable\n options={selectBoxOptions.length ? selectBoxOptions : selectOptions}\n onChange={option => {\n // @ts-ignore\n setSelectedValue(option as SelectOption);\n setSelectedData([option as SelectOption].flat());\n }}\n onCreateOption={handleCreateOption}\n value={selectedValue}\n menuIsOpen\n className=\"bulk-action-multiselect\"\n />\n\n <Styled.Divider />\n\n <Space style={{ marginBottom: 20, display: 'block' }}>\n <SingleSelect\n className=\"watch-list__sorting bulk-action-watch-list__sorting\"\n dropdownClassName=\"watch-list__sorting-dropdown\"\n bordered={false}\n valuePrefix=\"Sort list menu by:\"\n value={defaultValue}\n SearchIcon={false}\n options={FAVORITE_LIST_SELECT_OPTIONS}\n onChange={handleSorting}\n />\n </Space>\n\n <Styled.CreateListWrapper>\n {isCreateList && (\n <>\n <Input\n type=\"text\"\n name=\"title\"\n value={title}\n className={watchListError.status ? 'error' : ''}\n placeholder=\"Watchlist Name\"\n onChange={handleTitleChange}\n />\n {watchListError.status && (\n <ErrorMessage type=\"danger\">\n {watchListError.title === 'duplicating'\n ? 'List already exists'\n : 'List title should have at least 1 char'}\n </ErrorMessage>\n )}\n </>\n )}\n\n <Button\n type={isCreateList ? 'primary' : 'default'}\n disabled={isCreateList && title.length === 0}\n onClick={changeButtonAction}\n className={isCreateList ? 'btn-create-list-opened' : 'btn-create-list-closed'}\n >\n {`+ ${isCreateList ? 'Create List' : 'Add New List'}`}\n </Button>\n\n {isCreateList && <CloseOutlined onClick={closeCreateList} />}\n </Styled.CreateListWrapper>\n </>\n );\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\n\nexport const toggleSaveSearchModal = createAction<string | number | undefined>(\n types.TOGGLE_SAVE_SEARCH\n);\n","export const TOGGLE_SAVE_SEARCH = 'TOGGLE_SAVE_SEARCH';\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { SaveSearchDialogState } from '@redux/ui/modals/save-search/interfaces';\n// redux\nimport { toggleReducer } from '@redux/feature/toggle/reducers';\nimport { toggleSaveSearchModal } from './actions';\n\nconst initialState: SaveSearchDialogState = {\n isOpen: false,\n};\n\nconst toggleSaveSearchModalReducer: CaseReducer<\n SaveSearchDialogState,\n PayloadAction<string | number | undefined>\n> = (draftState, action) => {\n draftState.isOpen = toggleReducer(draftState.isOpen);\n\n if (action.payload) {\n draftState.id = action.payload;\n } else if (draftState.id && !draftState.isOpen) {\n draftState.id = undefined;\n }\n};\n\nconst saveSearchReducer = createReducer(initialState, builder =>\n builder.addCase(toggleSaveSearchModal, toggleSaveSearchModalReducer)\n);\n\nexport default saveSearchReducer;\n","import React, { useMemo } from 'react';\nimport AsyncSelect from 'react-select/async';\nimport { SelectComponents } from 'react-select/src/components';\n// interface\nimport { SelectOption } from '@optx/models/Option';\n// components\nimport { ValueContainer, DropdownIndicator } from '../components';\n// Local\nimport { AsyncSelectProps } from '../interfaces';\nimport { Styled } from '../MultiSelect/MultiSelect.styled';\nimport { isOptionDisabled } from '../utils';\n\nconst defaultComponents: Partial<SelectComponents<SelectOption>> = {\n ValueContainer,\n DropdownIndicator,\n};\n\nconst AsyncSingleSelect: React.FC<AsyncSelectProps> = ({\n className,\n components,\n value,\n ...restProps\n}) => {\n const selectComponents = useMemo(() => {\n if (components) {\n return {\n ...defaultComponents,\n ...components,\n };\n }\n\n return defaultComponents;\n }, [components]);\n\n return (\n <Styled.MultiSelectWrapper className={className}>\n <AsyncSelect\n components={selectComponents}\n value={value}\n {...restProps}\n // Leave properties at the end to not be overriden.\n backspaceRemovesValue={false}\n isMulti={false}\n />\n </Styled.MultiSelectWrapper>\n );\n};\n\nAsyncSingleSelect.defaultProps = {\n placeholder: 'search',\n classNamePrefix: 'multiselect',\n isClearable: false,\n hideSelectedOptions: false,\n closeMenuOnSelect: false,\n controlShouldRenderValue: false,\n isOptionDisabled,\n};\n\nexport default AsyncSingleSelect;\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { types } from '../types';\nimport { AnalystResponse, CompanyChecklistResponse } from '../../models';\nimport { SortByRule } from '@optx/models/table/sorting';\n\n// analyst\nexport const fetchAnalyst = createAction<SortByRule<any>[] | undefined>(types.search.FETCH_ANALYST);\nexport const fetchAnalystSuccess = createAction<AnalystResponse>(\n types.search.FETCH_ANALYST_SUCCESS\n);\nexport const fetchAnalystFail = createAction<string>(types.search.FETCH_ANALYST_FAIL);\n\n// company\nexport const fetchCompany = createAction<SortByRule<any>[] | undefined>(types.search.FETCH_COMPANY);\nexport const fetchCompanySuccess = createAction<CompanyChecklistResponse>(\n types.search.FETCH_COMPANY_SUCCESS\n);\nexport const fetchCompanyFail = createAction<string>(types.search.FETCH_COMPANY_FAIL);\n","import * as Yup from 'yup';\nimport moment, { Moment } from 'moment';\nimport { isArray, isEqual } from 'lodash';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { FinancialFieldRangeValue } from '@optx/models/Company';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { validateField } from './editFields';\n\nexport const financialYearValidationSchema = ({\n ebitdaOptions,\n revenueOptions,\n arrOptions,\n gmOptions,\n}: {\n ebitdaOptions: SelectOption[];\n revenueOptions: SelectOption[];\n arrOptions: SelectOption[];\n gmOptions: SelectOption[];\n}) =>\n Yup.object({\n year: Yup.number().required('Year is required'),\n estimated: Yup.boolean().required('Estimated is required'),\n arr: Yup.string().test('isValid', 'Valid', value => {\n if (value === undefined) {\n return true;\n }\n\n return validateField(value, 'ARR', arrOptions, false);\n }),\n ebitda: Yup.string().test('isValid', 'Valid', value => {\n if (value === undefined) {\n return true;\n }\n\n return validateField(value, 'EBITDA', ebitdaOptions, false);\n }),\n revenue: Yup.string().test('isValid', 'Valid', value => {\n if (value === undefined) {\n return true;\n }\n\n return validateField(value, 'Revenue', revenueOptions, false);\n }),\n gm: Yup.mixed().test('isValid', 'Valid', value => {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'undefined') {\n if (value === undefined || value === DEFAULT_EMPTY_VALUE) {\n return true;\n }\n\n return validateField(value, 'GM %', gmOptions, false);\n }\n\n return false;\n }),\n });\n\nexport const checkFinancialValues = (\n value: string | number | FinancialFieldRangeValue,\n financialType: string,\n listOfYears: SelectOption<string>[],\n isEditable: boolean,\n options: SelectOption[]\n) => {\n if (financialType === 'year' && !isEditable) {\n const mostRecentYearAvailable = listOfYears.find(list => list.disabled === false);\n\n return isNaN(Number(mostRecentYearAvailable?.value))\n ? ''\n : Number(mostRecentYearAvailable?.value);\n }\n\n if (typeof value === 'object') {\n const option = options.find(option => isEqual(option.rangeValue, value));\n\n return option?.label;\n }\n\n if (typeof value === 'string' || financialType === 'gm' || financialType === 'year') {\n if (value === DEFAULT_EMPTY_VALUE || value === '') {\n return '';\n }\n\n return value;\n }\n\n return isNaN(value / 1000000) ? '' : value / 1000000;\n};\n\n/**\n * Checks if the selected value is equal to the current value.\n * @param {(string|number|string[]|undefined|null|Moment)} selectedValue - The value selected by the user.\n * @param {(string|undefined|number|null|string[]|Moment)} currentValue - The current value.\n * @returns {boolean} - Returns true if the selected value is equal to the current value, false otherwise.\n */\nexport const checkSaveButton = (\n selectedValue: string | number | string[] | undefined | null | Moment,\n currentValue: string | undefined | number | null | string[] | Moment\n) => {\n if (isArray(selectedValue) && isArray(currentValue)) {\n const selectedValueArray = [...selectedValue].sort();\n const currentValueArray = [...currentValue].sort();\n\n return isEqual(selectedValueArray, currentValueArray);\n }\n\n if (\n isEqual(selectedValue, currentValue) ||\n selectedValue === undefined ||\n (currentValue === null && selectedValue === '') ||\n (currentValue === 0 && Number.isNaN(selectedValue)) ||\n (currentValue === 0 && selectedValue === null) ||\n (currentValue === undefined && selectedValue === '') ||\n (moment.isMoment(currentValue) && !moment(selectedValue).isValid())\n ) {\n return true;\n }\n\n return false;\n};\n","import { CompanyUserContact, ContactPhone, PhoneType } from '@models/api/contacts';\nimport { message } from 'antd';\n// models\nimport { EquityTouchDatabaseMatch } from '@models/equityTouch';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { CONTACT_SELECT_LIMIT } from '@optx/constants/contacts';\n\n/**\n * Get identifier for contact.\n * person_id is not enough as identifier because we can have same person with multiple companies.\n * @param user user contact.\n */\nexport const getContactId = (contact: CompanyUserContact) =>\n `${contact.person_id}-${contact.company_id}`;\n\n/**\n * when a user selects a phone type we also need to send the phone type name\n * and set is_primary property for each phone item\n * @param {Partial<CompanyUserContact>} contactInformation contact data\n * @param {EquityTouchDatabaseMatch[]} phoneOptions available options for phone types\n */\nexport const mapPhoneNumbers = (\n contactInformation: Partial<CompanyUserContact>,\n phoneOptions: EquityTouchDatabaseMatch[]\n) => {\n const phoneList: ContactPhone[] = [];\n\n if (\n contactInformation &&\n contactInformation.additional_phones &&\n contactInformation.additional_phones.length\n ) {\n const phones = contactInformation.additional_phones.filter(\n phone => phone.phone_number && phone.phone_type_id\n );\n\n phones.forEach(phone => {\n const phoneOption = phoneOptions.find(\n option => Number(option.itemId) === phone.phone_type_id\n );\n\n if (phoneOption) {\n phoneList.push({\n ...phone,\n phone_type: phoneOption.text as PhoneType,\n // for now send all phones with is_primary set to false\n is_primary: false,\n });\n }\n });\n }\n\n return phoneList;\n};\n\n/**\n * function to get phone numbers from api response\n * to the additional phones\n * @param {CompanyUserContact} contact\n */\nexport const getPhoneNumbers = (\n contact: Partial<CompanyUserContact>,\n phoneOptions: SelectOption[]\n) => {\n const {\n phone: existingPhone,\n additional_phones: additionalPhones,\n phone_type: phoneType,\n } = contact;\n const filteredByType = phoneOptions.find(item => item.label === phoneType);\n\n // if we only have phone prop just send it back\n if (!additionalPhones?.length && existingPhone) {\n return [\n {\n phone_number: existingPhone,\n phone_type_id: filteredByType ? Number(filteredByType.value) : undefined,\n is_primary: true,\n },\n ];\n }\n\n // if we have both properties populated, send them both back,\n // considering phone prop being the primary phone and displaying first\n if (additionalPhones?.length && existingPhone) {\n // don't concatenate if existing phone is already included in additional phones\n if (additionalPhones.some(phone => phone.phone_number === existingPhone)) {\n return additionalPhones;\n }\n\n return (\n [\n {\n phone_number: existingPhone as string,\n phone_type_id: filteredByType ? Number(filteredByType.value) : undefined,\n is_primary: true,\n },\n ] as ContactPhone[]\n ).concat(additionalPhones);\n }\n\n // if only additional_phones prop has data send it back.\n // this usually happens when user doesn't have any phones and adds some through UI\n if (additionalPhones?.length && !existingPhone) {\n return additionalPhones;\n }\n\n return [{ phone_number: '', phone_type_id: undefined }];\n};\n\n/**\n * check whether a contact has an email set\n * @param {CompanyUserContact} contact contact data\n */\nexport const hasEmail = (contact: CompanyUserContact) => {\n if (contact.email) {\n return true;\n }\n\n if (contact.emails && contact.emails.length && contact.emails.some(email => !!email.email)) {\n return true;\n }\n\n return false;\n};\n\n/**\n * limit number of selected contacts and show error message\n * @param {number} count number of selected contacts\n */\nexport const validateContactLimit = (count: number) => {\n if (count > CONTACT_SELECT_LIMIT) {\n message.error(`Cannot select more than ${CONTACT_SELECT_LIMIT} contacts`);\n\n return false;\n }\n\n return true;\n};\n\n/**\n * format data coming from edit contact form\n * @param {Partial<CompanyUserContact>} contactInformation\n * @param {EquityTouchDatabaseMatch[]} phoneOptions\n */\nexport const formatEditContactForm = (\n contactInformation: Partial<CompanyUserContact>,\n phoneOptions: EquityTouchDatabaseMatch[]\n) => {\n const {\n psg_function: psgFunction,\n slack_channel: slackChannel,\n phone: existingPhone,\n ...rest\n } = contactInformation;\n // .map() gives an error if used on a variable with multiple types, fixed with any[]\n const psgValues = psgFunction\n ? (psgFunction as any[]).map((item: SelectOption<string> | string) => {\n if (typeof item === 'string') {\n return item;\n }\n\n return item.value;\n })\n : [];\n // .map() gives an error if used on a variable with multiple types, fixed with any[]\n const slackChannelValues = slackChannel\n ? (slackChannel as any[])?.map((item: SelectOption<string> | string) => {\n if (typeof item === 'string') {\n return item;\n }\n\n return item.value;\n })\n : [];\n const editedValues: Partial<CompanyUserContact> = {\n psg_function: psgValues ? (psgValues as Array<string>) : [],\n slack_channel: psgValues ? (slackChannelValues as Array<string>) : [],\n\n ...rest,\n phone:\n contactInformation.additional_phones && contactInformation.additional_phones.length === 1\n ? contactInformation.additional_phones.filter(value => value.phone_number !== undefined)[0]\n .phone_number\n : existingPhone,\n email: contactInformation.emails\n ? contactInformation.emails\n .filter(value => value.email !== '')\n .map(value => value.email)\n .join(',')\n : '',\n additional_phones: mapPhoneNumbers(contactInformation, phoneOptions),\n };\n\n return editedValues;\n};\n\n/**\n * map options for psg function and slack channel\n * @param {string} field\n */\nexport const mapToSelectOptions = (field: Array<string>) => {\n // If there are no values the api sends [\"\"] and we need to format that\n const editedData: Array<SelectOption> = [];\n\n if (!field || field[0] === '') {\n return [];\n }\n\n field.forEach(i => {\n editedData.push({ label: i, value: i });\n });\n\n return editedData;\n};\n","import { Dictionary, groupBy } from 'lodash';\nimport { GroupType } from 'react-select';\n// models\nimport { BaseFilter, FilterSource, MultiSelectFilter, FilterOptions } from '@models/filters';\nimport Option, { DateRangeOption, SelectOption } from '@models/Option';\nimport { Identifiable } from '@optx/models/Identifiable';\nimport { mapToSelectOption } from '../option';\n\n/**\n * Generate options for filters.\n * OBS: Some filters will not include options.\n * @return {object} dictionary with column key and options as value.\n */\nexport function mapFiltersOptions(sources: Array<FilterSource>) {\n const filtersOptions: Dictionary<FilterOptions> = {};\n\n sources.forEach(source => {\n if (source.data) {\n (source.data as Array<BaseFilter>).forEach(filter => {\n switch (filter.type) {\n case 'range_input': {\n // const options: Array<FormCheckableRangeOption> = getRangeInputOptions(\n // filter as RangeFilter<[RangeOptionBase, SelectOption]>\n // );\n\n // preselectedFilters[filter.column] = options;\n break;\n }\n\n case 'checkbox': {\n // const options = getCheckboxOptions(filter, includePreselected);\n // preselectedFilters[filter.column] = options;\n // // custom option\n // const customOption = getCheckboxCustomOption(filter as MultiCheckboxFilter);\n\n // if (customOption) {\n // preselectedFilters[`${filter.column}_custom`] = customOption;\n // }\n\n break;\n }\n\n case 'multi_text': {\n // const options = getMultiTextOptions(\n // filter as BaseFilter<Array<{ name: string; placeholder?: string }>>\n // );\n // preselectedFilters[filter.column] = options;\n break;\n }\n\n case 'logic_checkbox': {\n // const options = getLogicCheckboxOptions(\n // filter as BaseFilter<Array<LogicOptionResponse>>\n // );\n // preselectedFilters[filter.column] = options;\n break;\n }\n\n case 'multiple_range_nr': {\n // const options = getMultiRangeNumberOptions(filter as MultiRangeNumberFilter);\n // preselectedFilters[filter.column] = options;\n // // custom option\n // const customOption = getMultiRangeCustomOption(filter as MultiRangeNumberFilter);\n\n // if (customOption) {\n // preselectedFilters[`${filter.column}_custom`] = customOption;\n // }\n\n break;\n }\n\n case 'date_range': {\n // const options = getDateRangeOptions(filter as RangeFilter<null>);\n // preselectedFilters[filter.column] = options;\n break;\n }\n\n case 'date_range_radio': {\n const options = getDateRangesOptions(filter as BaseFilter<Array<DateRangeOption>>);\n filtersOptions[filter.column] = options;\n break;\n }\n\n case 'radio': {\n filtersOptions[filter.column] = getRadioOptions(filter as BaseFilter<Array<Option>>);\n break;\n }\n\n case 'multi_select': {\n const options = getMultiSelectOptions(filter as MultiSelectFilter<Array<Option>>);\n filtersOptions[filter.column] = options;\n\n break;\n }\n\n case 'single_select': {\n const options = getSingleSelectOptions(filter);\n filtersOptions[filter.column] = options;\n\n break;\n }\n\n default:\n break;\n }\n });\n }\n });\n\n return filtersOptions;\n}\n\nexport function getRadioOptions(filter: BaseFilter<Array<Option>>) {\n const options = filter.data.map(option => mapToSelectOption(option));\n\n return options;\n}\n\nexport function getMultiSelectOptions(filter: MultiSelectFilter<Array<Option>>) {\n if (filter.data.some(option => option.group)) {\n const groupedOptions = groupBy(filter.data, 'group' as keyof Option);\n const data: Array<GroupType<SelectOption> | SelectOption> = [];\n\n // Keep included groups in order not to add the same group in options.\n const addedGroups: Array<string> = [];\n\n // Add options in the same order they are received.\n filter.data.forEach(option => {\n if (!option.group) {\n // Add single option.\n data.push(mapToSelectOption(option));\n } else if (!addedGroups.find(item => item === option.group)) {\n // Add grouped options.\n addedGroups.push(option.group);\n\n data.push({\n label: option.group,\n options: groupedOptions[option.group].map(groupOption => ({\n label: groupOption.name as string,\n value: groupOption.value.toString(),\n disabled: groupOption.disabled,\n })),\n });\n }\n });\n\n return data;\n }\n\n const data: Array<SelectOption> = filter.data.map(option => mapToSelectOption(option));\n\n return data;\n}\n\nexport function getDateRangesOptions(\n filter: BaseFilter<Array<DateRangeOption>>\n): Array<Identifiable<DateRangeOption>> {\n return filter.data.map(item => ({ ...item, id: Symbol(filter.column) }));\n}\n\nexport function getSingleSelectOptions(filter: BaseFilter<Array<Option>>) {\n return filter.data.map(option => mapToSelectOption(option));\n}\n\n/**\n * Reorder options for Analysts user by custom.\n * @param data all options after grouped mapping.\n */\nexport function orderAnalystsByCustom(data: Array<SelectOption>) {\n const order = ['UK Team', 'US Team', 'Other', 'Past Users'];\n\n return data.sort((a: SelectOption, b: SelectOption) => {\n return order.indexOf(a.label) - order.indexOf(b.label);\n });\n}\n\n/**\n * Reorder options for location by custom.\n * @param data all options after grouped mapping.\n */\nexport function orderLocationByCustom(data: Array<SelectOption>) {\n const order = ['All regions', 'North America + Israel', 'Europe'];\n\n return data.sort((a: SelectOption, b: SelectOption) => {\n return order.indexOf(a.label) - order.indexOf(b.label);\n });\n}\n","import { SelectedCompaniesKeys } from '@models/bulkActions';\nimport {\n EquityTouchKeys,\n EquityTouchContactKeys,\n EquityTouchContactForm,\n} from '@models/equityTouch';\n\n/* list of fields to be displayed within a container\n this model is used for positioning the fields on the page and determine their width\n each main array item represents the fields to be displayed on a single row\n and the items inside the secondary array are the fields to be displayed on that row\n empty string is used when there is only one field on a row that should take half the width\n*/\nexport const companyInfo = [\n ['Company Name', 'Company Type'],\n ['addressLine1', 'Website'],\n ['City', 'State', 'Country'],\n ['Sector', 'Sub-Sector'],\n ['Product Category'],\n ['Source', ''],\n ['Description Source'],\n ['Description'],\n] as Array<Array<EquityTouchKeys>>;\n\n// same as above\nexport const psgContext = [\n ['Deal Team Lead', 'Fund'],\n ['Groups', ''],\n ['Equity Check', 'Stage'],\n ['Rank', 'Website Global Rank'],\n ['Website US Rank', 'FTEs'],\n ['Funding', 'Investors'],\n ['Add-On For', 'Add-On'],\n ['Rationale'],\n] as Array<Array<EquityTouchKeys>>;\n\nexport const sector = [['Sector', '']] as Array<Array<EquityTouchKeys>>;\n\nexport const BULK_ACTIONS_FIELDS: SelectedCompaniesKeys[] = [\n 'company_id',\n 'company_url',\n 'raw_url',\n 'company_name',\n 'stage',\n 'pipeline_rank',\n 'company_owner',\n 'company_owner_id',\n 'addon',\n 'addon_bool',\n 'is_software',\n 'is_interesting',\n 'score',\n 'score_v3',\n 'is_in_et',\n 'cs_tags',\n 'company_type',\n 'num_employees',\n 'street',\n 'city',\n 'state',\n 'country',\n 'sector',\n 'sub_sector',\n 'product_category',\n 'source',\n 'company_description',\n 'addon_to',\n 'sw_website_rank',\n 'sw_website_rank_per_country',\n 'contacts',\n 'year_founded',\n 'location',\n 'url_status',\n 'lead_source',\n 'senior_advisor_thesis',\n 'asking_amount',\n];\n\nexport const BULK_ACTIONS_CONTACT_FIELDS: EquityTouchContactKeys[] = [\n 'first_name',\n 'last_name',\n 'full_name',\n 'title',\n 'additional_phones',\n 'phones',\n 'phone',\n 'phone_type',\n 'email',\n 'linkedin',\n 'primary_contact',\n 'tenure_start_date',\n 'tenure_end_date',\n 'person_id',\n 'company_id',\n 'psg_function',\n 'slack_channel',\n 'portfolio_executive',\n];\n\nexport const EQT_CONTACT_FORM_INITIAL_STATE: EquityTouchContactForm = {\n first_name: '',\n last_name: '',\n title: '',\n additional_phones: [{ phone_number: '', phone_type_id: undefined }],\n tenure_start_date: '',\n tenure_end_date: '',\n linkedin: '',\n primary_contact: false,\n emails: [{ email: '' }],\n email: null,\n portfolio_executive: false,\n};\n\nexport const AUTOSAVE_TIMER_DURATION = 1500;\n","import { call, put, takeLatest, select, takeEvery } from 'redux-saga/effects';\nimport queryString from 'query-string';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// models\nimport Company from '@optx/models/Company';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { FilterTag } from '@optx/models/tags';\nimport { ApplyFiltersPayload } from '../interfaces';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { AnalystResponse } from '@optx/features/checklist-research-insights/models/analyst';\nimport { ColumnWidth } from '@models/table/Columns';\nimport { ColumnKeys } from '../../models/grid';\nimport { CompanyChecklist } from '@optx/features/checklist-research-insights/models/company';\nimport { Analyst } from '@optx/features/checklist-research-insights/models/analyst';\n// services\nimport { AnalystService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// constants\nimport { DEFAULT_SORT_ANALYST, DEFAULT_SORT_COMPANIES } from '../../constants/table';\nimport routes from '@constants/routes';\nimport {\n analystColumnDisplayInitialState,\n companyColumnDisplayInitialState,\n} from '@optx/constants/table/columnDisplay/checklist-research-insights';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\nimport mapFiltersToURLParams from '@optx/utils/filters/mapFiltersToURLParams';\nimport { mapSortQuery } from '@optx/utils/search';\n// redux\nimport { actions as scrollHistoryActions } from '@features/scroll-history';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { actions as searchKeyActions } from '@features/grid/searchkey';\nimport { actions as searchCountActions } from '@features/grid/search-count';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport { actions } from '../actions';\nimport { selectors } from '../selectors';\nimport {\n actions as userInformationActions,\n selectors as userSelectors,\n} from '@redux/user/information';\nimport { CardsState } from '../interfaces';\n\nexport function* fetchAnalystSaga(action: PayloadAction<SortByRule<any>[] | undefined>) {\n const newSortBy = action.payload;\n const { normalized, filter } = yield select(selectors.filters.getFilters);\n const normalizedFilter = {\n ...filter,\n ...(filter.user_id && {\n user_id: filter.user_id.length === 0 ? [''] : filter.user_id,\n }),\n };\n\n const sortBy: SortByRule<any>[] = newSortBy\n ? newSortBy\n : yield select(sortSelectors.getSorting('checklistResearchInsights'));\n const query: string = yield select(selectors.filters.searchKey);\n const pagination: PageInfo = yield select(\n paginationSelectors.getPagination('checklistResearchInsights')\n );\n\n const convertSortBy = mapSortQuery(sortBy);\n const queryDataForRequest = {\n ...convertSortBy,\n ...mapFiltersToURLParams(normalized, normalizedFilter, undefined, {\n dateRangeFormatUpperLower: true,\n }),\n rationale_report_query: query || '',\n page: pagination.pageNumber,\n per_page: pagination.pageSize,\n };\n\n if ('query' in queryDataForRequest) {\n delete queryDataForRequest.query;\n }\n\n const payloadForRequest = queryString.stringify(queryDataForRequest, {\n arrayFormat: 'comma',\n });\n\n const queryDataForSettings = {\n ...convertSortBy,\n ...mapFiltersToURLParams(normalized, normalizedFilter),\n rationale_report_query: query || '',\n page: pagination.pageNumber,\n per_page: pagination.pageSize,\n };\n\n if ('query' in queryDataForSettings) {\n delete queryDataForSettings.query;\n }\n\n const payloadForSettings = queryString.stringify(queryDataForSettings, {\n arrayFormat: 'comma',\n });\n\n try {\n const res: AxiosResponse<AnalystResponse> = yield call(\n AnalystService.getAnalystChecklistInsight,\n payloadForRequest\n );\n\n if (res.data) {\n const columnsWidth: Dictionary<number> = yield select(userSelectors.columnWidthsChecklist);\n const response = {\n ...res.data,\n userColumnWidths: columnsWidth,\n };\n yield put(actions.search.fetchAnalystSuccess(response));\n\n if (newSortBy) {\n yield put(\n sortActions.changeSortSuccess({\n gridKey: 'checklistResearchInsights',\n data: newSortBy,\n })\n );\n }\n\n yield put(\n userInformationActions.updateUserSettings({\n checklist_insights_companies_filters: payloadForSettings,\n })\n );\n } else {\n const errorMessage = 'Failed to fetch Checklist Research Insights!';\n yield put(actions.search.fetchAnalystFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch Checklist Research Insights!');\n yield put(actions.search.fetchAnalystFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchCompanySaga(action: PayloadAction<SortByRule<any>[] | undefined>) {\n const newSortBy = action.payload;\n const { normalized, filter } = yield select(selectors.filters.getFilters);\n const normalizedFilter = {\n ...filter,\n ...(filter.user_id && {\n user_id: filter.user_id.length === 0 ? [''] : filter.user_id,\n }),\n };\n const sortBy: SortByRule<any>[] = newSortBy\n ? newSortBy\n : yield select(sortSelectors.getSorting('checklistResearchInsights'));\n const pagination: PageInfo = yield select(\n paginationSelectors.getPagination('checklistResearchInsights')\n );\n const query: string = yield select(selectors.filters.searchKey);\n\n const convertSortBy = mapSortQuery(sortBy);\n const queryDataForRequest = {\n ...convertSortBy,\n ...mapFiltersToURLParams(normalized, normalizedFilter, undefined, {\n dateRangeFormatUpperLower: true,\n }),\n query: query || '',\n page: pagination.pageNumber,\n per_page: pagination.pageSize,\n };\n\n const payloadForRequest = queryString.stringify(queryDataForRequest, {\n arrayFormat: 'comma',\n });\n\n const queryDataForSettings = {\n ...convertSortBy,\n ...mapFiltersToURLParams(normalized, normalizedFilter),\n query: query || '',\n page: pagination.pageNumber,\n per_page: pagination.pageSize,\n };\n\n const payloadForSettings = queryString.stringify(queryDataForSettings, {\n arrayFormat: 'comma',\n });\n\n const queryDataSearchCount = {\n ...convertSortBy,\n ...mapFiltersToURLParams(normalized, filter, undefined, {\n dateRangeFormatUpperLower: true,\n }),\n query: query || '',\n };\n const payloadSearchCount = queryString.stringify(queryDataSearchCount, {\n arrayFormat: 'comma',\n });\n\n try {\n const res: AxiosResponse<Company[]> = yield call(\n AnalystService.getCompanyChecklistInsight,\n payloadForRequest\n );\n\n if (res.data) {\n yield put(\n searchCountActions.searchCount({\n data: payloadSearchCount,\n gridKey: 'checklistResearchInsights',\n })\n );\n const columnsWidth: Dictionary<number> = yield select(userSelectors.columnWidthsChecklist);\n const response = {\n data: res.data,\n userColumnWidths: columnsWidth,\n };\n\n yield put(actions.search.fetchCompanySuccess(response));\n yield put(scrollHistoryActions.resetScrollHistory(routes.reports.checklistResearchInsights));\n\n if (newSortBy) {\n yield put(\n sortActions.changeSortSuccess({\n gridKey: 'checklistResearchInsights',\n data: newSortBy,\n })\n );\n }\n\n yield put(\n userInformationActions.updateUserSettings({\n checklist_insights_companies_filters: payloadForSettings,\n })\n );\n } else {\n const errorMessage = 'Failed to fetch Checklist Research Insights!';\n yield put(actions.search.fetchAnalystFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch Checklist Research Insights!');\n yield put(actions.search.fetchCompanyFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* fetchCardSaga() {\n const { normalized, filter } = yield select(selectors.filters.getFilters);\n const normalizedFilter = {\n ...filter,\n ...(filter.user_id && {\n user_id: filter.user_id.length === 0 ? [''] : filter.user_id,\n }),\n };\n const query: string = yield select(selectors.filters.searchKey);\n const defaultTableView: 'company' | 'analyst' = yield select(selectors.ui.defaultTableView);\n const defaultOptxScore: string = yield select(userSelectors.getDefaultScore);\n\n const queryData = {\n ...mapFiltersToURLParams(normalized, normalizedFilter, undefined, {\n dateRangeFormatUpperLower: true,\n }),\n ...(defaultTableView === 'company'\n ? { query: query || '' }\n : { rationale_report_query: query || '' }),\n };\n const payload = queryString.stringify(queryData, {\n arrayFormat: 'comma',\n });\n\n try {\n const res: AxiosResponse<\n Omit<CardsState, 'psgFit'> & { psg_fit: Record<string, string | null> }\n > = yield call(AnalystService.getCardInfoChecklistInsight, payload);\n\n if (defaultOptxScore === 'il') {\n res.data.score = res.data.il_optx_score;\n } else {\n res.data.score = res.data.optx_score;\n }\n\n delete res.data.optx_score;\n delete res.data.il_optx_score;\n\n yield put(actions.card.fetchCardSuccess(res.data));\n } catch (error: any) {\n const errorMessage = getErrorMessage(\n error,\n 'Failed to fetch Checklist Research Insights Card!'\n );\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* fetchChecklistResearchDataSaga(\n action: PayloadAction<\n | undefined\n | FilterTag\n | Partial<ApplyFiltersPayload>\n | { key: string; value: PreselectedFilter }\n | Array<SortByRule<any>>\n >\n) {\n const defaultTableView: 'company' | 'analyst' = yield select(selectors.ui.defaultTableView);\n\n yield put(\n paginationActions.changePagination({\n gridKey: 'checklistResearchInsights',\n data: {\n pageNumber: 1,\n pageSize: 50,\n },\n })\n );\n\n if (!action.payload) {\n yield put(searchKeyActions.setSearchKey({ data: '', gridKey: 'checklistResearchInsights' }));\n }\n\n if (action) {\n const tag = action.payload as FilterTag;\n const payload = action.payload as Partial<ApplyFiltersPayload>;\n\n if (tag && tag.filter === 'keyword') {\n yield put(searchKeyActions.setSearchKey({ data: '', gridKey: 'checklistResearchInsights' }));\n }\n\n if (payload && payload.searchKey) {\n yield put(\n searchKeyActions.setSearchKey({\n data: payload.searchKey,\n gridKey: 'checklistResearchInsights',\n })\n );\n }\n }\n\n if (defaultTableView === 'analyst') {\n yield put(actions.search.fetchAnalyst());\n } else {\n yield put(actions.search.fetchCompany());\n }\n\n yield put(actions.card.fetchCard());\n}\n\nfunction* toggleDefaultTableViewSaga() {\n const defaultTableView: 'company' | 'analyst' = yield select(selectors.ui.defaultTableView);\n const pagination: PageInfo = yield select(\n paginationSelectors.getPagination('checklistResearchInsights')\n );\n\n yield put(\n sortActions.resetSortSuccess({\n gridKey: 'checklistResearchInsights',\n data: defaultTableView === 'analyst' ? DEFAULT_SORT_ANALYST : DEFAULT_SORT_COMPANIES,\n })\n );\n\n yield put(actions.card.fetchCard());\n\n yield put(\n paginationActions.changePagination({\n gridKey: 'checklistResearchInsights',\n data: {\n pageNumber: 1,\n pageSize: pagination.pageSize,\n },\n })\n );\n yield put(\n userInformationActions.updateUserSettings({ checklist_insights_view_default: defaultTableView })\n );\n}\n\nexport function* saveColumnWidthSaga(action: PayloadAction<ColumnWidth>) {\n const { columnId, width, userSetting } = action.payload;\n const columnWidths: Dictionary<number> = yield select(userSelectors.columnWidthsChecklist);\n let newColumnWidths = { ...columnWidths };\n\n newColumnWidths = { ...newColumnWidths, ...{ [columnId as ColumnKeys]: width } };\n\n if (\n analystColumnDisplayInitialState[columnId as Exclude<keyof Analyst, 'analyst_id'>]?.width ===\n width\n ) {\n delete newColumnWidths[columnId as Exclude<keyof Analyst, 'analyst_id'>];\n }\n\n if (\n companyColumnDisplayInitialState[columnId as Exclude<keyof CompanyChecklist, 'company_id'>]\n ?.width === width\n ) {\n delete newColumnWidths[columnId as Exclude<keyof CompanyChecklist, 'company_id'>];\n }\n\n yield put(\n userInformationActions.updateUserSettings({\n [userSetting]: newColumnWidths,\n })\n );\n}\n\nexport default function* sourcingOutreachSaga() {\n yield takeEvery(actions.search.fetchAnalyst, fetchAnalystSaga);\n yield takeEvery(actions.search.fetchCompany, fetchCompanySaga);\n yield takeEvery(actions.card.fetchCard, fetchCardSaga);\n yield takeEvery(actions.ui.toggleDefaultTableView, toggleDefaultTableViewSaga);\n yield takeLatest(actions.filters.clearFilters, fetchChecklistResearchDataSaga);\n yield takeLatest(actions.filters.resetToDefault, fetchChecklistResearchDataSaga);\n yield takeLatest(actions.filters.applyFilters, fetchChecklistResearchDataSaga);\n yield takeLatest(actions.filters.updateFilters, fetchChecklistResearchDataSaga);\n yield takeLatest(actions.filters.resetFilter, fetchChecklistResearchDataSaga);\n}\n","import { AxiosResponse } from 'axios';\nimport { call, put, takeLatest } from 'redux-saga/effects';\n// services\nimport { FilterService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// models\nimport { FilterGroup } from '@models/filters';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n//redux\nimport { actions } from '../actions';\n\nexport function* fetchFiltersSaga() {\n try {\n const res: AxiosResponse = yield call(\n FilterService.getOptions,\n FilterGroup.ChecklistResearchInsightReport\n );\n\n if (res.data) {\n yield put(actions.filters.fetchSuccess(res.data.filters));\n } else {\n const errorMessage = 'Failed to fetch filters for Checklist Research Insights!';\n\n yield put(actions.filters.fetchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(\n error,\n 'Failed to fetch filters for Checklist Research Insights!'\n );\n\n yield put(actions.filters.fetchFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* filtersSaga() {\n yield takeLatest(actions.filters.fetch, fetchFiltersSaga);\n}\n","import { fork, put, takeLatest, take, select } from 'redux-saga/effects';\n// constants\nimport { DEFAULT_SORT_ANALYST, DEFAULT_SORT_COMPANIES } from '../../constants/table';\n// redux\nimport { actions as sortActions } from '@features/grid/sort';\nimport { actions as columnActions } from '@features/grid/columns';\nimport searchSagas from './search';\nimport filters from './filters';\nimport { actions } from '../actions';\nimport { selectors } from '../selectors';\n\nfunction* initSaga() {\n const filtersLoaded: boolean = yield select(selectors.filters.loaded);\n\n yield put(columnActions.fetchColumns({ gridName: 'checklistResearchInsights' }));\n\n if (!filtersLoaded) {\n yield put(actions.filters.fetch());\n yield take(actions.filters.fetchSuccess);\n const defaultTableView: 'company' | 'analyst' = yield select(selectors.ui.defaultTableView);\n yield put(actions.card.fetchCard());\n\n if (defaultTableView === 'analyst') {\n yield put(\n sortActions.resetSortSuccess({\n gridKey: 'checklistResearchInsights',\n data: DEFAULT_SORT_ANALYST,\n })\n );\n yield put(actions.search.fetchAnalyst());\n } else {\n yield put(\n sortActions.resetSortSuccess({\n gridKey: 'checklistResearchInsights',\n data: DEFAULT_SORT_COMPANIES,\n })\n );\n yield put(actions.search.fetchCompany());\n }\n }\n}\n\nexport function* saga() {\n yield fork(searchSagas);\n yield fork(filters);\n yield takeLatest(actions.init, initSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { FilterSource, PreselectedFilter } from '@models/filters';\nimport { FilterTag } from '@models/tags';\nimport { FilterMultiTextOption, SelectOption } from '@optx/models/Option';\nimport { UserInformation } from '@optx/models/user';\n// utils\nimport { normalizeFiltersByColumn } from '@utils/filters/normalize';\nimport { injectFilter } from '@utils/filters/injectFilter';\nimport { mapPreselectedFilters } from '@utils/filters/preselectedValues';\nimport { parseFilter } from '@optx/utils/filters/parseFilters';\n// redux\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { FiltersState, ApplyFiltersPayload } from '../interfaces';\nimport { actions } from '../actions';\n\nconst initialState: FiltersState = {\n data: [],\n filter: {},\n values: {},\n clear: {},\n preselected: {},\n persistedFilter: '',\n normalized: {},\n fetchedAt: null,\n searchKey: '',\n};\n\nconst fetchSuccessReducer: CaseReducer<FiltersState, PayloadAction<Array<FilterSource>>> = (\n draftState,\n action\n) => {\n const preselected = mapPreselectedFilters(action.payload, true, 0);\n draftState.preselected = preselected;\n const normalized = normalizeFiltersByColumn(action.payload);\n // @ts-ignore for now\n draftState.normalized = normalized;\n\n const defaultAnalysts: SelectOption[] = normalized.user_id.data.map((item: any) => ({\n label: item.name,\n value: item.value.toString(),\n }));\n\n if (draftState.persistedFilter !== '' && draftState.persistedFilter !== undefined) {\n const persistedFilter = draftState.persistedFilter;\n const [parsedFilters] = parseFilter(persistedFilter, action.payload);\n\n const parsedFiltersData = {\n ...parsedFilters,\n review_date: parsedFilters.review_date\n ? (parsedFilters.review_date as SelectOption[])\n : preselected.review_date,\n is_software: parsedFilters.is_software || preselected.is_software,\n psg_fit: parsedFilters.psg_fit || preselected.psg_fit,\n optx_score: parsedFilters.optx_score || preselected.optx_score,\n il_optx_score: parsedFilters.il_optx_score || preselected.il_optx_score,\n user_id: parsedFilters.user_id\n ? parsedFilters.user_id\n : parsedFilters.user_id === undefined && persistedFilter.includes('user_id')\n ? []\n : defaultAnalysts,\n };\n\n draftState.values = parsedFiltersData;\n draftState.filter = parsedFiltersData;\n\n if (parsedFilters.rationale_report_query) {\n draftState.searchKey = parsedFilters.rationale_report_query as string;\n } else if (parsedFilters.query) {\n draftState.searchKey = parsedFilters.query as string;\n }\n }\n\n if (draftState.persistedFilter === '') {\n const preselectedData = {\n ...preselected,\n user_id:\n (preselected.user_id as FilterMultiTextOption[]).length === 0\n ? defaultAnalysts\n : preselected.user_id,\n };\n draftState.values = preselectedData;\n draftState.filter = preselectedData;\n }\n\n draftState.clear = {\n ...preselected,\n user_id: defaultAnalysts,\n };\n draftState.preselected = {\n ...preselected,\n user_id: draftState.filter.user_id,\n };\n draftState.data = action.payload;\n draftState.fetchedAt = new Date().toISOString();\n};\n\nconst clearFiltersReducer: CaseReducer<FiltersState> = draftState => {\n draftState.filter = draftState.clear;\n draftState.values = draftState.clear;\n draftState.searchKey = '';\n};\n\nconst resetToDefaultReducer: CaseReducer<FiltersState> = draftState => {\n draftState.filter = draftState.preselected;\n draftState.values = draftState.preselected;\n draftState.searchKey = '';\n};\n\nconst applyFiltersReducer: CaseReducer<\n FiltersState,\n PayloadAction<Partial<ApplyFiltersPayload>>\n> = (draftState, action) => {\n if (action.payload && action.payload.filter) {\n draftState.filter = action.payload.filter;\n draftState.values = action.payload.filter;\n }\n\n if (action.payload) {\n draftState.searchKey = action.payload.searchKey ? action.payload.searchKey : '';\n }\n};\n\nconst resetFilterReducer: CaseReducer<FiltersState, PayloadAction<FilterTag>> = (\n draftState,\n action\n) => {\n const tag = action.payload;\n\n if (tag.filter === 'keyword') {\n draftState.searchKey = '';\n } else {\n const { normalized, clear, filter } = draftState;\n\n const newFilters = injectFilter(normalized, filter, clear, tag.filter, tag.optionId);\n draftState.filter = newFilters;\n draftState.values = newFilters;\n }\n};\n\nconst updateValueReducer: CaseReducer<\n FiltersState,\n PayloadAction<{ key: string; value: PreselectedFilter }>\n> = (draftState, action) => {\n const { key, value } = action.payload;\n draftState.filter = { ...draftState.filter, [key]: value };\n draftState.values = { ...draftState.values, [key]: value };\n};\n\n// External reducers\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccessReducer: CaseReducer<\n FiltersState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const filters = action.payload.settings.session_settings?.checklist_insights_companies_filters;\n\n if (filters) {\n draftState.persistedFilter = filters;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.filters.fetchSuccess, fetchSuccessReducer)\n .addCase(actions.filters.clearFilters, clearFiltersReducer)\n .addCase(actions.filters.resetToDefault, resetToDefaultReducer)\n .addCase(actions.filters.applyFilters, applyFiltersReducer)\n .addCase(actions.filters.resetFilter, resetFilterReducer)\n .addCase(actions.filters.updateFilters, updateValueReducer)\n // External reducer\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n);\n\nexport default reducer;\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { UserInformation } from '@optx/models/user';\nimport { UIState } from '../../interfaces';\n// redux\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { actions } from '../../actions';\n\nconst initialState: UIState = {\n defaultTableView: 'analyst',\n};\n\nconst toggleDefaultTableViewReducer: CaseReducer<UIState, PayloadAction<'company' | 'analyst'>> = (\n draftState,\n action\n) => {\n draftState.defaultTableView = action.payload;\n};\n\n// External reducers\nconst fetchUserInformationSuccessReducer: CaseReducer<UIState, PayloadAction<UserInformation>> = (\n draftState,\n action\n) => {\n const defaultView = action.payload.settings.session_settings?.checklist_insights_view_default;\n\n if (defaultView) {\n draftState.defaultTableView = defaultView;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.ui.toggleDefaultTableView, toggleDefaultTableViewReducer)\n // External reducer\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n);\n\nexport default reducer;\n","import { isEqual } from 'lodash';\nimport { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { DEFAULT_COMPANY_OWNER_VALUE } from '@optx/constants/table/company';\n// models\nimport Company, { Addon, ProductCategory } from '@optx/models/Company';\nimport { SelectOption } from '@optx/models/Option';\nimport {\n SaveResearchRationaleResponse,\n ScoreRationaleResponse,\n} from '@features/add-research-rationale/state/interfaces';\nimport { AnalystResponse, CompanyChecklistResponse } from '../../models';\n// utils\nimport { showRationaleForStage } from '@optx/utils/helpers';\n// redux\nimport { SearchState } from '../interfaces';\nimport { actions } from '../actions';\nimport { fetchReducer, fetchFailReducer } from '@optx/redux/feature/fetch/reducers';\nimport { actions as searchCountActions } from '@features/grid/search-count';\nimport { actions as editFieldActions } from '@optx/features/company/edit-fields/state';\nimport { actions as researchRationaleActions } from '@features/add-research-rationale/state';\nimport {\n CustomValue,\n EditFieldSuccess,\n MultipleFieldsValue,\n UpdateFieldsPayload,\n} from '@optx/features/company/edit-fields/state/interfaces';\n\nconst initialState: SearchState = {\n data: [],\n loading: false,\n error: '',\n};\n\nconst fetchAnalystSuccessReducer: CaseReducer<SearchState, PayloadAction<AnalystResponse>> = (\n draftState,\n action\n) => {\n const { analysts } = action.payload;\n\n draftState.data = analysts;\n\n draftState.loading = false;\n draftState.error = '';\n};\n\nconst fetchCompanySuccessReducer: CaseReducer<\n SearchState,\n PayloadAction<CompanyChecklistResponse>\n> = (draftState, action) => {\n const { data } = action.payload;\n\n draftState.data = data;\n draftState.loading = false;\n draftState.error = '';\n};\n\nconst toggleDefaultTableViewReducer: CaseReducer<SearchState> = draftState => {\n draftState.loading = true;\n draftState.data = [];\n};\n\nconst searchCountSuccessReducer: CaseReducer<SearchState> = draftState => {\n draftState.loading = false;\n};\n\nconst fetchCompanyCountFailReducer: CaseReducer<SearchState> = draftState => {\n draftState.loading = false;\n};\n\nconst updateFieldsSuccessReducer: CaseReducer<SearchState, PayloadAction<EditFieldSuccess>> = (\n draftState,\n action\n) => {\n const {\n fieldName,\n companyId,\n value,\n score,\n scoreGrowth,\n isPartner,\n companyOwnerData,\n ilScore,\n checklist_reviewed_by,\n checklist_reviewed_date,\n ilScoreGrowth,\n defaultOptxScore,\n isPsgCompany,\n } = action.payload;\n\n const companyIndex = (draftState.data as Company[])?.findIndex(c => c.company_id === companyId);\n const company = draftState.data[companyIndex] as Company;\n\n if (company) {\n const fieldKeyValue = (value as UpdateFieldsPayload).value;\n const rationale = (value as UpdateFieldsPayload).rationale;\n const optionSelected = (value as UpdateFieldsPayload).value as SelectOption;\n\n if (checklist_reviewed_date) {\n company.checklist_reviewed_date = checklist_reviewed_date as string | null;\n }\n\n if (checklist_reviewed_by) {\n company.checklist_reviewed_by = checklist_reviewed_by as string | null;\n }\n\n if (score !== undefined) {\n company.score = score ?? 'N/A';\n }\n\n if (typeof scoreGrowth === 'number') {\n company.score_growth = scoreGrowth.toString();\n }\n\n if (defaultOptxScore === 'il') {\n company.il_optx_score = ilScore as number;\n company.il_score_growth = ilScoreGrowth?.toString() as string;\n }\n\n if (!Array.isArray(fieldName)) {\n if (fieldName === 'Software Company') {\n company.is_software = ((value as UpdateFieldsPayload).value as unknown as boolean) || false;\n\n company.is_software_rationale = rationale as string;\n\n if (isPartner) {\n company.is_software_verified = false;\n } else {\n company.is_software_verified = true;\n }\n\n company.score = score as number;\n }\n\n if (fieldName === 'PSG Fit' && typeof score === 'number') {\n company.is_interesting = (value as UpdateFieldsPayload).value as unknown as boolean;\n\n company.interesting_rationale = rationale as string;\n\n company.score = score;\n }\n\n if (fieldName === 'Company Owner') {\n if (companyOwnerData) {\n company.company_owner =\n companyOwnerData.company_owner_name === null\n ? DEFAULT_COMPANY_OWNER_VALUE\n : companyOwnerData.company_owner_name;\n } else {\n company.company_owner = DEFAULT_COMPANY_OWNER_VALUE;\n }\n }\n\n if (fieldName === 'Pipeline Rank') {\n company.pipeline_rank = optionSelected.label;\n }\n\n if (fieldName === 'Senior Advisor Thesis') {\n company.senior_advisor_thesis = optionSelected.label;\n }\n\n if (fieldName === 'Lead Source') {\n company.lead_source = optionSelected.label;\n }\n\n if (fieldName === 'Fund') {\n company.fund = optionSelected.label;\n company.is_psg_company = isPsgCompany as boolean;\n }\n\n if (fieldName === 'Stage') {\n company.stage = optionSelected.label;\n company.is_psg_company = isPsgCompany as boolean;\n\n if (showRationaleForStage(optionSelected.label)) {\n company.stage_rationale = rationale as string;\n } else {\n company.stage_rationale = null;\n }\n }\n\n if (fieldName === 'Product Category') {\n const newCategories = ((value as UpdateFieldsPayload).value as string)\n .split(',')\n .map(item => ({\n category: item,\n is_valid: true,\n }));\n\n const previousCategories = [...(company.product_category || [])] as ProductCategory[];\n\n const combinedArray = newCategories.map(value => {\n const duplicateValue = previousCategories.find(item => item.category === value.category);\n\n return duplicateValue !== undefined ? duplicateValue : value;\n });\n\n company.product_category = ['blank'].includes(\n (value as UpdateFieldsPayload).value as string\n )\n ? null\n : combinedArray;\n }\n\n if (fieldName === 'Add-on') {\n const previousAddon = company.addon;\n const newAddon = ((value as UpdateFieldsPayload).value as CustomValue)\n .optionalValue as Addon;\n\n if ('data' in draftState && !isEqual(previousAddon, newAddon)) {\n // Remove company if addon was changed in ADDON MGMT Tab\n draftState.data =\n (draftState.data as Company[])?.filter(company => company.company_id !== companyId) ??\n null;\n } else {\n company.addon = newAddon;\n company.addon_bool = ((value as UpdateFieldsPayload).value as CustomValue)\n .value as boolean;\n }\n }\n\n if (fieldName === 'Linkedin Profile') {\n company.linkedin = fieldKeyValue as never;\n }\n\n if (fieldName === 'Website Status') {\n company.url_status = fieldKeyValue ? 'active' : 'not active';\n }\n } else {\n if (fieldName.includes('Stage')) {\n const optionSelected = (value as MultipleFieldsValue).value.Stage;\n company.stage = optionSelected.label;\n company.is_psg_company = isPsgCompany as boolean;\n\n if (showRationaleForStage(optionSelected.label)) {\n company.stage_rationale = rationale as string;\n } else {\n company.stage_rationale = null;\n }\n }\n\n if (fieldName.includes('Pipeline Rank')) {\n const optionSelected = (value as MultipleFieldsValue).value['Pipeline Rank'];\n company.pipeline_rank = optionSelected.label;\n }\n\n if (fieldName.includes('Company Owner')) {\n if (companyOwnerData) {\n company.company_owner =\n companyOwnerData.company_owner_name === null\n ? DEFAULT_COMPANY_OWNER_VALUE\n : companyOwnerData.company_owner_name;\n } else {\n company.company_owner = DEFAULT_COMPANY_OWNER_VALUE;\n }\n }\n }\n }\n};\n\nconst submitResearchRationaleSuccessReducer: CaseReducer<\n SearchState,\n PayloadAction<SaveResearchRationaleResponse>\n> = (draftState, action) => {\n const { company_id: companyId, fields, scoreValues, scoreRationale } = action.payload;\n\n const companyIndex = (draftState.data as Company[])?.findIndex(c => c.company_id === companyId);\n const company = draftState.data[companyIndex] as Company;\n\n if (company) {\n if (fields.psg_fit) {\n company!.is_interesting = fields.psg_fit.value as boolean | null;\n company!.interesting_rationale = fields.psg_fit.rationale as string | null;\n // score values for default score\n company!.score = scoreValues?.fitScore as number;\n company!.score_growth = scoreValues?.fitScoreGrowth?.toString() || null;\n // score values for israel score\n company!.il_optx_score = scoreValues?.fitIsraelScore as number;\n company!.il_score_growth = scoreValues?.fitIsraelScoreGrowth?.toString() || null;\n }\n\n if (fields.software_company) {\n if (!company!.is_software_verified) {\n company!.is_software_verified = !company!.is_software_verified;\n }\n\n company!.is_software = fields.software_company.value as boolean;\n company!.is_software_rationale = fields.software_company.rationale as string | null;\n // score values for default score\n company!.score = scoreValues?.softwareScore as number;\n company!.score_growth = scoreValues?.softwareScoreGrowth?.toString() || null;\n // score values for israel score\n company!.il_optx_score = scoreValues?.softwareIsraelScore as number;\n company!.il_score_growth = scoreValues?.softwareIsraelScoreGrowth?.toString() || null;\n }\n\n if (scoreValues && scoreValues.checklistReviewedBy) {\n company!.checklist_reviewed_by = scoreValues.checklistReviewedBy;\n }\n\n if (scoreValues && scoreValues.checklistReviewedDate) {\n company!.checklist_reviewed_date = scoreValues.checklistReviewedDate;\n }\n\n // if api returns false for this property, it means no verification was sent for optx score\n if (scoreRationale !== false) {\n if ((scoreRationale as ScoreRationaleResponse).score_type === 'il_optx_score') {\n company!.il_optx_score_rationale = (scoreRationale as ScoreRationaleResponse).rationale;\n company!.il_optx_score_rationale_reason = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason;\n company!.il_optx_score_rationale_reason_type = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason_type;\n company!.il_optx_score_verified = (\n scoreRationale as ScoreRationaleResponse\n ).optx_score_verified;\n } else {\n company!.optx_score_rationale = (scoreRationale as ScoreRationaleResponse).rationale;\n company!.optx_score_rationale_reason = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason;\n company!.optx_score_rationale_reason_type = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason_type;\n company!.optx_score_verified = (\n scoreRationale as ScoreRationaleResponse\n ).optx_score_verified;\n }\n }\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.search.fetchAnalyst, fetchReducer)\n .addCase(actions.search.fetchAnalystSuccess, fetchAnalystSuccessReducer)\n .addCase(actions.search.fetchAnalystFail, fetchFailReducer)\n .addCase(actions.ui.toggleDefaultTableView, toggleDefaultTableViewReducer)\n .addCase(actions.search.fetchCompany, fetchReducer)\n .addCase(actions.search.fetchCompanySuccess, fetchCompanySuccessReducer)\n .addCase(actions.search.fetchCompanyFail, fetchFailReducer)\n .addCase(searchCountActions.searchCountSuccess, searchCountSuccessReducer)\n .addCase(searchCountActions.searchCountFailure, fetchCompanyCountFailReducer)\n .addCase(editFieldActions.updateFieldsSuccess, updateFieldsSuccessReducer)\n .addCase(\n researchRationaleActions.submitResearchRationaleSuccess,\n submitResearchRationaleSuccessReducer\n )\n);\n\nexport default reducer;\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { CardsState } from '../interfaces';\n// redux\nimport { actions } from '../actions';\n\nexport const initialState: CardsState = {\n software: {},\n psgFit: {},\n score: {},\n};\n\nconst fetchCardSuccessReducer: CaseReducer<\n CardsState,\n PayloadAction<Omit<CardsState, 'psgFit'> & { psg_fit: Record<string, string | null> }>\n> = (draftState, action) => {\n const cards = action.payload;\n\n draftState.software = cards.software;\n draftState.score = cards.score;\n draftState.psgFit = cards.psg_fit;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder.addCase(actions.card.fetchCardSuccess, fetchCardSuccessReducer)\n);\n\nexport default reducer;\n","import { combineReducers } from 'redux';\n\nimport { ChecklistResearchInsightState } from '../interfaces';\nimport filters from './filters';\nimport ui from './ui';\nimport search from './search';\nimport cards from './cards';\n\nexport const reducer = combineReducers<ChecklistResearchInsightState>({\n filters,\n cards,\n search,\n ui,\n});\n","import React, { useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport styled from 'styled-components';\nimport { Button, Tooltip } from 'antd';\n// redux\nimport {\n selectors as fullscreenSelectors,\n actions as fullscreenActions,\n} from '@redux/ui/settings/fullscreen';\n//constants\nimport { FULLSCREEN_TITLE } from '@optx/constants/titles';\nimport { CONTACTS } from '@optx/constants/pendoActions';\nimport { MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// components\nimport Icon from '@optx/components/common/Icon';\n\nconst StyledIcon = styled(Icon)`\n width: 16px;\n`;\n\ninterface GridFullScreenProps {\n hideFullScreenIcon?: boolean;\n pendoAction?: string;\n}\n\nconst GridFullScreen = ({ hideFullScreenIcon, pendoAction }: GridFullScreenProps) => {\n const dispatch = useDispatch();\n const isFullscreen = useSelector(fullscreenSelectors.isFullscreen);\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n const toggleFullScreen = useCallback(() => {\n dispatch(fullscreenActions.toggleFullScreen());\n\n if (window.location.pathname === '/contacts') {\n window.pendo.track(`${CONTACTS}_FullScreen`);\n } else if (window.location.pathname === '/my-companies') {\n window.pendo.track(`${MY_COMPANIES_PENDO}_FullScreen`);\n }\n }, [dispatch]);\n\n if (isSafari) {\n return null;\n }\n\n if (isFullscreen) {\n return (\n <Button\n onClick={toggleFullScreen}\n style={{ marginLeft: '16px' }}\n type=\"primary\"\n icon={<StyledIcon iconName=\"fullscreen-exit\" className=\"mr-2\" />}\n >\n EXIT FULL SCREEN\n </Button>\n );\n }\n\n return (\n <Tooltip title={FULLSCREEN_TITLE}>\n <Button\n type=\"text\"\n onClick={toggleFullScreen}\n // issue with this icon has path smaller than SVG.\n icon={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <span>\n {!hideFullScreenIcon && (\n <Icon iconName=\"fullscreen\" style={{ fontSize: 28, color: '#AFBDD1' }} />\n )}\n </span>\n }\n />\n </Tooltip>\n );\n};\n\nexport default React.memo(GridFullScreen);\n","import { useEffect, useState } from 'react';\nimport { ActionMeta, ValueType } from 'react-select';\nimport { isEqual } from 'lodash';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { MultiSelectFilterColumns } from '@optx/models/feature/analystsLeaderboard/filters';\n// utils\nimport { trackAnalystPendoActions } from '@optx/utils/utils';\n\n/**\n * Multi select hook needed to update store only after it is blured and not on each item selection.\n * @param value multiselect store value.\n * @param updateValue function to update store value.\n */\nconst useLocalMultiSelect = (\n value: Array<SelectOption> | undefined,\n updateValue: (newValue: Array<SelectOption>) => void,\n filterKey?: MultiSelectFilterColumns\n) => {\n const [localValue, setLocalValue] = useState<ValueType<SelectOption>>(value);\n const [isLocalChange, setIsLocalChange] = useState(false);\n\n useEffect(() => {\n // Update local value when received value changes and was not a local change.\n if (!isLocalChange && !isEqual(localValue, value)) {\n setLocalValue(value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const handleBlur = () => {\n // Update store only on blur.\n\n if (!isEqual(value, localValue)) {\n updateValue(localValue as Array<SelectOption>);\n setIsLocalChange(false);\n }\n };\n\n const handleChange = (value: ValueType<SelectOption>, actionMeta: ActionMeta<SelectOption>) => {\n trackAnalystPendoActions(filterKey, actionMeta.option?.value);\n\n switch (actionMeta.action) {\n case 'remove-value':\n // Call update if tag is removed.\n updateValue(value as Array<SelectOption>);\n break;\n\n default: {\n // Only update locally.\n setLocalValue(value);\n setIsLocalChange(true);\n break;\n }\n }\n };\n\n return {\n onBlur: handleBlur,\n onChange: handleChange,\n localValue,\n };\n};\n\nexport default useLocalMultiSelect;\n","import { GridKeys } from '@optx/models/grid';\n\nconst ownStylesOutReach: React.CSSProperties = {\n fontSize: 16,\n fontWeight: 500,\n color: 'white',\n};\n\nexport const searchCountFullScreenStyle: React.CSSProperties = {\n fontSize: 16,\n color: '#8997B1',\n display: 'inline-flex',\n gap: '4px',\n alignItems: 'center',\n minWidth: 'fit-content',\n flex: 1,\n};\n\nconst ownStylesAdvancedSearch: React.CSSProperties = {\n fontSize: 16,\n color: '#8997B1',\n display: 'inline-flex',\n gap: '4px',\n alignItems: 'center',\n minWidth: 'fit-content',\n flex: 1,\n};\n\nconst ownStylesContacts: React.CSSProperties = {\n fontSize: 20,\n color: '#8997B1',\n};\n\nconst ownStylesWatchlistsAndSSlists: React.CSSProperties = {\n fontSize: 16,\n color: '#8997B1',\n};\n\nconst ownStylesChecklistResearchInsights: React.CSSProperties = {\n fontSize: '20px',\n fontWeight: 400,\n color: '#8997B1',\n};\n\nexport const searchCountOwnStyles: Partial<Record<GridKeys, React.CSSProperties>> = {\n outreachDetails: ownStylesOutReach,\n advancedSearch: ownStylesAdvancedSearch,\n addons: ownStylesAdvancedSearch,\n contacts: ownStylesContacts,\n myCompanies: {},\n lists: ownStylesWatchlistsAndSSlists,\n checklistResearchInsights: ownStylesChecklistResearchInsights,\n pipelineReport: {},\n};\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Col, Typography } from 'antd';\nimport numeral from 'numeral';\nimport { merge } from 'lodash';\nimport { TextProps } from 'recharts';\nimport { LoadingOutlined } from '@ant-design/icons';\nimport { Dictionary, isEqual } from 'lodash';\n//models\nimport { GridKeys, GridKeysColumns } from '@optx/models/grid';\nimport { SearchViewType } from '@optx/models/user';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { SearchSave } from '@optx/models/search';\nimport { RouteAliases } from '@optx/models/routes';\n// constants\nimport { GRID_FILTER_KEYS } from '@optx/constants/grid';\n//utils\nimport { getPageSize } from '@optx/utils/table/pagination';\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\nimport { matchView } from '@utils/search';\nimport { removeColumnFromString } from '@utils/columns';\n//redux\nimport { selectors as searchCountSelectors } from '@features/grid/search-count';\nimport { selectors as paginationSelectors } from '@features/grid/pagination';\nimport { selectors as paginationLongCardSelectors } from '@features/grid/pagination-long-card';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as contactsSelectors } from '@redux/contacts/search/search';\nimport { selectors as filterCardsSelectors } from '@optx/redux/my-companies/filters-cards';\nimport { isLoading } from '@components/pages/MyCompanies/selectors';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as savedSearchSelectors } from '@redux/company/saved-searches';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { selectors as searchColumnSelectors } from '@features/grid/columns';\nimport { selectors as suggestedSearchesSelectors } from '@redux/company/suggested-searches';\nimport { selectors as filtersSelectors } from '@redux/company/filters';\nimport { selectors as searchTypeSelectors } from '../../search-type/index';\n//components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\nimport { searchCountFullScreenStyle, searchCountOwnStyles } from './SearchCountOwnStyles';\n\ninterface SearchCountProps extends TextProps {\n gridName: GridKeys;\n searchViewType?: SearchViewType;\n isFullScreen?: boolean;\n showSearchName?: boolean;\n}\n\nconst SearchCount: React.FC<SearchCountProps> = ({\n gridName,\n style,\n isFullScreen,\n searchViewType = 'table',\n showSearchName = true,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n let [matchedView, setMatchedView] = useState<SearchSave | undefined>();\n const searchCompanyCount = useSelector(searchCountSelectors.getSearchCount(gridName));\n const loadingCount = useSelector(searchCountSelectors.getSearchCountLoading(gridName));\n const gridSearchName = useSelector(searchSelectors.getSearchName(gridName));\n const contactsSearchName = useSelector(contactsSelectors.getSearchTitle);\n const searchName = gridName === 'contacts' ? contactsSearchName : gridSearchName;\n const isLoadingPage = useSelector(isLoading);\n const selectedCard = useSelector(filterCardsSelectors.getSelectedCard);\n const tableViewPagination = useSelector(paginationSelectors.getPagination(gridName));\n const paginationLongCardView = useSelector(\n paginationLongCardSelectors.getLongCardPagination(gridName)\n );\n const pageNumber = useSelector(paginationSelectors.getPageNumber(gridName));\n const filter: Dictionary<PreselectedFilter> = useSelector(filterSelectors.getFilter(gridName));\n const views: SearchSave[] = useSelector(savedSearchSelectors.getAllViews);\n const sortBy: SortByRule<any>[] = useSelector(sortSelectors.getSorting(gridName));\n const searchKey: string = useSelector(searchSelectors.getSearchKey(gridName));\n const searchType: string = useSelector(searchTypeSelectors.getSearchType(gridName));\n const { defaultOptxView } = useSelector(savedSearchSelectors.getViews);\n const columns: string = useSelector(\n searchColumnSelectors.getVisibleColumnString(gridName as GridKeysColumns)\n );\n const columnOrder: string[] = useSelector(\n searchColumnSelectors.getColumnOrder(gridName as GridKeysColumns)\n );\n const pinnedColumns: string = useSelector(\n searchColumnSelectors.getPinnedColumnsString(gridName as GridKeysColumns)\n );\n const suggestedSearches: SearchSave[] = useSelector(\n suggestedSearchesSelectors.getSuggestedSearches\n );\n const normalizedFilters = useSelector(filtersSelectors.getFiltersMap);\n\n const { pageSize } =\n searchViewType === 'table'\n ? tableViewPagination\n : paginationLongCardView || tableViewPagination;\n\n let filterQuery: Dictionary<string | (string | number)[]>;\n\n if (GRID_FILTER_KEYS.includes(gridName)) {\n filterQuery = mapFiltersToURLParams(normalizedFilters, filter);\n\n let ignoreSort = false;\n\n if (gridName === 'advancedSearch' && sortBy.find(sort => sort.id === 'date_matched')) {\n ignoreSort = true;\n }\n\n if (filterQuery.new_date_matched) {\n delete filterQuery.new_date_matched;\n }\n\n const matchViewResult = matchView(\n { filter: filterQuery, sortBy, searchKey, searchType, pagination: { pageSize, pageNumber } },\n // should ignore date matched columns since it should not be part of search view\n removeColumnFromString(columns, 'date_matched'),\n removeColumnFromString(columnOrder.join(), 'date_matched'),\n pinnedColumns,\n [...views, ...suggestedSearches],\n defaultOptxView,\n gridName,\n undefined,\n ignoreSort\n );\n\n if (!isEqual(matchViewResult.matchedView, matchedView)) {\n setMatchedView(matchViewResult.matchedView);\n }\n } else if (matchedView !== undefined) {\n setMatchedView(undefined);\n }\n\n useEffect(() => {\n if (\n matchedView &&\n ['US New Opportunities', 'Europe Weekly Leads'].includes(matchedView.title) &&\n searchName !== matchedView.title &&\n searchCompanyCount\n ) {\n dispatch(\n savedSearchesActions.applyViewSuccess({\n id: matchedView.unique_id || '',\n label: matchedView.title || '',\n pageAlias: gridName as RouteAliases,\n })\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [matchedView, searchCompanyCount]);\n\n const title = `Showing ${searchName || ''}`;\n const isSearchNameVisible = searchViewType === 'table' && showSearchName && searchName;\n\n const actualPageSize = getPageSize(pageSize, searchCompanyCount, pageNumber);\n const formattedSearchCompanyCount = numeral(searchCompanyCount).format('0,0');\n const gridType =\n searchCompanyCount !== 1\n ? `${gridName !== 'contacts' ? 'Companies' : 'Contacts'}`\n : `${gridName !== 'contacts' ? 'Company' : 'Contact'}`;\n\n const subTitle = `${actualPageSize} of ${formattedSearchCompanyCount} ${gridType}`;\n\n const styleProps: React.CSSProperties = merge(\n style,\n isFullScreen ? searchCountFullScreenStyle : searchCountOwnStyles[gridName],\n {}\n );\n\n if (isFullScreen) {\n return (\n <Typography.Text title={`${title} (${subTitle})`} ellipsis style={styleProps} {...restProps}>\n {loadingCount ? (\n <>Loading...</>\n ) : (\n <>\n Showing{' '}\n {searchName && (\n <TruncateTooltip title={searchName}>\n <span\n style={{\n color: '#1890ff',\n }}\n >\n "{searchName}"\n </span>\n </TruncateTooltip>\n )}{' '}\n ({loadingCount ? <LoadingOutlined style={{ color: '#4ce1b6' }} /> : `${subTitle}`})\n </>\n )}\n </Typography.Text>\n );\n }\n\n if (gridName === 'pipelineReport') {\n return (\n <Col>\n <div className=\"text-ellipsis\">\n <Typography.Text className=\"pipeline-report-second-header__count\">\n {isLoadingPage ? (\n <>Loading...</>\n ) : (\n <>\n <b>Active Companies</b>{' '}\n <span>\n (Showing{' '}\n {loadingCount ? (\n <LoadingOutlined style={{ color: '#4ce1b6' }} />\n ) : (\n `${getPageSize(pageSize, searchCompanyCount, pageNumber)}\n of ${numeral(searchCompanyCount).format('0,0')}`\n )}\n )\n </span>\n </>\n )}\n </Typography.Text>\n </div>\n </Col>\n );\n }\n\n if (gridName !== 'outreachDetails' && gridName !== 'myCompanies') {\n const { color, fontSize } = styleProps;\n\n return (\n <>\n {loadingCount ? (\n <Typography.Text style={{ ...styleProps, flex: '1 1 0%' }} {...restProps}>\n Loading...\n </Typography.Text>\n ) : (\n <Col\n style={{\n ...styleProps,\n fontWeight: 'normal',\n display: 'flex',\n gap: '4px',\n }}\n >\n <Typography.Text\n className=\"text-ellipsis\"\n style={{\n color,\n fontSize,\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n maxWidth: 'fit-content',\n flex: '1 1 auto',\n }}\n {...restProps}\n >\n Showing{' '}\n {isSearchNameVisible && (\n <TruncateTooltip\n placement=\"topLeft\"\n title={`Showing \"${searchName}\" (${subTitle})`}\n maxWidth={gridName === 'contacts' ? '200px' : '100%'}\n >\n <span\n style={{\n color: '#1890ff',\n fontWeight: 'Bold',\n }}\n >\n "{searchName}"\n </span>\n </TruncateTooltip>\n )}\n </Typography.Text>\n ({loadingCount ? <LoadingOutlined style={{ color: '#4ce1b6' }} /> : `${subTitle}`})\n </Col>\n )}\n </>\n );\n }\n\n if (gridName === 'myCompanies') {\n return (\n <Col>\n <div className=\"text-ellipsis\">\n <Typography.Text className=\"my-companies-second-header__count\">\n {isLoadingPage || selectedCard?.title === undefined ? (\n <>Loading...</>\n ) : (\n <>\n Showing (\n {loadingCount ? (\n <LoadingOutlined style={{ color: '#4ce1b6' }} />\n ) : (\n `${getPageSize(pageSize, searchCompanyCount, pageNumber)}\n of ${numeral(searchCompanyCount).format('0,0')}\n ${searchCompanyCount !== 1 ? 'Companies' : 'Company'}`\n )}\n ) {selectedCard?.title}\n </>\n )}\n </Typography.Text>\n </div>\n </Col>\n );\n }\n\n return (\n <Typography.Text style={styleProps}>\n {loadingCount ? (\n <>Loading...</>\n ) : (\n <>\n (Showing\n {loadingCount ? (\n <LoadingOutlined style={{ color: 'white' }} />\n ) : (\n ` ${actualPageSize} of ${formattedSearchCompanyCount}`\n )}\n )\n </>\n )}\n </Typography.Text>\n );\n};\n\nexport default SearchCount;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\n// constants\nimport { STATE_KEY } from './state/constants';\n// redux\nimport reducer from './state/reducer';\nimport saga from './state/sagas';\n\nexport const useInject = () => {\n useInjectReducer({ key: STATE_KEY, reducer });\n useInjectSaga({ key: STATE_KEY, saga });\n};\n","export interface ReferrerUrlParam {\n referrer?: string;\n}\n\nexport type RouteAliases =\n | 'advancedSearch'\n | 'myCompanies'\n | 'companyOutReach'\n | 'pipelineReport'\n | 'userLists'\n | 'allReports'\n | 'sourceScrubLists'\n | 'companyProfile'\n | 'watchList'\n | 'chromeExtension'\n | 'companyAddonManagement'\n | 'contacts'\n | 'companyFiles'\n | 'companyHistory'\n | 'checklistResearchInsights'\n | 'touchManagement'\n | 'analystsLeaderboard';\n\nexport enum ReferrerUrlOrigin {\n parentCompanySearch = 'parentCompanySearch',\n}\n\n/**\n * Types used for location's state general data in order to support Typescript.\n */\nexport type RouteRedirectStateField = 'addContacts' | 'addTouch';\nexport type RouteRedirectStateProps = Partial<Record<RouteRedirectStateField, boolean>>;\n\nexport interface ProfileRouteMatch {\n id: string;\n}\n","export const FILTER_TAGS_MAX_COUNT = 3;\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { SearchTouchesPayload } from '@optx/features/company-touches/state/interfaces';\nimport { actions as profileActions, TOUCHES_PER_PAGE } from '@features/long-card/company-card';\nimport { actions as touchesActions } from '@features/company-touches';\nimport { actions as employeGrowthActions } from '@features/company/graphs/employee';\nimport { actions as scoreGrowthActions } from '@features/company/graphs/score';\nimport { actions as fundingRoundsActions } from '@redux/company/funding-rounds';\n\nconst useLoadCompanyData = () => {\n const dispatch = useDispatch();\n\n const getProfile = useCallback(\n (companyId: number) => dispatch(profileActions.fetchCompanyProfile(companyId)),\n [dispatch]\n );\n\n // TOUCHES\n const fetchTouchesFilters = useCallback(\n (companyId: number) => dispatch(touchesActions.filters.fetchTouchesFilters(companyId)),\n [dispatch]\n );\n\n const fetchTouches = useCallback(\n (payload: SearchTouchesPayload) => dispatch(touchesActions.search.fetchTouches(payload)),\n [dispatch]\n );\n\n const loadCompanyData = (companyId: number | undefined, companyUrl: string | null) => {\n if (companyId) {\n getProfile(companyId);\n fetchTouchesFilters(companyId);\n fetchTouches({\n companyId,\n pagination: { pageSize: TOUCHES_PER_PAGE, pageNumber: 1 },\n });\n\n dispatch(employeGrowthActions.fetchEmployeeGrowth(companyId));\n dispatch(\n scoreGrowthActions.fetchScoreGrowth({\n company_id: companyId,\n company_url: companyUrl,\n })\n );\n dispatch(fundingRoundsActions.getCompanyFundingRounds(companyId));\n }\n };\n\n return { loadCompanyData };\n};\n\nexport default useLoadCompanyData;\n","// The selector created for getting total touches doesn't work for fetching\n// total touches because we do not know the number of total touches before sending the request\n// Created a constant for fetching all the touches for a company on long card\nexport const TOUCHES_PER_PAGE = 1000;\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { FileDetails } from '@optx/models/files';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { DataSettingsResponse, UpdateFiltersModels } from './interfaces';\nimport * as types from './types';\n\nexport const fetchFiles = createAction(types.FETCH_FILES);\nexport const fetchFilesSuccess = createAction<Array<FileDetails>>(types.FETCH_FILES_SUCCESS);\nexport const fetchFilesFail = createAction<string>(types.FETCH_FILES_FAIL);\n\nexport const fetchFilesFilters = createAction(types.FETCH_FILES_FILTERS);\nexport const fetchFilesFiltersSuccess = createAction<DataSettingsResponse>(\n types.FETCH_FILES_FILTERS_SUCCESS\n);\nexport const fetchFilesFiltersFail = createAction<string>(types.FETCH_FILES_FILTERS_FAIL);\n\nexport const downloadFile = createAction<{ id: number; name: string }>(types.DOWNLOAD_FILE);\nexport const fetchForCompanyId = createAction<number | null>(types.FETCH_FOR_COMPANY_ID);\nexport const clearFilesData = createAction(types.CLEAR_FILES_DATA);\n\nexport const sortFiles = createAction<Array<SortByRule<any>>>(types.SORT_FILES);\nexport const changeFilter = createAction<UpdateFiltersModels>(types.CHANGE_FILTER);\n","export const FETCH_FILES = 'FETCH_FILES';\nexport const FETCH_FILES_SUCCESS = 'FETCH_FILES_SUCCESS';\nexport const FETCH_FILES_FAIL = 'FETCH_FILES_FAIL';\n\nexport const DOWNLOAD_FILE = 'DOWNLOAD_FILE';\n\nexport const FETCH_FOR_COMPANY_ID = 'FETCH_FOR_COMPANY_ID';\nexport const CLEAR_FILES_DATA = 'CLEAR_FILES_DATA';\n\nexport const SORT_FILES = 'SORT_FILES';\nexport const CHANGE_FILTER = 'CHANGE_FILTER';\n\nexport const FETCH_FILES_FILTERS = 'FETCH_FILES_FILTERS';\nexport const FETCH_FILES_FILTERS_SUCCESS = 'FETCH_FILES_FILTERS_SUCCESS';\nexport const FETCH_FILES_FILTERS_FAIL = 'FETCH_FILES_FILTERS_FAIL';\n","import { Button, Tooltip } from 'antd';\nimport { useDispatch } from 'react-redux';\nimport { DownloadOutlined } from '@ant-design/icons';\nimport styled from 'styled-components';\n// models\nimport { FileDetails } from '@optx/models/files';\n// constants\nimport { CompanyPageFilesEquityTouchFilesDownload } from '@optx/constants/pendoActions';\n// redux\nimport { actions as fileActions } from '@optx/redux/company/files';\n\nconst Wrapper = styled.div`\n button {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n }\n span.tooltip {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`;\n\ntype TableCellFileNameProps = {\n value: string;\n record: FileDetails;\n};\n\nconst TableCellFileName = ({ value, record: file }: TableCellFileNameProps) => {\n const dispatch = useDispatch();\n\n const handleClick = () => {\n dispatch(fileActions.downloadFile({ id: file.file_id, name: file.name }));\n\n window.pendo.track(CompanyPageFilesEquityTouchFilesDownload);\n };\n\n return (\n <Wrapper key={file.file_id}>\n <Button type=\"link\" onClick={handleClick}>\n <Tooltip className=\"tooltip\" title={file.name}>\n {file.name}\n </Tooltip>\n <DownloadOutlined />\n </Button>\n </Wrapper>\n );\n};\n\nexport default TableCellFileName;\n","import { ColumnType } from 'antd/lib/table';\n// models\nimport { FileDetails } from '@optx/models/files';\nimport TableCellFileName from './cells/TableCellFileName';\nimport { TableCellDate } from '../AntTable/cells';\n// constants\nimport globalConfig from '@optx/constants/config';\n\nconst columns: ColumnType<FileDetails>[] = [\n {\n dataIndex: 'name',\n key: 'name',\n title: 'File Name',\n width: 200,\n sorter: true,\n render: (value, record) => <TableCellFileName value={value} record={record} />,\n },\n {\n dataIndex: 'registered_at',\n key: 'registered_at',\n title: 'Date Uploaded',\n width: 100,\n sorter: true,\n render: (value, record) => (\n <TableCellDate value={value} format={globalConfig.grid_date.DATE_FORMAT} record={record} />\n ),\n },\n {\n dataIndex: 'author',\n key: 'author',\n title: 'Author',\n width: 100,\n sorter: true,\n },\n {\n dataIndex: 'file_type',\n key: 'file_type',\n title: 'File Type',\n width: 80,\n sorter: true,\n },\n {\n dataIndex: 'origin',\n key: 'origin',\n title: 'Origin',\n width: 90,\n sorter: true,\n },\n {\n dataIndex: 'notes',\n key: 'notes',\n title: 'Notes',\n width: 200,\n sorter: true,\n },\n];\n\nexport default columns;\n","import { createSelector } from 'reselect';\n// models\nimport { AppState } from '@optx/redux/interfaces';\n// utils\nimport { sortColumns } from '@optx/utils/table/sorting';\n// constants\nimport { defaultColumns } from '@optx/components/common/table/TableCompanyFiles';\n\nconst filesState = (state: AppState) => state.files;\n\nexport const isLoading = createSelector(filesState, state => state?.loading);\nexport const shouldFetch = createSelector(\n filesState,\n state => !state?.loading && !state?.fetchedAt\n);\nexport const getFileData = createSelector(filesState, state => state?.data);\nexport const fetchForCompanyId = createSelector(filesState, state => state?.companyId);\nexport const sortBy = createSelector(filesState, state => state?.sortBy);\nexport const getColumns = createSelector(filesState, state =>\n sortColumns(defaultColumns, state?.sortBy)\n);\nexport const getFilters = createSelector(filesState, state => state?.filter?.values);\nexport const getOptions = createSelector(filesState, state => state?.filter?.options);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { FileDetails } from '@optx/models/files';\nimport { DataSettingsResponse, FilesState, UpdateFiltersModels } from './interfaces';\nimport { SuccessResponse } from '@optx/redux/ui/modals/add-document-upload-touch/interfaces';\n// constants\nimport { FILES_DEFAULT_SORT } from '@optx/constants/table/sort/defaultSort';\n// redux\nimport { actions as uploadFileActions } from '@redux/ui/modals/add-document-upload-touch';\nimport { fetchFailReducer, fetchReducer } from '../../feature/fetch/reducers';\nimport * as actions from './actions';\n\nconst initialState: FilesState = {\n error: '',\n data: [],\n loading: false,\n fetchedAt: '',\n companyId: null,\n sortBy: FILES_DEFAULT_SORT,\n filter: { values: {}, options: {} },\n};\n\nconst initiateFetchFilesReducer: CaseReducer<FilesState, PayloadAction<number | null>> = (\n draftState,\n action\n) => {\n draftState.companyId = action.payload;\n};\n\nconst clearFilesDataReducer: CaseReducer<FilesState> = draftState => {\n draftState.companyId = null;\n draftState.data = [];\n draftState.fetchedAt = '';\n};\n\nconst fetchFilesSuccessReducer: CaseReducer<FilesState, PayloadAction<Array<FileDetails>>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n draftState.data = [...action.payload].map(file => ({\n ...file,\n file_type: `.${file.name.split('.').pop()}`,\n }));\n draftState.fetchedAt = new Date().toISOString();\n};\n\nconst sortReducer: CaseReducer<FilesState, PayloadAction<Array<SortByRule<any>>>> = (\n draftState,\n action\n) => {\n draftState.sortBy = action.payload;\n};\n\nconst changeFilterReducer: CaseReducer<FilesState, PayloadAction<UpdateFiltersModels>> = (\n draftState,\n action\n) => {\n const { key, value } = action.payload;\n\n if (draftState.filter.values) {\n draftState.filter.values = {\n ...draftState.filter.values,\n [key]: value,\n };\n }\n};\n\nconst uploadFilesSuccessReducer: CaseReducer<FilesState, PayloadAction<SuccessResponse[]>> = (\n draftState,\n action\n) => {\n const payload = action.payload;\n\n if (payload && draftState.data) {\n const mappedAction = payload.map(item => ({ ...(item.files as FileDetails) }));\n draftState.data.unshift(...mappedAction);\n }\n};\n\nconst fetchFilesFiltersSuccessReducer: CaseReducer<\n FilesState,\n PayloadAction<DataSettingsResponse>\n> = (draftState, action) => {\n draftState.filter.options = action.payload.filters;\n draftState.filter.values = action.payload.filters;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchFiles, fetchReducer)\n .addCase(actions.fetchForCompanyId, initiateFetchFilesReducer)\n .addCase(actions.clearFilesData, clearFilesDataReducer)\n .addCase(actions.fetchFilesSuccess, fetchFilesSuccessReducer)\n .addCase(actions.fetchFilesFail, fetchFailReducer)\n .addCase(actions.sortFiles, sortReducer)\n .addCase(actions.changeFilter, changeFilterReducer)\n .addCase(actions.fetchFilesFiltersSuccess, fetchFilesFiltersSuccessReducer)\n .addCase(uploadFileActions.uploadFilesSuccess, uploadFilesSuccessReducer)\n);\n\nexport default reducer;\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { FileDetails } from '@optx/models/files';\nimport { DataSettingsResponse } from './interfaces';\nimport { SortByRule } from '@optx/models/table/sorting';\n// Services\nimport NotificationService from '@optx/services/NotificationService';\nimport { CompanyService } from '@optx/services/api';\n// utils\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\n\nexport function* fetchFilesSaga() {\n try {\n const filters: { [key: string]: string } = yield select(selectors.getFilters);\n const sortBy: Array<SortByRule<any>> = yield select(selectors.sortBy);\n const companyId: number = yield select(profileSelectors.getCompanyId);\n\n const payload = {\n companyId: companyId,\n sortBy: sortBy,\n filters: filters,\n };\n const res: AxiosResponse<FileDetails[]> = yield call(CompanyService.getFiles, payload);\n\n if (res.data) {\n yield put(actions.fetchFilesSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch files!';\n yield put(actions.fetchFilesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch files!');\n yield put(actions.fetchFilesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* sortFilesSaga(action: PayloadAction<Array<SortByRule<any>>>) {\n try {\n const companyId: number = yield select(selectors.fetchForCompanyId); // get company id from state\n\n const res: AxiosResponse<FileDetails[]> = yield call(CompanyService.getFiles, {\n companyId,\n sortBy: action.payload,\n });\n\n if (res.data) {\n yield put(actions.fetchFilesSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch files!';\n yield put(actions.fetchFilesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch files!');\n yield put(actions.fetchFilesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* downloadFileSaga(action: PayloadAction<{ id: number; name: string }>) {\n let errorMessage = 'Failed to download file!';\n\n try {\n const res: AxiosResponse<Blob> = yield call(CompanyService.downloadFile, action.payload);\n\n if (res.data) {\n NotificationService.success('File downloaded successfully!');\n } else {\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n if (error.response.status === 404) {\n errorMessage = 'Requested file is not registered';\n }\n\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchFilesFiltersSaga() {\n try {\n const companyId: number = yield select(profileSelectors.getCompanyId);\n\n const res: AxiosResponse<DataSettingsResponse> = yield call(\n CompanyService.getFilesDataSettings,\n companyId\n );\n\n if (res.data) {\n yield put(actions.fetchFilesFiltersSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch filters!';\n yield put(actions.fetchFilesFiltersFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch filters!');\n yield put(actions.fetchFilesFiltersFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* filesSaga() {\n yield takeLatest(actions.fetchFiles, fetchFilesSaga);\n yield takeLatest(actions.sortFiles, fetchFilesSaga);\n yield takeLatest(actions.changeFilter, fetchFilesSaga);\n yield takeLatest(actions.downloadFile, downloadFileSaga);\n yield takeLatest(actions.fetchFilesFilters, fetchFilesFiltersSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport { TOGGLE_PROFILE_EDIT_CONTACT_MODAL } from './actionTypes';\n\nexport const toggle = createAction<boolean>(TOGGLE_PROFILE_EDIT_CONTACT_MODAL);\n","export const TOGGLE_PROFILE_EDIT_CONTACT_MODAL = 'TOGGLE_PROFILE_EDIT_CONTACT_MODAL';\n","import { AppState } from '@redux/interfaces';\n\nexport const isOpen = (state: AppState) => state.ui.modals.editProfileContact;\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { toggle } from './actions';\n\nconst toggleReducer: CaseReducer<boolean, PayloadAction<boolean>> = (_, action) => action.payload;\n\nconst reducer = createReducer(false, buider => buider.addCase(toggle, toggleReducer));\n\nexport default reducer;\n","import React, { useCallback } from 'react';\nimport ReactSelect from 'react-select';\n// interface\nimport { SelectOption } from '@optx/models/Option';\n// components\nimport { AllMultiValueContainer, SelectAllMenuList, SelectableGroupHeading } from './components';\nimport {\n Option,\n MultiSelectTags,\n PreviousMultiSelectedTags,\n MultiValueRemove,\n MultiValueLabel,\n ValueContainer,\n DropdownIndicator,\n} from '../components';\n// Local\nimport { MultiSelectProps } from '../interfaces';\nimport { Styled } from './MultiSelect.styled';\nimport { isOptionDisabled } from '../utils';\n\nconst Select: React.FC<MultiSelectProps> = ({\n hasCustomNoTouchesOption,\n options,\n value,\n onChange,\n allowSelectAll,\n className,\n previousSelectedOptions,\n previousSelectedOptionsListTitle,\n selectedOptionsListTitle,\n hasButtons = false,\n defaultMenuIsOpen = false,\n autoFocus = false,\n ...restProps\n}) => {\n // eslint-disable-next-line\n const MenuListMemoized = useCallback(SelectAllMenuList(hasCustomNoTouchesOption), []);\n\n return (\n <Styled.MultiSelectWrapper\n className={className}\n value={value as SelectOption<string>}\n hasButtons={hasButtons}\n >\n <ReactSelect\n defaultMenuIsOpen={defaultMenuIsOpen}\n autoFocus={autoFocus}\n options={options}\n value={value}\n onChange={onChange}\n hideSelectedOptions={false}\n components={{\n MultiValueContainer: AllMultiValueContainer,\n MultiValueLabel,\n MultiValueRemove,\n ValueContainer,\n DropdownIndicator,\n Option,\n GroupHeading: SelectableGroupHeading,\n MenuList: MenuListMemoized,\n }}\n {...restProps}\n // Leave isMulti at the end to not be overriden.\n backspaceRemovesValue={false}\n isMulti\n />\n {previousSelectedOptions && (\n <PreviousMultiSelectedTags\n options={options as Array<SelectOption>}\n previousSelectedOptions={previousSelectedOptions}\n previousSelectedOptionsListTitle={previousSelectedOptionsListTitle}\n />\n )}\n <MultiSelectTags\n value={value as Array<SelectOption>}\n options={options as Array<SelectOption>}\n allowSelectAll={allowSelectAll}\n onChange={onChange}\n selectedOptionsListTitle={selectedOptionsListTitle}\n />\n </Styled.MultiSelectWrapper>\n );\n};\n\nSelect.defaultProps = {\n placeholder: 'search',\n classNamePrefix: 'multiselect',\n isClearable: false,\n hideSelectedOptions: false,\n closeMenuOnSelect: false,\n // custom\n allowSelectAll: true,\n isOptionDisabled,\n // doesn't work with undefined value - needs explicit empty array\n value: [],\n};\n\nexport default Select;\n","import React, { useCallback } from 'react';\nimport { components } from 'react-select';\nimport ReactSelect from 'react-select/creatable';\n// components\nimport { AllMultiValueContainer, SelectableGroupHeading } from './components';\nimport {\n Option,\n MultiValueRemove,\n MultiValueLabel,\n ValueContainer,\n DropdownIndicator,\n} from '../components';\n// Local\nimport { MultiSelectCreatableProps } from '../interfaces';\nimport { Styled } from './MultiSelect.styled';\nimport { isOptionDisabled } from '../utils';\n\nconst { MenuList } = components;\n\nconst MultiSelectCreatable: React.FC<MultiSelectCreatableProps> = ({\n options,\n value,\n onChange,\n onCreateOption,\n allowSelectAll,\n className,\n ...restProps\n}) => {\n // eslint-disable-next-line\n const MenuListMemoized = useCallback(React.memo(MenuList), []);\n\n return (\n <Styled.MultiSelectWrapper className={className}>\n <ReactSelect\n options={options}\n value={value}\n onChange={onChange}\n onCreateOption={onCreateOption}\n hideSelectedOptions={false}\n isValidNewOption={() => false}\n components={{\n MultiValueContainer: AllMultiValueContainer,\n MultiValueLabel,\n MultiValueRemove,\n ValueContainer,\n DropdownIndicator,\n Option,\n GroupHeading: SelectableGroupHeading,\n MenuList: MenuListMemoized,\n }}\n {...restProps}\n // Leave isMulti at the end to not be overriden.\n backspaceRemovesValue={false}\n isMulti\n />\n </Styled.MultiSelectWrapper>\n );\n};\n\nMultiSelectCreatable.defaultProps = {\n placeholder: 'search or select list(s)',\n classNamePrefix: 'multiselect',\n isClearable: false,\n hideSelectedOptions: false,\n closeMenuOnSelect: false,\n // custom\n allowSelectAll: true,\n isOptionDisabled,\n // doesn't work with undefined value - needs explicit empty array\n value: [],\n};\n\nexport default MultiSelectCreatable;\n","interface LoadingState {\n loading: boolean;\n}\n\ninterface ShouldFetchState {\n shouldFetch?: boolean;\n}\n\n/**\n * Get loading state.\n * @param state\n * @returns is loading state\n */\nexport const isLoadingSelector = (state: LoadingState) => state?.loading;\nexport const getShouldFetch = (state: ShouldFetchState) => state.shouldFetch;\n\ninterface ShouldInitialFetchState extends LoadingState {\n fetchedAt: null | string;\n}\n\n/**\n * Should initial fetch.\n * @param state\n */\nexport const shouldInitialFetchSelector = (state: ShouldInitialFetchState) =>\n !state.fetchedAt && !state.loading;\n\ninterface ErrorState {\n error: string | null;\n}\n\n/**\n * Error selector.\n * @param state\n */\nexport const errorSelector = (state: ErrorState) => state.error;\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\nimport createCachedSelector from 're-reselect';\n\nconst selectFavoritesState = (state: AppState) => state.favorites;\n\nexport const shouldInitialFetch = createSelector(selectFavoritesState, state => {\n return !state.loading && !state.fetchedAt;\n});\n\nexport const isLoading = createSelector(selectFavoritesState, state => state.loading);\n\nexport const getFavorites = createSelector(selectFavoritesState, state => {\n const { byId, allIds } = state;\n\n return allIds.map(id => byId[id]);\n});\n\nexport const isFavorite = createCachedSelector(\n selectFavoritesState,\n (state: AppState, companyId: number) => companyId,\n (state, companyId) => !!state.byId[companyId]\n)((state, companyId) => companyId);\n\nexport const getError = createSelector(selectFavoritesState, state => state.error);\n\nexport const getCompanyById = createCachedSelector(\n selectFavoritesState,\n (state: AppState, companyId: number) => companyId,\n (state, companyId) => state.byId[companyId]\n)((state, companyId) => companyId);\n","var _rect, _defs;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgLogo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 36,\n height: 39,\n viewBox: \"0 0 36 39\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 35.0363,\n height: 38.3731,\n fill: \"url(#pattern0)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"pattern0\",\n patternContentUnits: \"objectBoundingBox\",\n width: 1,\n height: 1\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#image0\",\n transform: \"translate(0 -0.00106044) scale(0.0121951 0.0111347)\"\n })), /*#__PURE__*/React.createElement(\"image\", {\n id: \"image0\",\n width: 82,\n height: 90,\n xlinkHref: \"data:image/png;base64,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\"\n }))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogo);\nexport default __webpack_public_path__ + \"static/media/logo.6bff9886.svg\";\nexport { ForwardRef as ReactComponent };","import { createSelector } from 'reselect';\nimport { isEmpty } from 'lodash';\nimport { matchPath } from 'react-router';\n// models\nimport { CompanyWatchList } from '@optx/models/WatchList';\n// constants\nimport { FAVORITE_LIST_ID, FAVORITE_LIST_NAME, FAVORITE_LIST_OWNER } from '@constants/lists';\nimport routes from '@constants/routes';\n// utils\nimport { getListURL } from '@utils/routes';\nimport { hasEditPermission } from '@utils/lists';\n// redux\nimport { selectors as favoriteListsSelectors } from '@redux/favorite-lists/lists';\nimport { getFavorites } from '@redux/favorites/selectors';\nimport { selectors as routeSelectors } from '@redux/router';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { AppState } from '@optx/redux/interfaces';\nimport { ListDetails } from './interfaces';\n\nconst selectedListState = (state: AppState) => state.lists.details;\n\nexport const getListEditPermission = createSelector(selectedListState, state => {\n const data = state.data as CompanyWatchList;\n\n return data && data.share_permission ? hasEditPermission(data.share_permission) : true;\n});\n\nexport const isLoading = createSelector(selectedListState, state => state.loading);\n\nexport const getLists = createSelector(\n getFavorites,\n favoriteListsSelectors.getLists,\n favoriteListsSelectors.getAllListIds,\n favoriteListsSelectors.getQuery,\n userSelectors.getFullName,\n (favorites, savedLists, savedListIds, query, userName) => {\n const lists: Array<ListDetails> = [];\n\n if (\n favorites &&\n favorites.length &&\n FAVORITE_LIST_NAME.toLowerCase().includes(query!.toLowerCase())\n ) {\n lists.push({\n title: FAVORITE_LIST_NAME,\n count: favorites.length,\n date: '',\n unique_id: FAVORITE_LIST_ID,\n global_list: undefined,\n owner_name: userName,\n origin: FAVORITE_LIST_OWNER,\n modified_at: null,\n // View only.\n share_permission: 1,\n is_public: false,\n is_owner: false,\n });\n }\n\n if (savedLists && !isEmpty(savedLists)) {\n savedListIds.map(id => lists.push({ ...savedLists[id], unique_id: id }));\n }\n\n return lists.filter(list => list.count !== 0);\n }\n);\n\nexport const getCSVImportCompanies = createSelector(\n selectedListState,\n state => state && state.CSVImportCompanies\n);\n\nexport const getListData = createSelector(selectedListState, state => state && state.data);\n\nexport const getRouteListId = createSelector(\n routeSelectors.getLocation,\n state => state && state.pathname.split('/')[2]\n);\nexport const getRouteListUrl = createSelector(\n routeSelectors.getLocation,\n state => state && state.pathname\n);\n\nexport const isSourceScrubRoute = createSelector(routeSelectors.getLocation, state => {\n const match = matchPath(state && state.pathname, {\n path: routes.userLists.sourceScrubLists,\n exact: true,\n strict: false,\n });\n\n return Boolean(match);\n});\n\nexport const getFilterListId = createSelector(getListData, getRouteListUrl, (list, listUrl) => {\n if (!list) {\n if (listUrl) return listUrl.split('/').slice(-1)[0];\n\n return '';\n }\n\n if ('id' in list) return list.id.toString();\n\n // If on a different page return ''. This prevents the listId from persisting in store when navigating to other pages\n // like advanced search, global notes - whererver DropdownAdd is used\n const location = getListURL(list.unique_id as string);\n\n if (listUrl !== location) return '';\n\n return list.unique_id.toString();\n});\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport { ShareList } from './interfaces';\n\nexport const shareListAction = createAction<ShareList>(types.SHARE_LIST);\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport { CombineSearch } from './interfaces';\n\nexport const combineSearch = createAction<CombineSearch>(types.COMBINE_SEARCH);\nexport const combineSearchFail = createAction(types.COMBINE_SEARCH_FAIL);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport * as actions from './actions';\nimport { SavedSearchesService } from '../../../services/api';\nimport NotificationService from '../../../services/NotificationService';\n\nexport function* fetchListsExcludingCompanySaga(action: PayloadAction<number>) {\n const companyId = action.payload;\n\n try {\n // @ts-ignore\n const res = yield call(SavedSearchesService.getFavoriteLists, null, companyId);\n yield put(actions.fetchListsExcludingCompanySuccess(companyId, res.data.lists));\n } catch (error: any) {\n const message = `Fetch lists excluding company ${companyId} fail!`;\n yield put(actions.fetchListsExcludingCompanyFail(message));\n NotificationService.error(message);\n }\n}\n\nexport default function* companyListsSagas() {\n yield takeLatest(actions.fetchListsExcludingCompany, fetchListsExcludingCompanySaga);\n}\n","export const useIsChromePlugin = () => {\n const isChromePlugin = window.location.pathname.startsWith('/chrome-extension');\n\n return { isChromePlugin };\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { AddCompanyReviewPayload, AddCompanyReviewSuccess } from './interfaces';\nimport {\n ADD_COMPANY_REVIEW,\n ADD_COMPANY_REVIEW_SUCCESS,\n ADD_COMPANY_REVIEW_FAIL,\n} from './actionsTypes';\n\nexport const addCompanyReview = createAction<AddCompanyReviewPayload>(ADD_COMPANY_REVIEW);\n\nexport const addCompanyReviewSuccess = createAction<AddCompanyReviewSuccess>(\n ADD_COMPANY_REVIEW_SUCCESS\n);\n\nexport const addCompanyReviewFail = createAction<string>(ADD_COMPANY_REVIEW_FAIL);\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectors } from '../state';\n\nimport { actions } from '../state/companyOwner';\n\nexport default function useCompanyOwnerEditableField(companyOwner: string | null) {\n const dispatch = useDispatch();\n const selectOptions = [\n { value: 'blank', label: 'Unowned' },\n ...useSelector(selectors.companyIndividualEdit.companyOwnerOptions),\n ];\n const initialSelectValue = companyOwner\n ? selectOptions.filter(option => companyOwner.includes(option.label))\n : selectOptions[0];\n\n const addCompanyOwner = useCallback(\n (companyId, companyOwnerName, companyOwnerId) =>\n dispatch(\n actions.addCompanyOwner({\n companyId,\n companyOwnerName,\n companyOwnerId,\n })\n ),\n [dispatch]\n );\n\n const value = companyOwner;\n\n return { addCompanyOwner, initialSelectValue, value, selectOptions };\n}\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectors } from '../state';\nimport { actions } from '../state/pipelineRank';\n\nexport default function usePipelineRankEditableField(rank: string | number | null | undefined) {\n const dispatch = useDispatch();\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.rankOptions),\n ];\n const initialSelectValue = rank\n ? selectOptions.filter(option => Number(rank) === parseInt(option.label))\n : selectOptions[0];\n\n const addCompanyPipelineRank = useCallback(\n (companyId, pipelineRankId, pipelineRankText, callback) =>\n dispatch(\n actions.addCompanyPipelineRank({\n companyId,\n pipelineRankId,\n pipelineRankText,\n callback,\n })\n ),\n [dispatch]\n );\n\n const value = rank;\n\n return { addCompanyPipelineRank, initialSelectValue, value, selectOptions };\n}\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectors } from '../state';\nimport { actions } from '../state/stage';\n\nexport default function useStageEditableField(stage: string) {\n const dispatch = useDispatch();\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.stageOptions),\n ];\n const initialSelectValue = stage\n ? selectOptions.filter(option => stage === option.label)\n : selectOptions[0];\n\n const addCompanyStage = useCallback(\n (companyId, companyStageId, companyStageText) =>\n dispatch(\n actions.addCompanyStage({\n companyId,\n companyStageId,\n companyStageText,\n })\n ),\n [dispatch]\n );\n\n const value = stage;\n\n return { addCompanyStage, initialSelectValue, value, selectOptions };\n}\n","import { useSelector } from 'react-redux';\nimport { getIsAdminOrAnalyst } from '@optx/redux/user/information/selectors';\n\nconst useIsAdminOrAnalyst = () => {\n const value = useSelector(getIsAdminOrAnalyst);\n\n return value;\n};\n\nexport default useIsAdminOrAnalyst;\n","export const PAGE_SIZE = 25;\n","import React, { useMemo } from 'react';\nimport Styles from './StatsCompare.styles';\n\ntype StatsCompareValues = [number, number];\ntype RenderValueFunc = (value: number) => React.ReactNode;\n\ninterface StatsCompareProps {\n title: string;\n values: StatsCompareValues;\n renderMainValue?: RenderValueFunc;\n renderCompareValue?: RenderValueFunc;\n}\n\nconst computePercent = (value1: number, value2: number) => (value1 / value2) * 100;\n\nconst getFilledPercentages = (firstValue: number, secondValue: number) => {\n let firstValueProgress = 100;\n let secondValueProgress = 100;\n\n // Compute smallest value percent.\n if (firstValue > secondValue) {\n secondValueProgress = computePercent(secondValue, firstValue);\n } else if (firstValue < secondValue) {\n firstValueProgress = computePercent(firstValue, secondValue);\n } else if (firstValue === 0) {\n // If both are equal to zero then we don't fill percentage.\n firstValueProgress = 0;\n secondValueProgress = 0;\n }\n\n return [firstValueProgress, secondValueProgress];\n};\n\nconst defaultRenderValue: RenderValueFunc = (value: number) => value;\n\nconst StatsCompare: React.FC<StatsCompareProps> = ({\n title,\n values,\n renderMainValue = defaultRenderValue,\n renderCompareValue = defaultRenderValue,\n}) => {\n const [mainValue, comparedValue] = values;\n const [mainfilledProgress, comparedfilledProgress] = useMemo(\n () => getFilledPercentages(mainValue, comparedValue),\n [comparedValue, mainValue]\n );\n\n return (\n <Styles.Wrapper>\n <Styles.Title>{title}</Styles.Title>\n <Styles.MainStatValue>{renderMainValue(mainValue)}</Styles.MainStatValue>\n <Styles.MainStatProgress size=\"small\" percent={mainfilledProgress} showInfo={false} />\n <Styles.ComparedProgress size=\"small\" percent={comparedfilledProgress} showInfo={false} />\n <Styles.ComparedValue>{renderCompareValue(comparedValue)}</Styles.ComparedValue>\n </Styles.Wrapper>\n );\n};\n\nexport default StatsCompare;\n","import { Progress } from 'antd';\nimport styled from 'styled-components';\n\nconst Wrapper = styled.div`\n margin: 0 0 20px;\n`;\n\nconst BottomWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst Title = styled.div`\n font-style: normal;\n font-weight: 600;\n font-size: 12px;\n line-height: 20px;\n /* Dark BLue */\n color: #334d6e;\n opacity: 0.8;\n font-family: 'Lato', sans-serif;\n`;\n\nconst MainStatValue = styled.div`\n font-style: normal;\n font-weight: 600;\n font-size: 16px;\n line-height: 24px;\n /* Daybreak Blue / blue-6 */\n color: #1890ff;\n opacity: 0.8;\n`;\nconst MainStatLabel = styled.div`\n font-style: normal;\n font-weight: 600;\n font-size: 12px;\n line-height: 24px;\n /* Daybreak Blue / blue-6 */\n color: #1890ff;\n opacity: 0.8;\n`;\n\nconst ComparedValue = styled.div`\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 20px;\n /* Gray */\n color: #90a0b7;\n opacity: 0.8;\n`;\nconst ComparedValueBlue = styled.div`\n font-style: normal;\n font-weight: 600;\n font-size: 14px;\n line-height: 24px;\n /* Gray */\n color: #595959;\n opacity: 0.8;\n`;\n\nconst StyledPropgress = styled(Progress)`\n display: block;\n line-height: 1;\n margin: 0 0 4px;\n\n &.ant-progress-line {\n font-size: 4px;\n\n .ant-progress-bg {\n /* Height is set directly on element and can't be overriden otherwise. */\n height: 4px !important;\n }\n }\n`;\n\nconst MainStatProgress = styled(StyledPropgress)`\n .ant-progress-bg {\n /* Daybreak Blue / blue-6 */\n background-color: #1890ff;\n }\n`;\n\nconst ComparedProgress = styled(StyledPropgress)`\n .ant-progress-bg {\n /* Gray */\n background-color: #90a0b7;\n }\n`;\n\nconst Styles = {\n Wrapper,\n BottomWrapper,\n Title,\n MainStatValue,\n MainStatProgress,\n MainStatLabel,\n ComparedValue,\n ComparedValueBlue,\n ComparedProgress,\n};\n\nexport default Styles;\n","import React, { useMemo } from 'react';\nimport Styles from './StatsCompareAndSource.styled';\n\ntype StatsCompareValues = [number, number];\n\ninterface StatsCompareAndSourceProps {\n title: string;\n values: StatsCompareValues;\n isPercentage: boolean;\n}\n\nconst computePercent = (value1: number, value2: number) => (value1 / value2) * 100;\n\nconst getFilledPercentages = (firstValue: number, secondValue: number) => {\n let firstValueProgress = 100;\n let secondValueProgress = 100;\n\n // Compute smallest value percent.\n if (firstValue > secondValue) {\n secondValueProgress = computePercent(secondValue, firstValue);\n } else if (firstValue < secondValue) {\n firstValueProgress = computePercent(firstValue, secondValue);\n } else if (firstValue === 0) {\n // If both are equal to zero then we don't fill percentage.\n firstValueProgress = 0;\n secondValueProgress = 0;\n }\n\n return [firstValueProgress, secondValueProgress];\n};\n\nconst StatsCompareAndSource: React.FC<StatsCompareAndSourceProps> = ({\n title,\n values,\n isPercentage = false,\n}) => {\n const [mainValue, comparedLabel] = values;\n const comparedValue = Number(comparedLabel.toString().split(' ')[0]);\n\n const [mainfilledProgress, comparedfilledProgress] = useMemo(\n () => getFilledPercentages(mainValue, comparedValue),\n [comparedValue, mainValue]\n );\n\n return (\n <Styles.Wrapper>\n <Styles.Title>{title}</Styles.Title>\n <Styles.ComparedValueBlue>{mainValue}</Styles.ComparedValueBlue>\n <Styles.ComparedProgress size=\"small\" percent={mainfilledProgress} showInfo={false} />\n <Styles.MainStatProgress size=\"small\" percent={comparedfilledProgress} showInfo={false} />\n <Styles.BottomWrapper>\n <Styles.MainStatValue>{comparedLabel}</Styles.MainStatValue>\n <Styles.MainStatLabel>From OPTX</Styles.MainStatLabel>\n </Styles.BottomWrapper>\n </Styles.Wrapper>\n );\n};\n\nexport default StatsCompareAndSource;\n","import { selectors as fetchSelectors } from '@optx/redux/feature/fetch';\nimport { AdditionalStatisticsState } from './interfaces';\n\nexport const selectAdditionalStatistics = (state: AdditionalStatisticsState) => state.data;\nexport const isLoading = (state: AdditionalStatisticsState) =>\n fetchSelectors.isLoadingSelector(state);\n","import { FEATURE } from '../constants';\n\nconst FEATURE_SLICE = `${FEATURE} additional-statistics`;\n\n// fetch\nexport const FETCH = `${FEATURE_SLICE}/fetch`;\nexport const FETCH_SUCCESS = `${FEATURE_SLICE}/fetch success`;\nexport const FETCH_FAIL = `${FEATURE_SLICE}/fetch fail`;\n","import { AdditionalStatistics } from '@optx/models/feature/analystsLeaderboard/AdditionalStatistics';\nimport { createAction } from '@reduxjs/toolkit';\n\n// types\nimport * as types from './types';\n\n// fetch\nexport const fetch = createAction(types.FETCH);\nexport const fetchSuccess = createAction<AdditionalStatistics>(types.FETCH_SUCCESS);\nexport const fetchFail = createAction<string>(types.FETCH_FAIL);\n","import { createReducer } from '@reduxjs/toolkit';\n// redux\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n// local\nimport { AdditionalStatisticsState } from './interfaces';\n// redux\nimport * as actions from './actions';\n\nconst initialState: AdditionalStatisticsState = {\n data: null,\n error: '',\n loading: false,\n fetchedAt: null,\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetch, fetchReducers.fetchReducer)\n .addCase(actions.fetchSuccess, fetchReducers.fetchSuccessReducer)\n .addCase(actions.fetchFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import styled from 'styled-components';\n\nconst Wrapper = styled.span`\n &,\n & span {\n display: flex;\n justify-content: flex-end;\n margin-right: 8px;\n }\n`;\n\nexport const Styled = {\n Wrapper,\n};\n","/* eslint-disable no-nested-ternary */\nimport React, { ChangeEvent, useEffect, useRef, useState, useContext } from 'react';\nimport { Button, Input } from 'antd';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport { LinkedinOutlined } from '@ant-design/icons';\nimport classnames from 'classnames';\nimport numeral from 'numeral';\n// models\nimport { ChartBarIntervalKeys } from '@optx/models/charts/data';\nimport Company, { CompanyProfile, CompanyUserValuesKeys } from '@optx/models/Company';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\nimport { ServiceType } from '../state/interfaces';\n// constants\nimport {\n ABBREVIATION_ERROR_MESSAGE,\n DEFAULT_CELL_VALUE,\n LINK_URL_VALUE_ERROR_MESSAGE,\n message,\n} from '@optx/constants/table/cells';\nimport { ManageMyPipeline } from '@constants/pendoActions';\nimport { ADVANCED_SEARCH, EDIT_FIELD_TEXT_FIELDS } from '@optx/constants/pendoAction';\nimport { regexNegativeAbbreviation } from '@optx/constants/regex';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\nimport { CONTACTS } from '@optx/constants/pendoActions';\n// utils\nimport { abbreviateValue, parseNumberFromAbbreviation } from '@optx/utils/number';\nimport { validateFloatAbbreviation, validateLinkedinURL } from '@optx/utils/validation';\nimport { getRouteAlias } from '@optx/utils/routes';\nimport { convertToURL } from '@optx/utils/url';\nimport { sendPendoData } from '@optx/utils/utils';\n// components\nimport { TrendingLine } from '@optx/components/common/charts';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\nimport { DropdownAddContext } from '@optx/components/DropdownAdd/DropdownAddContext';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n// redux\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { actions as opportunityPresentationActions } from '@redux/company/opportunity-presentation';\n// hooks\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useUpdateFields from '../hooks/useUpdateFields';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\nimport useFocusInput from '@optx/common/hooks/useFocusInput';\n// styles\nimport { Styled } from './EditFieldText.styled';\n\ninterface EditFieldTextProps {\n value: string | number | null;\n record: Company | CompanyProfile | CompanyUserContact | undefined;\n fieldName: EditFieldOptions;\n isFromHistory?: boolean;\n refreshOnChange?: boolean;\n service?: ServiceType;\n isFromGrid: boolean;\n triggerLabel?: string;\n isURL?: boolean;\n entityType?: string;\n isContact?: boolean;\n hidePenIcon?: boolean;\n successMessage?: string;\n callbackComponent?: () => void;\n actionPendo?: string;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n}\n\nexport type EditFieldOptions =\n | 'Number of Employees'\n | 'Last Raised Amount'\n | 'Capital Raised'\n | 'Linkedin Profile'\n | 'Asking Amount';\n\nconst renderNumberOfEmployeesTrendline = (\n record: Company | CompanyProfile,\n period: ChartBarIntervalKeys\n) => {\n let points: (number | null)[] = [];\n\n if (record.employee_count_trends && record.employee_count_trends[period]) {\n points = record.employee_count_trends[period];\n }\n\n return <TrendingLine points={points} color=\"#52C41A\" />;\n};\n\nconst monetaryOptions = ['Last Raised Amount', 'Capital Raised', 'Asking Amount'];\n\nconst formattedValue = (fieldName: EditFieldOptions, customValue: string | undefined) => {\n if (fieldName === 'Last Raised Amount' || fieldName === 'Capital Raised') {\n if (customValue === 'Unknown') {\n return '0.0';\n }\n }\n\n if (customValue === DEFAULT_CELL_VALUE || customValue === '0') {\n return undefined;\n }\n\n return customValue || undefined;\n};\n\nconst EditFieldText: React.FC<EditFieldTextProps> = ({\n record,\n value,\n fieldName,\n isFromGrid,\n isFromHistory,\n refreshOnChange,\n service,\n triggerLabel,\n isURL,\n entityType,\n isContact,\n hidePenIcon,\n successMessage,\n callbackComponent,\n actionPendo,\n getPopupContainer,\n}) => {\n const dispatch = useDispatch();\n const [period, setPeriod] = useState<ChartBarIntervalKeys>('1Y');\n const { pathname } = useLocation();\n const myCompaniesTrending = useSelector(searchSelectors.getTrending('myCompanies'));\n const searchTrending = useSelector(searchSelectors.getTrending('advancedSearch'));\n const watchlistTrending = useSelector(searchSelectors.getTrending('lists'));\n const companyOutReachTrending = useSelector(searchSelectors.getTrending('outreachDetails'));\n const { updateField } = useUpdateFields({\n fieldName,\n companyId: record?.company_id ?? 0,\n companyUrl: record?.company_url ?? null,\n successMessage,\n service: service as ServiceType,\n isFromHistory: isFromHistory || refreshOnChange,\n isContact,\n personId: (record as CompanyUserContact)?.person_id as number,\n });\n\n const [closePopup, setClosePopup] = useState<boolean>(false);\n const [isSaveBtnDisabled, setIsSaveBtnDisabled] = useState<boolean>(true);\n const [focus, setFocus] = useState(false);\n const focusInputRef = useFocusInput(focus, closePopup);\n // Close DropDownAdd popup\n const { dropdownVisible, setDropdownVisible } = useContext(DropdownAddContext);\n\n const fieldKey = useRef<CompanyUserValuesKeys>('num_employees');\n const popoverContentRef = useRef(null);\n const currentGridName = useCurrentGridName();\n\n const loadValue = (\n lastRaisedAmount: number | string | null | undefined,\n isFormattedToMillions?: boolean\n ) => {\n if (fieldName === 'Capital Raised') {\n if (\n lastRaisedAmount === undefined ||\n lastRaisedAmount === null ||\n lastRaisedAmount === DEFAULT_EMPTY_VALUE ||\n lastRaisedAmount === '' ||\n lastRaisedAmount === 0\n ) {\n return DEFAULT_CELL_VALUE;\n } else if (lastRaisedAmount === 'Unknown') {\n return 'Unknown';\n }\n\n if (lastRaisedAmount === 'Unknown' || lastRaisedAmount === 0) {\n return 'Unknown';\n }\n\n let value;\n\n // after change value in edit field, we have to remove (Unknown) from value.\n if (lastRaisedAmount.toString().indexOf(' (')) {\n value = lastRaisedAmount.toString().split(' (')[0];\n } else {\n value = lastRaisedAmount;\n }\n\n const formatValue =\n (record as Company)?.is_capital_raise_has_unknown === true ? value : lastRaisedAmount;\n\n const formattedToMillions = numeral(formatValue).value();\n\n return isFormattedToMillions && formattedToMillions\n ? formattedToMillions / 1000000\n : numeral(formatValue).format(`$${NUMBER_FORMAT}`);\n }\n\n if (fieldName === 'Last Raised Amount') {\n if (\n lastRaisedAmount === undefined ||\n lastRaisedAmount === null ||\n lastRaisedAmount === DEFAULT_EMPTY_VALUE ||\n lastRaisedAmount === ''\n ) {\n return DEFAULT_CELL_VALUE;\n }\n\n if (lastRaisedAmount === 'Unknown') {\n return 'Unknown';\n }\n\n const formattedToMillions = numeral(lastRaisedAmount).value();\n\n return isFormattedToMillions && formattedToMillions\n ? formattedToMillions / 1000000\n : numeral(lastRaisedAmount).format(`$${NUMBER_FORMAT}`);\n }\n\n if (fieldName === 'Asking Amount') {\n if (\n lastRaisedAmount === undefined ||\n lastRaisedAmount === null ||\n lastRaisedAmount === DEFAULT_EMPTY_VALUE ||\n lastRaisedAmount === ''\n ) {\n return DEFAULT_CELL_VALUE;\n }\n\n const formattedToMillions = numeral(lastRaisedAmount).value();\n\n return isFormattedToMillions && formattedToMillions\n ? formattedToMillions / 1000000\n : numeral(lastRaisedAmount).format(`$${NUMBER_FORMAT}`);\n }\n\n if (lastRaisedAmount === null || lastRaisedAmount === DEFAULT_CELL_VALUE) {\n return DEFAULT_CELL_VALUE;\n }\n\n return numeral(lastRaisedAmount).format(`$${NUMBER_FORMAT}`);\n };\n\n const [customValue, setCustomValue] = useState<string | number | null>(\n monetaryOptions.includes(fieldName)\n ? loadValue(value, true)\n : fieldName === 'Number of Employees'\n ? value === null\n ? DEFAULT_CELL_VALUE\n : value\n : !value\n ? DEFAULT_CELL_VALUE\n : value\n );\n\n useEffect(() => {\n switch (fieldName) {\n case 'Last Raised Amount':\n case 'Capital Raised':\n case 'Asking Amount':\n setCustomValue(loadValue(value?.toString(), true));\n break;\n case 'Number of Employees':\n setCustomValue(value === null ? DEFAULT_CELL_VALUE : value);\n break;\n default:\n setCustomValue(!value ? DEFAULT_CELL_VALUE : value);\n break;\n }\n\n if (value === customValue) setIsSaveBtnDisabled(true);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const handleCancel = () => {\n setClosePopup(true);\n\n switch (fieldName) {\n case 'Last Raised Amount':\n case 'Capital Raised':\n case 'Asking Amount':\n setCustomValue(loadValue(value, true));\n break;\n case 'Number of Employees':\n setCustomValue(value === null ? DEFAULT_CELL_VALUE : value);\n break;\n default:\n setCustomValue(!value ? DEFAULT_CELL_VALUE : value);\n break;\n }\n\n setIsSaveBtnDisabled(true);\n };\n\n useOnClickOutside(popoverContentRef, handleCancel);\n\n useEffect(() => {\n if (\n getRouteAlias()?.startsWith('userLists') ||\n getRouteAlias()?.startsWith('sourceScrubLists')\n ) {\n setPeriod(watchlistTrending);\n } else if (getRouteAlias()?.startsWith('myCompanies')) {\n setPeriod(myCompaniesTrending);\n } else if (getRouteAlias()?.startsWith('companyOutReach')) {\n setPeriod(companyOutReachTrending);\n } else {\n setPeriod(searchTrending);\n }\n }, [companyOutReachTrending, myCompaniesTrending, pathname, searchTrending, watchlistTrending]);\n\n if (!record) return null;\n\n const isShowTrendingLinesEmployees = fieldName === 'Number of Employees' && isFromGrid;\n const isCapitalRaiseHasUnknown = (record as CompanyProfile).is_capital_raise_has_unknown;\n\n const fieldNames = {\n 'Capital Raised': 'Total Raised',\n 'Asking Amount': 'Equity Check (Ask Amount)',\n };\n // @ts-ignore\n const title = `Edit \"${fieldNames[fieldName] || fieldName}\" value`;\n // @ts-ignore\n const placeholderMessage = `Enter ${fieldNames[fieldName] || fieldName}`;\n\n let label = monetaryOptions.includes(fieldName)\n ? loadValue(value)\n : fieldName === 'Number of Employees'\n ? value === undefined || value === null || value === DEFAULT_CELL_VALUE || value === ''\n ? DEFAULT_CELL_VALUE\n : numeral(value).format('0.[0]a')\n : numeral(value).format(undefined);\n\n if (\n fieldName === 'Capital Raised' &&\n value !== null &&\n value !== DEFAULT_CELL_VALUE &&\n value !== 0 &&\n isCapitalRaiseHasUnknown\n ) {\n label = `${label} ${\n ((record as Company).is_capital_raise_has_unknown as boolean) === true ? '(plus Unknown)' : ''\n }`;\n } else if (!isFromGrid && fieldName === 'Capital Raised' && value === null) {\n label = DEFAULT_CELL_VALUE;\n }\n\n const customMonetaryValue = customValue?.toString().replace('$', '');\n\n const handleFieldKey = () => {\n if (fieldName === 'Last Raised Amount') {\n fieldKey.current = 'last_raised_amount';\n }\n\n if (fieldName === 'Capital Raised') {\n fieldKey.current = 'capital_raised';\n }\n\n if (fieldName === 'Linkedin Profile') {\n fieldKey.current = 'linkedin';\n }\n\n if (fieldName === 'Asking Amount') {\n fieldKey.current = 'asking_amount';\n }\n };\n\n const onChange = (event: ChangeEvent<HTMLInputElement>) => {\n const value = event.currentTarget.value;\n handleFieldKey();\n setIsSaveBtnDisabled(false);\n\n if (isURL) {\n setCustomValue(value);\n } else {\n setCustomValue(value.toUpperCase());\n }\n };\n\n const handleType = () => {\n return monetaryOptions.includes(fieldName)\n ? loadValue(value)\n : abbreviateValue(fieldName === 'Number of Employees' ? value?.toString() : value);\n };\n\n const handlePendoActionCallBack = (value: string) => {\n if (callbackComponent) {\n callbackComponent();\n } else {\n handlePendoAction(value);\n }\n };\n\n const handleConfirmSave = (value: number | null, isValueAbbreviated: boolean) => {\n const formattedToMillions =\n monetaryOptions.includes(fieldName) && value && !isValueAbbreviated ? value * 1000000 : value;\n\n if (fieldName === 'Asking Amount' && record) {\n const payload = {\n company_id: record.company_id,\n deal_preparation: {\n [fieldKey.current]: formattedToMillions,\n },\n };\n\n service\n ? updateField(formattedToMillions, fieldKey.current)\n : dispatch(opportunityPresentationActions.updateOpportunityPresentation(payload));\n } else {\n const isFormattedToMillions =\n monetaryOptions.includes(fieldName) && value ? value * 1000000 : value;\n updateField(isFormattedToMillions, fieldKey.current, undefined, () =>\n handlePendoActionCallBack('Save')\n );\n }\n\n if (actionPendo) {\n if (\n actionPendo === ManageMyPipeline.myCompanies.numberOfEmployees ||\n actionPendo === ManageMyPipeline.myCompanies.lastRaisedAmount ||\n actionPendo === ManageMyPipeline.myCompanies.totalRaised\n ) {\n window.pendo.track(`${actionPendo}_Save`);\n } else {\n window.pendo.track(actionPendo);\n }\n }\n\n setClosePopup(true);\n setIsSaveBtnDisabled(true);\n };\n\n const handleURLSave = () => {\n const currValue = customValue === '' ? null : customValue;\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n if (currValue === null) {\n updateField(currValue, fieldKey.current, undefined, undefined, undefined, entityType);\n setClosePopup(true);\n setIsSaveBtnDisabled(true);\n } else if (currValue !== null && validateLinkedinURL(customValue as string)) {\n customValue !== value &&\n updateField(\n convertToURL(currValue as string),\n fieldKey.current,\n undefined,\n undefined,\n undefined,\n entityType\n );\n setClosePopup(true);\n setDropdownVisible(!dropdownVisible);\n setIsSaveBtnDisabled(true);\n } else {\n message().error(LINK_URL_VALUE_ERROR_MESSAGE);\n }\n };\n\n const handleSave = () => {\n let value;\n\n if (fieldName === 'Number of Employees') {\n if (!validateFloatAbbreviation(customValue as string)) {\n setIsSaveBtnDisabled(true);\n\n return message().error(ABBREVIATION_ERROR_MESSAGE);\n }\n\n value =\n customValue !== ''\n ? parseNumberFromAbbreviation(customValue ? customValue.toString() : '0')\n : null;\n } else if (fieldName === 'Capital Raised') {\n if (customValue === null || customValue === '' || customValue === DEFAULT_EMPTY_VALUE) {\n value = 0;\n } else {\n if (!validateFloatAbbreviation(customValue as string)) {\n setIsSaveBtnDisabled(true);\n\n return message().error(ABBREVIATION_ERROR_MESSAGE);\n }\n\n value = parseNumberFromAbbreviation(customValue ? customValue.toString() : '0');\n }\n } else if (fieldName === 'Asking Amount') {\n if (customValue === null || customValue === '' || customValue === DEFAULT_EMPTY_VALUE) {\n value = null;\n } else {\n if (!validateFloatAbbreviation(customValue as string)) {\n setIsSaveBtnDisabled(true);\n\n return message().error(ABBREVIATION_ERROR_MESSAGE);\n }\n\n value = parseNumberFromAbbreviation(customValue ? customValue.toString() : '0');\n }\n } else {\n if (!validateFloatAbbreviation(customValue as string)) {\n setIsSaveBtnDisabled(true);\n\n return message().error(ABBREVIATION_ERROR_MESSAGE);\n }\n\n value = parseNumberFromAbbreviation(customValue ? customValue.toString() : '0');\n }\n\n if (customValue === handleType()) {\n return setClosePopup(true);\n }\n\n const isValueAbbreviated =\n typeof customValue === 'string' && regexNegativeAbbreviation.test(customValue);\n\n return handleConfirmSave(value, isValueAbbreviated);\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n isURL ? handleURLSave() : handleSave();\n }\n\n if (event.key === 'ArrowRight' || event.key === 'ArrowLeft') {\n event.stopPropagation();\n }\n };\n\n const handlePendoAction = (value: string) => {\n if (currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_${EDIT_FIELD_TEXT_FIELDS[fieldName]}_${value}`);\n }\n };\n\n const content = (\n <div ref={popoverContentRef}>\n <Input\n value={formattedValue(fieldName, customMonetaryValue)}\n onChange={onChange}\n ref={focusInputRef}\n placeholder={\n monetaryOptions.includes(fieldName) ? 'in millions of dollars' : placeholderMessage\n }\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n />\n <div className=\"profile-information__popover-buttons\">\n <Button\n className=\"profile-information__cancel\"\n onClick={() => {\n handleCancel();\n handlePendoAction('Cancel');\n\n if (actionPendo) {\n window.pendo.track(`${actionPendo}_Cancel`);\n }\n }}\n >\n Cancel\n </Button>\n <Button\n disabled={isSaveBtnDisabled}\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={isURL ? handleURLSave : handleSave}\n >\n Save\n </Button>\n </div>\n </div>\n );\n\n if (!isFromGrid || isFromHistory) {\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n hidePenIcon={hidePenIcon}\n actionPendo={actionPendo}\n onClick={() => {\n setFocus(true);\n }}\n getPopupContainer={getPopupContainer}\n >\n {triggerLabel || label}\n </EditPopover>\n );\n }\n\n return (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n onClick={() => {\n setFocus(true);\n }}\n setClosePopup={setClosePopup}\n actionPendo={actionPendo}\n />\n }\n fill={isFromGrid && true}\n >\n <Styled.Wrapper\n className={classnames({ 'd-flex': isShowTrendingLinesEmployees }, 'align-items-center')}\n >\n {isURL && record.linkedin !== '-' && record.linkedin !== null ? (\n <a\n href={convertToURL(value as string)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => {\n window.pendo.track(`${CONTACTS}_ClickCompanyName`);\n }}\n >\n <LinkedinOutlined\n style={{ fontSize: 22 }}\n onClick={() => {\n window.pendo.track(`${CONTACTS}_ClickLinkedinLink`);\n }}\n />\n </a>\n ) : (\n fieldName === 'Linkedin Profile' && DEFAULT_CELL_VALUE\n )}\n {!isURL && (\n <TruncateTooltip title={label} className=\"flex-grow-1\">\n <span\n className={classnames({\n 'mr-2':\n isShowTrendingLinesEmployees &&\n (record as Company | CompanyProfile).employee_count_trends,\n })}\n >\n {label}\n </span>\n </TruncateTooltip>\n )}\n {isShowTrendingLinesEmployees &&\n renderNumberOfEmployeesTrendline(record as Company | CompanyProfile, period)}\n </Styled.Wrapper>\n </InlineEdit>\n );\n};\n\nexport default React.memo(EditFieldText);\n","// fetch options lists for stage, rank and company owner\nexport const ADD_COMPANY_OWNER = 'ADD_COMPANY_OWNER';\nexport const ADD_COMPANY_OWNER_SUCCESS = 'ADD_COMPANY_OWNER_SUCCESS';\nexport const ADD_COMPANY_OWNER_FAIL = 'ADD_COMPANY_OWNER_FAIL';\n","// models\nimport { SelectedCompaniesGrids } from '@optx/models/bulkActions';\nimport { SelectedCompaniesState } from './interfaces';\n// utils\nimport { combineCompaniesFromAllPages } from '@optx/utils/bulk-actions';\n\nexport const getCompanies =\n (gridName: SelectedCompaniesGrids, pageNumber?: number) => (state: SelectedCompaniesState) => {\n if (pageNumber !== undefined) {\n return state[gridName][pageNumber];\n } else {\n return combineCompaniesFromAllPages(state, gridName);\n }\n };\n\nexport const checkEquityTouch =\n (gridName: SelectedCompaniesGrids) => (state: SelectedCompaniesState) =>\n combineCompaniesFromAllPages(state, gridName).every(company => company.is_in_et);\n\nexport const checkCompaniesOwner =\n (gridName: SelectedCompaniesGrids, analyst: string) => (state: SelectedCompaniesState) =>\n combineCompaniesFromAllPages(state, gridName).every(\n company => company.company_owner === analyst\n );\n","import styled from 'styled-components';\nimport Icon from '@optx/components/common/Icon';\n\nexport const ThumbsIcon = styled(Icon)<{\n marginLeft?: number;\n}>`\n width: 16px;\n height: 16px;\n margin-left: ${({ marginLeft }) => (marginLeft ? `${marginLeft}px` : 0)};\n`;\n\nexport const ThumbsUpIcon = styled(ThumbsIcon)`\n color: #52c41a;\n`;\n","import { useEffect, RefObject } from 'react';\nimport { findDOMNode } from 'react-dom';\n\n/**\n * Custom hook for auto-focusing an input element within a specified class.\n *\n * @param {React.RefObject<T>} ref - A ref object that can be used to access the component.\n * @param {boolean} autoFocus - A boolean indicating whether the input should be auto-focused.\n * @param {string} className - The class name of the input container.\n */\n\nconst useAutoFocusSelect = (ref: RefObject<any>, autoFocus: boolean, className: string) => {\n useEffect(() => {\n if (ref.current && autoFocus) {\n const element = findDOMNode(ref.current) as HTMLElement;\n\n if (element) {\n setTimeout(() => {\n const inputContainer = element.getElementsByClassName(className)[0] as HTMLElement;\n\n if (inputContainer) {\n const inputElement = inputContainer.querySelector('input') as HTMLElement;\n\n if (inputElement) {\n inputElement.focus();\n } else {\n inputContainer.focus();\n }\n }\n }, 100);\n }\n }\n }, [autoFocus, ref, className]);\n};\n\nexport default useAutoFocusSelect;\n","// eslint-disable-next-line import/no-cycle\nimport { ListTagsProps } from '@optx/models/tags';\n\nexport function orderTags(tags: ListTagsProps['tags']) {\n const orderTags = tags?.slice().sort((a, b) => {\n if (a.title.toLowerCase() < b.title.toLowerCase()) {\n return -1;\n }\n\n if (a.title.toLowerCase() > b.title.toLowerCase()) {\n return 1;\n }\n\n return 0;\n });\n\n return orderTags;\n}\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../featureName';\n\nexport const ADD_COMPANY_REVIEW = createFeatureActionType(featureName, 'ADD_COMPANY_REVIEW');\nexport const ADD_COMPANY_REVIEW_SUCCESS = createFeatureActionType(\n featureName,\n 'ADD_COMPANY_REVIEW_SUCCESS'\n);\nexport const ADD_COMPANY_REVIEW_FAIL = createFeatureActionType(\n featureName,\n 'ADD_COMPANY_REVIEW_FAIL'\n);\n","export const ADD_COMPANY_ACTIVE = 'ADD_COMPANY_ACTIVE';\nexport const ADD_COMPANY_ACTIVE_SUCCESS = 'ADD_COMPANY_ACTIVE_SUCCESS';\nexport const ADD_COMPANY_ACTIVE_FAIL = 'ADD_COMPANY_ACTIVE_FAIL';\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as actionTypes from './actionTypes';\nimport { EditCompanyStageActionPayload } from './interfaces';\n\nexport const addCompanyStage = createFeatureAction<EditCompanyStageActionPayload>(\n featureName,\n actionTypes.ADD_COMPANY_STAGE\n);\n\nexport const addCompanyStageFail = createFeatureAction<string>(\n featureName,\n actionTypes.ADD_COMPANY_STAGE_FAIL\n);\n","export const ADD_COMPANY_STAGE = 'ADD_COMPANY_STAGE';\nexport const ADD_COMPANY_STAGE_FAIL = 'ADD_COMPANY_STAGE_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\n\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n\nimport * as actions from './actions';\nimport { CompanyStageState, EditCompanyStageActionPayload } from './interfaces';\n\nexport const initialState: CompanyStageState = {\n companyId: null,\n loading: false,\n error: null,\n};\n\nconst addCompanyStage: CaseReducer<\n CompanyStageState,\n PayloadAction<EditCompanyStageActionPayload>\n> = (draftState, action) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addCompanyStage, addCompanyStage)\n .addCase(actions.addCompanyStageFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","export const ADD_COMPANY_PORTFOLIO = 'ADD_COMPANY_PORTFOLIO';\nexport const ADD_COMPANY_PORTFOLIO_SUCCESS = 'ADD_COMPANY_PORTFOLIO_SUCCESS';\nexport const ADD_COMPANY_PORTFOLIO_FAIL = 'ADD_COMPANY_PORTFOLIO_FAIL';\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport * as models from './interfaces';\n\nexport const updateCompanyPortfolio = createAction<models.CompanyPortfolio>(\n types.ADD_COMPANY_PORTFOLIO\n);\n\nexport const updateCompanyPortfolioSuccess = createAction<models.CompanyPortfolio>(\n types.ADD_COMPANY_PORTFOLIO_SUCCESS\n);\n\nexport const updateCompanyPortfolioFail = createAction<string>(types.ADD_COMPANY_PORTFOLIO_FAIL);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport NotificationService from '@services/NotificationService';\nimport { CompanyService } from '@services/api';\nimport { ADD_COMPANY_PORTFOLIO } from './types';\nimport { updateCompanyPortfolioFail, updateCompanyPortfolioSuccess } from './actions';\n\nimport { CompanyPortfolio } from './interfaces';\n\nexport function* updateCompanyPortfolioSaga(action: PayloadAction<CompanyPortfolio>) {\n try {\n yield call(CompanyService.updatePortfolio, action.payload);\n yield put(updateCompanyPortfolioSuccess(action.payload));\n NotificationService.success('PSG platform company successfully updated');\n } catch (e: any) {\n const errorMessage = 'Error updating company portfolio!';\n yield put(updateCompanyPortfolioFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* portfolioSaga() {\n yield takeLatest(ADD_COMPANY_PORTFOLIO, updateCompanyPortfolioSaga);\n}\n","import featureName from '../../featureName';\nimport { CompanyGraphsState } from '../interfaces';\n\ntype StateSlice = Record<typeof featureName, CompanyGraphsState>;\n\nexport const selectFeatureState = (state: StateSlice) => state[featureName];\n","import { createSelector } from 'reselect';\nimport { selectors as localSelectors } from '../../employee';\nimport { selectFeatureState } from './selectFeature';\n\nconst employeeGrowthState = createSelector(selectFeatureState, state => {\n return state.employeeGrowth;\n});\n\n// slice selectors\nconst getEmployeeGrowthData = createSelector(employeeGrowthState, localSelectors.getData);\n\nconst isLoading = createSelector(selectFeatureState, state => {\n return state.employeeGrowth.loading;\n});\n\nexport default {\n getEmployeeGrowthData,\n isLoading,\n};\n","import { createSelector } from 'reselect';\nimport { selectors as localSelectors } from '../../score';\nimport { selectFeatureState } from './selectFeature';\n\nconst scoreGrowthState = createSelector(selectFeatureState, state => {\n return state.scoreGrowth;\n});\n\n// slice selectors\nconst getScoreGrowthData = createSelector(scoreGrowthState, localSelectors.getData);\nconst getPSGDate = createSelector(scoreGrowthState, localSelectors.getPSGDate);\n\nconst isLoading = createSelector(selectFeatureState, state => {\n return state.scoreGrowth.loading;\n});\n\nexport default {\n getScoreGrowthData,\n getPSGDate,\n isLoading,\n};\n","import employee from './employeeGrowth';\nimport score from './scoreGrowth';\n\nexport default { employee, score };\n","import * as typeSuffix from '../constants';\n\nexport const createFeaturePrefix = (featureName: string, featureType: string) =>\n `[${featureName}] ${featureType}`;\n\n/**\n * Create loading action types.\n * @param prefix action type prefix.\n * @param type feature type. If type is provided prefix is used as feature name.\n */\nexport const createActionTypes = (prefix: string, featureType?: string) => {\n let featurePrefix = prefix;\n\n if (featureType) {\n featurePrefix = createFeaturePrefix(prefix, featureType);\n }\n\n return {\n SELECTOR: featurePrefix,\n REQUEST: `${featurePrefix}_${typeSuffix.REQUEST}`,\n SUCCESS: `${featurePrefix}_${typeSuffix.SUCCESS}`,\n FAILURE: `${featurePrefix}_${typeSuffix.FAILURE}`,\n };\n};\n","// models\nimport { GridSortMapping } from './state/interfaces';\n// constants\nimport {\n COMPANY_DEFAULT_SORT,\n MYCOMPANIES_DEFAULT_SORT_US,\n} from '@constants/table/sort/defaultSort';\nimport { DEFAULT_SORT_ANALYST } from '@optx/features/checklist-research-insights/constants/table';\nimport { DEFAULT_SORT } from '@optx/features/sourcing-outreach-summary/constants/table';\nimport { CONTACT_DEFAULT_SORT } from '@constants/table/sort/defaultSort';\n\nexport const SORT_MAPPING: GridSortMapping[] = [\n {\n gridKey: 'advancedSearch',\n sessionKey: 'company_sorting',\n defaultSort: COMPANY_DEFAULT_SORT,\n hasMultiSort: true,\n isSimilarCompaniesSort: false,\n },\n {\n gridKey: 'lists',\n sessionKey: 'user_list_sorting',\n defaultSort: COMPANY_DEFAULT_SORT,\n hasMultiSort: true,\n },\n {\n gridKey: 'myCompanies',\n sessionKey: 'my_companies_sorting',\n defaultSort: MYCOMPANIES_DEFAULT_SORT_US,\n hasMultiSort: true,\n },\n {\n gridKey: 'checklistResearchInsights',\n sessionKey: 'checklist_insights_companies_filters',\n defaultSort: DEFAULT_SORT_ANALYST,\n hasMultiSort: true,\n },\n {\n gridKey: 'outreach',\n sessionKey: 'sourcing_outreach_sorting',\n defaultSort: DEFAULT_SORT,\n hasMultiSort: false,\n },\n {\n gridKey: 'outreachDetails',\n sessionKey: 'sourcing_outreach_detail_sorting',\n defaultSort: COMPANY_DEFAULT_SORT,\n hasMultiSort: true,\n },\n {\n gridKey: 'contacts',\n sessionKey: 'contact_sorting',\n defaultSort: CONTACT_DEFAULT_SORT,\n hasMultiSort: true,\n },\n {\n gridKey: 'addons',\n sessionKey: 'addon_sorting',\n defaultSort: COMPANY_DEFAULT_SORT,\n hasMultiSort: false,\n },\n];\n","import { SourcingOutreachSortingRule } from '../models';\n\nexport const DEFAULT_SORT: Array<SourcingOutreachSortingRule> = [\n {\n id: 'user_name',\n desc: false,\n },\n];\n","export const USER_VALUES_FIELDS = [\n 'Last Raised Amount',\n 'Capital Raised',\n 'Last Funding Date',\n 'Revenue',\n 'EBITDA',\n 'Last Round',\n];\n\nexport const MONTH_DATE_YEAR_FORMAT_FIELDS = ['IC Status Date', 'Expected Close Date'];\n\nexport const COMPANY_VALUES_FIELDS = [\n 'OPS Team',\n 'Deal Team',\n 'Use Parent Company',\n 'IC Status Date',\n 'Expected Close Date',\n 'Senior Deal Team Lead',\n 'Revenue',\n 'EBITDA',\n 'Capital Raised',\n 'Last Round',\n 'Last Funding Date',\n 'Last Raised Amount',\n 'Active on Pipeline',\n 'Website Status',\n 'Next Steps',\n 'Note',\n];\n","import styled from 'styled-components';\nimport { styledColors } from '@utils/theme/colors';\n\nexport const RawLink = styled.a`\n font-weight: 600;\n color: ${styledColors.blue6};\n`;\n","import { Link } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { styledColors } from '@optx/utils/theme/colors';\n\nexport const RouterLink = styled(Link)`\n font-weight: 600;\n color: ${styledColors.blue6};\n`;\n","import React from 'react';\nimport Icon, { IconProps } from '@optx/components/common/Icon/Icon';\nimport styled from 'styled-components';\nimport { styledColors } from '@utils/theme/colors';\n\nexport const OpenInNewTabIcon = styled((props: IconProps) => (\n <Icon {...props} iconName=\"open-in-new\" />\n))`\n width: 18px;\n height: 18px;\n color: #000;\n margin-left: 10px;\n\n &:hover {\n color: ${styledColors.blue6};\n }\n`;\n","import { FinancialKeys } from '@optx/models/Financial';\n\nexport const FINANCIAL_KEYS: { [K in FinancialKeys]: string } = {\n ARR: 'annual_recurring_revenue',\n EBITDA: 'ebitda',\n Revenue: 'revenue',\n 'GM %': 'gm',\n};\n","import React, { ChangeEvent, useEffect, useState, useMemo, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport { Button, Tooltip } from 'antd';\nimport { MenuInfo } from 'rc-menu/lib/interface';\nimport { isEqual } from 'lodash';\nimport moment from 'moment';\n// models\nimport { FinancialFields, FinancialKeys } from '@optx/models/Financial';\nimport { FinancialFieldRangeValue, FinancialFieldValues } from '@optx/models/Company';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { FINANCIAL_KEYS } from '@optx/constants/opportunity-presentation';\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\nimport { CompanyProfileTabs } from '@optx/constants/routes';\nimport globalConfig from '@optx/constants/config';\nimport { regexNegativeAbbreviation } from '@optx/constants/regex';\n// utils\nimport { normalizeNegativeSignValues } from '@optx/utils/utils';\nimport { roundNumber, parseNumberFromAbbreviation } from '@optx/utils/number';\nimport { validateField } from '@optx/utils/editFields';\nimport { roundingPresentationValues } from '@optx/utils/dealPresentation';\nimport { isOptionChecked } from '@optx/utils/option';\nimport { highlightText } from '@optx/utils/text';\n// redux\nimport { actions, selectors } from '@redux/company/opportunity-presentation';\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport { getFinancialFilterOptions } from '@optx/redux/company/filters/selectors';\nimport { selectors as cardSelectors } from '@features/long-card/company-card';\n// hooks\nimport { useIsChromePlugin } from '@optx/common/hooks/useIsChromePlugin';\n// components\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport InputWithDropdown from '@optx/shared/view/molecules/FormFields/InputWithDropdown';\n// eslint-disable-next-line max-len\nimport { TooltipLink } from '@components/pages/CompanyProfile/ProfileTabs/DealPresentation/styles/DealPresentation.styled';\nimport { InlineEdit } from '@optx/shared/view/molecules/edit/InlineEdit';\n\nconst FINANCIAL_OPTIONS_FIELD: {\n [K in FinancialKeys]: FinancialFields;\n} = {\n ARR: 'last_arr_value',\n EBITDA: 'ebitda_numeric',\n Revenue: 'last_rev_update_amount',\n 'GM %': 'last_gross_margin',\n};\n\ntype TableCellFinancialValueProps = {\n value: number | string | FinancialFieldRangeValue;\n growth?: number;\n title: string;\n isFromGrid?: boolean;\n updatedFieldFromGrid?: (value: FinancialFieldValues) => void;\n payload: { key: FinancialKeys; year: number; estimated: boolean; user?: string; date?: string };\n actionPendo?: string;\n};\n\nexport const TableCellFinancialValue: React.FC<TableCellFinancialValueProps> = ({\n value,\n growth,\n title,\n payload,\n isFromGrid,\n updatedFieldFromGrid,\n actionPendo,\n}) => {\n const dispatch = useDispatch();\n const location = useLocation();\n const { isChromePlugin } = useIsChromePlugin();\n\n const company = useSelector(profileSelectors.getProfile);\n const options = useSelector(getFinancialFilterOptions(FINANCIAL_OPTIONS_FIELD[payload.key]));\n const companyCard = useSelector(cardSelectors.getProfile);\n const loading = useSelector(selectors.isLoading);\n\n const [closePopup, setClosePopup] = useState(false);\n const [fieldValue, setFieldValue] = useState<string | number>(DEFAULT_EMPTY_VALUE);\n const [isTooltipVisible, setIsTooltipVisible] = useState<boolean | undefined>(undefined);\n\n const getRangeValueLabel = useCallback(\n (rangeValue: FinancialFieldRangeValue) => {\n const amountValue = options.find(option => isEqual(option.rangeValue, rangeValue))?.label;\n\n if (amountValue) {\n return amountValue;\n // fix for old hardcoded range values for gm to display min value\n } else if (!amountValue && payload.key === 'GM %') {\n return rangeValue.min;\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [options]\n );\n\n const getFieldValue = (value: string | number | FinancialFieldRangeValue) => {\n if (value === DEFAULT_EMPTY_VALUE || value === undefined) {\n return '';\n }\n\n if (typeof value === 'number' && payload.key === 'GM %') {\n return value;\n }\n\n if (typeof value === 'number' && payload.key !== 'GM %') {\n return value / 1000000;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n\n return getRangeValueLabel(value) ?? '';\n };\n\n const cellValue = useMemo(() => {\n if (value === undefined || value === DEFAULT_EMPTY_VALUE) {\n return DEFAULT_EMPTY_VALUE;\n }\n\n if (payload.key === 'GM %' && typeof value !== 'object') {\n return `${value}%`;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (typeof value === 'number') {\n return roundNumber(value, NUMBER_FORMAT).toUpperCase();\n }\n\n return getRangeValueLabel(value) ?? '';\n }, [value, payload.key, getRangeValueLabel]);\n\n let growthStatus: string;\n\n if (growth !== undefined && growth > 0) {\n growthStatus = 'positive';\n } else if (growth !== undefined && growth < 0) {\n growthStatus = 'negative';\n } else {\n growthStatus = 'neutral';\n }\n\n const handleChangeInput = (event: ChangeEvent<HTMLInputElement>) => {\n setFieldValue(event.target.value);\n };\n\n const handleVisibilityChange = () => {\n !loading && handleCancel();\n };\n\n const handleCancel = () => {\n setFieldValue(getFieldValue(value));\n setClosePopup(true);\n };\n\n const handleSelectOption = (event: MenuInfo) => {\n setFieldValue(event.key);\n };\n\n const handleSave = () => {\n const key = FINANCIAL_KEYS[payload.key];\n\n if (validateField(fieldValue, payload.key, options)) {\n const isFromDropdown = isOptionChecked(fieldValue, options);\n let value: string | number | FinancialFieldRangeValue = fieldValue;\n\n if (typeof fieldValue === 'string' && fieldValue.length === 0) {\n value = DEFAULT_EMPTY_VALUE;\n } else if (payload.key === 'GM %' && !isFromDropdown) {\n value = parseFloat(fieldValue as string);\n } else if (!isNaN(Number(fieldValue))) {\n value = roundingPresentationValues((fieldValue as number) * 1000000);\n } else if (typeof fieldValue === 'string' && regexNegativeAbbreviation.test(fieldValue)) {\n value = parseNumberFromAbbreviation(fieldValue as string) as number;\n } else if (isFromDropdown) {\n const selectedOption = options.find(option => option.label === fieldValue);\n\n if (selectedOption?.rangeValue) {\n value = selectedOption.rangeValue;\n }\n }\n\n if (isFromGrid) {\n const updatedFieldPayload = {\n financial: {\n [key as string]: {\n year: payload.year,\n estimated: payload.estimated,\n value,\n },\n },\n };\n updatedFieldFromGrid && updatedFieldFromGrid(updatedFieldPayload);\n } else {\n const payloadValue = {\n company_id: (company?.company_id as number) || (companyCard?.company_id as number),\n financial: {\n [key as string]: {\n year: payload.year,\n estimated: payload.estimated,\n value,\n },\n },\n };\n dispatch(actions.updateOpportunityPresentation(payloadValue));\n }\n\n setClosePopup(true);\n }\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n useEffect(() => {\n setFieldValue(getFieldValue(value));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const isSaveBtnDisabled = String(fieldValue) === String(getFieldValue(value));\n\n const handleTooltipLinkClick = (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n setClosePopup(true);\n event.stopPropagation();\n setIsTooltipVisible(false);\n setTimeout(() => {\n setIsTooltipVisible(undefined);\n }, 0);\n };\n\n const tooltipLink = `${location.pathname}?referrer=%2F&tab=${CompanyProfileTabs.HISTORY}&field=${payload.key}`;\n\n const formattedDate = moment(payload.date).format(globalConfig.short_date.DATE_FORMAT);\n\n const tooltipContent = (\n <div onClick={(event: React.MouseEvent<HTMLDivElement, MouseEvent>) => event.stopPropagation()}>\n <div>Added by: {payload.user}</div>\n <div>on {formattedDate}</div>\n {!isChromePlugin && (\n <TooltipLink to={tooltipLink} onClick={handleTooltipLinkClick}>\n See full audit trail\n </TooltipLink>\n )}\n </div>\n );\n\n const valueElement = (\n <span style={highlightText(cellValue.toString())} className=\"value\">\n {normalizeNegativeSignValues(cellValue.toString())}\n </span>\n );\n\n const content = (\n <div\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n className={FINANCIAL_KEYS[payload.key] === 'ebitda' ? 'ebitda-value' : ''}\n >\n <InputWithDropdown\n value={(fieldValue as string)?.toString()}\n options={options}\n placeholder={FINANCIAL_KEYS[payload.key] !== 'gm' ? 'in millions of dollars' : title}\n onInputChange={handleChangeInput}\n onSelectOption={handleSelectOption}\n allowClear\n closeOnSelect\n hideDropdownOnFocusOut\n open\n />\n\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSave}\n disabled={isSaveBtnDisabled}\n >\n Save\n </Button>\n </div>\n </div>\n );\n\n if (isFromGrid) {\n return (\n <InlineEdit\n action={\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n placement=\"topRight\"\n onVisibilityChange={handleVisibilityChange}\n destroyOnHide\n customOverlayStyle={{ width: '385px' }}\n ></EditPopover>\n }\n fill\n >\n <span className=\"financial-value\">\n <span className=\"value\">{normalizeNegativeSignValues(cellValue.toString())}</span>\n {growth !== undefined && (\n <div>\n (\n <span className={`growth ${normalizeNegativeSignValues(growthStatus.toString())}`}>\n {`${\n growthStatus === 'negative'\n ? normalizeNegativeSignValues(growth.toString())\n : normalizeNegativeSignValues(growth.toString()) ?? 0\n }% `}\n </span>\n {payload.key === 'EBITDA' ? 'Margin' : 'Growth'})\n </div>\n )}\n </span>\n </InlineEdit>\n );\n }\n\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n placement=\"topRight\"\n onVisibilityChange={handleVisibilityChange}\n destroyOnHide\n customOverlayStyle={{ width: '385px' }}\n actionPendo={actionPendo}\n getPopupContainer={(triggerNode: HTMLElement) =>\n triggerNode?.parentNode?.parentNode?.parentNode?.parentNode as HTMLElement\n }\n >\n <span className=\"financial-value\">\n {cellValue !== DEFAULT_EMPTY_VALUE ? (\n <Tooltip title={tooltipContent} trigger={['click', 'hover']} visible={isTooltipVisible}>\n {valueElement}\n </Tooltip>\n ) : (\n valueElement\n )}\n {growth !== undefined && (\n <div>\n (\n <span className={`growth ${normalizeNegativeSignValues(growthStatus.toString())}`}>\n {`${\n growthStatus === 'negative'\n ? normalizeNegativeSignValues(growth.toString())\n : normalizeNegativeSignValues(growth.toString()) ?? 0\n }% `}\n </span>\n {payload.key === 'EBITDA' ? 'Margin' : 'Growth'})\n </div>\n )}\n </span>\n </EditPopover>\n );\n};\n","import React from 'react';\nimport { Button } from 'antd';\n// utils\nimport { replaceObjectForCopy } from '@optx/utils/replaceObjectForCopy';\nimport { copyToClipboard } from '@optx/utils/helpers';\nimport { trackCopyEmailPendoActions } from '@optx/utils/utils';\n\ninterface CopyButtonProps {\n text?: string | JSX.Element;\n list?: JSX.Element[];\n copyText?: string; // if `text` props is JSX.Element, then `copyText` is required and pass to `copyToClipboard`\n}\n\nexport const CopyButton: React.FC<CopyButtonProps> = ({ text, list, copyText }) => {\n return (\n <div style={{ maxWidth: 700, overflowX: 'auto', overflowY: 'hidden' }}>\n {text ? <span>{text}</span> : <div>{list}</div>}\n <div className=\"text-center\">\n <Button\n size=\"small\"\n onClick={() => {\n // eslint-disable-next-line no-nested-ternary\n text\n ? copyToClipboard(text)\n : copyText\n ? copyToClipboard(copyText)\n : copyToClipboard(replaceObjectForCopy(list!));\n\n trackCopyEmailPendoActions();\n }}\n >\n COPY\n </Button>\n </div>\n </div>\n );\n};\n\nexport default CopyButton;\n","export function replaceObjectForCopy(obj: JSX.Element[]) {\n const mapList = obj?.map((item: any) => item?.props?.children);\n\n const childrenFlatted = mapList?.flat()?.join(', ');\n\n const textWithoutObject = childrenFlatted\n ?.replace(/\\[object Object\\],/g, '')\n ?.replace(/, \\[object Object\\]/g, '');\n\n return textWithoutObject;\n}\n","import React from 'react';\nimport { Link, useLocation } from 'react-router-dom';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\nimport { CONTACTS } from '@optx/constants/pendoActions';\nimport { CompanyProfileTabs } from '@optx/constants/routes';\n// utils\nimport { profileRedirectPath } from '@utils/routes';\n// hooks\nimport useUserRole from '@optx/common/hooks/useUserRole';\n// components\nimport Icon from '@components/common/Icon';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nconst TableCellCompanyName = (value: any, record: any) => (\n <CompanyNameRender name={value} companyId={record?.company_id} />\n);\n\ninterface CompanyNameRenderProps {\n name: string;\n companyId?: string | number;\n showOpenInNewTab?: boolean;\n stopClickPropagation?: boolean;\n origin?: string;\n}\n\nconst stopEventPropagation = (event: React.MouseEvent) => {\n event.stopPropagation();\n};\n\nexport const CompanyNameRender: React.FC<CompanyNameRenderProps> = ({\n name,\n companyId,\n stopClickPropagation,\n origin,\n}) => {\n const location = useLocation();\n const { advancedSearchPathname } = useUserRole();\n\n const newTabPath = origin ? advancedSearchPathname : location.pathname;\n const pagePath = origin\n ? `/profile/${companyId}?tab=${CompanyProfileTabs.PROFILE_OVERVIEW}`\n : profileRedirectPath(Number(companyId), location.pathname);\n\n const handleClick = (event: React.MouseEvent) => {\n stopClickPropagation && stopEventPropagation(event);\n\n if (window.location.pathname === '/contacts') {\n window.pendo.track(`${CONTACTS}_ClickCompanyName`);\n }\n };\n\n return (\n <div className=\"d-flex\">\n {companyId ? (\n <>\n <TruncateTooltip title={name || DEFAULT_CELL_VALUE} placement={'topLeft'}>\n <Link onClick={handleClick} className=\"company-name__profile-link\" to={pagePath}>\n {name || DEFAULT_CELL_VALUE}\n </Link>\n </TruncateTooltip>\n <Link\n onClick={handleClick}\n className=\"open-in-new\"\n to={profileRedirectPath(Number(companyId), newTabPath, true)}\n target=\"_blank\"\n >\n <Icon iconName=\"open-in-new\" />\n </Link>\n </>\n ) : (\n <TruncateTooltip title={name || DEFAULT_CELL_VALUE} placement={'topLeft'}>\n <span className=\"company-name__no-link text-ellipsis\">{name || DEFAULT_CELL_VALUE}</span>\n </TruncateTooltip>\n )}\n </div>\n );\n};\n\nCompanyNameRender.defaultProps = {\n showOpenInNewTab: true,\n};\n\nexport default TableCellCompanyName;\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport * as types from './actionTypes';\nimport { RelationshipManagement } from './interfaces';\n\nexport const fetchRelationshipManagement = createAction<number>(\n types.FETCH_RELATIONSHIP_MANAGEMENT\n);\nexport const fetchRelationshipManagementSuccess = createAction<RelationshipManagement>(\n types.FETCH_RELATIONSHIP_MANAGEMENT_SUCCESS\n);\nexport const fetchRelationshipManagementFail = createAction<string>(\n types.FETCH_RELATIONSHIP_MANAGEMENT_FAIL\n);\n","export const FETCH_RELATIONSHIP_MANAGEMENT = 'FETCH_RELATIONSHIP_MANAGEMENT';\nexport const FETCH_RELATIONSHIP_MANAGEMENT_SUCCESS = 'FETCH_RELATIONSHIP_MANAGEMENT_SUCCESS';\nexport const FETCH_RELATIONSHIP_MANAGEMENT_FAIL = 'FETCH_RELATIONSHIP_MANAGEMENT_FAIL';\n","import { createSelector } from 'reselect';\n// models\nimport { AppState } from '@optx/redux/interfaces';\n\nconst selectCompanyRelationshipManagement = (state: AppState) =>\n state.companyRelationshipManagement;\n\nexport const isLoading = createSelector(\n selectCompanyRelationshipManagement,\n state => state.loading\n);\n\nexport const getError = createSelector(selectCompanyRelationshipManagement, state => state.error);\n\nexport const getRelationshipManagementData = createSelector(\n selectCompanyRelationshipManagement,\n state => state.data\n);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n// models\nimport { RelationshipManagement, RelationshipManagementState } from './interfaces';\n// redux\nimport { actions } from '.';\n\nconst initialState: RelationshipManagementState = {\n data: null,\n loading: false,\n error: '',\n};\n\nconst fetchRelationshipManagementReducer: CaseReducer<RelationshipManagementState> = draftState => {\n draftState.loading = true;\n draftState.error = '';\n};\n\nconst fetchRelationshipManagementSuccessReducer: CaseReducer<\n RelationshipManagementState,\n PayloadAction<RelationshipManagement>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.data = action.payload;\n};\n\nconst fetchRelationshipManagementFailReducer: CaseReducer<\n RelationshipManagementState,\n PayloadAction<string>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.error = action.payload;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchRelationshipManagement, fetchRelationshipManagementReducer)\n .addCase(actions.fetchRelationshipManagementSuccess, fetchRelationshipManagementSuccessReducer)\n .addCase(actions.fetchRelationshipManagementFail, fetchRelationshipManagementFailReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { RelationshipManagement } from './interfaces';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport * as actions from './actions';\n\nexport function* fetchRelationshipManagementSaga(action: PayloadAction<number>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<null | RelationshipManagement> = yield call(\n CompanyService.fetchRelationshipManagement,\n companyId\n );\n\n if (res.data) {\n yield put(actions.fetchRelationshipManagementSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch Relationship Management info!';\n yield put(actions.fetchRelationshipManagementFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch Relationship Management info!');\n yield put(actions.fetchRelationshipManagementFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companyRelationshipManagementSaga() {\n yield takeLatest(actions.fetchRelationshipManagement, fetchRelationshipManagementSaga);\n}\n","import { TableCellCompanyName } from '@components/common/table/AntTable/cells';\nimport { ColumnsType } from 'antd/lib/table';\nimport { SelectedCompanies } from '@models/bulkActions';\n\nexport const BULK_EDIT_DEFAULT_COLUMNS: ColumnsType<SelectedCompanies> = [\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n render: TableCellCompanyName,\n },\n];\n\nexport const SALESLOFT_ERROR_MESSAGE_SPECIAL_CHARACTERS =\n 'SalesLoft API request failed: email_address: is invalid';\n","import queryString from 'query-string';\nimport { Dictionary } from 'lodash';\n// models\nimport { SaveSearchAsListPayload } from '@optx/models/api/WatchLists';\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { FilterExportPayload } from '@models/api/exportCSV';\n// utils\nimport { mapSearchQuery } from '@optx/utils/search';\nimport { cleanPayload } from '@utils/api/cleanPayload';\n// local\nimport { SourcingInfo } from '@optx/screens/App/AllReports/components/CompanySearchDropdown/SearchMenu/interfaces';\nimport ApiClient, { API_URL } from './axios-client';\nimport SearchService from './SearchService';\n\nexport class AnalystService {\n static client: ApiClient = new ApiClient(`${API_URL}/analyst`);\n\n static getDasboard = (query: string) => {\n return AnalystService.client.get(`/get_dashboard?${query}`);\n };\n\n static getMapInfo = (query: string) => {\n return AnalystService.client.get(`/map_info?${query}`);\n };\n\n static getEmailStatistics = (query: string) => {\n return AnalystService.client.get(`/email_statistic?${query}`);\n };\n\n static getSmartTouchScore = (query: string) => {\n return AnalystService.client.get(`/smart_score?${query}`);\n };\n\n static getOPTXStats = (query: string) => {\n return AnalystService.client.get(`/optx_stats?${query}`);\n };\n\n static getPipelineInfo = (query: string) => {\n return AnalystService.client.get(`/pipeline_statistic?${query}`);\n };\n\n static getETMergeHistory = (query: string) => {\n return AnalystService.client.get(`/et_merge_history?${query}`);\n };\n\n static getETAllTimeHighlights = (query: string) => {\n return AnalystService.client.get(`/et_alltime_highlights?${query}`);\n };\n\n static getPipelineReportsCompany = (query: string) => {\n return AnalystService.client.get(`/pipeline_report/company?${query}`);\n };\n\n static getPipelineReportsCompanyCount = (query: string) => {\n return AnalystService.client.get(`/pipeline_report/company/count?${query}`);\n };\n\n static getPipelineReportsCard = (query: string) => {\n return AnalystService.client.get(`/pipeline_report/card?${query}`);\n };\n\n static getSourcingOutreach = (query: string) => {\n return AnalystService.client.get(`/sourcing_outreach?${query}`);\n };\n\n static getCompaniesListOutReach = (searchData: SearchPayloadRequest) => {\n const payload: Dictionary<string | number | string[]> = mapSearchQuery(searchData);\n\n if (searchData.listType === 'combined' && searchData.fromSavedList) {\n payload.combined_search_id = searchData.fromSavedList;\n }\n\n if (payload.analyst_id && typeof payload.analyst_id === 'string') {\n payload.analyst_id = payload.analyst_id.split(',');\n }\n\n const updatedPayload = cleanPayload(payload);\n\n return AnalystService.client.post('/sourcing_outreach/detail', updatedPayload);\n };\n\n static getCompanieListOutReachCount = (searchData: any) => {\n const payload: Dictionary<string | number | string[]> = mapSearchQuery(searchData);\n\n if (searchData.listType === 'combined' && searchData.fromSavedList) {\n payload.combined_search_id = searchData.fromSavedList;\n }\n\n if (payload.analyst_id && typeof payload.analyst_id === 'string') {\n payload.analyst_id = payload.analyst_id.split(',');\n }\n\n const updatedPayload = cleanPayload(payload);\n\n return AnalystService.client.post('/sourcing_outreach/detail/count', updatedPayload);\n };\n\n static getAnalystChecklistInsight = (query: string) => {\n return AnalystService.client.get(`/checklist_insights?${query}`);\n };\n\n static getCompanyChecklistInsight = (query: string) => {\n return AnalystService.client.get(`/checklist_insights/companies?${query}`);\n };\n\n static getCompanyCountChecklistInsight = (query: string) => {\n return AnalystService.client.get(`/checklist_insights/companies/count?${query}`);\n };\n\n static getCardInfoChecklistInsight = (query: string) => {\n return AnalystService.client.get(`/checklist_insights/cards?${query}`);\n };\n\n static getCompanyActivity = () => {\n return AnalystService.client.get('/company_activity');\n };\n\n static getAnalystHomeInsightsStats = () => {\n return AnalystService.client.get('/home/v1?source_tag_filter=et-1-0');\n };\n\n static getAnalystHomeFilters = () => {\n return AnalystService.client.get('/home/v1/data_settings');\n };\n\n static getNonAnalystHomeFilters = () => {\n return AnalystService.client.get('/home/non_analyst/data_settings');\n };\n\n static getAnalystHomeTouchActivity = (payload: { date_lower: string; date_upper: string }) => {\n const query = queryString.stringify(payload, { arrayFormat: 'comma' });\n\n return AnalystService.client.get('/home/v1/touch_activity?' + query);\n };\n\n static getAnalystHomeActivity = (payload: { ddate_lower: string; ddate_upper: string }) => {\n const query = queryString.stringify(payload, { arrayFormat: 'comma' });\n\n return AnalystService.client.get('/home/v1/activity_insights?' + query);\n };\n\n static saveAsListPipelineReport = (title: string, searchData: SearchPayloadRequest) => {\n const payload = mapSearchQuery(searchData) as unknown as SaveSearchAsListPayload;\n\n const query = queryString.stringify(\n { ...payload, list_title: title },\n { arrayFormat: 'comma' }\n );\n\n return AnalystService.client.post(`/pipeline_report/save_as_list?${query}`);\n };\n\n static exportChecklistResearch = (\n query: string,\n body: {\n columns: Dictionary<string>;\n },\n isCompany: boolean\n ) => {\n const headers = {\n responseType: 'blob',\n ...SearchService.searchHeaders.headers,\n };\n\n let url: string = '/checklist_insights/csv_export?';\n\n if (isCompany) {\n url = '/checklist_insights/companies/csv_export?';\n }\n\n return AnalystService.client.post<string>(`${url}${query}`, body, {\n headers,\n });\n };\n\n static exportCompaniesOutReachToCSV = (\n filters: FilterExportPayload,\n body: {\n columns: Dictionary<string>;\n },\n sourcingOutReachInfo?: SourcingInfo\n ) => {\n const cleanFilter = cleanPayload(filters);\n const headers = {\n responseType: 'blob',\n ...SearchService.searchHeaders.headers,\n };\n\n const updatedBody = {\n ...body,\n ...cleanFilter,\n ...(sourcingOutReachInfo?.analyst_id ? { analyst_id: sourcingOutReachInfo?.analyst_id } : {}),\n ...(sourcingOutReachInfo?.column_name\n ? { column_name: sourcingOutReachInfo?.column_name }\n : {}),\n };\n\n return AnalystService.client.post<string>('/sourcing_outreach/detail/csv_export', updatedBody, {\n headers,\n });\n };\n\n // export list of ETIntegration companies to CSV\n static exportPipelineToCSV = (\n query: string,\n body: {\n columns: Dictionary<string>;\n }\n ) => {\n const headers = {\n responseType: 'blob',\n ...SearchService.searchHeaders.headers,\n };\n\n return AnalystService.client.post<string>(`/pipeline_report/csv_export?${query}`, body, {\n headers,\n });\n };\n\n // export list of SourcingOutreach data to CSV\n static exportSourcingOutreachToCSV = (\n query: string,\n body: {\n columns: Dictionary<string>;\n }\n ) => {\n const headers = {\n responseType: 'blob',\n ...SearchService.searchHeaders.headers,\n };\n\n return AnalystService.client.post<string>(`/sourcing_outreach/csv_export?${query}`, body, {\n headers,\n });\n };\n}\n","export const COMBINE_SEARCH = 'COMBINE_SEARCH';\nexport const COMBINE_SEARCH_FAIL = 'COMBINE_SEARCH_FAIL';\n","export default 'list-share';\n","import { ActionCreatorWithPreparedPayload, createAction } from '@reduxjs/toolkit';\nimport ShareListInfo from '@optx/models/feature/shareList/ShareListInfo';\nimport { ListType } from '@optx/models/WatchList';\nimport { EditShareListForm } from '@optx/models/feature/shareList/form';\nimport { createFeatureActionType, createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as actionTypes from './actionTypes';\nimport { EditShareListActionPayload } from './interfaces';\n\n// edit share list\nexport const editShareList: ActionCreatorWithPreparedPayload<\n [number | string, ListType],\n EditShareListActionPayload\n> = createAction(\n createFeatureActionType(featureName, actionTypes.EDIT_SHARE_LIST),\n (listId, type) => ({\n payload: { listId, type },\n })\n);\nexport const cancelEditShareList = createFeatureAction(\n featureName,\n actionTypes.CANCEL_EDIT_SHARE_LIST\n);\n// share list\nexport const shareList = createFeatureAction<EditShareListForm>(\n featureName,\n actionTypes.SHARE_LIST\n);\nexport const shareListSuccess = createFeatureAction(featureName, actionTypes.SHARE_LIST_SUCCESS);\nexport const shareListFail = createFeatureAction<string>(featureName, actionTypes.SHARE_LIST_FAIL);\n// fetch share list info\nexport const fetchShareListInfo = createFeatureAction<number>(\n featureName,\n actionTypes.FETCH_SHARE_LIST_INFO\n);\nexport const fetchShareListInfoSuccess = createFeatureAction<ShareListInfo>(\n featureName,\n actionTypes.FETCH_SHARE_LIST_INFO_SUCCESS\n);\nexport const fetchShareListInfoFail = createFeatureAction<string>(\n featureName,\n actionTypes.FETCH_SHARE_LIST_INFO_FAIL\n);\n","// fetch share list info\nexport const FETCH_SHARE_LIST_INFO = 'FETCH_SHARE_LIST_INFO';\nexport const FETCH_SHARE_LIST_INFO_SUCCESS = 'FETCH_SHARE_LIST_INFO_SUCCESS';\nexport const FETCH_SHARE_LIST_INFO_FAIL = 'FETCH_SHARE_LIST_INFO_FAIL';\n// edit share list\nexport const EDIT_SHARE_LIST = 'EDIT_SHARE_LIST';\nexport const CANCEL_EDIT_SHARE_LIST = 'CANCEL_EDIT_SHARE_LIST';\n// share list\n// TODO: if later all lists are edited this way we should rename constant to SHARE_LIST.\n// right now there is already an action type called SHARE_LIST in user/share\nexport const SHARE_LIST = 'SHARE_WATCH_LIST';\nexport const SHARE_LIST_SUCCESS = 'SHARE_WATCH_LIST_SUCCESS';\nexport const SHARE_LIST_FAIL = 'SHARE_WATCH_LIST_FAIL';\n","import { createAction } from '@reduxjs/toolkit';\nimport { TOGGLE_EDIT_SHARE_LIST_MODAL } from './actionTypes';\n\nexport const toggle = createAction<boolean>(TOGGLE_EDIT_SHARE_LIST_MODAL);\n","export const TOGGLE_EDIT_SHARE_LIST_MODAL = 'TOGGLE_EDIT_SHARE_LIST_MODAL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { toggle } from './actions';\n\nconst toggleReducer: CaseReducer<boolean, PayloadAction<boolean>> = (_, action) => action.payload;\n\nconst reducer = createReducer(false, buider => buider.addCase(toggle, toggleReducer));\n\nexport default reducer;\n","import featureName from '../../featureName';\nimport { ShareListFeatureState } from '../interfaces';\n\nexport const selectFeatureState = (state: any) => state[featureName] as ShareListFeatureState;\n","import { createSelector } from 'reselect';\nimport * as localSelectors from '../share-list/selectors';\nimport { selectFeatureState } from './selectFeature';\n\nconst selectShareListState = createSelector(selectFeatureState, state => state.shareList);\n\n// slice selectors\nconst isLoadingInfo = createSelector(selectShareListState, localSelectors.isLoading);\n\nconst error = createSelector(selectShareListState, localSelectors.getError);\n\nconst isSubmitting = createSelector(selectShareListState, localSelectors.isSubmitting);\n\nconst failedLoadingInfo = createSelector(selectShareListState, localSelectors.failedLoadingInfo);\n\nconst listOwner = createSelector(selectShareListState, localSelectors.getListOwner);\n\nconst listType = createSelector(selectShareListState, localSelectors.getListType);\n\nconst editedSharedList = createSelector(selectShareListState, localSelectors.getEditedSharedList);\n\n/**\n * All/owner access rights.\n */\nconst accessRightsOptions = createSelector(\n selectShareListState,\n localSelectors.getAccessRightsOptions\n);\n\n/**\n * Other users available access rights excepting owner.\n */\nconst otherUsersAccessRightsOptions = createSelector(\n selectShareListState,\n localSelectors.getOtherUsersAccessRightsOptions\n);\n\nconst sharedListUsers = createSelector(selectShareListState, localSelectors.getSharedListUsers);\n\nexport default {\n isLoadingInfo,\n error,\n isSubmitting,\n failedLoadingInfo,\n listOwner,\n listType,\n editedSharedList,\n accessRightsOptions,\n otherUsersAccessRightsOptions,\n sharedListUsers,\n};\n","import { selectors as fetchSelectors } from '@redux/feature/fetch';\nimport { ShareListState } from './interfaces';\n\nexport const isLoading = (state: ShareListState) => fetchSelectors.isLoadingSelector(state);\n\nexport const getError = (state: ShareListState) => fetchSelectors.errorSelector(state);\n\nexport const isSubmitting = (state: ShareListState) => !!state.data && state.loading;\n\nexport const failedLoadingInfo = (state: ShareListState) => !state.data && !!state.error;\n\nexport const getListOwner = (state: ShareListState) => state.owner;\n\nexport const getListType = (state: ShareListState) => state.listType;\n\nexport const getAccessRightsOptions = (state: ShareListState) => {\n if (!state.data) {\n return [];\n }\n\n return state.data.access_rights;\n};\n\n/**\n * Select other users allowed access rights except owner.\n * @param state\n */\nexport const getOtherUsersAccessRightsOptions = (state: ShareListState) => {\n if (!state.data) {\n return [];\n }\n\n return state.data.share_options;\n};\n\nexport const getSharedListUsers = (state: ShareListState) => {\n if (!state.data) {\n return [];\n }\n\n return state.data.shared_with;\n};\n\nexport const getEditedSharedList = (state: ShareListState) => state.editedList;\n","import { ShareListUIState } from './interface';\n\nexport const isOpen = (state: ShareListUIState) => state.editModal;\n","import { combineReducers } from 'redux';\nimport editModalReducer from './editModal';\nimport { ShareListUIState } from './interface';\n\nconst reducer = combineReducers<ShareListUIState>({\n editModal: editModalReducer,\n});\n\nexport default reducer;\n","import { createSelector } from 'reselect';\nimport { selectors as localUISelectors } from '../ui';\nimport { selectFeatureState } from './selectFeature';\n\nconst selectUIState = createSelector(selectFeatureState, state => state.ui);\n\nconst isModalOpen = createSelector(selectUIState, localUISelectors.isOpen);\n\nexport default {\n isModalOpen,\n};\n","import { createSelector } from 'reselect';\nimport { Dictionary } from 'lodash';\nimport { EditShareListFormUserOption } from '@optx/models/feature/shareList/form';\nimport { ShareListUser } from '@optx/models/feature/shareList/ShareListInfo';\nimport { UserList } from '@optx/redux/user/user-list/interfaces';\nimport { ListAccessRights } from '@optx/models/WatchList';\nimport { selectors as usersSelectors } from '@redux/user/user-list';\nimport shareList from './shareList';\nimport ui from './ui';\n\n// cluster/common selectors for share list and user info\n// @ts-ignore\nconst isLoading = createSelector(\n shareList.isLoadingInfo,\n usersSelectors.isShareLoading,\n (loadingInfo: boolean, loadingUsers: boolean) => loadingUsers || loadingInfo\n);\n\nconst userOptions = createSelector(\n // @ts-ignore\n usersSelectors.getShareUserListData,\n shareList.listOwner,\n shareList.accessRightsOptions,\n shareList.otherUsersAccessRightsOptions,\n // @ts-ignore\n (users, owner, accessRightsOptions, otherUsersAccessOptions) => {\n // Find default access rights for owner and other users.\n const otherUsersDefaultAccessRights = otherUsersAccessOptions.length\n ? otherUsersAccessOptions[0].value\n : ListAccessRights.ReadOnly;\n\n const ownerDefaultAccessRights =\n accessRightsOptions && accessRightsOptions.length\n ? accessRightsOptions[0].value\n : ListAccessRights.ReadOnly;\n\n const usersWithoutSeniorAdvisorOptions = users.filter(\n (list: UserList) => typeof list.value !== 'string'\n );\n\n if (!owner) {\n return usersWithoutSeniorAdvisorOptions.map((user: UserList) => {\n const shareUser: EditShareListFormUserOption = {\n ...user,\n accessRights: otherUsersDefaultAccessRights,\n accessRightsOptions: otherUsersAccessOptions,\n };\n\n return shareUser;\n });\n }\n\n // Keep owner on the top of the list.\n const mappedUsers: Array<EditShareListFormUserOption> = [];\n let ownerIndex = -1;\n\n usersWithoutSeniorAdvisorOptions.forEach((user: any, index: number) => {\n const mappedUser: EditShareListFormUserOption = {\n ...user,\n accessRights: otherUsersDefaultAccessRights,\n accessRightsOptions: otherUsersAccessOptions,\n };\n\n if (owner.user_id === user.value) {\n mappedUser.disabled = true;\n ownerIndex = index;\n mappedUser.accessRightsOptions = accessRightsOptions;\n mappedUser.accessRights = ownerDefaultAccessRights;\n }\n\n mappedUsers.push(mappedUser);\n });\n\n const finalUsers = [\n mappedUsers[ownerIndex],\n ...mappedUsers.slice(0, ownerIndex),\n ...mappedUsers.slice(ownerIndex + 1),\n ];\n\n return finalUsers;\n }\n);\n\n/**\n * Users list is shared with.\n */\n// @ts-ignore\nconst selectedUsers = createSelector(\n userOptions,\n shareList.sharedListUsers,\n // @ts-ignore\n (users, sharedUsers) => {\n const sharedUsersDict: Dictionary<ShareListUser> = {};\n\n sharedUsers.forEach((sharedUser: any) => {\n sharedUsersDict[sharedUser.user_id] = sharedUser;\n });\n\n return users\n .filter((user: any) => sharedUsersDict[user.value])\n .map((user: any) => {\n const isEqOwner = sharedUsersDict[user.value].is_owner === true;\n const sharedUser = { ...user, disabled: isEqOwner };\n sharedUser.accessRights = sharedUsersDict[user.value].preselected.value;\n\n return sharedUser;\n });\n }\n);\n\nexport default {\n shareList,\n ui,\n // cluster/common selectors\n isLoading,\n userOptions,\n selectedUsers,\n};\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { UserService } from '@services/api';\nimport { AxiosResponse } from 'axios';\nimport {\n EditShareListForm,\n EditShareListFormUserOption,\n} from '@optx/models/feature/shareList/form';\nimport ShareListInfo, { ShareListUser } from '@optx/models/feature/shareList/ShareListInfo';\nimport { ShareListRequest } from '@optx/models/feature/shareList/ShareListRequest';\nimport { ListType, UpdateListPermission } from '@optx/models/WatchList';\nimport { getErrorMessage } from '@utils/api/errors';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { actions as listActions } from '@redux/favorite-lists/lists';\nimport { actions as modalActions } from '../ui/editModal';\nimport * as actions from '../share-list/actions';\nimport selectors from '../selectors';\nimport { EditShareListActionPayload } from '../share-list/interfaces';\n\nfunction* editShareListSaga(action: PayloadAction<EditShareListActionPayload>) {\n yield put(modalActions.toggle(true));\n yield put(actions.fetchShareListInfo(action.payload.listId));\n}\n\nfunction* cancelEditShareListSaga() {\n yield put(modalActions.toggle(false));\n}\n\nfunction* fetchShareListInfoSaga(action: PayloadAction<number>) {\n const listId = action.payload;\n\n try {\n const res: AxiosResponse<ShareListInfo> = yield call(UserService.getShareListInfo, listId);\n yield put(actions.fetchShareListInfoSuccess(res.data));\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed fetching share list information!');\n yield put(actions.fetchShareListInfoFail(message));\n }\n}\n\n/**\n * Map shared users to response excluding owner.\n * @param sharedWith shared with user options.\n * @param ownerId owner identifier.\n */\nfunction mapSharedUsers(sharedWith: Array<EditShareListFormUserOption>, ownerId: number) {\n return sharedWith\n .filter(user => user.value !== ownerId)\n .map(user => ({\n user_id: user.value,\n permission_id: user.accessRights,\n }));\n}\n\nfunction mapShareFormToRequest(\n editInfo: EditShareListForm,\n listId: number,\n ownerId: number,\n listType: ListType\n) {\n const request: ShareListRequest = {\n list_type: listType,\n note: editInfo.note,\n share_with: mapSharedUsers(editInfo.share_with, ownerId),\n owner_id: ownerId,\n list_id: listId,\n };\n\n return request;\n}\n\nfunction* shareListSaga(action: PayloadAction<EditShareListForm>) {\n const editInfo = action.payload;\n // @ts-ignore\n const owner: ShareListUser = yield select(selectors.shareList.listOwner);\n // @ts-ignore\n const listId: number = yield select(selectors.shareList.editedSharedList);\n // @ts-ignore\n const listType: ListType = yield select(selectors.shareList.listType);\n // @ts-ignore\n const currentUserId = yield select(userSelectors.getUserId);\n const currentUser = editInfo.share_with.filter(user => user.value === currentUserId);\n\n const currentUserPermission = currentUser[0] && currentUser[0].accessRights;\n\n try {\n const request = mapShareFormToRequest(editInfo, listId, owner.user_id, listType);\n yield call(UserService.shareList, request);\n yield put(actions.cancelEditShareList());\n yield put(actions.shareListSuccess());\n let updateListCurrentUserPermissionPayload: UpdateListPermission;\n\n if (currentUserPermission) {\n updateListCurrentUserPermissionPayload = {\n listId,\n userPermission: currentUserPermission,\n };\n yield put(listActions.updateFavoriteListPermission(updateListCurrentUserPermissionPayload));\n } else {\n updateListCurrentUserPermissionPayload = {\n listId,\n userPermission: 2,\n };\n yield put(listActions.updateFavoriteListPermission(updateListCurrentUserPermissionPayload));\n }\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed sharing list!');\n yield put(actions.shareListFail(message));\n }\n}\n\nexport default function* shareListSagas() {\n yield takeLatest(actions.editShareList, editShareListSaga);\n yield takeLatest(actions.cancelEditShareList, cancelEditShareListSaga);\n yield takeLatest(actions.fetchShareListInfo, fetchShareListInfoSaga);\n yield takeLatest(actions.shareList, shareListSaga);\n}\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport ShareListInfo from '@models/feature/shareList/ShareListInfo';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\nimport { EditShareListActionPayload, ShareListState } from './interfaces';\nimport * as actions from './actions';\n\nexport const initialState: ShareListState = {\n data: null,\n error: null,\n loading: false,\n editedList: null,\n owner: null,\n listType: null,\n};\n\nconst editShareListReducer: CaseReducer<\n ShareListState,\n PayloadAction<EditShareListActionPayload>\n> = (draftState, action) => {\n const { listId, type } = action.payload;\n draftState.editedList = listId;\n draftState.data = null;\n draftState.owner = null;\n draftState.listType = type;\n};\n\nconst cancelEditShareListReducer: CaseReducer<ShareListState> = draftState => {\n draftState.data = null;\n draftState.editedList = null;\n draftState.owner = null;\n draftState.editedList = null;\n draftState.error = '';\n draftState.listType = null;\n};\n\nconst fetchShareListInfoSuccess: CaseReducer<ShareListState, PayloadAction<ShareListInfo>> = (\n draftState,\n action\n) => {\n fetchReducers.fetchSuccessReducer(draftState, action);\n const owner = action.payload.shared_with.find(user => user.is_owner);\n draftState.owner = owner || null;\n};\n\nconst shareListSuccessReducer: CaseReducer<ShareListState> = draftState => {\n draftState.data = null;\n draftState.owner = null;\n draftState.loading = false;\n draftState.editedList = null;\n draftState.listType = null;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // fetch share list info\n .addCase(actions.fetchShareListInfo, fetchReducers.fetchReducer)\n .addCase(actions.fetchShareListInfoSuccess, fetchShareListInfoSuccess)\n .addCase(actions.fetchShareListInfoFail, fetchReducers.fetchFailReducer)\n // share list\n .addCase(actions.shareList, fetchReducers.fetchReducer)\n .addCase(actions.shareListSuccess, shareListSuccessReducer)\n .addCase(actions.shareListFail, fetchReducers.fetchFailReducer)\n // edit share list\n .addCase(actions.editShareList, editShareListReducer)\n .addCase(actions.cancelEditShareList, cancelEditShareListReducer)\n);\n\nexport default reducer;\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Menu, MenuProps } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport { ListType } from '@models/WatchList';\nimport { actions } from '../state/share-list';\n\ninterface ShareWatchListMenuItemProps extends MenuItemProps {\n listId: number | string;\n listType: ListType;\n}\n\nconst ShareWatchListMenuItem: React.FC<ShareWatchListMenuItemProps> = ({\n listId,\n listType,\n onClick,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n\n const handleClick: MenuProps['onClick'] = info => {\n onClick && onClick(info);\n dispatch(actions.editShareList(listId, listType));\n };\n\n return <Menu.Item onClick={handleClick} {...restProps} />;\n};\n\nexport default ShareWatchListMenuItem;\n","import { combineReducers } from 'redux';\nimport { ShareListFeatureState } from './interfaces';\nimport shareListReducer from './share-list';\nimport uiReducer from './ui';\n\nconst reducer = combineReducers<ShareListFeatureState>({\n shareList: shareListReducer,\n ui: uiReducer,\n});\n\nexport default reducer;\n","import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n margin-bottom: 0;\n align-items: center;\n`;\n\nconst Email = styled.a`\n font-style: normal;\n font-weight: 600;\n font-size: 12px;\n line-height: 20px;\n /* Neutral / Gray */\n color: #90a0b7;\n`;\n\nconst Name = styled.div`\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n /* Dark / White extra */\n color: #afbdd1;\n margin: 0;\n`;\n\nconst UserAvatar = styled.div`\n width: 46px;\n height: 46px;\n overflow: hidden;\n border-radius: 50%;\n\n img {\n max-width: 100%;\n }\n`;\n\nexport default {\n Wrapper,\n Email,\n Name,\n UserAvatar,\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport Styled from './OwnerInfo.styled';\n\ninterface OwnerInfoProps {\n name: string;\n email: string;\n className?: string;\n ownerImage?: string;\n}\n\nconst OwnerInfo: React.FC<OwnerInfoProps> = ({ name, email, className, ownerImage }) => {\n const finalClassName = classNames('media-object ', className);\n\n return (\n <Styled.Wrapper className={finalClassName}>\n <div className=\"media-object-section\">\n <Styled.UserAvatar>\n <img src={ownerImage} alt=\"avatar\" />\n </Styled.UserAvatar>\n </div>\n <div className=\"media-object-section\">\n <Styled.Name>{name}</Styled.Name>\n <address>\n <Styled.Email href={`mailto:${email}`}>{email}</Styled.Email>\n </address>\n </div>\n </Styled.Wrapper>\n );\n};\n\nexport default OwnerInfo;\n","import { Modal as M, Row, Button as B } from 'antd';\nimport styled from 'styled-components';\n\nconst Modal = styled(M)`\n .ant-modal-body {\n padding: 0px;\n }\n\n form {\n padding: 24px;\n }\n`;\n\nconst ShareUsersHeader = styled(Row)`\n padding: 0 0 5px;\n border-bottom: 1px solid #bfbfbf;\n`;\n\nconst ShareUserRow = styled(Row)`\n padding: 10px 0;\n`;\n\nconst SharedUsersWrapper = styled.div`\n max-height: 260px;\n overflow: auto;\n\n ${ShareUserRow} {\n border-bottom: 1px solid #bfbfbf;\n }\n`;\n\nconst TitleContentWrapper = styled.div`\n width: 537px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst Title = styled.div`\n margin: 0;\n font-weight: 700;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px,\n line-height: 22px;\n`;\n\nconst Button = styled(B)`\n display: flex;\n align-items: center;\n height: fit-content;\n`;\n\nconst Text = styled.span`\n font-weight: 700;\n color: rgba(0, 0, 0, 0.85);\n line-height: 22px;\n`;\n\nexport default {\n ShareUserRow,\n SharedUsersWrapper,\n ShareUsersHeader,\n Modal,\n TitleContentWrapper,\n Title,\n Button,\n Text,\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Skeleton, Row, Col, Alert, Switch } from 'antd';\nimport { ValueType } from 'react-select';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Form, Field, Input, Select } from 'formik-antd';\nimport { Formik, FormikProps, FieldProps } from 'formik';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport {\n EditShareListForm,\n EditShareListFormUserOption,\n} from '@optx/models/feature/shareList/form';\n// redux\nimport { actions as shareListActions, selectors } from '../state';\nimport { selectors as listSelectors } from '@optx/features/list-share/state';\nimport {\n actions as favoriteListsActions,\n selectors as favoriteListsSelectors,\n} from '@redux/favorite-lists/lists';\n// components\nimport OwnerInfo from './OwnerInfo';\nimport Styled from './EditShareListModal.styled';\nimport MultiSelect from '@optx/components/common/form/formik/FormikMultiSelect';\n\nconst emptyInitialValues: EditShareListForm = {\n share_with: [],\n note: '',\n};\n\nconst EditShareListModal = () => {\n const formWrapperRef = useRef<any>(null);\n const formRef = useRef<FormikProps<EditShareListForm> | null>(null);\n const dispatch = useDispatch();\n const modalIsOpen = useSelector(selectors.ui.isModalOpen);\n\n const userOptions = useSelector(selectors.userOptions);\n const initialSelectedUsers = useSelector(selectors.selectedUsers);\n const loadingInfo = useSelector(selectors.isLoading);\n const loadingPublic = useSelector(favoriteListsSelectors.isLoadingPublic);\n const isSubmitting = useSelector(selectors.shareList.isSubmitting);\n const [isButtonDisabled, setButtonDisabled] = useState<boolean>(true);\n const apiError = useSelector(selectors.shareList.error);\n const [selectedUsers, setSelectedUsers] = useState<ValueType<SelectOption<string | number>>[]>(\n initialSelectedUsers as any[]\n );\n const failedLoadingInfo = useSelector(selectors.shareList.failedLoadingInfo);\n //@ts-ignore\n const listId = useSelector(listSelectors.shareList.editedSharedList);\n const lists = useSelector(favoriteListsSelectors.getLists);\n const list = lists[listId as number];\n const hasPermissionToPublic = list?.is_owner;\n\n const [isPublic, setIsPublic] = useState<boolean>(false);\n\n const cancelEditShareList = useCallback(\n () => dispatch(shareListActions.cancelEditShareList()),\n [dispatch]\n );\n const shareList = useCallback(\n (values: EditShareListForm) => {\n dispatch(shareListActions.shareList(values));\n setSelectedUsers([]);\n },\n [dispatch]\n );\n\n const onCancel = () => {\n if (formRef.current) {\n formRef.current.resetForm();\n }\n\n cancelEditShareList();\n setSelectedUsers([]);\n setButtonDisabled(true);\n };\n\n const handleSubmit = () => {\n if (formRef.current) {\n formRef.current.submitForm();\n }\n };\n\n const handlePublicSubmit = () => {\n if (listId) {\n dispatch(\n favoriteListsActions.publicWatchList({ list_id: listId, is_public: !list?.is_public })\n );\n }\n };\n\n const initialValues = useMemo(() => {\n return {\n ...emptyInitialValues,\n share_with: initialSelectedUsers,\n } as EditShareListForm;\n }, [initialSelectedUsers]);\n\n useEffect(() => {\n setSelectedUsers(selectedUsers as any[]);\n setButtonDisabled(selectedUsers.length < 1);\n }, [selectedUsers]);\n\n useEffect(() => {\n if (list) {\n setIsPublic(list.is_public);\n }\n }, [list]);\n\n const footer = loadingInfo ? null : undefined;\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLFormElement | HTMLDivElement>) => {\n if (event.key === 'Enter') {\n setTimeout(() => {\n handleSubmit();\n }, 100);\n }\n };\n\n const multiSelectKeyEvent = (e: any) => {\n if (e.key === 'Enter') {\n formWrapperRef.current?.focus();\n e.preventDefault();\n }\n };\n\n const handleDisableButton = () => {\n if (isButtonDisabled) {\n setButtonDisabled(false);\n }\n };\n\n const handleEditLabelMissing = (user: EditShareListFormUserOption) => {\n const currentAccessRight = user.accessRights;\n\n const customAccessRightsOptions = [...user.accessRightsOptions];\n\n const editPermissionValue = 2;\n\n const isEditOptionExists = customAccessRightsOptions.find(\n option => option.value === editPermissionValue\n );\n\n if (currentAccessRight === editPermissionValue && !isEditOptionExists) {\n customAccessRightsOptions.push({\n label: 'Edit',\n value: 2,\n });\n\n return customAccessRightsOptions;\n } else {\n return user.accessRightsOptions;\n }\n };\n\n const handleDropdownList = () => {\n const disabledOwners = initialValues.share_with.reduce((acc: string[], list) => {\n if (list.disabled) {\n acc.push(list.label);\n }\n\n return acc;\n }, []);\n const userOptionsList = (userOptions as EditShareListFormUserOption[]).map(user => {\n const isDisabled = disabledOwners.includes(user.label);\n\n return {\n ...user,\n disabled: isDisabled,\n };\n });\n\n return userOptionsList;\n };\n\n const handleShareWithValuesOrder = (value: EditShareListFormUserOption[]) => {\n const orderByOwner = value.sort((a, b) => {\n if (a.disabled && !b.disabled) {\n return -1;\n } else if (!a.disabled && b.disabled) {\n return 1;\n } else {\n return 0;\n }\n });\n\n return orderByOwner;\n };\n\n return (\n <Styled.Modal\n visible={modalIsOpen}\n title={\n <Styled.TitleContentWrapper>\n <Styled.Title>Manage List Permissions</Styled.Title>\n {hasPermissionToPublic && (\n <div>\n <Styled.Button\n type=\"text\"\n loading={loadingPublic}\n onClick={handlePublicSubmit}\n icon={<Switch checked={isPublic} className=\"mr-2\" />}\n size=\"small\"\n >\n <Styled.Text>{isPublic ? 'Make not public' : 'Public list'}</Styled.Text>\n </Styled.Button>\n </div>\n )}\n </Styled.TitleContentWrapper>\n }\n centered\n onCancel={onCancel}\n okText=\"Save\"\n okButtonProps={{\n onClick: handleSubmit,\n loading: isSubmitting,\n disabled: failedLoadingInfo || isButtonDisabled,\n }}\n width={hasPermissionToPublic ? 615 : 600}\n footer={footer}\n >\n <Formik\n initialValues={initialValues}\n onSubmit={shareList}\n enableReinitialize\n innerRef={formRef}\n component={({ values }) => {\n if (failedLoadingInfo) {\n return <Alert type=\"error\" message={apiError} />;\n }\n\n return (\n <Skeleton loading={loadingInfo} active>\n <Form layout=\"vertical\" onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n {apiError && <Alert type=\"error\" message={apiError} style={{ marginBottom: 25 }} />}\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item name=\"share_with\" label=\"Select User(s)\" required>\n <div role=\"presentation\" onKeyDown={handleDropdownKeyEvent} tabIndex={1}>\n <Field name=\"share_with\">\n {(fieldProps: FieldProps) => (\n // @ts-ignore\n <MultiSelect\n {...fieldProps}\n options={handleDropdownList() as unknown as any[]}\n customOnChange={value => setSelectedUsers(value)}\n onKeyDown={multiSelectKeyEvent}\n />\n )}\n </Field>\n </div>\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item name=\"note\" label=\"Add a note\">\n <Input.TextArea name=\"note\" rows={4} ref={formWrapperRef} />\n </Form.Item>\n </Col>\n </Row>\n {!!values.share_with.length && (\n <>\n <Styled.ShareUsersHeader justify=\"space-between\" align=\"middle\">\n <Col>Users with access</Col>\n <Col>Permissions</Col>\n </Styled.ShareUsersHeader>\n <Styled.SharedUsersWrapper>\n {handleShareWithValuesOrder(values.share_with).map((user, index) => {\n return (\n <Styled.ShareUserRow\n key={user.value}\n justify=\"space-between\"\n align=\"middle\"\n >\n <Col>\n <OwnerInfo\n name={user.label}\n email={user.email}\n ownerImage={user.img}\n />\n </Col>\n <Col>\n <Select\n name={`share_with[${index}].accessRights`}\n options={handleEditLabelMissing(user)}\n onChange={handleDisableButton}\n disabled={user.disabled || user.accessRightsOptions.length === 1}\n style={{ width: 136 }}\n />\n </Col>\n </Styled.ShareUserRow>\n );\n })}\n </Styled.SharedUsersWrapper>\n </>\n )}\n </Form>\n </Skeleton>\n );\n }}\n />\n </Styled.Modal>\n );\n};\n\nexport default EditShareListModal;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from './state';\nimport featureName from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","export default 'bulk-actions';\n","export const OPERATOR_VALUES = ['Or', 'And'];\n\nexport const INITIAL_NUMBER_OF_SEARCHES = 2;\n","import { Dictionary } from 'lodash';\n// models\nimport { PreselectedFilter, MultiselectMappedFilter } from '@models/filters';\nimport { FormCheckboxOption } from '@models/Option';\nimport { FilterTag } from '@models/tags';\n// constants\nimport { FILTER_TOUCHES, FILTERS_WITH_CHECKBOX_AS_RADIO } from '@constants/filters';\n// utils\nimport { getMappedTouchFilters } from '@utils/filters/filterHelpers';\n\n/**\n * Remove touch filters\n * @param filters - filters\n * @param removedFilter - the filter to be removed\n * @returns the cleared touch filters\n */\nexport const removeTouchFilters = (\n filters: Dictionary<PreselectedFilter>,\n filterTag: FilterTag\n) => {\n const removedFilter = filterTag.filter;\n\n if (\n removedFilter !== 'completed_touch' &&\n removedFilter !== 'schedule_touch' &&\n !FILTERS_WITH_CHECKBOX_AS_RADIO.includes(removedFilter) &&\n removedFilter !== 'psg_attendees'\n ) {\n return {};\n }\n\n // removing psg_attendees date filter on removing attendees\n\n if (removedFilter === 'psg_attendees') {\n const filterPsgAttendeesType = filters[`${removedFilter}_type_date`] as FormCheckboxOption[];\n const dateFilterPsgAttendeesType = filters[\n `${removedFilter}_date`\n ] as MultiselectMappedFilter[];\n\n const psgAttendeesDateType = filterPsgAttendeesType.map(item => ({\n ...item,\n checked: false,\n }));\n const psgAttendeesDate = dateFilterPsgAttendeesType.map(item => ({\n ...item,\n value: '',\n }));\n\n return {\n [`${removedFilter}_type_date`]: psgAttendeesDateType,\n [`${removedFilter}_date`]: psgAttendeesDate,\n };\n }\n\n const touchKey = removedFilter.split('_')[0];\n\n const filterTouchTypeDate = filters[`${touchKey}_touch_type_date`] as FormCheckboxOption[];\n const filterTouchType = filters[`${touchKey}_touch_type`] as FormCheckboxOption[];\n const filterTouchDate = filters[`${touchKey}_touch_date`] as FormCheckboxOption[];\n\n // handle special case when the completed_touch or schedule_touch filter is removed\n // but it only has a few types selected, not all of them. In this case we should select (add)\n // all the types, not remove all the touch filters, but only if another option is selected\n // (like date range, exclude or date checkboxes)\n const areTouchOptionsChecked =\n filterTouchTypeDate.some(touch => touch.checked) ||\n filterTouchType.some(touch => touch.checked) ||\n filterTouchDate.some(touch => touch.value !== '');\n\n const removedFilterValues = filterTag.values;\n\n if (\n areTouchOptionsChecked &&\n (removedFilterValues.length !== FILTER_TOUCHES.length ||\n removedFilterValues.map(valueObj => valueObj.value).includes('None')) &&\n !FILTERS_WITH_CHECKBOX_AS_RADIO.includes(removedFilter)\n ) {\n return { [filterTag.filter]: getMappedTouchFilters() };\n }\n\n const touchTypeDate = filterTouchTypeDate.map(item => ({\n ...item,\n checked: false,\n }));\n\n const touchType = filterTouchType.map(item => ({\n ...item,\n checked: false,\n }));\n\n const touchDate = filterTouchDate.map(item => ({\n ...item,\n value: '',\n }));\n\n return {\n ...(FILTERS_WITH_CHECKBOX_AS_RADIO.includes(removedFilter)\n ? { [`${touchKey}_touch`]: [] }\n : {}),\n [`${touchKey}_touch_type_date`]: touchTypeDate,\n [`${touchKey}_touch_type`]: touchType,\n [`${touchKey}_touch_date`]: touchDate,\n };\n};\n","export const featureName = 'alerts';\n","export default 'company-graphs';\n","import React from 'react';\nimport moment from 'moment';\nimport { TooltipProps } from 'recharts';\nimport globalConfig from '@optx/constants/config';\n\ninterface LineChartTooltipProps extends TooltipProps {\n primaryKey: string;\n secondaryKey?: string;\n primaryLabel: string;\n secondaryLabel?: string;\n}\n\nconst LineChartTooltip: React.FC<LineChartTooltipProps> = ({\n primaryKey,\n secondaryKey,\n primaryLabel,\n secondaryLabel,\n payload,\n}) => {\n if (!payload || !payload!.length) {\n return null;\n }\n\n const data = payload![0].payload;\n const date = data.tooltipDate || data.date;\n\n return (\n <div className=\"profile-chart-card__tooltip\">\n <div>{moment(date).format(globalConfig.grid_date.DATE_FORMAT)}</div>\n {data[primaryKey] !== null && (\n <div>\n {primaryLabel} {data[primaryKey]}\n </div>\n )}\n {secondaryKey &&\n data[secondaryKey] !== undefined &&\n data[secondaryKey] !== null &&\n data[secondaryKey] >= 0 && (\n <div>\n {secondaryLabel} {data[secondaryKey]}\n </div>\n )}\n </div>\n );\n};\n\nexport default LineChartTooltip;\n","import React from 'react';\nimport { Tag } from 'antd';\n// constants\nimport { OPERATOR_VALUES } from '@optx/constants/combineSearch';\n\n// Generate the More Tags tag\nexport const generateMoreTags = (totalTagsToDisplay: number, listType?: string | null) => {\n return totalTagsToDisplay > 0 ? (\n // for combined search divide number on 2 to show number of extra searches only, not include operators\n <Tag color=\"blue\">\n {listType === 'combined' ? Math.ceil(totalTagsToDisplay / 2) : totalTagsToDisplay} more\n </Tag>\n ) : null;\n};\n\n// Display tags list in a popover\nexport const generateTagsListPopover = (\n filterNames: string[],\n hiddenChildrenIdList: string[],\n listType: string | null\n) => {\n let remainingTagsList = [...filterNames];\n remainingTagsList = remainingTagsList.filter(tag =>\n hiddenChildrenIdList.includes(tag?.substr(0, tag.indexOf(':')))\n );\n\n if (listType === 'combined') {\n return (\n <div className=\"company-list__popover\">\n {hiddenChildrenIdList.map((filterName, index) => {\n const className = OPERATOR_VALUES.includes(filterName)\n ? 'saved__filter-value'\n : 'saved__filter-name';\n\n return (\n <Tag key={index} id={filterName} className=\"saved__filter\">\n <span className={className}>{filterName}</span>\n </Tag>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className=\"company-list__popover\">\n {remainingTagsList.map((filter, index) => {\n const filterItem = filter.split(':');\n\n return (\n <div key={index}>\n <Tag key={index} className=\"saved__filter\">\n <span className=\"saved__filter-name\">{`${filterItem[0]}:`}</span>\n <span className=\"saved__filter-value\">{filterItem[1]}</span>\n </Tag>\n </div>\n );\n })}\n </div>\n );\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { TOGGLE_RECENT_ACTIVITY_MODAL } from './actionTypes';\n\nexport const toggleRecentActivityModal = createAction(TOGGLE_RECENT_ACTIVITY_MODAL);\n","export const TOGGLE_RECENT_ACTIVITY_MODAL = 'TOGGLE_RECENT_ACTIVITY_MODAL';\n","import { AppState } from '@optx/redux/interfaces';\n\nexport const displayDialog = (state: AppState) => state.ui.modals.recentActivity;\n","import { createReducer } from '@reduxjs/toolkit';\nimport { toggleRecentActivityModal } from './actions';\nimport { toggleReducer } from '../../../feature/toggle/reducers';\n\nconst reducer = createReducer(false, builder =>\n builder.addCase(toggleRecentActivityModal, toggleReducer)\n);\n\nexport default reducer;\n","import { call, takeLatest, put } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { CombineSearch } from './interfaces';\n// services\nimport NotificationService from '@optx/services/NotificationService';\nimport { UserService } from '@optx/services/api';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport * as actions from './actions';\nimport { actions as savedSearchesActions } from '@redux/company/saved-searches';\nimport { actions as combinedSearchActions } from '@features/combine-search/state';\n\nfunction* createCombineSearchSaga(action: PayloadAction<CombineSearch>) {\n try {\n const res: AxiosResponse<CombineSearch> = yield call(\n UserService.createCombineSearch,\n action.payload\n );\n\n if (res.data) {\n const successMessage = 'Combined search was saved successfully!';\n yield put(savedSearchesActions.fetchSavedSearches());\n NotificationService.success(successMessage);\n } else {\n yield put(combinedSearchActions.combineSearchFail());\n NotificationService.error('Error saving combined search!');\n }\n } catch (error: any) {\n yield put(combinedSearchActions.combineSearchFail());\n const errorMessage = getErrorMessage(error, 'Error saving combined search!');\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* combineSearchSaga() {\n yield takeLatest(actions.combineSearch, createCombineSearchSaga);\n}\n","import React from 'react';\nimport { Layout } from 'antd';\nimport { BasicProps } from 'antd/lib/layout/layout';\nimport classNames from 'classnames';\n\nconst { Header } = Layout;\n\ninterface MaineHeaderProps extends BasicProps {\n fixed?: boolean;\n}\n\nconst MainHeader: React.FC<MaineHeaderProps> = ({ fixed, className, ...restProps }) => {\n const headerClassName = classNames(className, { fixed });\n\n return <Header className={headerClassName} {...restProps} />;\n};\n\nMainHeader.defaultProps = {\n className: 'main-header',\n};\n\nexport default React.memo(MainHeader);\n","import React from 'react';\nimport { Layout } from 'antd';\nimport classnames from 'classnames';\nimport { BasicProps } from 'antd/lib/layout/layout';\n\nconst { Content } = Layout;\n\ninterface MainContentProps extends BasicProps {\n hasFixedHeader?: boolean;\n}\n\nconst MainContent: React.FC<MainContentProps> = ({ hasFixedHeader, className, ...restProps }) => {\n const contentClassName = classnames(className, { 'has-fixed-header': hasFixedHeader });\n\n return <Content className={contentClassName} {...restProps} />;\n};\n\nMainContent.defaultProps = {\n className: 'main-content',\n};\n\nexport default React.memo(MainContent);\n","import React, { useState, useEffect } from 'react';\nimport { Button, Input } from 'antd';\nimport classNames from 'classnames';\nimport { SearchOutlined } from '@ant-design/icons';\nimport { InputProps } from 'antd/lib/input';\n// utils\nimport { validateSearchTerm } from '@utils/search';\n\nexport interface SearchInputProps extends Omit<InputProps, 'value' | 'prefix' | 'onKeyPress'> {\n onSearch?: (key: string) => void;\n iconSize?: number;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n value?: string;\n}\n\nconst SearchInput = React.forwardRef<Input, SearchInputProps>(\n ({ onSearch, value, onChange, iconSize, ...restProps }, ref) => {\n const [currentValue, setCurrentValue] = useState(value || '');\n const [validSearchKey, setValidSearchKey] = useState(true);\n\n useEffect(() => {\n if (value !== currentValue) {\n setCurrentValue(value || '');\n }\n }, [value, currentValue]);\n\n const handleChangeText = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n setCurrentValue(event.target.value);\n\n if (event.target.value.length === 3 || event.target.value.length === 0) {\n setValidSearchKey(true);\n }\n\n onChange && onChange(event);\n };\n\n const handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n handleSearch();\n }\n };\n\n const handleSearch = () => {\n const validation = validateSearchTerm(currentValue, setValidSearchKey);\n\n if (validation) {\n onSearch && onSearch(currentValue);\n }\n };\n\n return (\n <Input\n value={currentValue}\n onChange={handleChangeText}\n onKeyPress={handleKeyPress}\n prefix={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <Button\n type=\"link\"\n icon={<SearchOutlined style={{ fontSize: iconSize || 19 }} />}\n onClick={handleSearch}\n />\n }\n {...restProps}\n ref={ref}\n className={classNames(restProps.className, { 'search-term-error': !validSearchKey })}\n />\n );\n }\n);\n\nSearchInput.defaultProps = {\n value: '',\n name: 'inputSearch',\n};\n\nexport default SearchInput;\n","import React from 'react';\nimport { Button, Tooltip } from 'antd';\nimport { CloseCircleOutlined } from '@ant-design/icons';\nimport { TooltipPlacement } from 'antd/lib/tooltip';\n\ninterface ClearSearchButtonType {\n title?: string;\n isVisible?: boolean;\n placement?: TooltipPlacement;\n onClick: () => void;\n}\n\nconst ClearSearchButton: React.FC<ClearSearchButtonType> = ({\n title = 'Clear Search',\n isVisible = true,\n placement,\n onClick,\n}) => {\n if (!isVisible) return null;\n\n return (\n <Tooltip title={title} placement={placement ?? 'bottom'}>\n <Button type=\"text\" onClick={onClick} icon={<CloseCircleOutlined />} />\n </Tooltip>\n );\n};\n\nexport default React.memo(ClearSearchButton);\n","import { Input } from 'antd';\nimport { useCallback, useEffect, useRef } from 'react';\n\n/**\n * Custom hook for focusing an input element.\n *\n * @param {boolean} focus - A boolean indicating whether the input should be focused.\n * @param {boolean} closePopup - A boolean indicating whether a popup should be closed.\n * @returns {React.RefObject<Input>} - A ref object that can be used to access the input element.\n */\nconst useFocusInput = (focus: boolean, closePopup: boolean): React.RefObject<Input> => {\n const inputRef = useRef<Input>(null);\n\n /**\n * Callback function to focus the input element.\n *\n * @param {Input | null} input - The input element or null.\n */\n const focusInputRef = useCallback(\n input => {\n if (input && focus && !closePopup) {\n setTimeout(() => {\n input.focus();\n }, 300);\n }\n },\n [focus, closePopup]\n );\n\n useEffect(() => {\n if (inputRef.current) {\n focusInputRef(inputRef.current);\n }\n }, [focusInputRef]);\n\n return inputRef;\n};\n\nexport default useFocusInput;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// models\nimport { AuthorizationComponentType } from '@models/auth';\n// utils\nimport { verifyAccess } from '@utils/verifyAccess';\n// redux\nimport { selectors } from '@redux/user/information';\n\nexport interface PrivateComponentProps {\n accessFor: AuthorizationComponentType | Array<AuthorizationComponentType>;\n}\n\nexport const PrivateComponent: React.FC<PrivateComponentProps> = ({ accessFor, children }) => {\n const components = useSelector(selectors.authorizedComponents);\n\n if (verifyAccess(components, accessFor)) {\n return <>{children}</>;\n }\n\n return null;\n};\n\nexport default PrivateComponent;\n","import { Table as ANTDTable } from 'antd';\nimport styled, { css } from 'styled-components';\nimport { TableProps } from 'antd/es/table';\nimport { styledColors } from '@optx/utils/theme/colors';\nimport { Styled as StyledInlineEdit } from '@shared/view/molecules/edit/InlineEdit';\n\ninterface Props extends TableProps<any> {\n $wrapTableHead?: boolean;\n /**\n * Forces body cells to show ellipsis if text overflows cell.\n */\n $forceCellEllipsis?: boolean;\n isInEt?: boolean;\n}\n\n// Styles to wrap table header th elements even when ellipsis is set in column configuration.\nconst wrapTableHeadEllipssis = css`\n .ant-table-thead {\n .ant-table-cell-ellipsis {\n white-space: normal;\n }\n .ant-table-cell-content {\n margin-right: -8px;\n padding-right: 8px;\n }\n }\n`;\n\nconst Table = styled<React.FC<Props>>(ANTDTable)`\n .ant-table {\n color: ${styledColors.gray8};\n width: 100%;\n\n .ant-table-body {\n overflow-x: scroll;\n }\n }\n\n .ant-table-tbody {\n > tr {\n td {\n /* transition: none; */\n }\n\n &.ant-table-row:hover {\n > td {\n background: ${styledColors.blue1};\n }\n }\n }\n }\n\n .ant-table-column-sorters {\n width: 100%;\n\n > span:first-child {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n .ant-table-column-sorter {\n margin-top: 0;\n margin-right: -8px;\n margin-left: 2px;\n line-height: 1;\n }\n\n .ant-table-column-sorter-up,\n .ant-table-column-sorter-down {\n font-size: 18px;\n display: none;\n\n &.active {\n display: inline-block;\n }\n }\n\n .ant-table-column-sorter-down {\n margin-top: 0;\n }\n\n /* sort backgrounds */\n td.ant-table-column-sort {\n background: #fff;\n }\n\n .ant-table-thead > tr > th {\n background: #fafafa;\n\n &.ant-table-column-sort {\n background: #f5f5f5;\n }\n }\n\n th.ant-table-cell {\n /* color: #616f82; */\n\n &:before {\n display: inline-block;\n content: attr(data-order-priority);\n position: absolute;\n top: 2px;\n right: 6px;\n font-size: 12px;\n color: ${styledColors.blue6};\n }\n }\n\n /* row hover */\n .ant-table-row {\n :hover {\n ${StyledInlineEdit.ActionWrapper}, .edit-popover-wrapper .icon-pen {\n visibility: visible;\n }\n }\n }\n\n .ant-table-thead {\n tr {\n /* Add otional flag later to force th text alignment in head */\n th {\n /* Alignment is added directly to element and needs override */\n text-align: left !important;\n\n /* Remove transition causing header cells delay in firefox on horizontal scroll. */\n transition: none;\n }\n }\n }\n\n ${props => props.$wrapTableHead && wrapTableHeadEllipssis}\n\n /* bordered virtual table */\n ${props =>\n props.bordered &&\n css`\n .ant-table.ant-table-bordered\n > .ant-table-container\n > .ant-table-header\n table\n > tbody\n > tr\n > th,\n .ant-table.ant-table-bordered\n > .ant-table-container\n > .ant-table-body\n table\n > tbody\n > tr\n > td {\n border-right: 1px solid #f0f0f0;\n }\n `}\n\n ${props =>\n props.$forceCellEllipsis &&\n css`\n /* Force cell ellipsis without breaking sticky column shadow */\n .ant-table-tbody {\n .ant-table-cell {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n\n > * {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n }\n }\n }\n `}\n\n @media (min-width: 1700px) {\n .ant-table {\n overflow-y: ${props => props.isInEt && 'scroll'};\n background: ${props => (props.isInEt ? 'transparent' : 'white')};\n\n &::-webkit-scrollbar {\n visibility: hidden;\n }\n }\n }\n\n @media (min-width: 0px) {\n .ant-table {\n scrollbar-width: none;\n &::-webkit-scrollbar {\n visibility: hidden;\n }\n }\n }\n`;\n\nTable.defaultProps = {\n $wrapTableHead: true,\n pagination: false,\n showSorterTooltip: false,\n};\n\nexport default Table;\n","import React from 'react';\nimport { BreadcrumbProps } from 'antd/lib/breadcrumb';\nimport { Breadcrumb } from 'antd';\nimport { Link } from 'react-router-dom';\nimport appRoutes from '@constants/routes';\n\ninterface ReportBreadcrumbProps extends BreadcrumbProps {\n reportPage?: string;\n onClick?: () => void;\n hasSourcingOutReach?: boolean;\n}\n\nconst ReportBreadcrumb: React.FC<ReportBreadcrumbProps> = ({\n reportPage,\n onClick,\n hasSourcingOutReach,\n}) => (\n <Breadcrumb>\n <Breadcrumb.Item>Reports</Breadcrumb.Item>\n <Breadcrumb.Item>\n <Link onClick={onClick} to={appRoutes.reports.allReports}>\n All Reports\n </Link>\n </Breadcrumb.Item>\n {hasSourcingOutReach && (\n <Breadcrumb.Item>\n <Link onClick={onClick} to={appRoutes.reports.sourcingOutreachSummary}>\n Sourcing Outreach Summary\n </Link>\n </Breadcrumb.Item>\n )}\n\n {reportPage && <Breadcrumb.Item>{reportPage}</Breadcrumb.Item>}\n </Breadcrumb>\n);\n\nexport default ReportBreadcrumb;\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, put, takeLatest, select } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport queryString from 'query-string';\n// models\nimport { APIBoolean } from '@optx/models/api/generic';\nimport {\n AddCompanyReviewPayload,\n AddCompanyReviewResponse,\n AddCompanyReviewSuccess,\n} from './interfaces';\nimport { ChangedCompanyFieldsPayload } from '@optx/features/company/audit-trail/state/interfaces';\n// services\nimport { UserService } from '@optx/services/api';\nimport NotificationService from '@optx/services/NotificationService';\nimport { CompanyProfileTabs } from '@optx/constants/routes';\n// utils\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport {\n actions as auditActions,\n selectors as auditSelectors,\n} from '@optx/features/company/audit-trail/state';\nimport * as actions from './actions';\n\nexport function* addCompanyReviewSaga(action: PayloadAction<AddCompanyReviewPayload>) {\n yield put(customGlobalLoaderActions.toggle({ loading: true, customText: '' }));\n\n const { tab } = queryString.parse(window.location.search);\n\n const userId: number = yield select(userSelectors.getUserId);\n const { companyId } = action.payload;\n\n const payload = {\n companyId,\n userId,\n };\n\n try {\n const res: AxiosResponse<AddCompanyReviewResponse> = yield call(\n UserService.reviewCompany,\n payload\n );\n\n if (res.data) {\n const payload: AddCompanyReviewSuccess = {\n companyId,\n reviewed: res.data.reviewed,\n reviewedBy: res.data.reviewed_by,\n reviewedDate: res.data.reviewed_date,\n };\n yield put(actions.addCompanyReviewSuccess(payload));\n\n NotificationService.success('Company reviewed successfully!');\n\n if (tab === CompanyProfileTabs.HISTORY) {\n const field: string = yield select(auditSelectors.getSearchQuery);\n const optx: APIBoolean = yield select(auditSelectors.getOPTX);\n const internal: APIBoolean = yield select(auditSelectors.getInternal);\n const startDate: string = yield select(auditSelectors.getStartDate);\n const endDate: string = yield select(auditSelectors.getEndDate);\n const fetchPayload: ChangedCompanyFieldsPayload = {\n companyId,\n pagination: { pageNumber: 1, pageSize: 25 },\n field,\n internal,\n optx,\n startDate,\n endDate,\n };\n\n yield put(auditActions.fetchChangedCompanyFields(fetchPayload));\n }\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to mark company as reviewed');\n yield put(actions.addCompanyReviewFail(errorMessage));\n NotificationService.error(errorMessage);\n } finally {\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n}\n\nexport default function* inAddCompanyReviewSaga() {\n yield takeLatest(actions.addCompanyReview, addCompanyReviewSaga);\n}\n","import { AxiosResponse } from 'axios';\nimport { Dictionary } from 'lodash';\nimport { saveAs } from 'file-saver';\nimport { SourcingInfo } from '@optx/screens/App/AllReports/components/CompanySearchDropdown/SearchMenu/interfaces';\nimport { FilterExportPayload } from '@models/api/exportCSV';\nimport NotificationService from '../services/NotificationService';\nimport { CompanyColumnType } from '../components/common/table/Companies/columns/virtual-column-config';\n\ninterface ExportCompanyColumns {\n columns: Dictionary<string>;\n}\n\n// If a column title needs to be replaced, add the dataIndex and the new title here.\nconst columnNamesReplace: Dictionary<string> = {\n company_url: 'URL',\n company_name: 'Company',\n};\n\n/**\n * Converts an array of dictionaries into a CSV formatted string.\n *\n * @template T - The type of the values in the dictionary.\n * @param {Array<Dictionary<T>>} data - The array of dictionaries to be converted to CSV.\n * @returns {string} - The CSV formatted string representing the input data.\n */\nconst convertToCsv = <T>(data: Array<Dictionary<T>>) => {\n const csvRows = [];\n\n // Add header row\n const headers = Object.keys(data[0]);\n csvRows.push(headers.join(','));\n\n // Add data rows\n for (const row of data) {\n const values = headers.map(header => `\"${row[header]}\"`);\n csvRows.push(values.join(','));\n }\n\n return csvRows.join('\\r\\n');\n};\n\n/**\n * Exports the provided data to a CSV file.\n *\n * @template T - The type of data to be exported\n * @param payload - An array of dictionaries containing the data to be exported\n * @returns A Blob representing the CSV file\n */\nexport const exportDataToCSV = <T>(payload: Array<Dictionary<T>>, fileName: string) => {\n const csvString = convertToCsv(payload);\n\n const blob = new Blob([csvString], { type: 'text/csv' });\n\n return saveAs(blob, `${fileName} - errors.csv`);\n};\n\nexport const exportFileCSV = (\n fileName: string,\n filtersSearchCriteria: FilterExportPayload,\n columns: CompanyColumnType[],\n exportToCSV: (\n filters: FilterExportPayload,\n body: {\n columns: Dictionary<string>;\n },\n sourcingInfo?: SourcingInfo\n ) => Promise<AxiosResponse<string>>,\n includeDescription = false,\n hideNotification = false,\n sourcingOutReachInfo?: SourcingInfo,\n callback?: () => void,\n availableColumns?: string[]\n) => {\n const gridHeaders: ExportCompanyColumns = { columns: {} };\n\n let columnsUsed = columns;\n const availableColumnsSet = new Set(availableColumns);\n\n if (availableColumns?.length) {\n columnsUsed = columns\n .filter(column => availableColumnsSet.has(column.dataIndex))\n .sort((a, b) => {\n // Compare the indices of a and b in the availableColumns array\n return availableColumns.indexOf(a.dataIndex) - availableColumns.indexOf(b.dataIndex);\n });\n }\n\n // get the homepage table headers\n columnsUsed.forEach(column => {\n if (\n column.dataIndex !== 'row_actions' &&\n !(column.dataIndex === 'company_description') &&\n (column.dataIndex !== 'date_matched' || filtersSearchCriteria.list_id)\n ) {\n const headerKey = column.dataIndex as string;\n const title = columnNamesReplace[column.dataIndex as string]\n ? columnNamesReplace[column.dataIndex as string]\n : column.title;\n\n gridHeaders.columns[headerKey] = title as string;\n\n if (\n (includeDescription ||\n (availableColumns?.length && availableColumnsSet.has('company_description'))) &&\n column.dataIndex === 'company_name'\n ) {\n gridHeaders.columns.company_description = 'Description';\n }\n\n // add columns only for all available columns selected\n if (!availableColumns?.length) {\n if (column.dataIndex === 'last_touch_date') {\n gridHeaders.columns.last_touch_initiator_name = 'Last Touch by (Initiator)';\n gridHeaders.columns.last_touch_type = 'Last Touch Type';\n }\n\n if (column.dataIndex === 'next_touch_date') {\n gridHeaders.columns.next_touch_initiator_name = 'Future Touch by (Initiator)';\n gridHeaders.columns.next_touch_type = 'Future Touch Type';\n }\n }\n }\n });\n\n // add hidden columns at the end of CSV\n if (!availableColumns?.length) {\n // Manually added tags columns to export\n gridHeaders.columns.cs_tags = 'Tags';\n gridHeaders.columns.regular_watchlists = 'List Tags';\n\n // Manually added et_company_id column to export\n gridHeaders.columns.et_company_id = 'EquityTouch UID';\n\n // include primary contact data\n gridHeaders.columns.pc_first_name = 'Primary contact first name';\n gridHeaders.columns.pc_last_name = 'Primary contact last name';\n gridHeaders.columns.pc_title = 'Primary contact title';\n gridHeaders.columns.pc_email = 'Primary contact email';\n gridHeaders.columns.pc_phone = 'Primary Contact Phone';\n gridHeaders.columns.pc_linkedin = 'Primary Contact Linkedin';\n }\n\n return exportToCSV(filtersSearchCriteria, gridHeaders, sourcingOutReachInfo)\n .then((response: AxiosResponse<string>) => {\n const blob = new Blob([response.data], { type: 'text/csv' });\n saveAs(blob, `${fileName}.csv`);\n callback && callback();\n if (!hideNotification) NotificationService.success('Export CSV file success!');\n })\n .catch(() => {\n NotificationService.error('Export CSV file error');\n });\n};\n","export const featureName = 'add-company-review';\n","export const featureName = 'companyEditFields';\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport { featureName } from './featureName';\nimport reducer, { saga } from './state';\n\nconst useInject = () => {\n useInjectSaga({ key: featureName, saga });\n useInjectReducer({ key: featureName, reducer });\n};\n\nexport default useInject;\n","import { utils as requestUtils } from '@optx/features/request';\nimport { featureName } from '../../featureName';\n\nexport const fetch = requestUtils.createActionTypes(featureName, 'FETCH_SOURCING_OUTREACH_SUMMARY');\n","import { utils as requestUtils } from '@optx/features/request';\nimport { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const fetchFilters = requestUtils.createActionTypes(featureName, 'FETCH_FILTERS');\nexport const clearFilters = createFeatureActionType(featureName, 'CLEAR_FILTERS');\nexport const resetToDefault = createFeatureActionType(featureName, 'RESET_TO_DEFAULT');\nexport const applyFilters = createFeatureActionType(featureName, 'APPLY_FILTERS');\nexport const updateFilters = createFeatureActionType(featureName, 'UPDATE_FILTERS');\nexport const resetFilter = createFeatureActionType(featureName, 'RESET_FILTER');\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport * as search from './search';\nimport * as filters from './filters';\nimport { featureName } from '../../featureName';\n\nconst init = createFeatureActionType(featureName, 'INIT');\n\nexport const types = {\n search,\n filters,\n init,\n};\n","import styled from 'styled-components';\nimport { Resizable } from 'react-resizable';\n\nconst ResizableTh = styled(Resizable)`\n .react-resizable-handle {\n position: absolute;\n width: 10px;\n height: 100%;\n bottom: 0;\n right: -5px;\n cursor: col-resize;\n z-index: 1;\n }\n\n .dragHandler:hover {\n cursor: move;\n background-color: #ccc;\n }\n\n .resizeHandle {\n position: absolute;\n width: 10px;\n height: 100%;\n bottom: 0;\n right: -5px;\n cursor: col-resize;\n z-index: 5;\n }\n`;\n\nexport const Styled = {\n ResizableTh,\n};\n","import React, { SyntheticEvent } from 'react';\nimport { ResizableProps, ResizeCallbackData } from 'react-resizable';\n// components\nimport { Styled } from './ResizeColumn.styled';\n\nconst maxLimit = window.innerWidth / 2;\n// @ts-ignore\ninterface ResizeColumnProps extends ResizableProps {\n handleResizeStart: VoidFunction;\n handleResizeStop: (e: SyntheticEvent, data: ResizeCallbackData) => void;\n onResize: (e: React.SyntheticEvent, data: ResizeCallbackData) => any;\n width: number;\n}\n\nexport const ResizeColumn: React.FC<ResizeColumnProps> = ({\n handleResizeStop,\n handleResizeStart,\n onResize,\n width,\n ...restProps\n}) => {\n if (!width) {\n return <th {...restProps} />;\n }\n\n return (\n <Styled.ResizableTh\n width={width}\n height={0}\n handle={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <span\n role=\"presentation\"\n className=\"react-resizable-handle\"\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n }}\n />\n }\n onResize={onResize}\n onResizeStart={handleResizeStart}\n onResizeStop={(e, data) => handleResizeStop(e, data)}\n draggableOpts={{ enableUserSelectHack: false }}\n minConstraints={[50, 50]}\n maxConstraints={[maxLimit, maxLimit]}\n axis=\"x\"\n resizeHandles={['e']}\n >\n <th {...restProps} />\n </Styled.ResizableTh>\n );\n};\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst companyEquityTouchState = (state: AppState) => state.companyEquityTouch;\n\nexport const isLoading = createSelector(companyEquityTouchState, state => state.loading);\nexport const isFetched = createSelector(companyEquityTouchState, state => !!state.fetchedAt);\n\nexport const getData = createSelector(companyEquityTouchState, state => state.data);\n\nexport const getFormValues = createSelector(companyEquityTouchState, state => state.formValues);\n\nexport const getSelectedContacts = createSelector(\n companyEquityTouchState,\n state => state.formValues.contacts\n);\n\nexport const getTemporaryFormValues = createSelector(\n companyEquityTouchState,\n state => state.temporaryFormValues\n);\n","import React, { ChangeEvent, useEffect, useRef } from 'react';\nimport { MenuInfo, MenuClickEventHandler } from 'rc-menu/lib/interface';\nimport { Dropdown, Menu, Input as AntdInput } from 'antd';\nimport { Input } from 'formik-antd';\n// models\nimport { SelectOption } from '@optx/models/Option';\n// utils\nimport { checkForNegativeSelectedOption, highlightText } from '@optx/utils/text';\n// hooks\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\n\ninterface InputWithDropdownProps {\n name?: string;\n index?: number;\n options?: SelectOption[];\n isAutoFocus?: boolean;\n placeholder?: string;\n customWidth?: string;\n value?: string;\n showDropdown?: boolean;\n onInputChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n onSelectOption: (event: MenuInfo, index: number | undefined) => void;\n onClick?: () => void;\n allowClear?: boolean;\n open?: boolean;\n dropDownStyle?: React.CSSProperties;\n closeOnSelect?: boolean;\n hideDropdownOnFocusOut?: boolean;\n overlayClassName?: string;\n}\n\nconst InputWithDropdown: React.FC<InputWithDropdownProps> = ({\n name,\n index,\n options,\n placeholder,\n value,\n isAutoFocus,\n showDropdown,\n onInputChange,\n onClick,\n onSelectOption,\n allowClear,\n open = undefined,\n customWidth = 'max-content',\n dropDownStyle,\n closeOnSelect,\n hideDropdownOnFocusOut = false,\n overlayClassName,\n}) => {\n const dropdownContentRef = useRef<any>(null);\n\n const [visibleDropdown, setVisibleDropdown] = React.useState(false);\n\n useOnClickOutside(dropdownContentRef, () => open === undefined && setVisibleDropdown(false));\n\n useEffect(() => {\n setVisibleDropdown(open ?? false);\n }, [open]);\n\n useEffect(() => {\n if (hideDropdownOnFocusOut) {\n const listener = (event: Event) => {\n // Do nothing if focuse is on the ref's element or descendent elements\n\n if (\n !dropdownContentRef.current ||\n (dropdownContentRef.current && dropdownContentRef.current.contains(event.target))\n ) {\n return;\n }\n\n setVisibleDropdown(false);\n };\n\n document.addEventListener('focusin', listener);\n\n return () => {\n document.removeEventListener('focusin', listener);\n };\n }\n }, [dropdownContentRef, hideDropdownOnFocusOut]);\n\n if (!options?.length) {\n return null;\n }\n\n const handleMenuClick: MenuClickEventHandler = event => {\n onSelectOption(event, index);\n closeOnSelect && setVisibleDropdown(false);\n };\n\n return (\n <div\n ref={dropdownContentRef}\n style={{ width: customWidth }}\n className={checkForNegativeSelectedOption(value) ? 'negative-option--input' : ''}\n >\n <Dropdown\n overlayClassName={overlayClassName}\n overlay={\n // eslint-disable-next-line react/jsx-wrap-multilines\n visibleDropdown ? (\n <Menu onClick={handleMenuClick} tabIndex={-1}>\n {options.map(option => (\n <Menu.Item\n style={highlightText(option.label)}\n disabled={option.disabled}\n key={option.value}\n id={option.value}\n >\n {option.label}\n </Menu.Item>\n ))}\n </Menu>\n ) : (\n <></>\n )\n }\n trigger={['click']}\n getPopupContainer={() => dropdownContentRef.current as unknown as HTMLElement}\n overlayStyle={dropDownStyle}\n visible={visibleDropdown}\n >\n {name ? (\n <Input\n name={name}\n onClick={() => onClick || (isAutoFocus && setVisibleDropdown(true))}\n placeholder={placeholder}\n onChange={onInputChange}\n allowClear={allowClear}\n onFocus={() => showDropdown && setVisibleDropdown(true)}\n />\n ) : (\n <AntdInput\n onClick={() => onClick || (isAutoFocus && setVisibleDropdown(true))}\n autoFocus={open || isAutoFocus}\n value={value}\n placeholder={placeholder}\n onChange={onInputChange}\n allowClear={allowClear}\n onFocus={() => setVisibleDropdown(true)}\n />\n )}\n </Dropdown>\n </div>\n );\n};\n\nexport default InputWithDropdown;\n","import React, { useMemo } from 'react';\nimport { Tooltip } from 'antd';\nimport moment from 'moment';\nimport styled from 'styled-components';\n// models\nimport { TouchType } from '@models/company/CompanyTouch';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// components\nimport TouchIcon from '@optx/features/company-touches/components/TouchIcon';\n\n// this number is to show in tooltip only dates that are not displayed\nconst startDateListIndex = 1;\n\nconst StyledWrapper = styled.div`\n display: flex;\n align-tems: center;\n height: 26px;\n justify-content: space-between;\n`;\n\ninterface MultipleDateProps {\n dates: string[];\n additionalParameter?: TouchType[];\n emptyValue?: string;\n format: string;\n}\n\nexport const MultipleDate: React.FC<MultipleDateProps> = ({\n dates,\n additionalParameter,\n emptyValue,\n format,\n}) => {\n if (!dates.length) {\n return <>{emptyValue || DEFAULT_EMPTY_VALUE}</>;\n }\n\n const shouldShowTooltip = dates.length > 1;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const normalizedDates = useMemo(() => {\n return dates.map((date: string) => moment(date).format(format));\n }, [dates, format]);\n\n const tooltipAdditionalContent =\n shouldShowTooltip && additionalParameter\n ? dates.slice(startDateListIndex).map((date: string, index: number) => {\n return (\n <StyledWrapper key={index}>\n <span>{moment(date).format(format)}</span>\n {additionalParameter.slice(startDateListIndex)[index] && (\n <span>\n <TouchIcon\n type={additionalParameter.slice(startDateListIndex)[index] as TouchType}\n color=\"#fff\"\n />\n </span>\n )}\n </StyledWrapper>\n );\n })\n : null;\n\n const commonContent = dates.slice(startDateListIndex).map((date: string, index: number) => {\n return <div key={index}>{moment(date).format(format)}</div>;\n });\n\n const tooltipContent = tooltipAdditionalContent || commonContent;\n\n return shouldShowTooltip ? (\n <Tooltip\n overlayStyle={{ minWidth: `${additionalParameter ? 150 : 100}px` }}\n title={tooltipContent}\n className=\"text-truncate\"\n >\n {normalizedDates[0]} <span>{`(${dates.length - startDateListIndex} more)`}</span>\n </Tooltip>\n ) : (\n <>{normalizedDates}</>\n );\n};\n","import { Radio } from 'antd';\nimport styled from 'styled-components';\n\nconst RadioButton = styled(Radio.Button)`\n position: relative;\n`;\n\nexport default {\n RadioButton,\n};\n","import React, { useMemo, useState } from 'react';\nimport { RadioButtonProps } from 'antd/lib/radio/radioButton';\nimport { DatePicker } from 'antd';\nimport moment, { Moment } from 'moment';\n// constants\nimport { ISO_DATE_FORMAT } from '@constants/format/date';\nimport { ALL_REPORTS } from '@optx/constants/pendoActions';\n// models\nimport { DateRangeOption } from '@optx/models/Option';\n// utils\nimport { getRouteAlias } from '@optx/utils/routes';\n// components\nimport Styled from './styled';\n\n// rc-picker types\ntype EventValue<DateType> = DateType | null;\ntype RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n\ninterface RadioButtonPickerProps extends Omit<RadioButtonProps, 'onChange'> {\n option: DateRangeOption;\n onChange: (option: DateRangeOption) => void;\n}\n\ntype DateValue = string | null;\n\nconst RadioButtonPicker: React.FC<RadioButtonPickerProps> = ({\n children,\n option,\n onChange,\n ...restProps\n}) => {\n const [localValues, setLocalValues] = useState<[DateValue, DateValue]>([null, null]);\n const [customDateOpened, setCustomDateOpened] = useState(false);\n // Control active date when selection is done.\n const [activePickerIndex, setActivePickerIndex] = useState<0 | 1>(0);\n const location = getRouteAlias();\n\n const datePickerRadioClick = () => {\n if (location === 'analystsLeaderboard') {\n window.pendo.track(`${ALL_REPORTS}_CustomRange`);\n }\n\n if (!customDateOpened) {\n setActivePickerIndex(0);\n setCustomDateOpened(prevState => !prevState);\n setLocalValues([null, null]);\n }\n };\n\n const datePickerChange = (values: RangeValue<Moment>) => {\n setCustomDateOpened(false);\n const [start, end] = values as [Moment, Moment];\n const newOption: DateRangeOption = {\n ...option,\n start: start.format(ISO_DATE_FORMAT),\n end: end.format(ISO_DATE_FORMAT),\n };\n\n setLocalValues([newOption.start, newOption.end]);\n onChange(newOption);\n };\n\n const handleCalendarChange = () => {\n if (activePickerIndex === 0) {\n setActivePickerIndex(1);\n } else {\n setActivePickerIndex(0);\n }\n };\n\n const rangePickerValue = useMemo(\n () =>\n localValues[0] !== null\n ? (localValues.map(value => moment(value)) as [Moment, Moment])\n : undefined,\n [localValues]\n );\n\n return (\n <Styled.RadioButton onClick={datePickerRadioClick} {...restProps}>\n {children}\n <DatePicker.RangePicker\n className=\"date-picker\"\n value={rangePickerValue}\n open={customDateOpened}\n onChange={datePickerChange}\n onOpenChange={setCustomDateOpened}\n activePickerIndex={activePickerIndex}\n onCalendarChange={handleCalendarChange}\n />\n </Styled.RadioButton>\n );\n};\n\nexport default RadioButtonPicker;\n","import React, { useMemo } from 'react';\nimport { Radio } from 'antd';\nimport { CalendarOutlined } from '@ant-design/icons';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport styled from 'styled-components';\n// models\nimport { DateRangeOption } from '@optx/models/Option';\n// utils\nimport { formatDateInterval } from '@optx/utils/format';\n// Local\n// components\nimport RadioButtonPicker from './RadioButtonPicker';\n\ninterface SingleSelectDateRangesProps {\n onChange: (option: DateRangeOption) => void;\n value: [string | null, string | null];\n data: Array<DateRangeOption>;\n}\n\nconst StyledCalendarIcon = styled(CalendarOutlined)`\n margin-right: 6px;\n`;\n\nconst SingleSelectDateRanges: React.FC<SingleSelectDateRangesProps> = ({\n data,\n value,\n onChange,\n}) => {\n const lastIndex = data.length - 1;\n\n const handleChange = (event: RadioChangeEvent) => {\n const index = event.target.value;\n const option = data[index];\n\n // Don't call change action when clicking on date picker toggler.\n if (index === data.length - 1) {\n return;\n }\n\n onChange(option);\n };\n\n const selectedValue = useMemo(() => {\n const index = data.findIndex(option => option.start === value[0] && option.end === value[1]);\n\n return index === -1 ? data.length - 1 : index;\n }, [value, data]);\n\n return (\n <Radio.Group onChange={handleChange} value={selectedValue}>\n {data.map((option, index) => {\n const customIsSelected = index === selectedValue;\n const [start, end] = value;\n const label = customIsSelected\n ? formatDateInterval(start!, end!, { prefix: option.label })\n : option.label;\n\n if (lastIndex === index) {\n return (\n <RadioButtonPicker\n onChange={onChange}\n option={option}\n key={index}\n value={index}\n style={{ position: 'relative' }}\n >\n <StyledCalendarIcon />\n {label}\n </RadioButtonPicker>\n );\n }\n\n return (\n <Radio.Button key={index} value={index}>\n {label}\n </Radio.Button>\n );\n })}\n </Radio.Group>\n );\n};\n\nexport default SingleSelectDateRanges;\n","import { createSelector } from 'reselect';\nimport { GridKeys } from '@optx/models/grid';\nimport { selectFeatureState } from '../../selectFeature';\n\nexport const getFetchedCount = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.fetchedCount[gridKey]);\n","import { CaseReducer, PayloadAction, createReducer } from '@reduxjs/toolkit';\n// models\nimport { GridBase, GridKeys } from '@optx/models/grid';\n// constants\nimport { GRID_FETCHED_COUNT_KEYS } from '@optx/constants/grid';\n// utils\nimport { generateGridReducerInitialState } from '@optx/utils/grid';\n// redux\nimport { incrementFetchedCount } from './actions';\n\nconst initialState: GridBase<number> = generateGridReducerInitialState(GRID_FETCHED_COUNT_KEYS, 0);\n\nconst incrementFetchedCountReducer: CaseReducer<GridBase<number>, PayloadAction<GridKeys>> = (\n draftState,\n action\n) => {\n const gridKey = action.payload;\n\n draftState[gridKey] += 1;\n};\n\nconst reducer = createReducer<GridBase<number>>(initialState, builder => {\n builder.addCase(incrementFetchedCount, incrementFetchedCountReducer);\n});\n\nexport default reducer;\n","import { useDispatch, useSelector } from 'react-redux';\n// utils\nimport { searchInNewTab } from '@optx/utils/search';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\n\ninterface LoadSpecialFilter {\n (filterKey: string): {\n loadCompaniesByFilter: (filterValue: string, newTab?: boolean) => void;\n };\n}\n\nconst useLoadSpecialFilter: LoadSpecialFilter = filterKey => {\n const dispatch = useDispatch();\n const clearedFilter = useSelector(filterSelectors.getClearedFilter('advancedSearch'));\n const sources = useSelector(filterSourcesSelectors.getFiltersMap);\n const { advancedSearchPathname } = useUserRole();\n\n const loadCompaniesByFilter = (filterValue: string, newTab?: boolean) => {\n if (newTab) {\n // insert filter info in filters.\n searchInNewTab(\n clearedFilter,\n sources,\n filterKey,\n [{ value: filterValue, label: filterValue }],\n {},\n advancedSearchPathname\n );\n } else {\n dispatch(\n searchActions.loadCompaniesByFilter(filterKey, {\n gridKey: 'advancedSearch',\n data: filterValue,\n })\n );\n }\n };\n\n return { loadCompaniesByFilter };\n};\n\nexport default useLoadSpecialFilter;\n","import styled from 'styled-components';\nimport { Menu, Button } from 'antd';\nimport { styledColors } from '@utils/theme/colors';\n\nconst MenuWrapper = styled(Menu)`\n .anticon {\n color: ${styledColors.blue6};\n margin-right: 8px;\n\n svg {\n width: 14px;\n height: 14px;\n }\n }\n`;\n\nconst ButtonLink = styled(Button)`\n border: 0;\n padding: 0;\n height: 0;\n\n &:hover {\n background: transparent;\n }\n`;\n\nexport { MenuWrapper, ButtonLink };\n","/* eslint-disable react/jsx-curly-newline */\nimport React, { useState, Context, useContext, useCallback, useEffect } from 'react';\nimport { useLocation, useHistory } from 'react-router-dom';\nimport { Menu, Dropdown, Button, message, Tooltip } from 'antd';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { DownOutlined } from '@ant-design/icons';\n// utils\nimport { getRouteAlias } from '@optx/utils/routes';\n// models\nimport {\n BulkEditFieldContext,\n SelectedCompanies,\n SelectedCompaniesKeys,\n} from '@optx/models/bulkActions';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport ROUTES from '@constants/routes';\nimport { MAX_ET_SL_COMPANIES } from '@optx/config/bulkConfig';\n// redux\nimport { actions as bulkActionsET } from '@features/bulk-actions/equity-touch';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { selectors as individualEditSelectors } from '@components/feature/company-individual-edit/state';\nimport { selectors as listDetailsSelectors } from '@redux/lists/details';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport { actions as favoriteListsActions } from '@redux/favorite-lists/lists-popup';\n// components\nimport {\n BulkEditModal,\n BulkEditField,\n actions as editFieldsActions,\n} from '@features/bulk-actions/edit-fields';\nimport { MenuWrapper, ButtonLink } from './BulkActionsButton.styled';\n\nconst { Item } = Menu;\n\ninterface BulkActionsButtonProps {\n context: Context<BulkEditFieldContext>;\n selectedCompanies: SelectedCompanies[];\n referrer: string;\n}\n\nconst BulkActionsButton: React.FC<BulkActionsButtonProps> = ({\n context,\n selectedCompanies,\n referrer,\n}) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const location = useLocation();\n const { gridName } = useContext(context);\n const [visible, setIsModalVisible] = useState(false);\n const [title, setTitle] = useState('');\n const [field, setField] = useState<SelectedCompaniesKeys | undefined>();\n const [fieldTitle, setFieldTitle] = useState('');\n const [selectedColumn, setSelectedColumn] = useState<string>('');\n const [isValid, setIsValid] = useState(true);\n const [changedSelection, setChangedSelection] = useState(false);\n const userLastName = useSelector(userSelectors.getLastName);\n const companiesInMyHomePage = useSelector(searchSelectors.getCompanies('advancedSearch'));\n const companiesInMyCompaniesPage = useSelector(searchSelectors.getCompanies('myCompanies'));\n const companiesInMyWatchList = useSelector(searchSelectors.getCompanies('lists'));\n const addonManagementCompanies = useSelector(searchSelectors.getCompanies('addons'));\n const companiesOutReachPage = useSelector(searchSelectors.getCompanies('outreachDetails'));\n const isDisabled = selectedCompanies.length > MAX_ET_SL_COMPANIES;\n\n const userFullName = useSelector(userSelectors.getFullName);\n const companyOwnerOptions = useSelector(\n individualEditSelectors.companyIndividualEdit.companyOwnerOptions\n );\n const components = useSelector(userSelectors.authorizedComponents);\n const areAllCompaniesInEqt = useSelector(\n bulkActionsSelectors.selectedCompanies.areAllCompaniesInEqt(gridName)\n );\n const areCompaniesAssigned = useSelector(\n bulkActionsSelectors.selectedCompanies.areCompaniesAssigned(gridName, userFullName)\n );\n const hasEditPermission = useSelector(listDetailsSelectors.getListEditPermission);\n\n const sessionSettings = useSelector(userSelectors.getSessionSettings);\n const { pathname } = useLocation();\n\n const isAdmin = Object.keys(components).includes('admin_portal_link');\n const isRemoveFromWatchList = gridName === 'lists';\n const isPartnerUser = Object.keys(components).includes('partner_user');\n const canMergeCompanies = isAdmin || isPartnerUser;\n const view = getRouteAlias();\n\n useEffect(() => {\n if (!sessionSettings?.et_form_auto_save && changedSelection) {\n const params = pathname.split('/');\n const listType = params[1];\n const listId = params[2];\n history.push({\n pathname: `/equity-touch-bulk/step-1/${gridName}`,\n state: { listId, listType },\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sessionSettings?.et_form_auto_save, changedSelection]);\n\n const openModal = (\n title: string,\n field: SelectedCompaniesKeys,\n fieldTitle: string,\n column: string\n ) => {\n setIsModalVisible(true);\n setTitle(title);\n setField(field);\n setFieldTitle(fieldTitle);\n setSelectedColumn(column);\n\n if (field === 'watchlist') {\n // update List\n dispatch(favoriteListsActions.fetchFavoriteListsPopup());\n }\n\n // functionality for getting fund and rationale data for displaying\n // in the selected companies table. UI changes were added, but the code for\n // requesting the data is commented until api is completed.\n\n // if (field === 'fund' || field === 'rationale') {\n // dispatch(\n // selectedCompaniesActions.fetchBulkEditData({\n // companyIds: selectedCompanies.map(company => company.company_id),\n // gridName,\n // field,\n // })\n // );\n // }\n };\n\n const handleCompaniesList = () => {\n if (gridName === 'advancedSearch') {\n return companiesInMyHomePage;\n }\n\n if (gridName === 'myCompanies') {\n return companiesInMyCompaniesPage;\n }\n\n if (gridName === 'lists') {\n return companiesInMyWatchList;\n }\n\n if (gridName === 'addons') {\n return addonManagementCompanies;\n }\n\n if (gridName === 'outreachDetails') {\n return companiesOutReachPage;\n }\n\n return [];\n };\n\n const handleOpenUrl = () => {\n const URLlinks = selectedCompanies.map(companies => companies.company_id);\n\n const orderedLink = handleCompaniesList()\n .map((_, index) => {\n return URLlinks.filter(company => company === handleCompaniesList()[index].company_id);\n })\n .flat();\n\n const orderedLinkLimited = orderedLink.slice(0, 20);\n orderedLinkLimited.forEach(link => window.open(`/profile/${link}`));\n };\n\n const changeVisibility = (visible: boolean) => {\n setIsModalVisible(visible);\n };\n\n const handleBulkEquityTouch = (event: { preventDefault: () => void }) => {\n if (areAllCompaniesInEqt) {\n message.error('All companies selected are already in Equity Touch');\n } else {\n event.preventDefault();\n dispatch(bulkActionsET.autoSave(null));\n dispatch(bulkActionsET.resetProgress());\n setChangedSelection(true);\n }\n };\n\n const handleBulkSalesloft = () => {\n history.push(`/salesloft-bulk/${gridName}?action=bulk&referrer=${referrer}`);\n };\n\n const handleClaimAsOwner = useCallback(() => {\n const owner: SelectOption | undefined = companyOwnerOptions.find(\n option => option.label === userLastName\n );\n\n if (!owner) {\n message.error(\"System can't find corresponding Company Owner\");\n\n return;\n }\n\n if (areCompaniesAssigned) {\n message.error('Selected companies are already assigned to you');\n } else {\n setIsModalVisible(true);\n setTitle('Claim as Owner');\n setFieldTitle('Company Owner');\n setSelectedColumn('company_owner');\n dispatch(editFieldsActions.updateProgress(true));\n dispatch(\n editFieldsActions.bulkEditField({\n selectedCompanies,\n selectedData: [owner],\n field: 'company_owner_id',\n })\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [areCompaniesAssigned, companyOwnerOptions, dispatch, selectedCompanies, userLastName]);\n\n const handleMergeCompanies = useCallback(() => {\n setIsModalVisible(true);\n setTitle('Are you sure you want to merge these companies?');\n setFieldTitle('Merge Companies');\n setField('merge_companies');\n setSelectedColumn('merge_companies');\n }, []);\n\n const handleRemoveFromWatchList = useCallback(() => {\n setIsModalVisible(true);\n setTitle('Remove From Watchlist');\n setField('remove_from_watchlist');\n setFieldTitle('Remove From WatchList');\n setSelectedColumn('remove_from_watchlist');\n }, []);\n\n const handleRemoveFromAddonManegement = useCallback(() => {\n setIsModalVisible(true);\n setTitle('Remove From Add-on Management');\n setField('remove_from_addon_management');\n setFieldTitle('Remove From Add-on Management');\n setSelectedColumn('remove_from_addon_management');\n }, []);\n\n const menu = (\n <MenuWrapper>\n {ROUTES.myCompanies !== location.pathname && gridName !== 'addons' && (\n <Item key=\"0\">\n <Tooltip title={isDisabled ? 'Maximum allowed number of companies is 500' : ''}>\n <ButtonLink type=\"text\" onClick={handleBulkEquityTouch} disabled={isDisabled}>\n Add to Equity Touch\n </ButtonLink>\n </Tooltip>\n </Item>\n )}\n\n {gridName === 'addons' ? (\n <Item key=\"1\" onClick={() => openModal('Set Add-on', 'addon', 'Add-on', 'addon')}>\n Make an Add-on\n </Item>\n ) : (\n <Item key=\"1\">\n <Tooltip title={isDisabled ? 'Maximum allowed number of companies is 500' : ''}>\n <ButtonLink type=\"text\" onClick={handleBulkSalesloft} disabled={isDisabled}>\n Add to Sales Loft Cadence\n </ButtonLink>\n </Tooltip>\n </Item>\n )}\n\n {gridName === 'addons' ? (\n <Item key=\"2\" onClick={() => handleRemoveFromAddonManegement()}>\n Remove as Add-on\n </Item>\n ) : (\n <Item key=\"2\" onClick={() => openModal('Watchlist', 'watchlist', 'Watchlist', 'watchlist')}>\n Create or add to Watchlist\n </Item>\n )}\n {hasEditPermission && isRemoveFromWatchList && (\n <Item key=\"3\" onClick={handleRemoveFromWatchList}>\n Remove From Watchlist\n </Item>\n )}\n <Item key=\"4\" onClick={() => openModal('Edit Stage', 'stage', 'Stage', 'stage')}>\n Edit Stage\n </Item>\n <Item key=\"5\" onClick={() => openModal('Bulk Add Tag', 'cs_tags', 'Tags', 'tags')}>\n Add tags\n </Item>\n <Item key=\"6\" onClick={() => handleOpenUrl()}>\n Open Url in new Tab\n </Item>\n <Item\n key=\"7\"\n onClick={() =>\n openModal('Set Pipeline Rank', 'pipeline_rank', 'Pipeline Rank', 'pipeline_rank')\n }\n >\n Set Pipeline Rank\n </Item>\n <Item key=\"8\" onClick={() => openModal('Set Fund', 'fund', 'Fund', 'fund')}>\n Set Fund\n </Item>\n <Item\n key=\"9\"\n onClick={() => openModal('Set Rationale', 'rationale', 'Rationale', 'rationale')}\n >\n Set Rationale\n </Item>\n <Item\n key=\"10\"\n onClick={() =>\n openModal('Set as Software Company', 'is_software', 'Software', 'is_software')\n }\n >\n Set as Software Company\n </Item>\n <Item\n key=\"11\"\n onClick={() =>\n openModal('Set Company Owner', 'company_owner_id', 'Company Owner', 'company_owner')\n }\n >\n Change Ownership\n </Item>\n <Item\n key=\"12\"\n onClick={() => openModal('Set Lead Source', 'lead_source', 'Lead Source', 'lead_source')}\n >\n Change Lead Source\n </Item>\n <Item\n key=\"13\"\n onClick={() =>\n openModal(\n 'Set Senior Advisor Thesis',\n 'senior_advisor_thesis',\n 'Senior Advisor Thesis',\n 'senior_advisor_thesis'\n )\n }\n >\n Change Senior Advisor Thesis\n </Item>\n {gridName !== 'addons' ? (\n <Item key=\"14\" onClick={() => openModal('Set Add-on', 'addon', 'Add-on', 'addon')}>\n Make an Add-on\n </Item>\n ) : (\n <Item key=\"14\">\n <ButtonLink type=\"text\" onClick={handleBulkSalesloft}>\n Add to Sales Loft Cadence\n </ButtonLink>\n </Item>\n )}\n\n {gridName === 'addons' && (\n <Item\n key=\"15\"\n onClick={() => openModal('Watchlist', 'watchlist', 'Watchlist', 'watchlist')}\n >\n Create or add to Watchlist\n </Item>\n )}\n\n {!isPartnerUser && !isAdmin && (\n <Item key=\"16\" onClick={handleClaimAsOwner}>\n Claim as owner\n </Item>\n )}\n {hasEditPermission && canMergeCompanies && view !== 'myCompanies' && (\n <Item key=\"17\" onClick={handleMergeCompanies}>\n Merge Companies\n </Item>\n )}\n <Item\n key=\"18\"\n onClick={() => openModal('Set Sub-sector', 'sub_sector', 'Sub-sector', 'sub_sector')}\n >\n Set Sub-sector\n </Item>\n <Item\n key=\"19\"\n onClick={() =>\n openModal(\n 'Add Product Category',\n 'product_category',\n 'Product Category',\n 'product_category'\n )\n }\n >\n Add Product Category\n </Item>\n <Item\n key=\"20\"\n onClick={() => openModal('Set AI / ML Company', 'is_ai_ml', 'AI / ML', 'is_ai_ml')}\n >\n Set AI / ML Company\n </Item>\n </MenuWrapper>\n );\n\n return (\n <>\n <Dropdown overlay={menu} trigger={['click']} placement=\"bottomRight\">\n <Button type=\"primary\">\n Actions <DownOutlined />\n </Button>\n </Dropdown>\n <BulkEditModal\n title={title}\n visible={visible}\n changeVisibility={changeVisibility}\n editField={field as SelectedCompaniesKeys}\n editFieldTitle={fieldTitle}\n column={selectedColumn}\n context={context}\n selectedCompanies={selectedCompanies}\n isValid={isValid}\n validation={setIsValid}\n >\n <BulkEditField\n field={field as SelectedCompaniesKeys}\n context={context}\n isValid={isValid}\n validation={setIsValid}\n />\n </BulkEditModal>\n </>\n );\n};\n\nexport default BulkActionsButton;\n","import { createSelector } from 'reselect';\nimport { StateSlice, selectFeatureState } from '../../selectFeature';\nimport { Column, ColumnKeys } from '@optx/models/table/Columns';\nimport { GridKeysColumns } from '@optx/models/grid';\nimport { SORT_DESCENDING_BY_DEFAULT } from '@optx/constants/table/sort/defaultSort';\nimport { filterSortableVisibleColumns } from '@optx/utils/table/column-visibility';\nimport { sortColumns } from '@optx/utils/table/sorting';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport {\n getDefaultScore,\n getIsPartner,\n getUserSettings,\n loaded,\n} from '@optx/redux/user/information/selectors';\nimport { SORT_DIRECTION_KEYS_COLUMNS } from './constants';\nimport { checkCurrentGridColumnsConfig } from '../utils/columns';\nimport { getVisibleColumns } from '@optx/utils/columns';\nimport { CompanyColumnType } from './interfaces';\nimport { PartnerStorage } from '@optx/storage/localStorage';\n\nconst selectColumnsFeatureState = (state: StateSlice) => selectFeatureState(state).columns;\n\nexport const getColumnDisplay = (gridKey: GridKeysColumns, isCheckListAnalyst = false) =>\n createSelector(selectColumnsFeatureState, state => {\n if (gridKey === 'checklistResearchInsights') {\n const isAnalyst = isCheckListAnalyst ? 'analyst' : 'company';\n\n return state.checklistResearchInsights[isAnalyst].columnDisplay;\n } else {\n return state[gridKey].columnDisplay;\n }\n });\n\nexport const getColumnOrder = (gridKey: GridKeysColumns, isCheckListAnalyst = false) =>\n createSelector(\n selectColumnsFeatureState,\n PartnerStorage.getIsPartner,\n getIsPartner,\n (state, partnerStorage, partnerSelector) => {\n const isPartner = partnerStorage || partnerSelector;\n\n if (gridKey === 'checklistResearchInsights') {\n const isAnalyst = isCheckListAnalyst ? 'analyst' : 'company';\n\n return state.checklistResearchInsights[isAnalyst].columnOrder;\n } else {\n const customColumnOder = isPartner\n ? state[gridKey].columnOrder.filter(item => item !== 'last_viewed')\n : state[gridKey].columnOrder;\n\n return customColumnOder;\n }\n }\n );\n\nexport const getColumnDisplayInitialState = (\n gridKey: GridKeysColumns,\n isCheckListAnalyst = false\n) =>\n createSelector(selectColumnsFeatureState, state => {\n if (gridKey === 'checklistResearchInsights') {\n const isAnalyst = isCheckListAnalyst ? 'analyst' : 'company';\n\n return state.checklistResearchInsights[isAnalyst].columnDisplayInitialState;\n } else {\n return state[gridKey].columnDisplayInitialState;\n }\n });\n\nexport const getColumnDisplayInitialStateByColumnId = (\n gridKey: GridKeysColumns,\n columnId: string\n) =>\n createSelector(selectColumnsFeatureState, state => {\n if (gridKey === 'checklistResearchInsights') {\n if (state[gridKey].analyst.columnDisplay?.[columnId]) {\n return state[gridKey].analyst.columnDisplayInitialState;\n } else {\n return state[gridKey].company.columnDisplayInitialState;\n }\n }\n\n return state[gridKey].columnDisplayInitialState;\n });\n\nexport const getColumnInitialOrder = (gridKey: GridKeysColumns, isCheckListAnalyst = false) =>\n createSelector(selectColumnsFeatureState, state => {\n if (gridKey === 'checklistResearchInsights') {\n const isAnalyst = isCheckListAnalyst ? 'analyst' : 'company';\n\n return state.checklistResearchInsights[isAnalyst].columnOrderInitialState;\n } else {\n return state[gridKey].columnOrderInitialState;\n }\n });\n\nexport const getColumnInitialLists = (\n gridKey: GridKeysColumns,\n isCheckListAnalyst = false,\n includeDateMatched = false\n) =>\n createSelector(\n getColumnDisplayInitialState(gridKey, isCheckListAnalyst),\n getColumnInitialOrder(gridKey, isCheckListAnalyst),\n (columnDisplay, columnOrder) => {\n const sortableColumns: CompanyColumnType[] = [];\n\n if (!columnDisplay) {\n return sortableColumns;\n }\n\n columnOrder.forEach(columnId => {\n const column = {\n dataIndex: columnId,\n id: columnId,\n title: columnDisplay[columnId].name,\n name: columnDisplay[columnId].name,\n visible: columnDisplay[columnId].visible,\n pinned: columnDisplay[columnId].pinned,\n width: columnDisplay[columnId].width,\n };\n\n sortableColumns.push(column);\n });\n\n if (includeDateMatched && !columnOrder.includes('date_matched')) {\n const column = {\n dataIndex: 'date_matched',\n id: 'date_matched',\n title: columnDisplay.date_matched.name,\n name: columnDisplay.date_matched.name,\n visible: columnDisplay.date_matched.visible,\n pinned: columnDisplay.date_matched.pinned,\n width: columnDisplay.date_matched.width,\n };\n\n sortableColumns.push(column);\n }\n\n return sortableColumns;\n }\n );\n\nexport const getColumnLists = (gridKey: GridKeysColumns, isCheckListAnalyst = false) =>\n createSelector(\n getColumnDisplay(gridKey, isCheckListAnalyst),\n getColumnOrder(gridKey, isCheckListAnalyst),\n (columnDisplay, columnOrder) => {\n const sortableColumns: Column[] = [];\n const pinnedColumns: Column[] = [];\n\n if (!columnDisplay) {\n return [sortableColumns, pinnedColumns];\n }\n\n columnOrder.forEach(columnId => {\n const column = {\n id: columnId,\n name: columnDisplay[columnId].name,\n visible: columnDisplay[columnId].visible,\n pinned: columnDisplay[columnId].pinned,\n width: columnDisplay[columnId].width,\n };\n\n if (!columnDisplay[columnId].pinned) {\n sortableColumns.push(column);\n } else {\n pinnedColumns.push(column);\n }\n });\n\n return [sortableColumns, pinnedColumns];\n }\n );\n\nexport const getDisplayedColumns = (\n gridKey: GridKeysColumns,\n hasActionColumn?: boolean,\n isCheckListAnalyst = false\n) =>\n createSelector(\n getColumnDisplay(gridKey, isCheckListAnalyst),\n getColumnOrder(gridKey, isCheckListAnalyst),\n (columnDisplay, order) => {\n return filterSortableVisibleColumns(\n checkCurrentGridColumnsConfig(gridKey, hasActionColumn),\n columnDisplay,\n order,\n hasActionColumn\n );\n }\n );\n\nexport const getColumns = (\n gridKey: GridKeysColumns,\n hasActionColumn?: boolean,\n isCheckListAnalyst = false\n) => {\n const sortingGridKey = gridKey === 'pipelineReport' ? 'outreach' : gridKey;\n\n return createSelector(\n getDisplayedColumns(gridKey, hasActionColumn, isCheckListAnalyst),\n sortSelectors.getSorting(sortingGridKey),\n sortSelectors.isMultiSort(sortingGridKey),\n getDefaultScore,\n (columns, sorting, isMultiSort, defaultOptxScore) => {\n return sortColumns(\n // @ts-ignore\n columns,\n // @ts-ignore\n sorting?.sortBy || sorting,\n gridKey === 'pipelineReport' ? undefined : defaultOptxScore,\n {\n isMultiSort,\n // Use descending by default only for single sort.\n sortDirectionsKeys:\n isMultiSort && SORT_DIRECTION_KEYS_COLUMNS.includes(gridKey)\n ? undefined\n : SORT_DESCENDING_BY_DEFAULT,\n }\n );\n }\n );\n};\n\nexport const getVisibleColumnString = (gridKey: GridKeysColumns) =>\n createSelector(\n getColumnDisplay(gridKey),\n getColumnOrder(gridKey),\n (columnDisplay, columnOrder) => {\n if (columnDisplay) {\n return getVisibleColumns({ columnDisplay: columnDisplay, columnOrder: columnOrder as any });\n }\n\n return '';\n }\n );\n\nexport const getPinnedColumnsString = (gridKey: GridKeysColumns) =>\n createSelector(\n getColumnDisplay(gridKey),\n getColumnOrder(gridKey),\n (columnDisplay, columnOrder) => {\n if (columnDisplay) {\n return Object.keys(columnDisplay)\n .filter(columnId => columnDisplay[columnId as ColumnKeys].pinned)\n .sort((a, b) => columnOrder.indexOf(a) - columnOrder.indexOf(b))\n .join(',');\n }\n\n return '';\n }\n );\n\nexport const isColumnsFetched = (gridKey: GridKeysColumns) =>\n createSelector(selectColumnsFeatureState, loaded, (state, userInfoLoaded) => {\n return state[gridKey].isColumnFetched && userInfoLoaded;\n });\n\nexport const shouldFetchColumnData = (gridKey: GridKeysColumns) =>\n createSelector(selectColumnsFeatureState, getUserSettings, (columnState, userSettings) => {\n return !columnState[gridKey].isColumnFetched && userSettings !== null;\n });\n\nexport const getDefaultOptxView = () =>\n createSelector(selectColumnsFeatureState, state => {\n return state.defaultOptxView;\n });\n","import { ColumnsType } from 'antd/lib/table';\nimport { CompanyColumnDisplay } from '@optx/models/table/Columns';\n\nexport const filterSortableVisibleColumns = (\n columns: ColumnsType<any>,\n columnDisplay: CompanyColumnDisplay<any> | null,\n order: string[],\n existActionColumn = true\n) => {\n if (!columnDisplay) return [];\n\n const mappedOrder = order\n .filter(columnId => columnDisplay[columnId].visible)\n .map(columnId => {\n // @ts-ignore\n const column = columns.find(column => column.dataIndex === columnId);\n\n if (columnDisplay[columnId].pinned) {\n return { ...column, width: columnDisplay[columnId].width, fixed: 'left' };\n }\n\n return { ...column, width: columnDisplay[columnId].width, fixed: undefined };\n });\n\n if (existActionColumn) {\n // @ts-ignore\n return mappedOrder.concat(columns[columns.length - 1]);\n } else {\n return mappedOrder;\n }\n};\n","import queryString from 'query-string';\nimport { createSelector } from 'reselect';\nimport { CompanyWatchList } from '@optx/models/WatchList';\n// constants\nimport { FAVORITE_LIST_ID } from '@constants/lists';\n// redux\nimport { selectors as favoriteListsSelectors } from '@redux/favorite-lists/lists';\nimport { selectors as userListsSelectors } from '@redux/lists/details';\nimport { selectors as sourceScrubListsSelectors } from '@redux/user/source-scrub-lists';\n\nexport const getSelectedListName = createSelector(\n userListsSelectors.getRouteListId,\n favoriteListsSelectors.getLists,\n sourceScrubListsSelectors.getSourceScrubLists,\n userListsSelectors.isSourceScrubRoute,\n userListsSelectors.getListData,\n (id, savedSearchesList, sourceScrubList, isSourceScrub, listData) => {\n if (id) {\n const { title } = queryString.parse(window.location.search);\n\n if (title) return title;\n if (id === FAVORITE_LIST_ID) return 'My Favorites List';\n\n if (isSourceScrub) {\n const list = sourceScrubList.find(item => item.id.toString() === id);\n if (list) return list.title;\n\n return '';\n }\n\n if (listData) return listData.title;\n\n // List can be undefined when list id is loaded from user information filters on page refresh and\n // the lists are not yet loaded.\n const list = savedSearchesList[id] as CompanyWatchList | undefined;\n if (list) return list.title;\n }\n\n return '';\n }\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport CompanyIndividualEditOptions from '@models/feature/companyIndividualEdit/CompanyIndividualEditOptions';\nimport { ScoreAndTrendsResponse } from '@optx/models/score';\nimport { UpdateFieldsPayload } from '@optx/features/company/edit-fields/state/interfaces';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport * as companyOwnerActions from '../companyOwner/actions';\nimport * as companyIndividualEditActions from '../companyIndividualEdit/actions';\nimport * as companyRationaledActions from '../rationale/actions';\nimport { EditCompanyOwner } from '../companyOwner/interfaces';\nimport { EditCompanyRationale, EditCompanyRationaleResponse } from '../rationale/interfaces';\nimport { actions as editFieldsActions } from '@features/company/edit-fields/state';\n\nfunction* fetchSelectOptionsSaga(action: PayloadAction<string | null>) {\n const fields = action.payload;\n\n try {\n const res: AxiosResponse<CompanyIndividualEditOptions> = yield call(\n CompanyService.getEquityTouchSelectOptions,\n fields\n );\n yield put(companyIndividualEditActions.fetchSelectOptionsSuccess(res.data));\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed fetching individual edit select options!');\n yield put(companyIndividualEditActions.fetchSelectOptionsFail(message));\n }\n}\n\nfunction* addRationaleSaga(action: PayloadAction<EditCompanyRationale>) {\n const { companyId, rationale, callback, value } = action.payload;\n\n try {\n const res: AxiosResponse<Partial<EditCompanyRationaleResponse>> = yield call(\n CompanyService.updateCompanyRationale,\n {\n companyId,\n rationale,\n value,\n } as UpdateFieldsPayload\n );\n\n if (res.data) {\n const successPayload = {\n companyId: companyId,\n fieldKey: 'rationale',\n value: rationale,\n };\n yield put(\n editFieldsActions.updateFieldsSuccess({\n fieldName: 'Rationale',\n companyId,\n value: successPayload,\n companyOwnerData: null,\n })\n );\n const successMessage = 'Company rationale updated successfully';\n NotificationService.success(successMessage);\n } else {\n const errorMessage = 'Company rationale update failed, Server error!';\n NotificationService.error(errorMessage);\n }\n\n callback && callback();\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Company rationale update failed, Server error!');\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* addCompanyOwnerSaga(action: PayloadAction<EditCompanyOwner>) {\n const { companyId, companyOwnerId, companyOwnerName } = action.payload;\n const value: SelectOption = {\n label: companyOwnerName,\n value: `${companyOwnerId}`,\n };\n\n try {\n const res: AxiosResponse<Partial<ScoreAndTrendsResponse>> = yield call(\n CompanyService.updateCompanyData,\n {\n value,\n companyId,\n customData: { deal_team_leader: value.value, deal_team_leader_name: value.label },\n } as UpdateFieldsPayload\n );\n\n if (res.data) {\n yield put(\n companyOwnerActions.addCompanyOwnerSuccess({\n ...action.payload,\n companyOwnerData: res.data?.extra_data,\n })\n );\n const successMessage = 'Company owner updated successfully';\n NotificationService.success(successMessage);\n } else {\n const errorMessage = 'Company owner update failed, Server error!';\n yield put(companyOwnerActions.addCompanyOwnerFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Company owner update failed, Server error!');\n yield put(companyOwnerActions.addCompanyOwnerFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companyIndividualEditSagas() {\n yield takeLatest(companyIndividualEditActions.fetchSelectOptions, fetchSelectOptionsSaga);\n yield takeLatest(companyOwnerActions.addCompanyOwner, addCompanyOwnerSaga);\n yield takeLatest(companyRationaledActions.addRationale, addRationaleSaga);\n}\n","import React from 'react';\nimport {\n PhoneOutlined,\n MailOutlined,\n ClockCircleOutlined,\n FileProtectOutlined,\n ContactsOutlined,\n FileTextOutlined,\n FileExclamationOutlined,\n DoubleRightOutlined,\n} from '@ant-design/icons';\nimport Icon from '@optx/components/common/Icon';\nimport { TouchType } from '@models/company/CompanyTouch';\n\ninterface TouchIconProps {\n type: TouchType;\n className?: string;\n color?: string;\n}\n\nconst styles: React.CSSProperties = {\n fontSize: 19,\n color: '#1890FF',\n};\n\nconst TouchIcon: React.FC<TouchIconProps> = ({ type, className, color }) => {\n const iconColor = color ? color : styles.color;\n\n switch (type) {\n case 'Call':\n return <PhoneOutlined style={{ ...styles, color: iconColor }} className={className} />;\n case 'Contact Import':\n return <ContactsOutlined style={{ ...styles, color: iconColor }} className={className} />;\n case 'CrunchBase':\n return (\n <Icon iconName=\"crunchbase\" style={{ ...styles, color: iconColor }} className={className} />\n );\n case 'Internal Note':\n return (\n <FileExclamationOutlined style={{ ...styles, color: iconColor }} className={className} />\n );\n case 'E-mail':\n case 'Voice Mail':\n return <MailOutlined style={{ ...styles, color: iconColor }} className={className} />;\n case 'Meeting':\n case 'Introduction':\n case 'Follow-up':\n case 'Mgmt Call':\n case 'Expert Call':\n case 'Product Demo':\n case 'Pre-analysis':\n case 'VC Meeting':\n case 'IB Meeting':\n case 'Other':\n return (\n <Icon\n iconName=\"people-outlined\"\n style={{ ...styles, color: iconColor }}\n className={className}\n />\n );\n case 'NDA Signed':\n return <FileProtectOutlined style={{ ...styles, color: iconColor }} className={className} />;\n case 'Stage Modified':\n return <ClockCircleOutlined style={{ ...styles, color: iconColor }} className={className} />;\n case 'Transferred':\n return <DoubleRightOutlined style={{ ...styles, color: iconColor }} className={className} />;\n default:\n return <FileTextOutlined style={{ ...styles, color: iconColor }} className={className} />;\n }\n};\n\nexport default TouchIcon;\n","import { useSelector, useDispatch } from 'react-redux';\nimport { useInjectReducer } from 'redux-injectors';\nimport { useCallback } from 'react';\nimport {\n actions as recentActivityModalActions,\n selectors as recentActivityModalSelectors,\n} from '../../../redux/ui/modals/recent-activity';\nimport uiReducer from '../../../redux/ui';\n\nconst useRecentActivityModal = (): [boolean, VoidFunction] => {\n useInjectReducer({\n key: 'ui',\n reducer: uiReducer,\n });\n const open = useSelector(recentActivityModalSelectors.displayDialog);\n const dispatch = useDispatch();\n const toggle = useCallback(\n () => dispatch(recentActivityModalActions.toggleRecentActivityModal()),\n [dispatch]\n );\n\n return [open, toggle];\n};\n\nexport default useRecentActivityModal;\n","export { default as PoweredByAITag } from './PoweredByAITag';\n","import { createSelector } from 'reselect';\nimport { isEmpty } from 'lodash';\n// redux\nimport { getSearchKey } from '@optx/features/grid/searchkey/state/selectors';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\n\n/**\n * Show if current search has seach term or a filter set.\n */\nexport const searchHasValues = createSelector(\n getSearchKey('lists'),\n filterSelectors.getFilter('lists'),\n (searchKey, filter) => !!searchKey || !isEmpty(filter)\n);\n","import React from 'react';\nimport { ButtonProps } from 'antd/lib/button';\n// components\nimport Icon from '@components/common/Icon';\nimport { SearchViewButton } from './ToggleViewButton.styles';\n\ninterface ToggleLongCardViewProps extends ButtonProps {\n active: boolean;\n color?: string;\n}\n\nconst ToggleLongCardView: React.FC<ToggleLongCardViewProps> = ({ active, color, ...restProps }) => {\n return (\n <SearchViewButton\n type=\"text\"\n color={color}\n $active={active}\n icon={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <span>\n <Icon iconName=\"tiles\" />\n </span>\n }\n {...restProps}\n />\n );\n};\n\nexport default ToggleLongCardView;\n","import React from 'react';\nimport { ButtonProps } from 'antd/lib/button';\n// components\nimport Icon from '@components/common/Icon';\nimport { SearchViewButton } from './ToggleViewButton.styles';\n\ninterface ToggleTableViewProps extends ButtonProps {\n active: boolean;\n color?: string;\n}\n\nconst ToggleTableView: React.FC<ToggleTableViewProps> = ({ active, color, ...restProps }) => {\n return (\n <SearchViewButton\n type=\"text\"\n color={color}\n $active={active}\n icon={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <span>\n <Icon iconName=\"grid\" />\n </span>\n }\n {...restProps}\n />\n );\n};\n\nexport default ToggleTableView;\n","import { FieldInputProps } from 'formik';\nimport { parse, stringify } from 'query-string';\n// models\nimport { SelectOption } from '@models/Option';\nimport { RouteRedirectStateProps } from '@models/routes';\nimport { AddedCompany } from '../models';\n// utils\nimport { getAddToSalesLoftURL, getCompanyProfileURL } from '@utils/routes';\n\nexport const getCityDependenciesOptions = (\n countryField?: FieldInputProps<SelectOption | undefined>,\n stateField?: FieldInputProps<SelectOption | undefined>\n) => {\n let dependenciesOptions = {};\n\n if (countryField?.value && stateField?.value) {\n dependenciesOptions = {\n country: [countryField.value.value],\n state: [stateField.value.value],\n };\n } else if (countryField?.value) {\n dependenciesOptions = { country: [countryField.value.value] };\n } else if (stateField?.value) {\n dependenciesOptions = { state: [stateField.value.value] };\n }\n\n return dependenciesOptions;\n};\n\nexport const getNewRoute = (\n addedCompany: AddedCompany,\n state: RouteRedirectStateProps | null,\n search: string,\n isSLCadence: boolean = false\n) => {\n if (isSLCadence) {\n const searchParams = stringify(\n {\n id: addedCompany.company_id,\n name: addedCompany.company_name,\n url: addedCompany.company_url,\n },\n { arrayFormat: 'comma' }\n );\n\n return {\n pathname: getAddToSalesLoftURL(addedCompany.company_id),\n search: searchParams,\n };\n }\n\n return {\n pathname: getCompanyProfileURL(addedCompany.company_id),\n search,\n state,\n };\n};\n\nexport const getDataFromPlugin = () => {\n const searchParams = parse(window.location.search);\n const addCompany = Boolean(searchParams.addCompany);\n const companyUrl = String(searchParams.companyUrl);\n\n return { addCompany, companyUrl };\n};\n","import * as yup from 'yup';\n// models\nimport { FormValues } from '../models';\nimport { SelectOption } from '@models/Option';\n// constants\nimport { FIELD_REQUIRED_ERROR } from '@constants/form';\nimport { urlRegExp } from '@constants/regex';\nimport {\n LINK_URL_VALUE_ERROR_MESSAGE,\n ABBREVIATION_ERROR_MESSAGE,\n} from '@optx/constants/table/cells';\n// utils\nimport { validatePositiveNumbers } from '@optx/utils/validation';\n\n/**\n * Fields with custom test validation are nullable (even though they're required)\n * because there's a issue that appears in the error text instead of the FIELD_REQUIRED_ERROR\n * saying that the value can't be null. This occurs when changing to a new option from the dropdown.\n * In reality, the fields are still correctly tested and will return an error if conditions are not met.\n */\nexport default yup.object<FormValues>({\n companyName: yup\n .string()\n .required(FIELD_REQUIRED_ERROR)\n .test('is-not-empty', 'Company name can not contain only spaces', value => {\n return value && value.trim().length > 0;\n })\n .test(\n 'name-starts-ends-with-space',\n 'Company name can not end or start with empty space',\n value => {\n return typeof value === 'string' && value.trim().length === value.length;\n }\n ),\n primaryUrl: yup\n .string()\n .matches(urlRegExp, LINK_URL_VALUE_ERROR_MESSAGE)\n .required(FIELD_REQUIRED_ERROR),\n\n alternativeName: yup.string(),\n secondaryUrl: yup\n .string()\n .matches(urlRegExp, LINK_URL_VALUE_ERROR_MESSAGE)\n .test(\n 'validSecondaryUrl',\n 'Secondary URL must be different from the primary URL!',\n function (value) {\n return this.parent.primaryUrl !== value;\n }\n ),\n\n primaryAddress: yup.string(),\n primaryAddressSecondLine: yup.string(),\n country: yup\n .object<SelectOption>()\n .test(\n 'selectOptionValidation',\n FIELD_REQUIRED_ERROR,\n (value: SelectOption) => value && !!value.value\n )\n .nullable(),\n state: yup.object<SelectOption>().nullable(),\n city: yup.object<SelectOption>().nullable(),\n zipCode: yup.string(),\n\n hasSecondaryAddress: yup.boolean().required(),\n\n secondaryAddress: yup.string().when('hasSecondaryAddress', {\n is: true,\n then: yup.string(),\n }),\n secondaryAddressSecondLine: yup.string(),\n secondaryCountry: yup\n .object<SelectOption>()\n .when('hasSecondaryAddress', {\n is: true,\n then: yup\n .object<SelectOption>()\n .test(\n 'selectOptionValidation',\n FIELD_REQUIRED_ERROR,\n (value: SelectOption) => value && !!value.value\n )\n .nullable(),\n })\n .nullable(),\n secondaryState: yup\n .object<SelectOption>()\n .when('hasSecondaryAddress', {\n is: true,\n then: yup.object<SelectOption>().nullable(),\n })\n .nullable(),\n secondaryCity: yup\n .object<SelectOption>()\n .when('hasSecondaryAddress', {\n is: true,\n then: yup.object<SelectOption>().nullable(),\n })\n .nullable(),\n secondaryZipCode: yup.string(),\n\n sector: yup\n .object<SelectOption>()\n .test(\n 'selectOptionValidation',\n FIELD_REQUIRED_ERROR,\n (value: SelectOption) => value && !!value.value\n )\n .nullable(),\n subSector: yup.object<SelectOption>().nullable(),\n productCategory: yup.array<SelectOption>().nullable(),\n ftes: yup.mixed().nullable(),\n\n companyOwner: yup\n .object<SelectOption>()\n .test(\n 'selectOptionValidation',\n FIELD_REQUIRED_ERROR,\n (value: SelectOption) => value && !!value.value\n )\n .nullable(),\n etCheck: yup\n .mixed()\n .test('requiredConditional', ABBREVIATION_ERROR_MESSAGE, function (value) {\n return validatePositiveNumbers(value);\n })\n .required(FIELD_REQUIRED_ERROR)\n .nullable(),\n isAddon: yup.object<SelectOption<number>>().nullable(),\n\n stage: yup\n .object<SelectOption>()\n .test(\n 'selectOptionValidation',\n FIELD_REQUIRED_ERROR,\n (value: SelectOption) => value && !!value.value\n )\n .nullable(),\n stageRationale: yup.string().nullable(),\n fund: yup\n .object<SelectOption>()\n .test(\n 'selectOptionValidation',\n FIELD_REQUIRED_ERROR,\n (value: SelectOption) => value && !!value.value\n )\n .nullable(),\n addonFor: yup\n .array<SelectOption>()\n .test('addonForValidation', FIELD_REQUIRED_ERROR, function (value: SelectOption[]) {\n const isAddon = this.parent.isAddon?.value === 1;\n\n return !isAddon || (isAddon && !!value?.length);\n })\n .nullable(),\n\n rank: yup.object<SelectOption>().nullable(),\n source: yup.object<SelectOption>().nullable(),\n opportunityType: yup\n .object<SelectOption>()\n .test(\n 'selectOptionValidation',\n FIELD_REQUIRED_ERROR,\n (value: SelectOption) => value && !!value.value\n )\n .nullable(),\n rationale: yup.string(),\n description: yup.string().required(FIELD_REQUIRED_ERROR),\n});\n","import styled, { css } from 'styled-components';\nimport { Modal } from 'antd';\n// components\nimport DefaultTable from '@shared/view/organims/Table';\n\nconst ModalWrapper = styled(Modal)`\n .ant-modal-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background: #fff;\n\n .left-container {\n button {\n margin-right: 10px;\n }\n }\n\n .additional-info {\n font-weight: bold;\n font-size: 16px;\n }\n\n .proceed-text {\n margin-right: 8px;\n }\n }\n\n .ant-modal-content {\n min-height: 700px;\n }\n\n .ant-form-vertical {\n .ant-form-item-label {\n padding-bottom: 0;\n }\n }\n`;\n\nconst Step1 = styled.div`\n .spacer-bottom {\n margin-bottom: 30px;\n }\n\n .step-1-col {\n min-width: 230px;\n }\n\n .ant-form-item {\n &.primary-url-form-item {\n margin-bottom: 0;\n position: relative;\n\n .url-status-icon-container {\n position: absolute;\n top: 1px;\n right: 10px;\n font-size: 20px;\n width: 20px;\n height: 20px;\n }\n\n input {\n padding-right: 35px;\n }\n }\n\n &-control {\n max-width: 230px;\n }\n\n &-explain-error {\n white-space: nowrap;\n }\n\n input {\n padding-right: 25px;\n }\n }\n\n .url-info {\n font-size: 14px;\n color: #bfbfbf;\n }\n`;\n\nconst Step2 = styled.div`\n .spacer-bottom {\n margin-bottom: 30px;\n }\n\n .ant-table-wrapper {\n width: 100%;\n }\n`;\n\nconst Table = styled(DefaultTable)`\n .ant-table-container {\n max-height: 490px;\n overflow-y: auto;\n }\n\n td.ant-table-cell:not(.sticky):not(.editable-cell) {\n cursor: default;\n }\n\n .ant-table-cell.company_name {\n .company-name__profile-link {\n display: inline;\n }\n\n .d-flex > * {\n height: 22px;\n }\n }\n`;\n\nconst AsyncSelect = css`\n .ant-form-item-has-error {\n .ant-dropdown-trigger,\n .async-single-select .multiselect__control {\n border-color: #ff4d4f;\n\n &:hover {\n border-color: #ff4d4f;\n }\n\n &--is-focused {\n border-color: #ff4d4f;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n }\n }\n }\n\n .async-single-select {\n .multiselect__control {\n min-height: 30px;\n border-radius: 2px;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n\n &:hover {\n border-color: #40a9ff;\n outline: 0;\n }\n\n &--is-focused {\n border-color: #40a9ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n }\n\n .multiselect__value-container {\n height: 30px;\n padding: 0 11px;\n\n & > span {\n display: none;\n }\n }\n\n .multiselect__dropdown-indicator {\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n padding-right: 11px;\n }\n }\n\n .multiselect__menu-list :first-child:hover {\n color: hsl(0, 0%, 60%);\n }\n\n .multiselect__option {\n height: max-content;\n padding: 5px 12px;\n\n &.multiselect__option--is-focused:hover {\n transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n color: rgba(0, 0, 0, 0.85);\n background: #f5f5f5;\n }\n\n &.multiselect__option--is-selected {\n font-weight: 600;\n background: #e6f4ff;\n\n &:hover {\n background: #e6f4ff;\n }\n }\n }\n }\n`;\n\nconst Step3 = styled.div`\n .spacer-bottom {\n margin-bottom: 30px;\n align-items: center;\n }\n\n .add-address-button {\n height: 100%;\n padding: 2px 15px;\n\n .plus-icon {\n font-size: 11px;\n }\n }\n ${AsyncSelect}\n`;\n\nconst Step4 = styled.div`\n .spacer-bottom {\n margin-bottom: 30px;\n }\n\n textarea {\n line-height: 1.59;\n }\n ${AsyncSelect}\n`;\n\nconst StepCompleted = styled.div`\n text-align: center;\n\n .spacer-bottom {\n margin-bottom: 30px;\n }\n\n h1 {\n font-size: 32px;\n }\n\n .anticon-check-circle {\n color: #82b128;\n font-size: 64px;\n width: 100%;\n }\n`;\n\nexport const Styled = {\n ModalWrapper,\n Step1,\n Step2,\n Table,\n Step3,\n Step4,\n StepCompleted,\n};\n","import React, { useState, useEffect, useMemo, useCallback, useRef } from 'react';\nimport { FormItem, Input } from 'formik-antd';\nimport { Row, Col, Typography, Input as AntdInput } from 'antd';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { FormikProps } from 'formik';\nimport { CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons';\nimport { debounce } from 'lodash';\n// models\nimport { FormValues } from '../models';\n// constants\nimport { SEARCH_MINIMUM_CHAR_COUNT } from '@optx/constants/search';\nimport { VIEW_AND_CLOSE } from '../constants';\n// utils\nimport { validateUrl } from '@optx/utils/validation';\n// redux\nimport { selectors, actions } from '@features/company/add-company';\n// components\nimport OverlayLoader from '@components/common/loader/OverlayLoader';\nimport { Styled } from './AddCompanyModal.styled';\n\ninterface Step1Props {\n formikProps: FormikProps<FormValues>;\n handleDisableNextButton: (disabled: boolean) => void;\n shouldGoToNextStep: () => void;\n canGoToNextStep: (confirm: boolean) => void;\n}\n\n/**\n * In Step 1 we check for URL validation on blur and handle the status accordingly.\n */\nconst AddCompanyStep1: React.FC<Step1Props> = ({\n formikProps,\n handleDisableNextButton,\n shouldGoToNextStep,\n canGoToNextStep,\n}) => {\n const dispatch = useDispatch();\n const [url, setUrl] = useState<string>(formikProps.values.primaryUrl || '');\n const data = useSelector(selectors.getUrlData);\n const inputRef = useRef<AntdInput>(null);\n const urlData = useMemo(() => {\n return !data && url.length >= SEARCH_MINIMUM_CHAR_COUNT && validateUrl(url)\n ? { loading: false, isValid: true }\n : { ...data };\n }, [url, data]);\n\n const [validUrl, setValidUrl] = useState<boolean>(urlData?.isValid || validateUrl(url));\n const shouldShowValidationResult = useMemo(\n () => urlData && !urlData.loading && validUrl && url.length >= SEARCH_MINIMUM_CHAR_COUNT,\n [url, urlData, validUrl]\n );\n\n const handleChange = (inputValue: string) => {\n if (inputValue.length >= SEARCH_MINIMUM_CHAR_COUNT) {\n const isValidUrl = validateUrl(inputValue);\n\n setValidUrl(isValidUrl);\n\n if (isValidUrl) {\n dispatch(actions.checkUrl(inputValue));\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const debouncedHandleChange = useCallback(debounce(handleChange, 3000), []);\n\n const handleUrlChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setValidUrl(false);\n setUrl(event.target.value);\n\n debouncedHandleChange(event.target.value);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLElement>) => {\n debouncedHandleChange.cancel();\n setTimeout(() => {\n const canMoveToNext = document.activeElement?.classList.contains('add-company-primary');\n const buttonTexts = [VIEW_AND_CLOSE, 'Cancel'];\n\n if (buttonTexts.includes(document.activeElement?.childNodes[0]?.textContent || '')) return;\n\n handleChange(url);\n canMoveToNext && shouldGoToNextStep();\n });\n };\n\n useEffect(() => {\n const { primaryUrl: primaryUrlError, companyName: companyNameError } = formikProps.errors;\n const { primaryUrl, companyName } = formikProps.values;\n const shouldDisableNextButton =\n primaryUrlError ||\n companyNameError ||\n !primaryUrl ||\n !companyName ||\n urlData?.loading ||\n (!urlData.foundCompanyId && shouldShowValidationResult && !urlData?.isValid);\n\n if (shouldDisableNextButton) {\n handleDisableNextButton(true);\n } else {\n handleDisableNextButton(false);\n }\n }, [formikProps, handleDisableNextButton, urlData, validUrl, shouldShowValidationResult]);\n\n useEffect(() => {\n canGoToNextStep(validUrl);\n }, [canGoToNextStep, validUrl]);\n\n return (\n <Styled.Step1>\n <Row className=\"spacer-bottom\">\n <Typography.Text>\n First, let's check to see if this company already exists in OPTX.\n </Typography.Text>\n </Row>\n\n <Row>\n <Col>\n <Row>\n <Col className=\"step-1-col\">\n <FormItem name=\"companyName\" label=\"Company Name\" required>\n <Input name=\"companyName\" />\n </FormItem>\n </Col>\n </Row>\n\n <Row>\n <Col className=\"step-1-col\">\n <FormItem\n name=\"primaryUrl\"\n className=\"primary-url-form-item\"\n label=\"Primary URL\"\n required\n >\n <Input\n name=\"primaryUrl\"\n onChange={handleUrlChange}\n onBlur={handleBlur}\n disabled={urlData?.loading}\n value={url}\n ref={inputRef}\n />\n {url && (\n <div className=\"url-status-icon-container\">\n {urlData?.loading && <OverlayLoader loading={true} isOverlay />}\n\n {shouldShowValidationResult && (\n <>\n {urlData?.isValid && <CheckCircleFilled style={{ color: '#82b128' }} />}\n {!urlData?.isValid && <CloseCircleFilled style={{ color: '#c53132' }} />}\n </>\n )}\n </div>\n )}\n </FormItem>\n {shouldShowValidationResult && (\n <Typography.Text className=\"url-info\">\n {urlData.message\n ? urlData.message\n : urlData.isValid\n ? 'Unique URL'\n : 'This URL already exists'}\n </Typography.Text>\n )}\n </Col>\n </Row>\n </Col>\n </Row>\n </Styled.Step1>\n );\n};\n\nexport default React.memo(AddCompanyStep1);\n","import { ColumnType } from 'antd/lib/table';\n// models\nimport Company, { CompanyProfile } from '@models/Company';\nimport { CompanyKeys } from '@models/table/Columns';\n// components\nimport { TableCellCompanyURL } from '@components/common/table/Companies/styled-cells';\nimport { TableCellDefaultTooltip } from '@optx/components/common/table/AntTable/cells';\nimport { TableCellCompanyName } from './cells';\n\ninterface CompanyColumnType extends ColumnType<CompanyProfile> {\n dataIndex: CompanyKeys;\n}\n\nconst columns: CompanyColumnType[] = [\n {\n dataIndex: 'company_url',\n title: '',\n className: 'company_url',\n render: (value: string | null, record: Company, index: number) => (\n <TableCellCompanyURL value={value} record={record} />\n ),\n width: 42,\n align: 'center',\n },\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n className: 'company_name',\n render: TableCellCompanyName,\n width: 230,\n align: 'left',\n },\n {\n dataIndex: 'year_founded',\n title: 'Year Founded',\n className: 'year_founded',\n width: 114,\n align: 'right',\n render: TableCellDefaultTooltip,\n },\n {\n dataIndex: 'display_location',\n title: 'Location',\n className: 'display_location',\n width: 160,\n align: 'left',\n render: TableCellDefaultTooltip,\n },\n {\n dataIndex: 'company_url',\n title: 'URL',\n className: 'company_url',\n width: 180,\n align: 'right',\n render: TableCellDefaultTooltip,\n },\n];\n\nexport default columns;\n","// models\nimport { ColumnRender } from '@models/table/antd-table';\nimport { CompanyProfile } from '@optx/models/Company';\n// components\nimport { CompanyNameRender } from '@components/common/table/AntTable/cells/TableCellCompanyName';\n\nexport const TableCellCompanyName: ColumnRender<string, CompanyProfile> = (value, record) => (\n <CompanyNameRender name={value} companyId={record.company_id} origin=\"similar-companies\" />\n);\n","import React, { useEffect } from 'react';\nimport { Row, Typography } from 'antd';\nimport { useField } from 'formik';\nimport { useDispatch } from 'react-redux';\n// models\nimport Company from '@models/Company';\n// constants\nimport { similarCompaniesColumns } from './table/columns';\n// redux\nimport { actions } from '../state';\n// components\nimport { Styled } from './AddCompanyModal.styled';\n\ninterface Step2Props {\n similarCompanies: Company[] | null;\n handleDisableNextButton: (disabled: boolean) => void;\n changeStep: () => void;\n shouldLoadCompanies: boolean;\n}\n\nconst rowKey: keyof Company = 'company_id';\n\n/**\n * In Step 2 we show the similar companies.\n */\nconst AddCompanyStep2: React.FC<Step2Props> = ({\n similarCompanies,\n handleDisableNextButton,\n changeStep,\n shouldLoadCompanies,\n}) => {\n const [urlField] = useField<string>('primaryUrl');\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n // in case we come back from step 3 to step 2, we should re-enable the next button\n handleDisableNextButton(false);\n }, [handleDisableNextButton]);\n\n useEffect(() => {\n if (urlField.value?.length && !similarCompanies) {\n shouldLoadCompanies && dispatch(actions.checkSimilarCompanies(urlField.value));\n } else if (similarCompanies?.length === 0) {\n changeStep();\n }\n }, [similarCompanies, urlField.value, dispatch, changeStep, shouldLoadCompanies]);\n\n if (!similarCompanies) {\n return null;\n }\n\n return (\n <Styled.Step2>\n <Row className=\"spacer-bottom\">\n <Typography.Text>\n {similarCompanies.length\n ? 'We found these similar companies. Click \"Next\" if none are a match.'\n : 'No similar companies, you can proceed to the next step.'}\n </Typography.Text>\n </Row>\n\n <Row>\n <Styled.Table\n columns={similarCompaniesColumns}\n dataSource={similarCompanies}\n className=\"legacy-table\"\n rowKey={rowKey}\n bordered\n showSorterTooltip={false}\n tableLayout={'fixed'}\n />\n </Row>\n </Styled.Step2>\n );\n};\n\nexport default React.memo(AddCompanyStep2);\n","import { FieldInputProps } from 'formik';\n// models\nimport { SelectOption } from '@models/Option';\n// constants\nimport {\n STATE_SEARCH_ENDPOINT,\n CITY_SEARCH_ENDPOINT,\n PRODUCT_CATEGORY_SEARCH_ENDPOINT,\n COMPANY_NAME_SEARCH_ENDPOINT,\n} from '@constants/search';\n// utils\nimport { getCityDependenciesOptions } from '../utils';\n// hooks\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\n\ninterface UseLoadOptionsProps {\n countryField: FieldInputProps<SelectOption | undefined>;\n stateField: FieldInputProps<SelectOption | undefined>;\n secondaryCountryField: FieldInputProps<SelectOption | undefined>;\n secondaryStateField: FieldInputProps<SelectOption | undefined>;\n}\n\n/**\n * A hook for managing the async search of dropdown options\n */\nconst useLoadOptions = (data?: UseLoadOptionsProps) => {\n const { loadOptions: loadPrimaryStateOptions } = useAsyncSearch({\n endpoint: STATE_SEARCH_ENDPOINT,\n dependenciesOptions: data?.countryField.value\n ? { country: [data.countryField.value.value] }\n : {},\n });\n\n const { loadOptions: loadSecondaryStateOptions } = useAsyncSearch({\n endpoint: STATE_SEARCH_ENDPOINT,\n dependenciesOptions: data?.secondaryCountryField.value\n ? { country: [data.secondaryCountryField.value.value] }\n : {},\n });\n\n const { loadOptions: loadPrimaryCityOptions } = useAsyncSearch({\n endpoint: CITY_SEARCH_ENDPOINT,\n dependenciesOptions: getCityDependenciesOptions(data?.countryField, data?.stateField),\n });\n\n const { loadOptions: loadSecondaryCityOptions } = useAsyncSearch({\n endpoint: CITY_SEARCH_ENDPOINT,\n dependenciesOptions: getCityDependenciesOptions(\n data?.secondaryCountryField,\n data?.secondaryStateField\n ),\n });\n\n const { loadOptions: loadProductCategoryOptions } = useAsyncSearch({\n endpoint: PRODUCT_CATEGORY_SEARCH_ENDPOINT,\n });\n\n const { loadOptions: loadCompanyOptions } = useAsyncSearch({\n endpoint: COMPANY_NAME_SEARCH_ENDPOINT,\n });\n\n return {\n loadPrimaryStateOptions,\n loadSecondaryStateOptions,\n loadPrimaryCityOptions,\n loadSecondaryCityOptions,\n loadProductCategoryOptions,\n loadCompanyOptions,\n };\n};\n\nexport default useLoadOptions;\n","import { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { OptionsType } from 'react-select';\n// models\nimport { SelectOption } from '@models/Option';\nimport { BaseFilterDataType } from '@models/filters';\nimport { interfaces } from '@components/feature/company-individual-edit/state/companyIndividualEdit';\n// utils\nimport { mapToSelectOption } from '@utils/option';\n// redux\nimport { selectors as companyFiltersSelectors } from '@redux/company/filters';\nimport { selectors as companySelectors } from '@components/feature/company-individual-edit/state';\n\nconst optionsFields: interfaces.IndividualEditFieldType[] = [\n 'rank',\n 'fund',\n 'stage',\n 'source',\n 'sector',\n 'sub_sector',\n];\n\n/**\n * This is a hook for getting all necessary data in the add company flow.\n * @param {number} step Step number where we have form data, either 3 or 4.\n * @returns An object containing all the fields' data.\n */\nconst useGetFilterData = (step: 3 | 4) => {\n const filters = useSelector(companyFiltersSelectors.getCompanyFilters);\n const {\n rank,\n fund,\n stage,\n source,\n sector,\n sub_sector: subSector,\n } = useSelector(companySelectors.companyIndividualEdit.multipleOptions(optionsFields));\n\n const countries: OptionsType<SelectOption> = useMemo(() => {\n if (step === 3) {\n const countriesFilter: BaseFilterDataType[] =\n filters[1].data.find(filter => filter.column === 'geo_country')?.data ?? [];\n\n return countriesFilter.map(option => mapToSelectOption(option));\n }\n\n return [];\n }, [filters, step]);\n\n const sectors: OptionsType<SelectOption> = useMemo(() => {\n if (step === 3 && sector) {\n const data = [{ value: 'blank', label: 'None' }, ...sector];\n\n return data;\n }\n\n return [];\n }, [sector, step]);\n\n const subSectors: OptionsType<SelectOption> = useMemo(() => {\n if (step === 3 && subSector) {\n const data = [{ value: 'blank', label: 'None' }, ...subSector];\n\n return data;\n }\n\n return [];\n }, [subSector, step]);\n\n const analysts: OptionsType<SelectOption> = useMemo(() => {\n if (step === 4) {\n let analystsFilter: SelectOption[] =\n filters[3].data.find(filter => filter.column === 'company_owner_id')?.data ?? [];\n\n return analystsFilter.reduce((analystsArray: SelectOption[], analystValue: SelectOption) => {\n if (\n analystValue.value !== 'blank' &&\n analystValue.value !== 'everybody else' &&\n analystValue.value !== 'active sourcing team'\n ) {\n analystsArray.push(mapToSelectOption(analystValue));\n }\n\n return analystsArray;\n }, []);\n }\n\n return [];\n }, [filters, step]);\n\n const stages: OptionsType<SelectOption> = useMemo(() => {\n if (step === 4 && stage) return stage;\n\n return [];\n }, [stage, step]);\n\n const funds: OptionsType<SelectOption> = useMemo(() => {\n if (step === 4 && fund) return fund;\n\n return [];\n }, [step, fund]);\n\n const sources: OptionsType<SelectOption> = useMemo(() => {\n if (step === 4 && source) return source;\n\n return [];\n }, [source, step]);\n\n const ranks: OptionsType<SelectOption> = useMemo(() => {\n if (step === 4 && rank) return rank;\n\n return [];\n }, [step, rank]);\n\n const opportunityTypes: OptionsType<SelectOption> = useMemo(() => {\n if (step === 4) {\n const opportunityFilter: BaseFilterDataType[] =\n filters[1].data.find(filter => filter.column === 'opportunity_type')?.data ?? [];\n\n const opportunityTypes = opportunityFilter\n .map(option => mapToSelectOption(option))\n .filter(option => option.value !== 'blank');\n\n return opportunityTypes;\n }\n\n return [];\n }, [filters, step]);\n\n return {\n countries,\n sectors,\n subSectors,\n analysts,\n stages,\n funds,\n sources,\n ranks,\n opportunityTypes,\n };\n};\n\nexport default useGetFilterData;\n","import React, { useEffect, useState } from 'react';\nimport { Input } from 'antd';\nimport { useField } from 'formik';\nimport { isEqual } from 'lodash';\n// constants\nimport {\n numberRegExp,\n numberBigRegExp,\n numberBigRegExpEndingDot,\n regexAbbreviation,\n} from '@constants/regex';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { numberToMillions } from '@optx/utils/number';\n\ninterface InputNumberFieldProps {\n id: string;\n value: string | number;\n}\n\nconst InputNumberField: React.FC<InputNumberFieldProps> = ({ id, value }) => {\n const [field, , fieldHelpers] = useField<number | string | null>(id);\n const [amount, setAmount] = useState<string>(' ');\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value: inputValue } = e.target;\n\n if (id === 'etCheck') {\n if (\n numberBigRegExp.test(inputValue) ||\n inputValue === '' ||\n inputValue === DEFAULT_EMPTY_VALUE ||\n regexAbbreviation.test(inputValue)\n ) {\n const isInputValueAbbreviated = regexAbbreviation.test(inputValue);\n setAmount(isNaN(parseInt(inputValue)) && !isInputValueAbbreviated ? '' : inputValue);\n } else if (numberBigRegExpEndingDot.test(inputValue)) {\n setAmount(inputValue);\n }\n } else {\n if (\n numberRegExp.test(inputValue) ||\n regexAbbreviation.test(inputValue) ||\n inputValue === ''\n ) {\n setAmount(inputValue);\n }\n }\n };\n\n useEffect(() => {\n if (id === 'etCheck') {\n setAmount(\n field.value === null || isNaN(Number(field.value))\n ? ''\n : (Number(field.value)! / 1000000).toString()\n );\n } else {\n setAmount(field.value ? String(field.value) : '');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n useEffect(() => {\n if (id === 'etCheck') {\n const normalizedAmount = typeof amount === 'string' ? amount : '';\n\n if (amount && numberBigRegExp.test(amount)) {\n if (!isEqual(field.value, Number(numberToMillions(amount).toFixed(2)))) {\n fieldHelpers.setValue(Number(numberToMillions(amount).toFixed(2)), true);\n }\n } else if (amount && numberBigRegExpEndingDot.test(amount)) {\n const amountRemovedDot = amount.slice(0, -1);\n fieldHelpers.setValue(Number(numberToMillions(amountRemovedDot).toFixed(2)));\n } else if (amount === '' || amount === DEFAULT_EMPTY_VALUE) {\n if (field.value !== null) {\n fieldHelpers.setValue(null);\n }\n } else if (regexAbbreviation.test(normalizedAmount)) {\n fieldHelpers.setValue(amount);\n } else {\n fieldHelpers.setValue(Number(amount));\n }\n } else {\n if (typeof amount === 'string' && regexAbbreviation.test(amount)) {\n fieldHelpers.setValue(amount);\n } else {\n fieldHelpers.setValue(Number(amount));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [amount]);\n\n useEffect(() => {\n if (field.value) {\n const fieldValue = field.value;\n const fieldValueAsStr = typeof fieldValue === 'string' ? fieldValue : '';\n\n let newAmount;\n\n if (id === 'etCheck') {\n if (isNaN(fieldValue as number) && !regexAbbreviation.test(fieldValueAsStr as string)) {\n newAmount = '';\n } else if (regexAbbreviation.test(fieldValueAsStr as string)) {\n newAmount = fieldValueAsStr;\n } else {\n newAmount = (Number(fieldValue)! / 1000000).toString();\n }\n } else {\n newAmount = fieldValue.toString();\n }\n\n if (newAmount !== amount) {\n setAmount(newAmount as string);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [field.value]);\n\n return (\n <Input\n value={amount ?? ''}\n onChange={handleChange}\n placeholder=\"\"\n name={id}\n onBlur={() => {\n setTimeout(() => {\n fieldHelpers.setTouched(true, true);\n });\n }}\n />\n );\n};\n\nexport default React.memo(InputNumberField);\n","import React from 'react';\nimport { components as DefaultComponents } from 'react-select';\nimport { DownOutlined, SearchOutlined } from '@ant-design/icons';\n\nconst DropdownIndicator = (props: any) => {\n return (\n <DefaultComponents.DropdownIndicator {...props}>\n {props.selectProps.menuIsOpen ? <SearchOutlined /> : <DownOutlined />}\n </DefaultComponents.DropdownIndicator>\n );\n};\n\nexport default React.memo(DropdownIndicator);\n","import styled from 'styled-components';\nimport { Dropdown, Menu } from 'antd';\n// utils\nimport { styledColors } from '@optx/utils/theme/colors';\n\nconst DropdownWrapper = styled(Dropdown)`\n text-align: left;\n display: inline-block;\n background-color: #ffffff;\n border: 1px solid #d9d9d9;\n box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.0015);\n border-radius: 2px;\n padding: 0px 5px;\n width: 100%;\n overflow: hidden;\n\n &.ant-btn:focus .anticon-down,\n &.ant-btn:active .anticon-down,\n .anticon-down {\n position: absolute;\n right: 10px;\n top: 50%;\n transform: translateY(-50%);\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px !important;\n }\n`;\n\nconst TriggerWrapper = styled.div`\n color: ${styledColors.gray8};\n display: flex;\n position: relative;\n\n .rc-overflow {\n align-items: center;\n }\n .rc-overflow-item {\n max-width: 110px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &:nth-last-child(2) {\n div .comma {\n display: none;\n }\n }\n }\n\n .option-label {\n margin: 0 8px 0 0;\n padding: 4px 0;\n display: inline;\n }\n\n .more-label {\n margin: 0 2px 0 0px;\n padding: 4px 8px;\n }\n`;\n\nconst MenuWrapper = styled(Menu)`\n width: 500px;\n padding: 10px 20px;\n\n .ant-card-meta-detail {\n overflow: visible;\n }\n\n .ant-input-number-handler-wrap {\n display: none;\n }\n\n .company_owner_id--multiselect,\n .stage--multiselect {\n width: 260px;\n margin-right: 135px;\n }\n\n .ant-card-bordered {\n border: 0;\n }\n\n .form-item-wrapper + .ant-row {\n max-width: calc(100% - 190px);\n }\n\n .menu-buttons-wrapper {\n padding: 10px 0;\n\n button {\n margin-right: 8px;\n }\n }\n\n .touch--multiselect-async-wrapper {\n width: 100%;\n }\n\n .multiselect-async-creatable-wrapper {\n width: auto;\n margin-right: 160px;\n }\n\n .touch--multiselect-async {\n .multiselect__menu {\n position: absolute;\n margin: 0;\n }\n\n .multiselect__control,\n .multiselect__value-container {\n height: 32px;\n min-height: 32px;\n }\n\n .anticon-search {\n margin-top: -3px;\n }\n }\n`;\n\nexport const Styled = {\n DropdownWrapper,\n TriggerWrapper,\n MenuWrapper,\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from 'formik';\nimport { Button, Row, Typography } from 'antd';\nimport Overflow from 'rc-overflow';\nimport { DownOutlined } from '@ant-design/icons';\nimport { debounce, isEqual } from 'lodash';\n// models\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { SEARCH_MINIMUM_CHAR_COUNT } from '@optx/constants/search';\n// hooks\nimport useLoadOptions from '../../hooks/useLoadOptions';\n// components\nimport AsyncMultiSelect from '@optx/shared/view/molecules/Select/AsyncMultiSelect';\n// styled\nimport { Styled } from './ProductCategoryField.styled';\n\n// is_valid may be a property on loaded option but will not be kept on selected (we don't always have it)\n// isValid will be kept on selected and it's value should be set based on is_valid field existence/value\ninterface AsyncSelectOption extends SelectOption {\n is_valid?: boolean;\n isValid?: boolean;\n}\n\nconst ProductCategoryMultiSelectAsyncField: React.FC = () => {\n const [selectedList, , setSelectedList] = useField<AsyncSelectOption[]>('productCategory');\n const [selected, setSelected] = useState<AsyncSelectOption[]>([]);\n const [selectedOptions, setSelectedOptions] = useState<AsyncSelectOption[]>([]);\n const [fetchedOptions, setFetchedOptions] = useState<AsyncSelectOption[]>([]);\n const [isVisible, setIsVisible] = useState(false);\n const [filterTagValues, setFilterTagValues] = useState<AsyncSelectOption[]>(selectedList.value);\n const [applyDisabled, setApplyDisabled] = useState(true);\n\n const { loadProductCategoryOptions } = useLoadOptions();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleAsyncSearch = useCallback(\n debounce((query: string, callback: (options: SelectOption[]) => void) => {\n if (query.length >= SEARCH_MINIMUM_CHAR_COUNT) {\n loadProductCategoryOptions(query, options => {\n options.unshift();\n setFetchedOptions(options);\n callback(options);\n });\n } else {\n callback([]);\n }\n }, 300),\n []\n );\n\n useEffect(() => {\n if (selected.values.length !== 0) {\n setSelectedOptions(selected.values as any);\n } else {\n setSelectedOptions(selectedList.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setSelectedOptions(selected.map(item => ({ ...item, isValid: item.is_valid ?? true })));\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selected]);\n\n const handleCancel = () => {\n setIsVisible(false);\n setSelectedOptions(selected);\n setApplyDisabled(true);\n };\n\n const handleApply = () => {\n const selectedValue = selectedOptions.map(item => ({\n ...item,\n isValid: item.is_valid ?? true,\n }));\n\n setIsVisible(false);\n\n setSelected(selectedValue);\n setSelectedList.setValue(selectedValue);\n setFilterTagValues(selectedValue);\n setApplyDisabled(true);\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLUListElement>) => {\n if (event.key === 'Enter') {\n handleApply();\n }\n };\n\n const handleSelectChange = (value: SelectOption[]) => {\n setSelectedOptions(value);\n setApplyDisabled(false);\n };\n\n useEffect(() => {\n if (isVisible && !isEqual(selectedOptions, selectedList.value)) {\n setSelectedOptions(selectedList.value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isVisible]);\n\n const menu = (\n <Styled.MenuWrapper onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n <div>\n <Row className=\"form-item-wrapper\" gutter={[0, 0]}>\n <Typography.Text>Product Category</Typography.Text>\n </Row>\n <Row>\n <div role=\"presentation\" className=\"touch--multiselect-async-wrapper\">\n <AsyncMultiSelect\n className=\"touch--multiselect-async\"\n onChange={options => {\n handleSelectChange(options as SelectOption[]);\n }}\n loadOptions={handleAsyncSearch}\n defaultOptions={fetchedOptions}\n autoFocus\n defaultValue={selectedOptions}\n onMenuOpen={() => setFetchedOptions([])}\n loadingMessage={({ inputValue }) =>\n inputValue.length > 2 ? 'Loading...' : 'Begin typing'\n }\n />\n </div>\n </Row>\n <Row justify=\"end\" className=\"menu-buttons-wrapper\">\n <Button style={{ marginRight: 8 }} onClick={handleCancel}>\n Cancel\n </Button>\n <Button type=\"primary\" onClick={handleApply} disabled={applyDisabled}>\n Apply\n </Button>\n </Row>\n </div>\n </Styled.MenuWrapper>\n );\n\n return (\n <Styled.DropdownWrapper\n visible={isVisible}\n onVisibleChange={flag => {\n !flag ? handleCancel() : setIsVisible(flag);\n }}\n overlay={menu}\n trigger={['click']}\n placement=\"topRight\"\n >\n <Button>\n <Styled.TriggerWrapper>\n <Overflow\n data={\n filterTagValues &&\n filterTagValues.map(item => ({\n label: item.label,\n value: item.value,\n uniqueKey: item.value,\n }))\n }\n renderItem={(item: SelectOption) => (\n <div className=\"option-label\">\n {item.label}\n <span className=\"comma\">,</span>\n </div>\n )}\n renderRest={items => <div className=\"more-label\">+ {items.length} more</div>}\n maxCount=\"responsive\"\n style={{ justifyContent: 'flex-start' }}\n />\n </Styled.TriggerWrapper>\n <DownOutlined />\n </Button>\n </Styled.DropdownWrapper>\n );\n};\n\nexport default React.memo(ProductCategoryMultiSelectAsyncField);\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { FieldHelperProps, FormikProps, useField } from 'formik';\nimport { Row, Col, Typography } from 'antd';\nimport { FormItem, Input, Select } from 'formik-antd';\nimport { ValueType } from 'react-select';\nimport { debounce } from 'lodash';\n// models\nimport { SelectOption } from '@models/Option';\nimport { FormValues } from '../models';\n// constants\nimport { SEARCH_MINIMUM_CHAR_COUNT } from '@constants/search';\nimport { FORM_INITIAL_VALUES } from '../constants';\n// hooks\nimport useLoadOptions from '../hooks/useLoadOptions';\nimport useGetFilterData from '../hooks/useGetFilterData';\n// components\nimport InputNumberField from './fields/InputNumberField';\nimport DropdownIndicator from './DropdownIndicator';\nimport AsyncSingleSelect from '@optx/shared/view/molecules/Select/AsyncSingleSelect';\nimport ProductCategoryField from './fields/ProductCategoryField';\n// styled\nimport { Styled } from './AddCompanyModal.styled';\n\nconst { Option } = Select;\n\ninterface Step3Props {\n formikProps: FormikProps<FormValues>;\n handleDisableNextButton: (disabled: boolean) => void;\n}\n\nconst areFieldsValid = (formikProps: FormikProps<FormValues>) => {\n const errors = formikProps.errors;\n\n if (\n errors.companyName ||\n errors.primaryUrl ||\n errors.primaryAddress ||\n errors.country ||\n errors.state ||\n errors.city ||\n errors.secondaryAddress ||\n errors.secondaryCountry ||\n errors.secondaryState ||\n errors.secondaryCity ||\n errors.sector\n )\n return false;\n\n return true;\n};\n\nconst resetField = (\n fieldValue: SelectOption | undefined,\n helper: FieldHelperProps<SelectOption | undefined>,\n initialValue: SelectOption\n) => {\n if (fieldValue) {\n helper.setValue(initialValue);\n }\n};\n\n/**\n * General Company Info.\n *\n * In Step 3 we handle some fields, including primary address (and secondary one too!).\n * Secondary address isn't available at the moment because of client's request, but it will be\n * in the future. When this happens, just uncomment some lines, the code is already there.\n */\nconst AddCompanyStep3: React.FC<Step3Props> = ({ formikProps, handleDisableNextButton }) => {\n // loaders\n const [isLoadingState, setIsLoadingState] = useState<boolean>(false);\n const [isLoadingCity, setIsLoadingCity] = useState<boolean>(false);\n const [isLoadingSecondaryState, setIsLoadingSecondaryState] = useState<boolean>(false);\n const [isLoadingSecondaryCity, setIsLoadingSecondaryCity] = useState<boolean>(false);\n\n const [hasSecondaryAddressField] = useField<boolean>('hasSecondaryAddress');\n const [cityField, , cityHelpers] = useField<SelectOption | undefined>('city');\n const [secondaryCityField, , secondaryCityHelpers] = useField<SelectOption | undefined>(\n 'secondaryCity'\n );\n const [stateField, , stateHelpers] = useField<SelectOption | undefined>('state');\n const [secondaryStateField, , secondaryStateHelpers] = useField<SelectOption | undefined>(\n 'secondaryState'\n );\n const [countryField, , countryHelpers] = useField<SelectOption | undefined>('country');\n const [secondaryCountryField, , secondaryCountryHelpers] = useField<SelectOption | undefined>(\n 'secondaryCountry'\n );\n const [sectorField, , sectorHelpers] = useField<SelectOption | undefined>('sector');\n const [subSectorField, , subSectorHelpers] = useField<SelectOption | undefined>('subSector');\n\n const { countries, sectors, subSectors } = useGetFilterData(3);\n\n const {\n loadPrimaryStateOptions,\n loadSecondaryStateOptions,\n loadPrimaryCityOptions,\n loadSecondaryCityOptions,\n } = useLoadOptions({ countryField, stateField, secondaryCountryField, secondaryStateField });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleAsyncSearch = useCallback(\n debounce(\n (\n query: string,\n callback: (options: SelectOption[]) => void,\n loadOptions: Function,\n setLoading: Function\n ) => {\n if (query.length >= SEARCH_MINIMUM_CHAR_COUNT) {\n setLoading(true);\n loadOptions(query, (options: SelectOption[]) => {\n options.unshift();\n setLoading(false);\n\n const mappedOptions = options.map((option: SelectOption) => ({\n label: option.label,\n value: option.value,\n }));\n\n callback(mappedOptions);\n });\n } else {\n callback([]);\n }\n },\n 300\n ),\n []\n );\n\n const handleStateAsyncSearch = (query: string, callback: (options: SelectOption[]) => void) => {\n if (countryField.value?.value) {\n handleAsyncSearch(query, callback, loadPrimaryStateOptions, setIsLoadingState);\n } else {\n setTimeout(() => callback([]), 1000);\n }\n };\n\n const handleSecondaryStateAsyncSearch = (\n query: string,\n callback: (options: SelectOption[]) => void\n ) => {\n if (countryField.value?.value) {\n handleAsyncSearch(query, callback, loadSecondaryStateOptions, setIsLoadingSecondaryState);\n } else {\n setTimeout(() => callback([]), 1000);\n }\n };\n\n const handleCityAsyncSearch = (query: string, callback: (options: SelectOption[]) => void) => {\n if (stateField.value?.value) {\n handleAsyncSearch(query, callback, loadPrimaryCityOptions, setIsLoadingCity);\n } else {\n setTimeout(() => callback([]), 1000);\n }\n };\n\n const handleSecondaryCityAsyncSearch = (\n query: string,\n callback: (options: SelectOption[]) => void\n ) => {\n if (secondaryStateField.value?.value) {\n handleAsyncSearch(query, callback, loadSecondaryCityOptions, setIsLoadingSecondaryCity);\n } else {\n setTimeout(() => callback([]), 1000);\n }\n };\n\n const handleCountrySelection = (val: string) => {\n resetField(stateField.value, stateHelpers, FORM_INITIAL_VALUES.state as SelectOption);\n resetField(cityField.value, cityHelpers, FORM_INITIAL_VALUES.city as SelectOption);\n resetField(\n secondaryStateField.value,\n secondaryStateHelpers,\n FORM_INITIAL_VALUES.secondaryState as SelectOption\n );\n resetField(\n secondaryCityField.value,\n secondaryCityHelpers,\n FORM_INITIAL_VALUES.secondaryCity as SelectOption\n );\n countryHelpers.setValue({ label: val, value: val });\n };\n\n useEffect(() => {\n handleDisableNextButton(!areFieldsValid(formikProps));\n }, [formikProps, handleDisableNextButton]);\n\n return (\n <Styled.Step3>\n <Row className=\"spacer-bottom\">\n <Col span={18}>\n <Typography.Text>Let's start with general company info.</Typography.Text>\n </Col>\n\n <Col span={6}>\n {/* \n Currently the button for adding another address is disabled since it is not supported. \n When this will be changed, please just re-enable the button, \n the functionality should be already implemented.\n */}\n\n {/* <Button\n className=\"add-address-button\"\n onClick={() => hasSecondaryAddressHelpers.setValue(true)}\n >\n <PlusOutlined className=\"plus-icon\" />\n Add Another Address\n </Button>\n */}\n </Col>\n </Row>\n\n <Row gutter={16}>\n <Col span={8}>\n <FormItem name=\"companyName\" label=\"Company Name\" required>\n <Input name=\"companyName\" />\n </FormItem>\n\n <FormItem name=\"alternativeName\" label=\"Alt Names (optional)\">\n <Input name=\"alternativeName\" />\n </FormItem>\n\n <FormItem name=\"primaryUrl\" label=\"Primary URL\" required>\n <Input name=\"primaryUrl\" disabled />\n </FormItem>\n\n <FormItem name=\"secondaryUrl\" label=\"Secondary URL (optional)\">\n <Input name=\"secondaryUrl\" />\n </FormItem>\n </Col>\n\n <Col span={8}>\n <FormItem name=\"primaryAddress\" label=\"Primary Address (optional)\">\n <Input name=\"primaryAddress\" />\n </FormItem>\n\n <FormItem name=\"primaryAddressSecondLine\" label=\"Primary Address Cont (optional)\">\n <Input name=\"primaryAddressSecondLine\" />\n </FormItem>\n\n <FormItem name={countryField.name} label=\"Country\" required>\n <Select\n name={countryField.name}\n value={countryField.value?.value}\n onChange={handleCountrySelection}\n showSearch\n >\n {countries.map((country, index) => (\n <Option key={index} value={country.value}>\n <Typography.Text>{country.label}</Typography.Text>\n </Option>\n ))}\n </Select>\n </FormItem>\n\n <FormItem name={stateField.name} label=\"State (optional)\">\n <AsyncSingleSelect\n className=\"async-single-select\"\n name={stateField.name}\n value={stateField.value}\n onChange={(val: ValueType<SelectOption>) =>\n stateHelpers.setValue(val as SelectOption)\n }\n loadOptions={handleStateAsyncSearch}\n placeholder=\"\"\n loading={isLoadingState}\n closeMenuOnSelect={true}\n blurInputOnSelect={true}\n controlShouldRenderValue={true}\n components={{ DropdownIndicator }}\n onBlur={() => {\n setTimeout(() => {\n stateHelpers.setTouched(true, true);\n }, 100);\n }}\n />\n </FormItem>\n\n <FormItem name={cityField.name} label=\"City (optional)\">\n <AsyncSingleSelect\n className=\"async-single-select\"\n value={cityField.value}\n onChange={(val: ValueType<SelectOption>) => cityHelpers.setValue(val as SelectOption)}\n loadOptions={handleCityAsyncSearch}\n placeholder=\"\"\n loading={isLoadingCity}\n closeMenuOnSelect={true}\n controlShouldRenderValue={true}\n blurInputOnSelect={true}\n components={{ DropdownIndicator }}\n onBlur={() => {\n setTimeout(() => {\n cityHelpers.setTouched(true, true);\n }, 100);\n }}\n />\n </FormItem>\n\n <FormItem name=\"zipCode\" label=\"Postal Code (optional)\">\n <Input name=\"zipCode\" />\n </FormItem>\n\n {hasSecondaryAddressField.value && (\n <>\n <FormItem name=\"secondaryAddress\" label=\"Secondary Address (optional)\">\n <Input name=\"secondaryAddress\" />\n </FormItem>\n\n <FormItem name=\"secondaryAddressSecondLine\" label=\"Secondary Address Cont (optional)\">\n <Input name=\"secondaryAddressSecondLine\" />\n </FormItem>\n\n <FormItem name={secondaryCountryField.name} label=\"Country\" required>\n <Select\n name={secondaryCountryField.name}\n value={secondaryCountryField.value?.value}\n getPopupContainer={trigger => trigger.parentElement!}\n onChange={(val: string) =>\n secondaryCountryHelpers.setValue({ label: val, value: val })\n }\n showSearch\n >\n {countries.map((country, index) => (\n <Option key={index} value={country.value}>\n <Typography.Text>{country.label}</Typography.Text>\n </Option>\n ))}\n </Select>\n </FormItem>\n\n <FormItem name={secondaryStateField.name} label=\"State (optional)\">\n <AsyncSingleSelect\n className=\"async-single-select\"\n name={secondaryStateField.name}\n value={secondaryStateField.value}\n onChange={(val: ValueType<SelectOption>) =>\n secondaryStateHelpers.setValue(val as SelectOption)\n }\n loadOptions={handleSecondaryStateAsyncSearch}\n placeholder=\"\"\n loading={isLoadingSecondaryState}\n closeMenuOnSelect={true}\n blurInputOnSelect={true}\n controlShouldRenderValue={true}\n components={{ DropdownIndicator }}\n onBlur={() => {\n setTimeout(() => {\n secondaryStateHelpers.setTouched(true, true);\n }, 100);\n }}\n />\n </FormItem>\n\n <FormItem name={secondaryCityField.name} label=\"City (optional)\">\n <AsyncSingleSelect\n className=\"async-single-select\"\n value={secondaryCityField.value}\n onChange={(val: ValueType<SelectOption>) =>\n secondaryCityHelpers.setValue(val as SelectOption)\n }\n loadOptions={handleSecondaryCityAsyncSearch}\n placeholder=\"\"\n loading={isLoadingSecondaryCity}\n closeMenuOnSelect={true}\n controlShouldRenderValue={true}\n blurInputOnSelect={true}\n components={{ DropdownIndicator }}\n onBlur={() => {\n setTimeout(() => {\n secondaryCityHelpers.setTouched(true, true);\n }, 100);\n }}\n />\n </FormItem>\n\n <FormItem name=\"secondaryZipCode\" label=\"Postal Code (optional)\">\n <Input name=\"secondaryZipCode\" />\n </FormItem>\n </>\n )}\n </Col>\n\n <Col span={8}>\n <FormItem name={sectorField.name} label=\"Sector\" required>\n <Select\n name={sectorField.name}\n value={sectorField.value?.value}\n onChange={(val: string) => sectorHelpers.setValue({ label: val, value: val })}\n showSearch\n >\n {sectors.map((sector, index) => (\n <Option key={index} value={sector.value}>\n <Typography.Text>{sector.label}</Typography.Text>\n </Option>\n ))}\n </Select>\n </FormItem>\n\n <FormItem name={subSectorField.name} label=\"Sub-Sector (optional)\">\n <Select\n name={subSectorField.name}\n value={subSectorField.value?.value}\n onChange={(val: string) => subSectorHelpers.setValue({ label: val, value: val })}\n showSearch\n >\n {subSectors.map((subSector, index) => (\n <Option key={index} value={subSector.value}>\n <Typography.Text>{subSector.label}</Typography.Text>\n </Option>\n ))}\n </Select>\n </FormItem>\n\n <FormItem name=\"productCategory\" label=\"Product Category (optional)\">\n <ProductCategoryField />\n </FormItem>\n\n <FormItem name=\"ftes\" label=\"Number of Employees (optional)\">\n <InputNumberField id=\"ftes\" value=\"\" />\n </FormItem>\n </Col>\n </Row>\n </Styled.Step3>\n );\n};\n\nexport default React.memo(AddCompanyStep3);\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { OptionTypeBase } from 'react-select';\nimport { Button, Col, Row, Typography } from 'antd';\nimport { useField } from 'formik';\nimport { Select } from 'formik-antd';\n// models\nimport { AppState } from '@optx/redux/interfaces';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { STAGE_RATIONALE_KEY } from '@optx/features/add-research-rationale/constants';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { showRationaleForStage } from '@optx/utils/helpers';\n// redux\nimport { getFormRationales } from '@optx/redux/company/filters/selectors';\n// hooks\nimport useGetFilterData from '../../hooks/useGetFilterData';\n// components\nimport RationaleSection from '@optx/features/company/edit-fields/components/RationaleSection';\n// styled\nimport { Styled } from '@optx/features/field-factory/RadioGroupField.styled';\n\nconst { Option } = Select;\n\nconst StageWithRationaleField = () => {\n const [stageField, , stageHelpers] = useField<SelectOption | undefined>('stage');\n const [stageRationaleField, , setStageRationaleFieldHelpers] = useField<string | null>(\n 'stageRationale'\n );\n const [oldStageValue, setOldStageValue] = useState<SelectOption | undefined>(stageField.value);\n const [rationaleBoxVisible, setRationaleBoxVisible] = useState<boolean>(\n showRationaleForStage(stageField.value?.label || '') && !stageRationaleField.value\n );\n const [selectedRationaleOption, setSelectedRationaleOption] = useState<string | null>(null);\n const [otherRationale, setOtherRationale] = useState<string | null>(null);\n const rationaleOptions = useSelector(\n (state: AppState) => getFormRationales(state, STAGE_RATIONALE_KEY) ?? []\n );\n const { stages } = useGetFilterData(4);\n\n const [stageLabel, setStageLabel] = useState<string>(stageField.value?.label || '');\n const selectedLabel = rationaleOptions.find(\n option => option.value === selectedRationaleOption\n )?.label;\n const label = selectedRationaleOption === null ? 'Not selected' : selectedLabel || 'Other';\n\n const handleRationaleChange = (value: string) => setSelectedRationaleOption(value);\n\n const showIsOtherOrTag = (key?: string) => {\n const values = rationaleOptions.map(option => option.value).slice(0, -1);\n const optionExists =\n selectedRationaleOption &&\n selectedRationaleOption !== DEFAULT_EMPTY_VALUE &&\n !values.includes(selectedRationaleOption);\n\n return key === 'tag'\n ? !!(optionExists && otherRationale)\n : !!(optionExists && selectedRationaleOption && selectedRationaleOption.length > 0);\n };\n\n const handleOtherChange = (newValue: string | null) => {\n setOtherRationale(newValue);\n setSelectedRationaleOption(newValue);\n };\n\n const handleRationaleSave = () => {\n setRationaleBoxVisible(false);\n\n const values = rationaleOptions.map(option => option.value).slice(0, -1);\n\n if (selectedRationaleOption && values.includes(selectedRationaleOption)) {\n setOtherRationale(null);\n }\n\n setStageRationaleFieldHelpers.setValue(selectedRationaleOption);\n };\n\n const handleRationaleCancel = () => {\n setSelectedRationaleOption(stageRationaleField.value);\n setRationaleBoxVisible(false);\n\n if (!stageRationaleField.value) {\n stageHelpers.setValue(oldStageValue);\n }\n };\n\n const handleStageSelectChange = (val: string) => {\n const stage = stages.find(stage => stage.value === val);\n\n if (stage) {\n setStageLabel(stage.label);\n setOldStageValue(stageField.value);\n setRationaleBoxVisible(showRationaleForStage(stage.label));\n setOtherRationale(null);\n setSelectedRationaleOption(null);\n setStageRationaleFieldHelpers.setValue(null);\n stageHelpers.setValue({ label: stage.label, value: stage.value });\n }\n };\n\n return (\n <>\n <Select\n name={stageField.name}\n value={stageField.value?.value}\n onChange={handleStageSelectChange}\n filterOption={(input: string, option: OptionTypeBase | undefined) => {\n const fullName = `${option?.children.props.children}`;\n\n return fullName.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n }}\n getPopupContainer={() => document.getElementById('step-4')!}\n showSearch\n >\n {stages.map((stage, index) => (\n <Option key={index} value={stage.value}>\n <Typography.Text>{stage.label}</Typography.Text>\n </Option>\n ))}\n </Select>\n {rationaleBoxVisible && (\n <Styled.ChangeRationaleWrapper positionedAbsolute>\n <Row gutter={[0, 0]}>\n <Col span={24}>\n <Row justify=\"space-between\" className=\"heading-wrapper\">\n <Col>\n {stageLabel?.length > 0 && (\n <div>\n <Typography.Title>\n Add {stageLabel} Rationale:{' '}\n <span className=\"required-label\">(Required) </span>\n </Typography.Title>\n </div>\n )}\n </Col>\n <Col>\n <Button onClick={handleRationaleCancel} className=\"cancel-btn\">\n Cancel\n </Button>\n <Button\n onClick={handleRationaleSave}\n className=\"save-rationale-btn\"\n disabled={!selectedRationaleOption}\n >\n Save\n </Button>\n </Col>\n </Row>\n <Row className=\"body-row\">\n <RationaleSection\n rationaleOptions={rationaleOptions}\n rationaleValue={label === 'Other' ? 'other' : selectedRationaleOption}\n otherRationaleValue={otherRationale}\n handleRationaleChange={handleRationaleChange}\n showIsOtherOrTag={showIsOtherOrTag}\n handleOtherChange={handleOtherChange}\n isFromTouch={true}\n isRationaleRequired={false}\n />\n </Row>\n </Col>\n </Row>\n </Styled.ChangeRationaleWrapper>\n )}\n </>\n );\n};\n\nexport default React.memo(StageWithRationaleField);\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from 'formik';\nimport { Button, Row, Typography } from 'antd';\nimport Overflow from 'rc-overflow';\nimport { DownOutlined } from '@ant-design/icons';\nimport { debounce, isEqual } from 'lodash';\n// models\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { SEARCH_MINIMUM_CHAR_COUNT } from '@optx/constants/search';\n// hooks\nimport useLoadOptions from '../../hooks/useLoadOptions';\n// components\nimport AsyncMultiSelect from '@optx/shared/view/molecules/Select/AsyncMultiSelect';\nimport DropdownIndicator from '../DropdownIndicator';\n// styled\nimport { Styled } from './ProductCategoryField.styled';\n\nconst AddonForFieldMultiSelectAsyncField: React.FC = () => {\n const [isAddonField] = useField<SelectOption<number> | null>('isAddon');\n const [addonFor, , addonForHelpers] = useField<SelectOption[]>('addonFor');\n\n const [selected, setSelected] = useState<SelectOption[]>(addonFor.value);\n const [selectedOptions, setSelectedOptions] = useState<SelectOption[]>([]);\n const [fetchedOptions, setFetchedOptions] = useState<SelectOption[]>([]);\n const [filterTagValues, setFilterTagValues] = useState<SelectOption[]>(addonFor.value);\n const [isVisible, setIsVisible] = useState(false);\n const [applyDisabled, setApplyDisabled] = useState(true);\n\n const { loadCompanyOptions } = useLoadOptions();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleAsyncSearch = useCallback(\n debounce((query: string, callback: (options: SelectOption[]) => void) => {\n if (query.length >= SEARCH_MINIMUM_CHAR_COUNT) {\n loadCompanyOptions(query, options => {\n options.unshift();\n setFetchedOptions(options);\n callback(options);\n });\n } else {\n callback([]);\n }\n }, 300),\n []\n );\n\n const handleCancel = useCallback(() => {\n setIsVisible(false);\n setSelectedOptions(selected);\n setApplyDisabled(true);\n }, [selected]);\n\n const handleApply = () => {\n setIsVisible(false);\n setSelected(selectedOptions);\n setTimeout(() => {\n addonForHelpers.setTouched(true, true);\n });\n setApplyDisabled(true);\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLUListElement>) => {\n if (event.key === 'Enter') {\n handleApply();\n }\n };\n\n const handleSelectChange = (value: SelectOption[]) => {\n const mappedOptions = value.map(option => ({\n ...option,\n label: option.value,\n }));\n\n setSelectedOptions(mappedOptions);\n setApplyDisabled(false);\n };\n\n useEffect(() => {\n setSelectedOptions(selected);\n setFilterTagValues(selected ?? []);\n\n if (!isEqual(selected, addonFor.value)) {\n addonForHelpers.setValue(selected);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selected]);\n\n useEffect(() => {\n if (isAddonField.value?.value === 0) {\n setSelectedOptions([]);\n setFilterTagValues([]);\n }\n }, [handleCancel, isAddonField.value?.value]);\n\n const menu = (\n <Styled.MenuWrapper onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n <div>\n <Row className=\"form-item-wrapper\" gutter={[0, 0]}>\n <Typography.Text>Add-on for</Typography.Text>\n </Row>\n <Row>\n <div role=\"presentation\" className=\"touch--multiselect-async-wrapper\">\n <AsyncMultiSelect\n name={addonFor.name}\n className=\"touch--multiselect-async\"\n onChange={options => {\n handleSelectChange(options as SelectOption[]);\n }}\n loadOptions={handleAsyncSearch}\n defaultOptions={fetchedOptions}\n defaultValue={selectedOptions}\n components={{ DropdownIndicator }}\n // addon values can repeat causing multiselect issues\n getOptionValue={(option: SelectOption) => option.id?.toString() || ''}\n onMenuOpen={() => setFetchedOptions([])}\n loadingMessage={({ inputValue }) =>\n inputValue.length > 2 ? 'Loading...' : 'Begin typing'\n }\n onBlur={() => addonForHelpers.setTouched(true, true)}\n />\n </div>\n </Row>\n <Row justify=\"end\" className=\"menu-buttons-wrapper\">\n <Button style={{ marginRight: 8 }} onClick={handleCancel}>\n Cancel\n </Button>\n <Button type=\"primary\" onClick={handleApply} disabled={applyDisabled}>\n Apply\n </Button>\n </Row>\n </div>\n </Styled.MenuWrapper>\n );\n\n return (\n <Styled.DropdownWrapper\n visible={isVisible}\n onVisibleChange={flag => {\n !flag ? handleCancel() : setIsVisible(flag);\n }}\n overlay={menu}\n trigger={['click']}\n placement=\"topRight\"\n disabled={isAddonField.value?.value === 0}\n >\n <Button>\n <Styled.TriggerWrapper>\n <Overflow\n data={\n filterTagValues &&\n filterTagValues.map(item => ({\n label: item.label,\n value: item.value,\n uniqueKey: item.value,\n }))\n }\n renderItem={(item: SelectOption) => (\n <div className=\"option-label\">\n {item.label}\n <span className=\"comma\">,</span>\n </div>\n )}\n renderRest={items => <div className=\"more-label\">+ {items.length} more</div>}\n maxCount=\"responsive\"\n style={{ justifyContent: 'flex-start' }}\n />\n </Styled.TriggerWrapper>\n <DownOutlined />\n </Button>\n </Styled.DropdownWrapper>\n );\n};\n\nexport default React.memo(AddonForFieldMultiSelectAsyncField);\n","import React, { useEffect } from 'react';\nimport { FormikProps, useField } from 'formik';\nimport { Row, Col, Typography } from 'antd';\nimport { FormItem, Input, Select } from 'formik-antd';\nimport { OptionTypeBase } from 'react-select';\n// models\nimport { FormValues } from '../models';\nimport { SelectOption } from '@models/Option';\n// hooks\nimport useGetFilterData from '../hooks/useGetFilterData';\n// components\nimport InputNumberField from './fields/InputNumberField';\nimport StageWithRationaleField from './fields/StageWithRationaleField';\n// styled\nimport { Styled } from './AddCompanyModal.styled';\nimport AddonForField from './fields/AddonForField';\n\nconst { Option } = Select;\nconst { TextArea } = Input;\n\ninterface Step4Props {\n formikProps: FormikProps<FormValues>;\n handleDisableNextButton: (disabled: boolean) => void;\n}\n\n/**\n * PSG Context.\n *\n * In Step 4 we handle the rest of the fields.\n */\nconst AddCompanyStep4: React.FC<Step4Props> = ({ formikProps, handleDisableNextButton }) => {\n const [companyOwnerField, , companyOwnerHelpers] = useField<SelectOption | undefined>(\n 'companyOwner'\n );\n const [rankField, , rankHelpers] = useField<SelectOption | undefined>('rank');\n const [sourceField, , sourceHelpers] = useField<SelectOption | undefined>('source');\n const [opportunityTypeField, , opportunityHelpers] = useField<SelectOption | undefined>(\n 'opportunityType'\n );\n const [fundField, , fundHelpers] = useField<SelectOption | undefined>('fund');\n const [isAddonField, , isAddonHelpers] = useField<SelectOption<number> | null>('isAddon');\n const [addonForField, , addonForHelpers] = useField<SelectOption[] | undefined>('addonFor');\n\n const { analysts, funds, ranks, sources, opportunityTypes } = useGetFilterData(4);\n\n useEffect(() => {\n // since we're on the last step, just check if there's no error\n if (Object.keys(formikProps.errors).length) handleDisableNextButton(true);\n else handleDisableNextButton(false);\n }, [formikProps, handleDisableNextButton]);\n\n return (\n <Styled.Step4>\n <Row className=\"spacer-bottom\">\n <Typography.Text>Now, let's add the PSG context.</Typography.Text>\n </Row>\n\n <Row gutter={16} id=\"step-4\">\n <Col span={8}>\n <FormItem name={companyOwnerField.name} label=\"Company Owner\" required>\n <Select\n name={companyOwnerField.name}\n value={companyOwnerField.value?.value}\n onChange={(val: string) => {\n const analyst = analysts.find(analyst => analyst.value === val);\n\n if (analyst) {\n companyOwnerHelpers.setValue({ label: analyst.label, value: analyst.value });\n }\n }}\n filterOption={(input: string, option: OptionTypeBase | undefined) => {\n const fullName = `${option?.children.props.children}`;\n\n return fullName.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n }}\n showSearch\n >\n {analysts.map((analyst, index) => (\n <Option key={index} value={analyst.value}>\n <Typography.Text>{analyst.label}</Typography.Text>\n </Option>\n ))}\n </Select>\n </FormItem>\n\n <FormItem name=\"stage\" label=\"Stage\" required>\n <StageWithRationaleField />\n </FormItem>\n\n <FormItem name={rankField.name} label=\"Pipeline Rank (optional)\">\n <Select\n name={rankField.name}\n value={rankField.value?.value}\n onChange={(val: string) => {\n const rank = ranks.find(rank => rank.value === val);\n\n if (rank) {\n rankHelpers.setValue({ label: rank.label, value: rank.value });\n }\n }}\n filterOption={(input: string, option: OptionTypeBase | undefined) => {\n const fullName = `${option?.children.props.children}`;\n\n return fullName.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n }}\n showSearch\n >\n {ranks.map((rank, index) => (\n <Option key={index} value={rank.value}>\n <Typography.Text>{rank.label}</Typography.Text>\n </Option>\n ))}\n </Select>\n </FormItem>\n\n <FormItem name={sourceField.name} label=\"Lead Source (optional)\">\n <Select\n name={sourceField.name}\n value={sourceField.value?.value}\n onChange={(val: string) => {\n const source = sources.find(source => source.value === val);\n\n if (source) {\n sourceHelpers.setValue({ label: source.label, value: source.value });\n }\n }}\n filterOption={(input: string, option: OptionTypeBase | undefined) => {\n const fullName = `${option?.children.props.children}`;\n\n return fullName.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n }}\n showSearch\n >\n {sources.map((source, index) => (\n <Option key={index} value={source.value}>\n <Typography.Text>{source.label}</Typography.Text>\n </Option>\n ))}\n </Select>\n </FormItem>\n\n <FormItem name=\"rationale\" label=\"Rationale (optional)\">\n <Input name=\"rationale\" />\n </FormItem>\n\n <FormItem name=\"opportunityType\" label=\"Opportunity Type\" required>\n <Select\n name={opportunityTypeField.name}\n value={opportunityTypeField.value?.value}\n onChange={(val: string) => opportunityHelpers.setValue({ label: val, value: val })}\n showSearch\n >\n {opportunityTypes.map((opportunityType, index) => (\n <Option key={index} value={opportunityType.value}>\n <Typography.Text>{opportunityType.label}</Typography.Text>\n </Option>\n ))}\n </Select>\n </FormItem>\n </Col>\n\n <Col span={16}>\n <Row gutter={16}>\n <Col span={12}>\n <FormItem name=\"etCheck\" label=\"Equity Check (in millions)\" required>\n <InputNumberField id=\"etCheck\" value=\"\" />\n </FormItem>\n\n <FormItem name={fundField.name} label=\"Fund\" required>\n <Select\n name={fundField.name}\n value={fundField.value?.value}\n onChange={(val: string) => {\n const fund = funds.find(fund => fund.value === val);\n\n if (fund) {\n fundHelpers.setValue({ label: fund.label, value: fund.value });\n }\n }}\n filterOption={(input: string, option: OptionTypeBase | undefined) => {\n const fullName = `${option?.children.props.children}`;\n\n return fullName.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n }}\n showSearch\n >\n {funds.map((fund, index) => (\n <Option key={index} value={fund.value}>\n <Typography.Text>{fund.label}</Typography.Text>\n </Option>\n ))}\n </Select>\n </FormItem>\n </Col>\n\n <Col span={12}>\n <FormItem name={isAddonField.name} label=\"Add-on (optional)\">\n <Select\n name={isAddonField.name}\n value={isAddonField.value?.value}\n onChange={(val: number) => {\n if (val === 0) {\n addonForHelpers.setValue([]);\n }\n\n isAddonHelpers.setValue({ label: val === 1 ? 'Yes' : 'No', value: val });\n }}\n >\n <Option value={1}>\n <Typography.Text>Yes</Typography.Text>\n </Option>\n\n <Option value={0}>\n <Typography.Text>No</Typography.Text>\n </Option>\n </Select>\n </FormItem>\n\n <FormItem\n name={addonForField.name}\n label=\"Add-on for\"\n required={isAddonField.value?.value === 1}\n >\n <AddonForField />\n </FormItem>\n </Col>\n </Row>\n\n <Row>\n <Col span={24}>\n <FormItem name=\"description\" label=\"Description\" required>\n <TextArea name=\"description\" rows={8} placeholder=\"Add a description\" />\n </FormItem>\n </Col>\n </Row>\n </Col>\n </Row>\n </Styled.Step4>\n );\n};\n\nexport default React.memo(AddCompanyStep4);\n","import React from 'react';\nimport { Row, Col, Typography, Button } from 'antd';\nimport { CheckCircleFilled } from '@ant-design/icons';\nimport { Link } from 'react-router-dom';\n// models\nimport { AddedCompany } from '../models';\n// constants\nimport { CompanyProfileTabs } from '@optx/constants/routes';\n// utils\nimport { getNewRoute } from '../utils';\n// components\nimport { Styled } from './AddCompanyModal.styled';\n\ninterface AddCompanyStepCompletedProps {\n addedCompany: AddedCompany;\n}\n\nconst AddCompanyStepCompleted: React.FC<AddCompanyStepCompletedProps> = ({ addedCompany }) => {\n const removeButtonFocus = (e: React.FocusEvent<HTMLAnchorElement>) => {\n if (e.target.classList.contains('ant-btn')) {\n setTimeout(() => e.target.blur());\n }\n };\n\n return (\n <Styled.StepCompleted>\n <Row className=\"spacer-bottom\">\n <Col span={24}>\n <CheckCircleFilled />\n </Col>\n </Row>\n\n <Row className=\"spacer-bottom\">\n <Col span={24}>\n <Typography.Title>\"{addedCompany.company_name}\" has been added</Typography.Title>\n <Typography.Text>\n It may take up to 5 minutes for the company to show in Equity Touch\n </Typography.Text>\n </Col>\n </Row>\n\n <Row className=\"spacer-bottom\">\n <Col span={24} className=\"spacer-bottom\">\n <Link\n to={() =>\n getNewRoute(\n addedCompany,\n { addContacts: true },\n `?tab=${CompanyProfileTabs.RELATIONSHIP_MANAGEMENT}&addContacts=true`\n )\n }\n onFocus={removeButtonFocus}\n >\n <Button>Add Contacts</Button>\n </Link>\n </Col>\n\n <Col span={24} className=\"spacer-bottom\">\n <Link\n to={() =>\n getNewRoute(\n addedCompany,\n { addTouch: true },\n `?tab=${CompanyProfileTabs.RELATIONSHIP_MANAGEMENT}&addTouch=true`\n )\n }\n onFocus={removeButtonFocus}\n >\n <Button>Add Touch</Button>\n </Link>\n </Col>\n\n <Col span={24} className=\"spacer-bottom\">\n <Link\n to={() =>\n getNewRoute(addedCompany, null, `?tab=${CompanyProfileTabs.PROPRIETARY_INFO}`)\n }\n onFocus={removeButtonFocus}\n >\n <Button>Add Proprietary Info</Button>\n </Link>\n </Col>\n\n <Col span={24} className=\"spacer-bottom\">\n <Link to={() => getNewRoute(addedCompany, null, '', true)} onFocus={removeButtonFocus}>\n <Button>Add to Sales Loft Cadence</Button>\n </Link>\n </Col>\n </Row>\n </Styled.StepCompleted>\n );\n};\n\nexport default React.memo(AddCompanyStepCompleted);\n","import React, { useState, useRef, useEffect, useMemo } from 'react';\nimport { Button, Typography } from 'antd';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Formik, Form, FormikProps } from 'formik';\nimport { useHistory } from 'react-router';\nimport { debounce } from 'lodash';\nimport * as Yup from 'yup';\n// models\nimport { FormValues } from '../models';\nimport { Option } from '@models/Option';\n// constants\nimport {\n FORM_INITIAL_VALUES,\n FORM_TOTAL_STEPS,\n MODAL_WRAPPER_TITLE,\n VIEW_AND_CLOSE,\n} from '../constants';\nimport { regexAbbreviation } from '@constants/regex';\n// utils\nimport validationSchema from '../utils/validation';\nimport { getCompanyProfileURL, resetHistoryState } from '@utils/routes';\nimport { getDataFromPlugin } from '../utils/';\nimport { parseNumberFromAbbreviation } from '@optx/utils/number';\n// redux\nimport { selectors, actions } from '@features/company/add-company';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport { selectors as companyFiltersSelectors } from '@redux/company/filters';\nimport { selectors as companySelectors } from '@components/feature/company-individual-edit/state';\n// components\nimport Step1 from './Step1';\nimport Step2 from './Step2';\nimport Step3 from './Step3';\nimport Step4 from './Step4';\nimport StepCompleted from './StepCompleted';\nimport FixedLoader from '@components/common/loader/FixedLoader';\nimport { Styled } from './AddCompanyModal.styled';\n\ninterface AddCompanyModalWrapperProps {\n visible: boolean;\n setIsVisible: (visibility: boolean) => void;\n showDropdown: (visibility: boolean) => void;\n}\n\nconst dataAndManagementFiltersIndex = 3;\n\n/**\n * This is the main wrapper for the add company modal, here we handle the steps\n */\nconst ModalWrapper: React.FC<AddCompanyModalWrapperProps> = ({\n visible,\n setIsVisible,\n showDropdown,\n}) => {\n const history = useHistory();\n const dispatch = useDispatch();\n\n const similarCompanies = useSelector(selectors.getSimilarCompanies);\n const addedCompany = useSelector(selectors.getAddedCompany);\n const isLoading = useSelector(selectors.isLoading);\n const urlData = useSelector(selectors.getUrlData);\n const userFullName = useSelector(userInformationSelectors.getFullName);\n const userId = useSelector(userInformationSelectors.getUserId);\n const userEtId = useSelector(userInformationSelectors.getUserEtId);\n const userRegion = useSelector(userInformationSelectors.getUserRegion);\n const filters = useSelector(companyFiltersSelectors.getCompanyFilters);\n const { fund } = useSelector(companySelectors.companyIndividualEdit.multipleOptions(['fund']));\n\n const formRef = useRef<FormikProps<FormValues> | null>(null);\n\n const { addCompany, companyUrl } = getDataFromPlugin();\n\n const [isNextButtonDisabled, setIsNextButtonDisabled] = useState<boolean>(true);\n const [isFormCompleted, setIsFormCompleted] = useState<boolean>(false);\n const [step, setStep] = useState<number>(1);\n const [moveForward, setMoveForward] = useState<boolean>(true);\n const [urlValidated, setUrlValidated] = useState<boolean>(false);\n const [shouldChangeStep, setShouldChangeStep] = useState<boolean>(false);\n\n const defaultFund: string = userRegion === 'EU' ? 'PSG Europe II' : 'PSG VI';\n const companyOwners = useMemo(\n () =>\n filters[dataAndManagementFiltersIndex]?.data.find(\n filter => filter.column === 'company_owner_id'\n )?.data ?? [],\n [filters]\n );\n\n const debouncedValidation = debounce((values, schema, setErrors) => {\n schema\n .validate(values, { abortEarly: true })\n .then(() => setErrors({}))\n .catch((err: Yup.ValidationError) => {\n const errors = err.inner.reduce(\n (acc: Record<string, string>, error) => ({\n ...acc,\n [error.path]: error.message,\n }),\n {}\n );\n setErrors(errors);\n });\n }, 100);\n\n const isUserCompanyOwner = companyOwners.some(\n (owner: Option<string>) => owner.name === userFullName\n );\n\n const companyOwnerInitialValues = {\n label: isUserCompanyOwner ? userFullName : '',\n value: isUserCompanyOwner ? String(userEtId ?? userId ?? 0) : '',\n };\n\n const formInitialValues: FormValues = {\n ...FORM_INITIAL_VALUES,\n companyOwner: companyOwnerInitialValues,\n fund: {\n label: defaultFund,\n value: defaultFund,\n },\n };\n\n const companyUrlFromPlugin = useRef(companyUrl);\n const addCompanyFromPlugin = useRef(addCompany);\n const initialVisibilityToggled = useRef(false);\n\n useEffect(() => {\n if (filters.length > 0 && !initialVisibilityToggled.current && addCompany) {\n initialVisibilityToggled.current = true;\n\n setIsVisible(true);\n showDropdown(false);\n resetHistoryState(history, null, null);\n setStep(3);\n }\n }, [addCompany, setIsVisible, showDropdown, history, filters]);\n\n useEffect(() => {\n if (step === 1 && urlValidated && urlData?.isValid && shouldChangeStep) {\n setStep(2);\n setMoveForward(true);\n }\n }, [urlData, urlValidated, step, shouldChangeStep]);\n\n const changeStep = (isNext: boolean) => {\n setShouldChangeStep(false);\n\n if ((step === 1 && urlValidated) || step >= 2) {\n setStep(isNext ? step + 1 : step - 1);\n }\n };\n\n const handleSecondaryButton = (shouldChangeStep: boolean) => {\n if (shouldChangeStep && !isFormCompleted) {\n changeStep(false);\n setMoveForward(false);\n } else {\n closeModal();\n }\n };\n\n const goToCompanyProfile = (companyId: number) => {\n history.push(getCompanyProfileURL(companyId));\n };\n\n const handlePrimaryButton = () => {\n if (urlData?.foundCompanyId && urlValidated) {\n goToCompanyProfile(urlData.foundCompanyId);\n } else {\n if (isFormCompleted && addedCompany) {\n goToCompanyProfile(addedCompany.company_id);\n } else {\n if (step === FORM_TOTAL_STEPS) {\n formRef.current?.submitForm();\n setIsFormCompleted(true);\n } else {\n changeStep(true);\n setMoveForward(true);\n }\n }\n }\n };\n\n // Triggers on final submit, when trying to add the company\n const handleSubmit = (values: FormValues) => {\n let fundValue;\n let etCheckValue = values.etCheck;\n let ftesValue = values.ftes;\n\n if (typeof values.fund!.value === 'string') {\n fundValue = fund!.find(item => item.label === values.fund!.value)!.value;\n } else {\n fundValue = values.fund!.value;\n }\n\n if (typeof values.etCheck === 'string' && regexAbbreviation.test(values.etCheck)) {\n etCheckValue = parseNumberFromAbbreviation(values.etCheck);\n }\n\n if (typeof values.ftes === 'string' && regexAbbreviation.test(values.ftes)) {\n ftesValue = parseNumberFromAbbreviation(values.ftes);\n }\n\n const companyData = {\n company_name: values.companyName,\n alt_names: values.alternativeName,\n company_url: values.primaryUrl,\n secondary_urls: values.secondaryUrl?.length ? [values.secondaryUrl] : [],\n primary_address: values.primaryAddress,\n primary_address_cont: values.primaryAddressSecondLine,\n secondary_address: values.secondaryAddress,\n secondary_address_cont: values.secondaryAddressSecondLine,\n country: values.country!.value,\n state: values.state!.value,\n city: values.city!.value,\n zip_code: values.zipCode,\n secondary_country: values.secondaryCountry?.value,\n secondary_state: values.secondaryState?.value,\n secondary_city: values.secondaryCity?.value,\n secondary_zip_code: values.secondaryZipCode,\n ftes: ftesValue,\n company_owner_id: values.companyOwner!.value,\n product_category: values.productCategory?.length\n ? values.productCategory.map(category => category.value)\n : null,\n rationale: values.rationale,\n equity_check: etCheckValue,\n addon: values.isAddon?.value === 1,\n addon_for: values.addonFor?.length ? values.addonFor.map(company => company.value) : [],\n description: values.description,\n opportunity_type: values.opportunityType!.value,\n stage: values.stage!.value,\n stage_rationale: values.stageRationale || '',\n rank: values.rank!.value === '' ? null : values.rank!.value,\n source: values.source!.value === '' ? null : values.source!.value,\n sector: values.sector!.value === 'blank' ? null : values.sector!.value,\n sub_sector:\n values.subSector!.value === '' || values.subSector!.value === 'blank'\n ? null\n : values.subSector!.value,\n fund: fundValue,\n };\n\n dispatch(actions.addCompany(companyData));\n };\n\n const closeModal = () => {\n setIsVisible(false);\n setStep(1);\n setIsFormCompleted(false);\n companyUrlFromPlugin.current = '';\n addCompanyFromPlugin.current = false;\n\n // Reset URL Data so it doesn't keep the previous one when opening the modal again\n dispatch(actions.resetUrlData());\n };\n\n return (\n <Styled.ModalWrapper\n title={MODAL_WRAPPER_TITLE}\n visible={visible}\n onCancel={closeModal}\n width={840}\n destroyOnClose\n maskClosable={false}\n footer={[\n <div className=\"left-container\">\n {step !== 1 && !isFormCompleted && (\n <Button key=\"back\" onClick={() => handleSecondaryButton(false)}>\n Cancel\n </Button>\n )}\n <Typography.Text className=\"additional-info\">\n {isFormCompleted ? 'Complete' : `Step ${step}/${FORM_TOTAL_STEPS}`}\n </Typography.Text>\n </div>,\n <div className=\"right-container\">\n {step === 2 && similarCompanies !== null && similarCompanies.length > 0 && (\n <Typography.Text className=\"additional-info proceed-text\">\n Proceed anyway?\n </Typography.Text>\n )}\n <Button key=\"back\" onClick={() => handleSecondaryButton(step !== 1)}>\n {isFormCompleted ? 'Close' : step === 1 ? 'Cancel' : 'Previous'}\n </Button>\n <Button\n key=\"submit\"\n type=\"primary\"\n className={step === 1 && !urlData?.foundCompanyId ? 'add-company-primary' : undefined}\n onClick={handlePrimaryButton}\n disabled={isNextButtonDisabled || (isFormCompleted && !addedCompany) || isLoading}\n >\n {urlData?.foundCompanyId && !urlData.isValid && urlValidated\n ? VIEW_AND_CLOSE\n : isFormCompleted\n ? 'Finish and View Company'\n : 'Next'}\n </Button>\n </div>,\n ]}\n >\n <Formik\n initialValues={formInitialValues}\n onSubmit={handleSubmit}\n validationSchema={validationSchema}\n validate={values => {\n return new Promise(resolve => {\n debouncedValidation(values, validationSchema, resolve);\n });\n }}\n innerRef={instance => {\n formRef.current = instance;\n }}\n >\n {formikProps => {\n if (\n !formikProps.values.primaryUrl &&\n addCompanyFromPlugin.current &&\n companyUrlFromPlugin.current\n )\n formikProps.setFieldValue('primaryUrl', companyUrlFromPlugin.current);\n\n return (\n <Form className=\"ant-form ant-form-vertical\">\n {!isFormCompleted && (\n <>\n {step === 1 && (\n <Step1\n formikProps={formikProps}\n handleDisableNextButton={setIsNextButtonDisabled}\n shouldGoToNextStep={() => setShouldChangeStep(true)}\n canGoToNextStep={setUrlValidated}\n />\n )}\n {step === 2 && (\n <Step2\n similarCompanies={similarCompanies}\n handleDisableNextButton={setIsNextButtonDisabled}\n changeStep={() => changeStep(moveForward)}\n shouldLoadCompanies={!isLoading}\n />\n )}\n {step === 3 && (\n <Step3\n formikProps={formikProps}\n handleDisableNextButton={setIsNextButtonDisabled}\n />\n )}\n {step === 4 && (\n <Step4\n formikProps={formikProps}\n handleDisableNextButton={setIsNextButtonDisabled}\n />\n )}\n </>\n )}\n\n {(isLoading || (isFormCompleted && !addedCompany)) && (\n <FixedLoader loading={isLoading} isAbsolute />\n )}\n\n {!isLoading && isFormCompleted && addedCompany && (\n <StepCompleted addedCompany={addedCompany} />\n )}\n </Form>\n );\n }}\n </Formik>\n </Styled.ModalWrapper>\n );\n};\n\nexport default React.memo(ModalWrapper);\n","import React, { useState } from 'react';\nimport { Dropdown, Button, Tooltip, Menu } from 'antd';\nimport { EllipsisOutlined } from '@ant-design/icons';\nimport { useSelector } from 'react-redux';\n// constants\nimport { ADD_NEW_COMPANY_MENU_TITLE } from '@constants/titles';\nimport { MODAL_WRAPPER_TITLE } from '@features/company/add-company/constants';\n// utils\nimport { getDataFromPlugin } from '@features/company/add-company/utils';\n// redux\nimport { selectors as companyFiltersSelectors } from '@redux/company/filters';\n// components\nimport { AddCompanyModalWrapper } from '@features/company/add-company/components';\n\ninterface ActionMenuProps {\n isEllipsisWhite?: boolean;\n}\n\n/**\n * Action Menu after the settings icon, this is different than the one from bulk companies.\n */\nconst ActionMenu: React.FC<ActionMenuProps> = ({ isEllipsisWhite }) => {\n const { addCompany } = getDataFromPlugin();\n const filters = useSelector(companyFiltersSelectors.getCompanyFilters);\n const shouldModalBeVisible = filters.length > 0 && addCompany;\n const [isDropdownVisible, setIsDropdownVisible] = useState<boolean>(shouldModalBeVisible);\n const [isAddCompanyModalVisible, setIsAddCompanyModalVisible] =\n useState<boolean>(shouldModalBeVisible);\n\n const openAddCompany = () => {\n setIsAddCompanyModalVisible(true);\n setIsDropdownVisible(false);\n };\n\n const menu = (\n <Menu>\n <Menu.Item key=\"add-company-menu\" onClick={openAddCompany}>\n {MODAL_WRAPPER_TITLE}\n </Menu.Item>\n </Menu>\n );\n\n return (\n <>\n <Tooltip title={ADD_NEW_COMPANY_MENU_TITLE} placement=\"topRight\">\n <Dropdown\n visible={isDropdownVisible && !isAddCompanyModalVisible}\n overlay={menu}\n trigger={['click']}\n onVisibleChange={setIsDropdownVisible}\n placement=\"bottomRight\"\n getPopupContainer={triggerNode => triggerNode.parentNode as HTMLElement}\n >\n <Button\n type=\"text\"\n icon={\n <EllipsisOutlined\n style={isEllipsisWhite ? { fontSize: 26, color: '#fff' } : { fontSize: 26 }}\n />\n }\n />\n </Dropdown>\n </Tooltip>\n\n <AddCompanyModalWrapper\n visible={isAddCompanyModalVisible}\n setIsVisible={setIsAddCompanyModalVisible}\n showDropdown={setIsDropdownVisible}\n />\n </>\n );\n};\n\nexport default React.memo(ActionMenu);\n","import { createSelector } from 'reselect';\nimport { isEmpty } from 'lodash';\nimport createCachedSelector from 're-reselect';\n// models\nimport { AppState } from '@optx/redux/interfaces';\n// redux\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { getSearchKey as searchKey } from '@optx/features/grid/searchkey/state/selectors';\nimport { getSearchCount as searchCount } from '@optx/features/grid/search-count/state/selectors';\n\nexport const getClearedFilterValue = createCachedSelector(\n filterSelectors.getClearedFilter('advancedSearch'),\n (state: AppState, column: string) => column,\n (state, column) => {\n return state[column];\n }\n)((state, column) => column);\n\nexport const getSearchKey = searchKey('advancedSearch');\n\n/**\n * Show if current search has seach term or a filter set.\n */\nexport const searchHasValues = createSelector(\n getSearchKey,\n filterSelectors.getFilter('advancedSearch'),\n (searchKey, filter) => !!searchKey || !isEmpty(filter)\n);\n\nexport const getSearchCount = searchCount('advancedSearch');\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\nimport { LogOutActionPayload } from '../interfaces';\n\nexport const logOut = createAction<LogOutActionPayload>(types.LOG_OUT);\n","export const LOG_OUT = 'auth/authentication/LOG_OUT';\n","export default \"data:image/png;base64,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\"","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport moment from 'moment';\nimport { Dictionary } from 'lodash';\n// models\nimport { EquityTouchFetchedField, UpdateCompanyET } from '@models/equityTouch';\nimport { SelectOption, SelectableOption } from '@models/Option';\nimport Company, { Addon, CompanyProfile, ProductCategory } from '@optx/models/Company';\nimport { UserInformation } from '@optx/models/user';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\nimport { CONTACT_SELECT_LIMIT } from '@optx/constants/contacts';\nimport { PRESENT_DATE_FORMAT, ISO_DATE_FORMAT } from '@optx/constants/format/date';\n// utils\nimport { getOptionLabel } from '@optx/utils/option';\n// redux\nimport { actions as salesloftBulkActions } from '@features/bulk-actions/salesloft';\nimport { actions as primaryContactActions } from '@redux/company/primary-contacts';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { actions as fetchPrimaryContactsActions } from '@redux/company/primary-contacts';\nimport { EquityTouchState } from './interfaces';\nimport * as actions from './actions';\nimport { fetchReducer, fetchSuccessReducer, fetchFailReducer } from '../../feature/fetch/reducers';\n\nexport const updateCompanyETData = (\n companyState: Company | CompanyProfile,\n payload: UpdateCompanyET\n) => {\n const {\n formValues,\n fieldsData: { stageOptions, rankOptions, sectorOptions, subSectorOptions, companyOwnerOptions },\n } = payload.updateData;\n const state = companyState;\n\n const addonFor = formValues['Add-On For'] as SelectableOption;\n const newDescription = formValues.Description as string;\n const ownerLabel = getOptionLabel(formValues['Deal Team Lead'] as string, companyOwnerOptions);\n const rankLabel = getOptionLabel(formValues.Rank as string, rankOptions);\n const sectorLabel = getOptionLabel(formValues.Sector as string, sectorOptions);\n const stageLabel = getOptionLabel(formValues.Stage as string, stageOptions);\n const subSectorLabel = getOptionLabel(formValues['Sub-Sector'] as string, subSectorOptions);\n\n if (addonFor) {\n state.addon = addonFor ? null : (addonFor as Addon);\n }\n\n if (state.addon_bool !== undefined) {\n state.addon_bool = !!formValues['Add-On'];\n }\n\n if (state.descriptions !== undefined && newDescription) {\n state.descriptions = { 'Equity Touch': newDescription, ...state.descriptions };\n }\n\n state.num_employees = (formValues.FTEs as number) || DEFAULT_CELL_VALUE;\n state.is_in_et = true;\n state.company_owner = (ownerLabel as string) || DEFAULT_CELL_VALUE;\n state.pipeline_rank = rankLabel || DEFAULT_CELL_VALUE;\n state.product_category =\n (formValues['Product Category'] as ProductCategory[]) || DEFAULT_CELL_VALUE;\n state.sector = (sectorLabel as string) || DEFAULT_CELL_VALUE;\n state.source_tag.push('et');\n state.stage = (stageLabel as string) || DEFAULT_CELL_VALUE;\n state.sub_sector = (subSectorLabel as string) || DEFAULT_CELL_VALUE;\n};\n\nconst initialState: EquityTouchState = {\n loading: false,\n error: '',\n data: {},\n formValues: {},\n temporaryFormValues: {},\n fetchedAt: '',\n};\n\nconst fetchEquityTouchFormDataSuccessReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<Dictionary<EquityTouchFetchedField>>\n> = (draftState, action) => {\n fetchSuccessReducer(draftState, action);\n draftState.fetchedAt = new Date().toISOString();\n};\n\nconst addToEquityTouchSuccessReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<Dictionary<string | number | boolean | number[] | string[] | null | SelectOption>>\n> = (draftState, action) => {\n draftState.formValues = action.payload;\n};\n\nconst updateEquityTouchSelectedContactsReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<number[]>\n> = (draftState, action) => {\n draftState.formValues.contacts = action.payload;\n};\n\nconst updateEquityTouchSelectedSalesLoftContactsReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<number[]>\n> = (draftState, action) => {\n draftState.formValues.salesloft_contacts = action.payload;\n};\n\nconst addContactSuccessReducer: CaseReducer<EquityTouchState, PayloadAction<any>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n\n if (action.payload.primary_contact) {\n let slContacts: any = draftState.formValues.salesloft_contacts;\n\n if (slContacts && Array.isArray(slContacts) && !slContacts.includes(action.payload.person_id)) {\n slContacts.push(action.payload.person_id);\n } else {\n slContacts = Array.isArray(slContacts) ? slContacts : [action.payload.person_id];\n }\n\n draftState.formValues.salesloft_contacts = slContacts;\n }\n\n const contacts = draftState.formValues.contacts as number[];\n contacts?.push(action.payload.person_id);\n\n const contactSelectedLimit = contacts?.slice(0, CONTACT_SELECT_LIMIT);\n\n draftState.formValues.contacts =\n contacts?.length >= CONTACT_SELECT_LIMIT ? contactSelectedLimit : contacts;\n\n const temporaryContacts = draftState.temporaryFormValues.contacts as number[];\n temporaryContacts?.push(action.payload.person_id);\n\n const temporaryContactsSelectedLimit = temporaryContacts?.slice(0, CONTACT_SELECT_LIMIT);\n\n draftState.temporaryFormValues.contacts =\n temporaryContacts?.length >= CONTACT_SELECT_LIMIT\n ? temporaryContactsSelectedLimit\n : temporaryContacts;\n\n draftState.loading = false;\n};\n\nconst fetchPrimaryContactsSuccessReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<Array<CompanyUserContact>>\n> = (draftState, action) => {\n draftState.loading = false;\n\n const primaryContact = action.payload.map(contact => ({\n ...contact,\n ...(contact.tenure_start_date && {\n tenure_start_date: moment(contact.tenure_start_date).format(ISO_DATE_FORMAT),\n }),\n ...(contact.tenure_end_date && {\n tenure_end_date:\n contact.tenure_end_date !== PRESENT_DATE_FORMAT\n ? moment(contact.tenure_end_date).format(ISO_DATE_FORMAT)\n : contact.tenure_end_date,\n }),\n }));\n\n const contacts = primaryContact?.map(contact => contact.person_id).filter(list => list !== null);\n\n if (draftState.formValues.contacts === undefined) {\n if (contacts.length >= CONTACT_SELECT_LIMIT) {\n const contactSelectedLimit = contacts.slice(0, CONTACT_SELECT_LIMIT);\n draftState.formValues.contacts = contactSelectedLimit as number[];\n } else {\n draftState.formValues.contacts = contacts as number[];\n }\n }\n\n if (draftState.temporaryFormValues.contacts === undefined) {\n if (contacts.length >= CONTACT_SELECT_LIMIT) {\n const contactSelectedLimit = contacts.slice(0, CONTACT_SELECT_LIMIT);\n draftState.temporaryFormValues.contacts = contactSelectedLimit as number[];\n } else {\n draftState.temporaryFormValues.contacts = contacts as number[];\n }\n }\n};\n\nconst updateTemporaryFormValuesReducer: CaseReducer<\n EquityTouchState,\n PayloadAction<Dictionary<string | number | boolean | number[] | string[] | null | SelectOption>>\n> = (draftState, action) => {\n draftState.temporaryFormValues = action.payload;\n};\n\nconst resetAddToEquityTouchReducer: CaseReducer<EquityTouchState> = draftState => {\n draftState.data = {};\n draftState.formValues = {};\n draftState.temporaryFormValues = {};\n draftState.fetchedAt = '';\n};\n\n// External reducers\n// Update persisted filter to be used when filters are loaded.\nconst fetchUserInformationSuccess: CaseReducer<EquityTouchState, PayloadAction<UserInformation>> = (\n draftState,\n action\n) => {\n const persistedFilter: any = action.payload.settings.session_settings\n ? action.payload.settings.session_settings?.et_form_auto_save\n : undefined;\n\n if (persistedFilter !== undefined && persistedFilter !== null) {\n const values = (persistedFilter?.values ?? {}) as Dictionary<\n string | number | boolean | number[] | string[] | null | SelectOption\n >;\n const formData = (persistedFilter?.formData ?? {}) as Dictionary<EquityTouchFetchedField>;\n draftState.data = formData;\n draftState.formValues = values;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchEquityTouchFormData, fetchReducer)\n .addCase(actions.fetchEquityTouchFormDataSuccess, fetchEquityTouchFormDataSuccessReducer)\n .addCase(\n fetchPrimaryContactsActions.fetchPrimaryContactsSuccess,\n fetchPrimaryContactsSuccessReducer\n )\n .addCase(actions.fetchEquityTouchFormDataFail, fetchFailReducer)\n .addCase(actions.addToEquityTouchSuccess, addToEquityTouchSuccessReducer)\n .addCase(actions.updateEquityTouchSelectedContacts, updateEquityTouchSelectedContactsReducer)\n .addCase(\n actions.updateEquityTouchSelectedSalesLoftContacts,\n updateEquityTouchSelectedSalesLoftContactsReducer\n )\n .addCase(actions.resetAddToEquityTouch, resetAddToEquityTouchReducer)\n .addCase(actions.updateTemporaryFormValues, updateTemporaryFormValuesReducer)\n .addCase(primaryContactActions.updatePrimaryContacts, addContactSuccessReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccess)\n .addCase(salesloftBulkActions.addContactSuccess, addContactSuccessReducer)\n);\n\nexport default reducer;\n","const TableCellBoolean = (value: boolean) => {\n return value ? 'Yes' : 'No';\n};\n\nexport default TableCellBoolean;\n","import { selectors as fetchSelectors } from '@redux/feature/fetch';\nimport { CompanyOwnerState } from './interfaces';\n\nexport const isLoading = (state: CompanyOwnerState) => fetchSelectors.isLoadingSelector(state);\n\nexport const getError = (state: CompanyOwnerState) => fetchSelectors.errorSelector(state);\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as types from './types';\nimport { EditCompanyRationale } from './interfaces';\n\nexport const addRationale = createFeatureAction<EditCompanyRationale>(\n featureName,\n types.ADD_COMPANY_RATIONALE\n);\n","export const ADD_COMPANY_RATIONALE = 'ADD_COMPANY_RATIONALE';\n","import React from 'react';\nimport { ColumnsType } from 'antd/lib/table';\n// models\nimport { SelectedCompanies } from '@optx/models/bulkActions';\nimport { CompanyKeys } from '@models/table/Columns';\n// components\nimport TableCellCompanyURL from '@components/common/table/AntTable/cells/TableCellCompanyURL';\nimport { TableCellDefault, TableCellCompanyName } from '@components/common/table/AntTable/cells';\n\ninterface CompanyColumnType extends ColumnsType<SelectedCompanies> {\n dataIndex?: CompanyKeys;\n}\n\nexport const BULK_MERGE_COMPANIES_COLUMNS: CompanyColumnType = [\n {\n dataIndex: 'company_url',\n title: '',\n className: 'company_url',\n render: (value: string | null, record: SelectedCompanies, index: number) => {\n return (\n <TableCellCompanyURL\n value={value}\n record={{ raw_url: record.raw_url || '', urlStatus: record.url_status }}\n />\n );\n },\n width: 42,\n fixed: 'left',\n align: 'center',\n },\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n render: TableCellCompanyName,\n },\n {\n dataIndex: 'location',\n title: 'Location',\n render: TableCellDefault,\n },\n {\n dataIndex: 'year_founded',\n title: 'Founded',\n render: TableCellDefault,\n },\n {\n dataIndex: 'company_id',\n title: 'OPTX ID',\n render: TableCellDefault,\n },\n];\n","import { AppState } from '@optx/redux/interfaces';\n\nexport const isOpen = (state: AppState) => state.ui.modals.saveSearch.isOpen;\nexport const getSavedSearchId = (state: AppState) => state.ui.modals.saveSearch.id;\n","import { useDispatch, useSelector } from 'react-redux';\n// redux\nimport { actions as auditTrailActions } from '@features/company/audit-trail/state';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\n// models\nimport { FieldValue } from '@features/company/audit-trail/state/interfaces';\n\ninterface HistoryTabFunction {\n updateHistoryFields: ({ afterValue, beforeValue, fieldChanged }: UpdateFieldsType) => void;\n}\ninterface UpdateFieldsType {\n afterValue: FieldValue;\n beforeValue: FieldValue;\n fieldChanged: string;\n dontShowName?: boolean;\n opinion?: string | null;\n}\n\nexport const useHistoryTab = (): HistoryTabFunction => {\n const dispatch = useDispatch();\n const fullName = useSelector(userInformationSelectors.getFullName);\n\n const updateHistoryFields = ({\n afterValue,\n beforeValue,\n fieldChanged,\n dontShowName,\n opinion,\n }: UpdateFieldsType) => {\n dispatch(\n auditTrailActions.editCompanyAuditTrailFields({\n after_value: afterValue,\n before_value: beforeValue,\n field_changed: fieldChanged,\n opinion: opinion ? opinion : undefined,\n user: dontShowName ? null : fullName,\n modified_at: new Date().toISOString(),\n internal: true,\n })\n );\n };\n\n return { updateHistoryFields };\n};\n","import React, { useState, useMemo, useEffect, useRef } from 'react';\nimport { Radio, Row, Typography, Col, Button } from 'antd';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport classnames from 'classnames';\n// models\nimport { AppState } from '@optx/redux/interfaces';\nimport { CompanyProfile, Company } from '@optx/models/Company';\nimport { ChartBarIntervalKeys } from '@optx/models/charts/data';\nimport { CompanyFormRationale } from '@models/filters';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport {\n getRationaleDefaultValue,\n getRangeValues,\n getValuesRalation,\n getRange,\n} from '@optx/utils/researchRationale';\n// redux\nimport { getFormRationales } from '@optx/redux/company/filters/selectors';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { sendNewOptxScoreRationale } from '@redux/company/score/actions';\n// hooks\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\n// components\nimport { TrendingLine } from '@optx/components/common/charts';\nimport { ScoreTrending } from '@optx/components/common/trending';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport CreateOtherRaionale from '@optx/features/company/edit-fields/components/CreateOtherRationale';\nimport { ReactComponent as LogoIcon } from '../../../../assets/svg/icons/logo.svg';\n// styles\nimport Styled from './EditFieldOPTX.styled';\n\nconst getRationaleReasonKey = (rationaleValue: string, score: number) => {\n const rangeValues = getRangeValues(rationaleValue);\n\n let scoreTransformed;\n\n if (typeof score !== 'number') {\n scoreTransformed = 'N/A';\n } else {\n scoreTransformed = score;\n }\n\n const scoreValuesRelation =\n typeof scoreTransformed !== 'string'\n ? getValuesRalation(rangeValues, score as number)\n : 'upper';\n\n return (\n // eslint-disable-next-line no-nested-ternary\n scoreValuesRelation === 'lower'\n ? 'optx_score_lower_rationales'\n : scoreValuesRelation === 'upper'\n ? 'optx_score_upper_rationales'\n : null\n );\n};\n\ninterface EditFieldNewOPTXProps {\n record: Company | CompanyProfile;\n children: React.ReactNode;\n isFromGrid?: boolean;\n}\nconst title = 'OPTX Score BETA';\n\nconst EditFieldNewOPTX: React.FC<EditFieldNewOPTXProps> = ({ record, children, isFromGrid }) => {\n const dispatch = useDispatch();\n const [closePopup, setClosePopup] = useState(false);\n const [period, setPeriod] = useState<ChartBarIntervalKeys>('1Y');\n const { pathname } = useLocation();\n const myCompaniesTrending = useSelector(searchSelectors.getTrending('myCompanies'));\n const searchTrending = useSelector(searchSelectors.getTrending('advancedSearch'));\n const watchlistTrending = useSelector(searchSelectors.getTrending('lists'));\n const popoverContentRef = useRef(null);\n const {\n score_v3: score,\n optx_score_v3_rationale: defaultRationaleScore,\n optx_score_v3_rationale_reason_type: defaultRationaleScoreReasonType,\n optx_score_v3_verified: defaultScoreVerified,\n optx_score_v3_rationale_reason: defaultRationaleReasonValue,\n } = record;\n const [radioValue, setRadioValue] = useState<boolean | undefined>(undefined);\n const [rationaleValue, setRationaleValue] = useState<string>(defaultRationaleScore as string);\n const [rationaleReasonValue, setRationaleReasonValue] = useState<string | null>(\n defaultRationaleReasonValue\n );\n\n const [rationaleReasonKey, setRationaleReasonKey] = useState<CompanyFormRationale | null>(null);\n const [disabledRange, setDisabledRange] = useState('none');\n const [isOptionsDisabled, setIsOptionsDisabled] = useState(false);\n\n const isSaveBtnDisabled = useMemo(() => {\n if (\n !radioValue &&\n (rationaleValue === undefined ||\n (rationaleValue === defaultRationaleScore &&\n rationaleReasonValue === defaultRationaleReasonValue))\n ) {\n return true;\n } else {\n return false;\n }\n }, [\n radioValue,\n rationaleValue,\n defaultRationaleScore,\n rationaleReasonValue,\n defaultRationaleReasonValue,\n ]);\n\n const rationaleOptions = useSelector((state: AppState) =>\n getFormRationales(state, 'optx_score_rationales')\n );\n\n const rationaleReasonOptions = useSelector((state: AppState) => {\n if (!rationaleReasonKey) {\n return null;\n }\n\n return getFormRationales(state, rationaleReasonKey);\n });\n\n useEffect(() => {\n setRationaleValue(defaultRationaleScore as string);\n }, [defaultRationaleScore]);\n\n useEffect(() => {\n setRadioValue(defaultScoreVerified === null ? undefined : defaultScoreVerified);\n }, [defaultScoreVerified]);\n\n useEffect(() => {\n setRationaleReasonValue(defaultRationaleReasonValue);\n }, [defaultRationaleReasonValue]);\n\n useEffect(() => {\n let reasonKey =\n // eslint-disable-next-line no-nested-ternary\n defaultRationaleScoreReasonType === 'lower'\n ? 'optx_score_lower_rationales'\n : defaultRationaleScoreReasonType === 'upper'\n ? 'optx_score_upper_rationales'\n : null;\n\n if (reasonKey === null && typeof rationaleValue === 'string') {\n reasonKey = getRationaleReasonKey(rationaleValue, score);\n }\n\n setRationaleReasonKey(reasonKey as CompanyFormRationale | null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultRationaleScoreReasonType]);\n\n const growth = () => {\n if (Object.prototype.hasOwnProperty.call(record, 'score_v3_growth')) {\n return isNaN(parseInt((record as Company).score_v3_growth ?? ''))\n ? null\n : Number((record as Company).score_v3_growth);\n }\n\n return null;\n };\n\n const showIsOtherOrTag = (key?: string) => {\n const values = rationaleReasonOptions?.map(option => option.value).slice(0, -1) || [];\n\n if (key === 'tag') {\n return (\n defaultRationaleReasonValue &&\n defaultRationaleReasonValue !== DEFAULT_EMPTY_VALUE &&\n defaultRationaleReasonValue !== null &&\n !values.includes(defaultRationaleReasonValue)\n );\n }\n\n if (!rationaleReasonValue) {\n return false;\n }\n\n return (\n !values.includes(rationaleReasonValue) &&\n rationaleReasonValue !== undefined &&\n rationaleReasonValue !== DEFAULT_EMPTY_VALUE &&\n rationaleReasonValue.length > 0\n );\n };\n\n const customRationaleReasonValue = showIsOtherOrTag() ? 'other' : rationaleReasonValue;\n\n const onChange = (e: RadioChangeEvent) => {\n setRadioValue(e.target.value);\n };\n\n const handleRationaleChange = (e: RadioChangeEvent) => {\n const reasonKey = getRationaleReasonKey(e.target.value, score);\n\n setRationaleReasonKey(reasonKey);\n\n setRationaleValue(e.target.value);\n setRationaleReasonValue(null);\n };\n\n const handleRationaleReasonChange = (e: RadioChangeEvent) => {\n setRationaleReasonValue(e.target.value);\n };\n\n const handleSave = () => {\n const rationaleReasonKeyTransformed =\n // eslint-disable-next-line no-nested-ternary\n rationaleReasonKey === 'optx_score_upper_rationales'\n ? 'upper'\n : rationaleReasonKey === 'optx_score_lower_rationales'\n ? 'lower'\n : null;\n\n dispatch(\n sendNewOptxScoreRationale({\n companyId: record.company_id,\n rationale: !radioValue ? rationaleValue : DEFAULT_EMPTY_VALUE,\n optxScoreVerified: radioValue === undefined ? null : radioValue,\n optxScoreRationaleReason: radioValue === true ? '' : rationaleReasonValue,\n optxScoreRationaleReasonType: radioValue === true ? '' : rationaleReasonKeyTransformed,\n scoreType: 'score_v3',\n })\n );\n setClosePopup(true);\n };\n\n const handleOtherChange = (option: React.SetStateAction<string | null>) => {\n setRationaleReasonValue(option);\n };\n\n const handleCancel = () => {\n setRadioValue(defaultScoreVerified !== null ? defaultScoreVerified : undefined);\n setRationaleValue(defaultRationaleScore as string);\n\n let reasonKey =\n // eslint-disable-next-line no-nested-ternary\n defaultRationaleScoreReasonType === 'lower'\n ? 'optx_score_lower_rationales'\n : defaultRationaleScoreReasonType === 'upper'\n ? 'optx_score_upper_rationales'\n : null;\n\n if (reasonKey === null && typeof defaultRationaleScore === 'string') {\n reasonKey = getRationaleReasonKey(defaultRationaleScore, score);\n }\n\n setRationaleReasonKey(reasonKey as CompanyFormRationale | null);\n setRationaleReasonValue(defaultRationaleReasonValue);\n setClosePopup(true);\n };\n\n useOnClickOutside(popoverContentRef, handleCancel);\n\n useEffect(() => {\n if (pathname.startsWith('/user-lists') || pathname.startsWith('/ss-lists')) {\n setPeriod(watchlistTrending);\n } else if (pathname.startsWith('/my-companies')) {\n setPeriod(myCompaniesTrending);\n } else {\n setPeriod(searchTrending);\n }\n }, [myCompaniesTrending, pathname, searchTrending, watchlistTrending]);\n\n useEffect(() => {\n const rangeValues =\n rationaleValue && rationaleValue.length > 1 ? getRangeValues(rationaleValue) : null;\n\n if (typeof score !== 'number') {\n setDisabledRange('none');\n } else {\n setDisabledRange(getRange(score));\n }\n\n if (\n rangeValues &&\n typeof score === 'number' &&\n getValuesRalation(rangeValues, score) === 'equal'\n ) {\n setIsOptionsDisabled(true);\n } else {\n setIsOptionsDisabled(false);\n }\n }, [score, rationaleValue]);\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n const content = (\n <Styled.ContentContainer\n ref={popoverContentRef}\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n >\n <Row>\n <Styled.ScoreContainer>\n <LogoIcon className=\"navigation-logo__icon\" />\n {record?.optx_score_v3_trends !== null ? (\n <TrendingLine points={record?.optx_score_v3_trends[period]} color=\"#52C41A\" />\n ) : null}\n <ScoreTrending\n score={typeof score !== 'number' ? 'N/A' : score}\n growth={growth()}\n isPSGCompany={record.is_psg_company}\n customFontSize=\"16px\"\n />\n </Styled.ScoreContainer>\n </Row>\n <Row className=\"profile-information__subtitle\">\n <Typography.Text>Do you agree with the score?</Typography.Text>\n <Radio.Group\n onChange={onChange}\n value={radioValue}\n className=\"d-flex\"\n style={{ gap: '5px', marginTop: '15px' }}\n >\n <Styled.RadioButton\n value\n className=\"d-block\"\n style={{ borderColor: '#52C41A' }}\n checked={radioValue}\n >\n <Styled.ThumbsUpIcon\n iconName=\"thumbs-up\"\n className=\"icon\"\n color=\"#F5222D\"\n checked={radioValue}\n />\n </Styled.RadioButton>\n <Styled.RadioButton value={false} style={{ borderColor: '#F5222D' }} checked={radioValue}>\n <Styled.ThumbsDownIcon iconName=\"thumbs-down\" className=\"icon\" checked={radioValue} />\n </Styled.RadioButton>\n </Radio.Group>\n </Row>\n {radioValue === false && (\n <div>\n <Row className=\"profile-information__subtitle flex-column\">\n <Typography.Text>What score would you assign?</Typography.Text>\n </Row>\n <Row>\n <Styled.CustomRadioGroup\n buttonStyle=\"solid\"\n onChange={handleRationaleChange}\n value={rationaleValue}\n columns={rationaleOptions?.length || 0}\n >\n {rationaleOptions?.map(option => (\n <Col\n key={option.value}\n style={{ textAlign: 'center', marginTop: 10, flexDirection: 'column' }}\n >\n <Styled.CustomRadio\n disabled={option.value === disabledRange}\n value={option.value}\n >\n {option.label}\n </Styled.CustomRadio>\n </Col>\n ))}\n </Styled.CustomRadioGroup>\n </Row>\n {rationaleReasonKey && rationaleReasonOptions && (\n <>\n <Row className=\"profile-information__subtitle\">\n <Typography.Text>\n {rationaleReasonKey.includes('upper')\n ? 'Why score should be higher? (optional)'\n : 'Why score should be lower? (optional)'}\n </Typography.Text>\n </Row>\n <Radio.Group\n disabled={isOptionsDisabled}\n buttonStyle=\"solid\"\n onChange={handleRationaleReasonChange}\n value={customRationaleReasonValue}\n >\n {rationaleReasonOptions?.map(option => (\n <Col\n key={option.value}\n style={{ textAlign: 'center', marginTop: 10, padding: 0 }}\n >\n <Radio.Button value={option.value}>{option.label}</Radio.Button>\n </Col>\n ))}\n </Radio.Group>\n {showIsOtherOrTag() && (\n <Row style={{ marginTop: 20, padding: 0, flexDirection: 'column' }}>\n <Typography.Text>Please Explain</Typography.Text>\n <CreateOtherRaionale\n onInputChange={handleOtherChange}\n isDisabled={isOptionsDisabled}\n />\n {showIsOtherOrTag('tag') && (\n <Styled.Tag color=\"blue\">{defaultRationaleReasonValue}</Styled.Tag>\n )}\n </Row>\n )}\n </>\n )}\n </div>\n )}\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSave}\n disabled={\n radioValue\n ? radioValue === getRationaleDefaultValue(defaultRationaleScore)\n : isSaveBtnDisabled\n }\n >\n Save\n </Button>\n </div>\n </Styled.ContentContainer>\n );\n\n return isFromGrid ? (\n <Styled.Wrapper\n className={classnames('edit-popover-wrapper', { 'psg-company': record.is_psg_company })}\n >\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n placement=\"bottom\"\n destroyOnHide\n >\n {children}\n </EditPopover>\n </Styled.Wrapper>\n ) : (\n <Styled.ContainerProfileBanner>\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n placement=\"bottom\"\n destroyOnHide\n >\n {children}\n </EditPopover>\n </Styled.ContainerProfileBanner>\n );\n};\n\nexport default React.memo(EditFieldNewOPTX);\n","import { createSelector } from 'reselect';\n//models\nimport { GridKeys } from '@optx/models/grid';\n//redux\nimport { selectFeatureState } from '../../selectFeature';\n\nexport const getSearchType = (gridKey: GridKeys) =>\n createSelector(selectFeatureState, state => state.searchType[gridKey]?.searchType);\n","export const SHARE_LIST = 'SHARE_LIST';\n","import { ColumnType } from 'antd/lib/table';\n// models\nimport { CompanyUserContact } from '@models/api/contacts';\n// constants\nimport { CONTACTS } from '@optx/constants/pendoActions';\n// services\nimport { CompanyService } from '@optx/services/api';\n// components\nimport { EditFieldText } from '@optx/features/company/edit-fields/components';\nimport {\n TableCellCompanyName,\n TableCellEmail,\n TableCellFormatNumber,\n TableCellDateInterval,\n TableCellCeoRating,\n} from '../AntTable/cells';\nimport TableCellBoolean from '../AntTable/cells/TableCellBoolean';\nimport { TableCellList } from '../TableContactInformation/cells';\nimport TableCellDefaultRender from '../AntTable/cells/TableCellDefault';\n\nconst columns: ColumnType<CompanyUserContact>[] = [\n {\n dataIndex: 'source_db',\n title: 'Source',\n className: 'source_db',\n sorter: true,\n render: TableCellDefaultRender,\n width: 100,\n },\n {\n dataIndex: 'first_name',\n title: 'First Name',\n className: 'first_name',\n sorter: true,\n render: TableCellDefaultRender,\n width: 120,\n },\n {\n dataIndex: 'last_name',\n title: 'Last Name',\n className: 'last_name',\n sorter: true,\n render: TableCellDefaultRender,\n width: 120,\n },\n {\n dataIndex: 'title',\n title: 'Title',\n className: 'title',\n sorter: true,\n render: TableCellDefaultRender,\n width: 150,\n },\n {\n dataIndex: 'ceo_approval',\n title: 'CEO Approval',\n className: 'ceo_approval',\n sorter: true,\n render: value => TableCellCeoRating(value, 'Not Rated'),\n width: 100,\n },\n {\n dataIndex: 'display_location',\n title: 'Location',\n className: 'display_location',\n sorter: true,\n render: TableCellDefaultRender,\n width: 150,\n },\n {\n dataIndex: 'company_name',\n title: 'Company',\n className: 'company_name',\n sorter: true,\n render: TableCellCompanyName,\n width: 200,\n },\n {\n dataIndex: 'tenure_start_date',\n title: 'Tenure',\n className: 'tenure_start_date align-center',\n sorter: true,\n render: TableCellDateInterval,\n width: 160,\n },\n {\n dataIndex: 'email',\n title: 'Email',\n className: 'email',\n render: TableCellEmail,\n width: 150,\n },\n {\n dataIndex: 'phone',\n title: 'Phone',\n className: 'phone',\n render: TableCellDefaultRender,\n width: 150,\n },\n {\n dataIndex: 'linkedin',\n title: 'LinkedIn Hyperlink',\n className: 'linkedin align-center',\n render: (value: string, record: CompanyUserContact) => (\n <EditFieldText\n value={value}\n record={record}\n fieldName=\"Linkedin Profile\"\n service={CompanyService.updateLinkedinURL}\n isFromGrid\n entityType=\"person\"\n isURL\n isContact\n successMessage=\"Contact linkedin value updated successfully\"\n actionPendo={`${CONTACTS}_EditLinkedinHyperlink`}\n />\n ),\n width: 100,\n },\n {\n dataIndex: 'cb_rank',\n title: 'Crunchbase Rank',\n className: 'cb_rank align-right',\n sorter: true,\n render: TableCellFormatNumber,\n width: 110,\n },\n {\n dataIndex: 'country_code',\n title: 'Country Code',\n className: 'country_code',\n sorter: true,\n render: TableCellDefaultRender,\n width: 100,\n },\n {\n dataIndex: 'state_code',\n title: 'State Code',\n className: 'state_code',\n sorter: true,\n render: TableCellDefaultRender,\n width: 100,\n },\n {\n dataIndex: 'city',\n title: 'City',\n className: 'city',\n sorter: true,\n render: TableCellDefaultRender,\n width: 100,\n },\n {\n dataIndex: 'portfolio_executive',\n title: 'Portfolio Executive',\n className: 'portfolio_executive',\n sorter: true,\n render: TableCellBoolean,\n width: 100,\n },\n {\n dataIndex: 'psg_function',\n title: 'PSG Function',\n className: 'psg_function',\n width: 150,\n sorter: true,\n render: (value: any, record: any, index: number) => (\n <TableCellList value={value} record={record} />\n ),\n ellipsis: true,\n },\n {\n dataIndex: 'slack_channel',\n title: 'Slack Channel',\n className: 'slack_channel',\n width: 150,\n sorter: true,\n render: (value: any, record: any, index: number) => (\n <TableCellList value={value} record={record} />\n ),\n ellipsis: true,\n },\n];\n\nexport default columns;\n","import { createSelector } from 'reselect';\n// models\nimport { CompanyCardState } from './interfaces';\n// constants\nimport { featureName } from '../featureName';\n// redux\nimport { errorSelector } from '@optx/redux/feature/fetch/selectors';\n\nconst getCompanyCardState = (state: Record<typeof featureName, CompanyCardState>) =>\n state[featureName];\n\nexport const shouldInitialFetch = createSelector(getCompanyCardState, state => !state.loading);\n\nexport const getError = createSelector(getCompanyCardState, errorSelector);\n\nexport const isLoading = createSelector(getCompanyCardState, state => state.loading);\n\nexport const getProfile = createSelector(getCompanyCardState, state => state?.data);\n\nexport const getTrending = createSelector(\n getCompanyCardState,\n state => state.data?.optx_score_trends\n);\n\nexport const getProfileContacts = createSelector(getCompanyCardState, state =>\n state.data ? state.data.contacts : []\n);\n\nexport const getPluginPrimaryContact = createSelector(\n getCompanyCardState,\n state => state.pluginPrimaryContact\n);\n","import { useEffect } from 'react';\n\nconst useShouldFetch = (\n shouldFetch: boolean,\n fetch: (...props: any) => void,\n ...fetchArgs: any\n) => {\n useEffect(() => {\n shouldFetch && fetch && fetch(...fetchArgs);\n }, [fetch, fetchArgs, shouldFetch]);\n};\n\nexport default useShouldFetch;\n","import React from 'react';\nimport { Spin } from 'antd';\nimport { SpinProps } from 'antd/es/spin';\nimport { LoadingOutlined } from '@ant-design/icons';\nimport { Styled } from './Loader.styles';\n\ninterface OverlayLoaderProps extends SpinProps {\n loading?: boolean;\n isOverlay?: boolean;\n}\nconst loadingIcon = <LoadingOutlined style={{ fontSize: 24 }} spin />;\n\nconst OverlayLoader: React.FC<OverlayLoaderProps> = ({ loading, isOverlay, ...rest }) => {\n if (loading) {\n return !isOverlay ? (\n <Styled.Overlay>\n <Spin {...rest} indicator={loadingIcon} />\n </Styled.Overlay>\n ) : (\n <Spin {...rest} indicator={loadingIcon} />\n );\n }\n\n return null;\n};\n\nOverlayLoader.defaultProps = {\n loading: false,\n};\n\nexport default OverlayLoader;\n","import { Tag } from 'antd';\n// components\nimport Icon from '@components/common/Icon';\n\nconst PoweredByAITag = () => {\n return (\n <Tag className=\"powered-by-ai-indicator\">\n <Icon iconName=\"artificial-intelligence\" style={{ fontSize: 16 }} />\n <span className=\"powered-by-ai-tag\">Powered by AI</span>\n </Tag>\n );\n};\n\nexport default PoweredByAITag;\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { NotificationPayload, PastDueUpcomingTouchesResponse } from '@optx/models/notifications';\nimport {\n TouchType,\n NotificationError,\n NotificationsResponse,\n SortTouchesNotificationsPayload,\n} from './interfaces';\nimport { initialState } from './reducer';\n// services\nimport { UserService, CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport * as types from './types';\nimport * as actions from './actions';\nimport * as constants from './constants';\nimport * as selectors from './selectors';\n\nconst { PAGE_SIZE } = constants;\n\nexport function* fetchAlertsSaga(data: NotificationPayload) {\n try {\n // @ts-ignore\n const res = yield call(\n UserService.getAlerts,\n data.history,\n data.pageNr,\n data.pageSize,\n data.sorting\n );\n\n if (res.data) {\n const previousPageNum: number = yield select(selectors.getAlertsPageNumber);\n const response: NotificationsResponse = {\n response: res.data.notifications,\n history: data.history!,\n pageNr: data.pageSize! > PAGE_SIZE ? previousPageNum : data.pageNr!,\n sorting: data.sorting!,\n newAlertCount: res.data.new_alert_count,\n roadmapUrl: res.data.roadmap_url,\n totalCount: res.data.total_count,\n };\n yield put(actions.fetchAlertsSuccess(response));\n } else {\n const errorMessage = 'Failed to fetch Alerts!';\n const err = {\n errorMessage,\n history: data.history,\n };\n yield put(actions.fetchAlertsFail(err));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n if (!error.request.responseText.includes('User is not a company owner')) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch Alerts!');\n const err = {\n errorMessage,\n history: data.history,\n };\n\n yield put(actions.fetchAlertsFail(err));\n NotificationService.error(errorMessage);\n }\n }\n}\n\nexport function* fetchAlertsHistorySaga() {\n const dataHistory: NotificationPayload = {\n history: true,\n pageNr: initialState.history.pageNr,\n pageSize: PAGE_SIZE,\n sorting: initialState.history.sorting,\n };\n\n yield call(fetchAlertsSaga, dataHistory);\n}\n\nexport function* fetchAlertsInboxSaga() {\n const previousPageNum: number = yield select(selectors.getAlertsPageNumber);\n const dataInbox: NotificationPayload = {\n history: false,\n pageNr: previousPageNum > 1 ? 1 : previousPageNum,\n pageSize: previousPageNum > 1 ? previousPageNum * PAGE_SIZE : PAGE_SIZE,\n sorting: initialState.inbox.sorting,\n };\n yield call(fetchAlertsSaga, dataInbox);\n}\n\nexport function* sortAlertsSaga(action: PayloadAction<NotificationPayload>) {\n const { history, sorting } = action.payload;\n const data = {\n history: history,\n pageNr: 1,\n pageSize: PAGE_SIZE,\n sorting: sorting,\n };\n\n yield call(fetchAlertsSaga, data);\n}\n\nexport function* loadMoreAlertsSaga(action: PayloadAction<NotificationPayload>) {\n const { history, pageNr, sorting } = action.payload;\n\n const data = {\n history,\n pageNr: pageNr! + 1,\n pageSize: PAGE_SIZE,\n sorting,\n };\n\n yield call(fetchAlertsSaga, data);\n}\n\nexport function* updateAlertsSaga(action: PayloadAction<Array<number>>) {\n try {\n yield call(UserService.updateAlerts, action.payload);\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to update Alerts!');\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* dismissAlertSaga(action: PayloadAction<number>) {\n try {\n yield call(UserService.dismissAlert, action.payload);\n yield put(actions.dismissAlertSuccess(action.payload));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to dismiss Alert!');\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* dismissAllAlertsSaga() {\n try {\n yield call(UserService.dismissAllAlerts);\n yield put(actions.dismissAllAlertSuccess());\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to dismiss All Alerts!');\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchUpcomingTouchesSaga() {\n try {\n const res: AxiosResponse<PastDueUpcomingTouchesResponse> = yield call(\n CompanyService.getUpcomingTouches\n );\n\n if (res.data) {\n yield put(\n actions.fetchTouchesSuccess({\n response: {\n upcomingTouches: res.data.upcoming_touches,\n pastdueTouches: res.data.pastdue_touches,\n },\n })\n );\n } else {\n const errorMessage = 'Failed to fetch Upcoming Touches!';\n const err = {\n errorMessage,\n };\n yield put(actions.fetchTouchesFail(err));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Get Upcoming Touches fail! Server error!');\n const err = {\n errorMessage,\n };\n yield put(actions.fetchTouchesFail(err));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* updateUpcomingTouches(action: PayloadAction<Array<number>>) {\n try {\n yield call(CompanyService.updateUpcomingTouches, action.payload);\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to update Upcoming Touches!');\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* sortUpcomingTouchesSaga(action: PayloadAction<SortTouchesNotificationsPayload>) {\n const { touchType, sorting } = action.payload;\n\n try {\n const res: AxiosResponse<PastDueUpcomingTouchesResponse> = yield call(\n CompanyService.sortUpcomingTouches,\n touchType,\n sorting\n );\n\n if (res.data) {\n yield put(\n actions.fetchTouchesSuccess({\n response: {\n upcomingTouches: res.data.upcoming_touches,\n pastdueTouches: res.data.pastdue_touches,\n },\n sorting,\n touchType: touchType,\n })\n );\n } else {\n const errorMessage = 'Failed to fetch Upcoming Touches!';\n const err = {\n errorMessage,\n };\n yield put(actions.fetchTouchesFail(err));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Get Upcoming Touches fail! Server error!');\n const err = {\n errorMessage,\n };\n yield put(actions.fetchTouchesFail(err));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* deleteUpcomingTouchSaga(action: PayloadAction<number>) {\n const upcomingTouchId = action.payload;\n\n try {\n const res: AxiosResponse<number> = yield call(CompanyService.deleteTouch, upcomingTouchId);\n\n if (res.data) {\n NotificationService.success('Delete Upcoming Touch success!');\n yield put(actions.deleteUpcomingTouchSuccess(upcomingTouchId));\n } else {\n const errorMessage = 'Delete Upcoming Touch fail!';\n const err = {\n errorMessage,\n };\n yield put(actions.deleteUpcomingTouchFail(err));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Delete Upcoming Touch fail! Server error!');\n const err = {\n errorMessage,\n };\n yield put(actions.deleteUpcomingTouchFail(err));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* deleteAllPastUpcomingTouchesSaga(action: PayloadAction<TouchType>) {\n const touchType = action.payload;\n\n const errorMessage =\n touchType === 'pastDue' ? 'Delete Past Due Touches fail!' : 'Delete Upcoming Touches fail!';\n\n try {\n const res: AxiosResponse<number> = yield call(\n CompanyService.deleteAllTouches,\n touchType === 'pastDue' ? 'past_due' : touchType\n );\n\n if (res.data) {\n const successMessage =\n touchType === 'pastDue'\n ? 'Delete Past Due Touches success!'\n : 'Delete Upcoming Touches success!';\n\n NotificationService.success(successMessage);\n yield put(actions.deleteAllPastUpcomingTouchesSuccess(touchType));\n } else {\n const err: NotificationError = {\n errorMessage,\n touchType,\n };\n yield put(actions.deleteAllPastUpcomingTouchesFail(err));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const err: NotificationError = {\n errorMessage,\n touchType,\n };\n yield put(actions.deleteAllPastUpcomingTouchesFail(err));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* deletePastDueTouchSaga(action: PayloadAction<number>) {\n const pastDueTouchId = action.payload;\n\n try {\n const res: AxiosResponse<number> = yield call(CompanyService.deleteTouch, pastDueTouchId);\n\n if (res.data) {\n NotificationService.success('Delete Past Due Touch success!');\n yield put(actions.deletePastDueTouchSuccess(pastDueTouchId));\n } else {\n const errorMessage = 'Delete Past Due Touch fail!';\n const err = {\n errorMessage,\n };\n yield put(actions.deletePastDueTouchFail(err));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Delete Past Due Touch fail! Server error!');\n const err = {\n errorMessage,\n };\n yield put(actions.deletePastDueTouchFail(err));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* alertsSaga() {\n yield takeLatest(types.FETCH_ALERTS_INBOX, fetchAlertsInboxSaga);\n yield takeLatest(types.FETCH_ALERTS_HISTORY, fetchAlertsHistorySaga);\n yield takeLatest(types.SORT_ALERTS, sortAlertsSaga);\n yield takeLatest(types.UPDATE_ALERTS, updateAlertsSaga);\n yield takeLatest(types.LOAD_MORE_ALERTS, loadMoreAlertsSaga);\n yield takeLatest(types.DISMISS_ALERT, dismissAlertSaga);\n yield takeLatest(types.FETCH_TOUCHES, fetchUpcomingTouchesSaga);\n yield takeLatest(types.UPDATE_TOUCHES, updateUpcomingTouches);\n yield takeLatest(types.SORT_UPCOMING_PAST_DUE_TOUCHES, sortUpcomingTouchesSaga);\n yield takeLatest(types.DELETE_UPCOMING_TOUCH, deleteUpcomingTouchSaga);\n yield takeLatest(types.DELETE_PAST_DUE_TOUCH, deletePastDueTouchSaga);\n yield takeLatest(types.DELETE_ALL_PAST_UPCOMING_TOUCHES, deleteAllPastUpcomingTouchesSaga);\n yield takeLatest(types.DISMISS_ALL_ALERTS, dismissAllAlertsSaga);\n}\n","import { Card } from 'antd';\nimport { CardProps } from 'antd/lib/card';\nimport styled, { css } from 'styled-components';\n\ntype CardSize = 'small';\n\ninterface StyledCardProps extends CardProps {\n $transparent?: boolean;\n $size?: CardSize;\n}\n\n/**\n * Get card border radius.\n * @param size border rasius size in px.\n */\nconst getBorderRadius = (size: number) => css`\n border-radius: ${size}px;\n /* Fix issue when hoverable active makes body lose border radius. */\n .ant-card-body {\n border-bottom-left-radius: ${size}px;\n border-bottom-right-radius: ${size}px;\n }\n`;\n\nconst StyledCard = styled(Card)<StyledCardProps>`\n box-shadow: 0px 0px 10px rgba(66, 17, 115, 0.06);\n\n ${props => {\n switch (props.$size) {\n case 'small':\n return getBorderRadius(6);\n default:\n return getBorderRadius(8);\n }\n }};\n\n background: ${props => (props.$transparent ? 'rgba(255, 255, 255, 0.85)' : '#ffffff')};\n`;\n\nexport default StyledCard;\n","import { combineReducers } from 'redux';\n// models\nimport { AnalytsLeaderboardState } from './interfaces';\n// redux\nimport filters from './filters';\nimport search from './search';\nimport touchesAcrossRegion from './touchesAcrossRegion';\nimport emailStatistics from './emailStatistics';\nimport smartTouchScore from './smartTouchScore';\nimport additionalStatistics from './additionalsStatistics';\nimport pipelineInformation from './pipeline-information';\n\nconst reducer = combineReducers<AnalytsLeaderboardState>({\n filters,\n search,\n touchesAcrossRegion,\n emailStatistics,\n smartTouchScore,\n additionalStatistics,\n pipelineInformation,\n});\n\nexport default reducer;\n","export default \"data:image/png;base64,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\"","import { SourcingOutreachColumnNamesKey } from '@optx/features/sourcing-outreach-summary';\n\nexport const LIST_OF_COLUMN_NAMES: { [K in SourcingOutreachColumnNamesKey]: string } = {\n calls: 'Calls Completed',\n companies_added: 'New Companies',\n companies_reached: 'Companies Touched',\n emails_sent: 'Emails Sent',\n past_due_touches: 'Companies with Incomplete Touches',\n qualified_opportunities_platform: 'Net New (QO)',\n stage_change: 'Stage Modified',\n stale_accounts: 'Stale Accounts',\n total_dtl: 'Owned Companies',\n stale_touches: 'Companies with Stale Touches',\n revived_touches: 'Revived',\n transferred_to_touches: 'Transferred To',\n transferred_from_touches: 'Transferred From',\n meetings: 'Meetings Completed',\n start_qo_touches: 'Start QO',\n end_qo_touches: 'End QO',\n number_touches: 'Touches',\n qualified_opportunities_addon: 'New Qualified Ops (Add-ons)',\n};\n","import { Select } from 'antd';\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport styled from 'styled-components';\nimport { SelectProps, SelectValue } from 'antd/lib/select';\nimport { useLocation } from 'react-router-dom';\n// models\nimport { SelectOption } from '@models/Option';\nimport { ChartBarIntervalKeys } from '@optx/models/charts/data';\n// utils\nimport { getLocationMainGridKey } from '@utils/grid';\n// redux\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\n// components\nimport {\n mapOptionsToLabeledValues,\n PrefixedSelectionItem,\n} from '@components/common/select/Select/PrefixedSelectionItem';\n\nconst StyledLabel = styled(PrefixedSelectionItem)`\n .prefixed-selection-item__label {\n color: #1890ff;\n }\n`;\n\nconst StyledOption = styled(Select.Option)`\n .prefixed-selection-item__label {\n color: rgba(0, 0, 0, 0.65);\n }\n`;\n\nconst CardViewSelect = ({ className, ...restProps }: SelectProps<SelectValue>) => {\n return <Select dropdownClassName={className} {...restProps} />;\n};\n\nconst StyledSelect = styled(CardViewSelect)`\n .prefixed-selection-item__label {\n color: rgba(0, 0, 0, 0.65);\n }\n`;\n\nconst touchTypes: Array<SelectOption> = [\n { label: 'Last 3 months', value: '3M' },\n { label: 'Last 6 months', value: '6M' },\n { label: 'Last year', value: '1Y' },\n { label: 'Last 2 years', value: '2Y' },\n { label: 'ALL', value: 'ALL' },\n];\n\nconst typesOptions = mapOptionsToLabeledValues('Trend Range: ', touchTypes, StyledLabel);\n\nconst TrendingControls = () => {\n const dispatch = useDispatch();\n const searchOutReachTrending = useSelector(searchSelectors.getTrending('outreachDetails'));\n const searchTrending = useSelector(searchSelectors.getTrending('advancedSearch'));\n const myCompaniesTrending = useSelector(searchSelectors.getTrending('myCompanies'));\n const listTrending = useSelector(searchSelectors.getTrending('lists'));\n const [value, setValue] = useState<ChartBarIntervalKeys>('1Y');\n const { pathname } = useLocation();\n\n useEffect(() => {\n if (pathname.startsWith('/user-lists') || pathname.startsWith('/ss-lists')) {\n if (listTrending !== value) {\n setValue(listTrending);\n }\n } else if (pathname.startsWith('/my-companies')) {\n if (myCompaniesTrending !== value) {\n setValue(myCompaniesTrending);\n }\n\n if (pathname.startsWith('/all-reports')) {\n if (searchOutReachTrending !== value) {\n setValue(searchOutReachTrending);\n }\n }\n } else if (searchTrending !== value) {\n setValue(searchTrending);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [listTrending, myCompaniesTrending, pathname, searchTrending]);\n\n const changeSorting = (value: SelectValue) => {\n const gridKey = getLocationMainGridKey();\n if (gridKey)\n dispatch(\n searchActions.updateTrending({\n gridKey,\n data: value as ChartBarIntervalKeys,\n })\n );\n\n setValue(value as ChartBarIntervalKeys);\n };\n\n const handleSelectValue = useCallback(() => {\n if (pathname.startsWith('/user-lists') || pathname.startsWith('/ss-lists')) {\n return listTrending;\n } else if (pathname.startsWith('/my-companies')) {\n return myCompaniesTrending;\n } else if (pathname.startsWith('/all-reports')) {\n return searchOutReachTrending;\n } else {\n return searchTrending;\n }\n }, [listTrending, myCompaniesTrending, pathname, searchOutReachTrending, searchTrending]);\n\n return (\n <StyledSelect onChange={changeSorting} bordered={false} value={handleSelectValue()}>\n {typesOptions.map(option => (\n <StyledOption key={option.value} value={option.value}>\n {option.label}\n </StyledOption>\n ))}\n </StyledSelect>\n );\n};\n\nexport default React.memo(TrendingControls);\n","import React, { FC, useEffect, useState } from 'react';\nimport { TrendingLine } from '@optx/components/common/charts';\nimport { useSelector } from 'react-redux';\nimport { RadioChangeEvent } from 'antd/lib/radio';\n// models\nimport Company from '@models/Company';\nimport { ChartBarIntervalKeys } from '@optx/models/charts/data';\nimport { ChangeFieldsPayload } from '@optx/features/add-research-rationale/state/interfaces';\n// constants\nimport { OPTX_SCORE_RATIONALE_KEY } from '@optx/features/add-research-rationale/constants';\n// utils\nimport { getIsPsgCompany } from '@utils/company';\n// redux\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as cardSelectors } from '@features/long-card/company-card';\n// components\nimport logoCompany from '@assets/images/logo-company.png';\nimport ScoreRationale from '@optx/features/add-research-rationale/components/rationale/ScoreRationale';\nimport * as Styled from '../AddResearchRationale.styles';\n\ntype OptxScoreRationaleProps = {\n company: Company;\n isShowingRationale?: boolean;\n onChange: (field?: ChangeFieldsPayload, rationale?: ChangeFieldsPayload) => void;\n defaultScore: string;\n};\n\nlet selectSelector: any;\n\nif (window.location.pathname.startsWith('/user-lists')) {\n selectSelector = searchSelectors.getTrending('lists');\n} else if (window.location.pathname.startsWith('/chrome-extension-new')) {\n selectSelector = cardSelectors.getTrending;\n} else if (window.location.pathname.startsWith('/my-companies')) {\n selectSelector = searchSelectors.getTrending('myCompanies');\n} else {\n selectSelector = searchSelectors.getTrending('advancedSearch');\n}\n\nconst OptxScoreRationale: FC<OptxScoreRationaleProps> = ({\n company,\n onChange,\n isShowingRationale,\n defaultScore,\n}) => {\n const [period, setPeriod] = useState<ChartBarIntervalKeys>('1Y');\n\n const trending: ChartBarIntervalKeys = useSelector(selectSelector);\n\n const isChromePlugin = window.location.pathname.startsWith('/chrome-extension');\n\n const trendKey = defaultScore === 'us' ? 'optx_score_trends' : 'il_optx_score_trends';\n\n useEffect(() => {\n if (typeof trending === 'string') {\n setPeriod(trending);\n }\n }, [trending]);\n\n const handleNanOptxScore = () => {\n const score = company[defaultScore === 'us' ? 'score' : 'il_optx_score'];\n\n if (typeof score !== 'number') {\n return 'N/A';\n }\n\n return score;\n };\n\n const handleRationaleChange = (e: RadioChangeEvent) => {\n onChange(undefined, { key: OPTX_SCORE_RATIONALE_KEY, value: e.target.value });\n };\n\n if (!company) {\n return null;\n }\n\n return (\n <Styled.OptxScoreContainer $isChromePlugin={isChromePlugin}>\n {isShowingRationale === false && (\n <Styled.OptxScoreContentGraphicContainer>\n <Styled.OptxScore>\n <Styled.Logo src={logoCompany} />\n\n <span>\n {company[trendKey] && (\n <TrendingLine\n points={company[trendKey]![period]}\n color=\"#1890FF\"\n svgWidth={130}\n svgHeight={130}\n />\n )}\n </span>\n\n {getIsPsgCompany(company) ? (\n <Styled.PSGCompanyLabel>PSG</Styled.PSGCompanyLabel>\n ) : (\n <Styled.OptxScoreNumber>{handleNanOptxScore()}</Styled.OptxScoreNumber>\n )}\n </Styled.OptxScore>\n </Styled.OptxScoreContentGraphicContainer>\n )}\n {isShowingRationale === true && (\n <>\n <Styled.ScoreRationaleDivider />\n <ScoreRationale\n handleRationaleChange={handleRationaleChange}\n normalizedScore={handleNanOptxScore()}\n />\n </>\n )}\n </Styled.OptxScoreContainer>\n );\n};\n\nexport default OptxScoreRationale;\n","import styled, { css } from 'styled-components';\nimport { Radio, Drawer, Collapse } from 'antd';\nimport { RadioGroupProps } from 'antd/lib/radio';\n\nexport const StyledDrawer = styled(Drawer)`\n & .ant-drawer-title {\n flex: 1;\n background-color: white;\n }\n`;\n\ninterface AddResearchRationaleProps {\n $isChromePlugin: boolean | undefined;\n}\n\nexport const PanelContainer = styled(Collapse.Panel)`\n background-color: white;\n border: 1px solid rgb(217, 217, 217);\n border-radius: 10px !important;\n\n span.card-title {\n color: red;\n font-size: 12px;\n }\n`;\n\nexport const DependentPanelContainer = styled(PanelContainer)<{\n canBeShown: boolean;\n}>`\n ${({ canBeShown }) => css`\n display: ${canBeShown ? 'block' : 'none'};\n `}\n`;\n\nexport const CardInfoDivider = styled.div<AddResearchRationaleProps>`\n ${({ $isChromePlugin }) => css`\n width: ${$isChromePlugin ? '105%' : '106%'};\n `}\n height: 1px;\n background-color: rgb(216, 216, 216);\n margin-left: -12px;\n margin-top: 12px;\n`;\n\nexport const TitleContainer = styled.div<AddResearchRationaleProps>`\n display: flex;\n justify-content: space-between;\n background-color: white;\n\n h2 {\n font-size: ${({ $isChromePlugin }) => ($isChromePlugin ? '22px' : '24px')};\n line-height: ${({ $isChromePlugin }) => ($isChromePlugin ? '28px' : '32px')};\n margin: 0px;\n }\n`;\n\nexport const ButtonsContainer = styled.div<AddResearchRationaleProps>`\n display: flex;\n gap: 16px;\n`;\n\nexport const CompanyInfoContainer = styled.div`\n padding: 17px 21px 14px 29px;\n border-bottom: 1px solid #e6e6e6;\n margin-left: -24px;\n margin-right: -24px;\n`;\n\nexport const ProfileInformationContainer = styled.div`\n display: flex;\n align-items: center;\n gap: 11px;\n`;\n\ninterface Logo {\n hasLogo: boolean;\n}\n\nexport const CompanyLogo = styled.div<Logo>`\n flex-basis: 78px;\n height: 78px;\n border-radius: 39px;\n box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14);\n background-color: #f4f4f8;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n\n ${({ hasLogo }) => {\n if (!hasLogo) {\n return css`\n img {\n width: 48px;\n height: 48px;\n }\n `;\n }\n\n return css`\n img {\n width: 100%;\n }\n `;\n }}\n`;\n\nexport const CompanySecondaryInfo = styled.div`\n display: flex;\n flex-direction: column;\n\n .et-label {\n width: 15%;\n }\n`;\n\nexport const CompanyName = styled.div`\n font-size: 20px;\n line-height: 28px;\n font-weight: bold;\n color: #334d6e;\n`;\n\nexport const Address = styled.div`\n font-size: 14px;\n color: #90a0b7;\n font-weight: bold;\n`;\n\nexport const ContentTitle = styled.h3`\n font-size: 16px;\n line-height: 24px;\n font-weight: 400;\n color: #000;\n margin: 24px 0 0;\n`;\n\nexport const ContentSubTitle = styled.h4`\n font-size: 12px;\n margin-bottom: 24px;\n color: #bfbfbf;\n`;\n\ninterface OptxScoreContainerProps {\n $isChromePlugin: boolean;\n}\n\nexport const OptxScoreContainer = styled.div<OptxScoreContainerProps>`\n ${({ $isChromePlugin }) =>\n css`\n width: ${$isChromePlugin ? '105%' : '106%'};\n `}\n height: 85px;\n margin-left: -12px;\n`;\n\nexport const OptxScoreContentGraphicContainer = styled.div`\n background-color: rgb(245, 247, 250);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n height: 96px;\n`;\n\nexport const ScoreRationaleDivider = styled.div`\n width: 105%;\n height: 1px;\n background-color: rgb(216, 216, 216);\n margin-left: -4px;\n margin-top: -4px;\n`;\n\nexport const OptxScore = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: white;\n width: 93%;\n height: 52px;\n border-radius: 8px;\n padding: 12px 17px;\n`;\n\nexport const Logo = styled.img`\n width: 40px;\n height: 40px;\n margin-right: 5px;\n object-fit: contain;\n`;\n\nexport const OptxScoreNumber = styled.span`\n color: #62aaeb;\n font-weight: bold;\n font-size: 18px;\n`;\n\ninterface CustomRadioGroupProps extends RadioGroupProps {\n columns: number;\n $isChromePlugin: boolean;\n}\n\nexport const CustomRadioGroup = styled(Radio.Group)<CustomRadioGroupProps>`\n max-width: 100%;\n display: grid;\n margin-left: 16px;\n ${({ columns, $isChromePlugin }) => css`\n grid-template-columns: repeat(${columns}, 1fr);\n width: ${$isChromePlugin ? '560px' : '460px'};\n `}\n\n .ant-radio-wrapper {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n margin-right: 0;\n }\n\n .ant-radio-wrapper::after {\n position: absolute;\n content: '';\n background: #f5f5f5;\n height: 4px;\n width: 100%;\n top: 6px;\n }\n\n .ant-radio {\n z-index: 1;\n }\n`;\n\nexport const RationalesWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n padding: 30px 0;\n`;\n\nexport const PSGCompanyLabel = styled.span`\n color: rgb(30, 58, 81);\n font: bold 42px 'Times New Roman';\n`;\n","import React, { useCallback, useState, useEffect, SetStateAction, Dispatch } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button } from 'antd';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\nimport {\n SOFTWARE_CARD_NAME,\n FIT_CARD_NAME,\n SCORE_CARD_NAME,\n NEW_SCORE_CARD_NAME,\n} from '@features/add-research-rationale/constants';\nimport { OPTXChromePlugin } from '@constants/pendoActions';\n// utils\nimport { handlePendoAction } from '@optx/utils/utils';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { selectors, actions } from '../state';\nimport { FieldType, AddResearchRationaleCompany } from '../state/interfaces';\n// styles\nimport * as Styled from './AddResearchRationale.styles';\n\ninterface HeaderProps {\n rationale: FieldType;\n toggle: () => void;\n company: AddResearchRationaleCompany;\n setAccordionKey: Dispatch<SetStateAction<string[]>>;\n}\n\nconst Header: React.FC<HeaderProps> = ({ toggle, rationale, company, setAccordionKey }) => {\n const dispatch = useDispatch();\n const defaultScore = useSelector(userSelectors.getDefaultScore);\n const [disabled, setDisabled] = useState<boolean>(true);\n const initialRationale = useSelector(selectors.getInitialRationale);\n const initialFieldsValues = useSelector(selectors.getInitialFields);\n const activeScoreRationaleReasonType = useSelector(selectors.getActiveRationaleReasonType);\n const activeNewScoreRationaleReasonType = useSelector(selectors.getNewActiveRationaleReasonType);\n const fieldsValues = useSelector(selectors.getFields);\n const isChromePlugin = window.location.pathname.startsWith('/chrome-extension');\n\n const onSubmit = useCallback(() => {\n window.pendo.track(\n isChromePlugin\n ? OPTXChromePlugin.topHeader.actions.verifyKeyInfos.save\n : handlePendoAction('VerifyKeyInfo')\n );\n toggle();\n\n dispatch(actions.submitResearchRationale());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch]);\n\n const handleCancel = () => {\n window.pendo.track(OPTXChromePlugin.topHeader.actions.verifyKeyInfos.cancel);\n toggle();\n };\n\n // design requirement for initial field collapsed state: \"When 2 or all , have thumbs down and\n // user opens the Rationale, first tab should be expanded and the other 2 collapsed\".\n // this functionality was added here, because in AddResearchRationale mount doesn't work\n // properly with destroyOnClose prop from antd Drawer component, version 4.6.5\n useEffect(() => {\n const optxScoreVerified =\n defaultScore === 'us' ? company.optx_score_verified : company.il_optx_score_verified;\n const newOptxScoreVerified = company.optx_score_v3_verified;\n\n if (company) {\n const cardData = [\n {\n name: SOFTWARE_CARD_NAME,\n value: company.is_software,\n },\n {\n name: FIT_CARD_NAME,\n value: company.is_interesting,\n },\n {\n name: SCORE_CARD_NAME,\n value: optxScoreVerified,\n },\n {\n name: NEW_SCORE_CARD_NAME,\n value: newOptxScoreVerified,\n },\n ];\n\n if (cardData.filter(card => card.value === false)?.length > 1) {\n const cardNames = cardData.reduce((acc, card) => {\n if (card.value === false) {\n acc.push(card.name);\n }\n\n return acc;\n }, [] as string[]);\n setAccordionKey(cardNames);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const isSoftwareFieldChanged = fieldsValues.is_software !== initialFieldsValues.is_software;\n\n const isSoftwareRationaleChanged =\n rationale.is_software_rationales !== initialRationale.is_software_rationales;\n\n const isInterestingFieldChanged =\n fieldsValues.is_interesting !== initialFieldsValues.is_interesting;\n\n const isPSGFitRationaleChanged =\n rationale.psg_fit_rationales !== initialRationale.psg_fit_rationales;\n\n const isScoreFieldChanged =\n fieldsValues.optx_score_verified !== initialFieldsValues.optx_score_verified;\n\n const isScoreRationaleChanged =\n rationale.optx_score_rationales !== initialRationale.optx_score_rationales;\n\n const isScoreRationaleLowerReasonChanged =\n rationale.optx_score_lower_rationales !== initialRationale.optx_score_lower_rationales;\n\n const isScoreRationaleUpperReasonChanged =\n rationale.optx_score_upper_rationales !== initialRationale.optx_score_upper_rationales;\n\n const isNewScoreFieldChanged =\n fieldsValues.optx_score_v3_verified !== initialFieldsValues.optx_score_v3_verified;\n\n const isNewScoreRationaleChanged =\n rationale.optx_score_v3_rationales !== initialRationale.optx_score_v3_rationales;\n\n const isNewScoreRationaleLowerReasonChanged =\n rationale.optx_score_v3_lower_rationales !== initialRationale.optx_score_v3_lower_rationales;\n\n const isNewScoreRationaleUpperReasonChanged =\n rationale.optx_score_v3_upper_rationales !== initialRationale.optx_score_v3_upper_rationales;\n\n const isStateChanged =\n isSoftwareFieldChanged ||\n isSoftwareRationaleChanged ||\n isInterestingFieldChanged ||\n isPSGFitRationaleChanged ||\n isScoreFieldChanged ||\n isScoreRationaleChanged ||\n isScoreRationaleLowerReasonChanged ||\n isScoreRationaleUpperReasonChanged ||\n isNewScoreFieldChanged ||\n isNewScoreRationaleChanged ||\n isNewScoreRationaleLowerReasonChanged ||\n isNewScoreRationaleUpperReasonChanged;\n\n const oneFieldOpenedCondition =\n fieldsValues.is_software === false &&\n (!rationale.is_software_rationales ||\n rationale.is_software_rationales === DEFAULT_CELL_VALUE);\n\n const twoFieldsOpenedCondition =\n fieldsValues.is_software === true &&\n fieldsValues.is_interesting === false &&\n (!rationale.psg_fit_rationales || rationale.psg_fit_rationales === DEFAULT_CELL_VALUE);\n\n const isOPTXScoreVisibile =\n fieldsValues.is_software === true && fieldsValues.is_interesting === true;\n\n const isOPTXScoreRationaleVerifiedToFalse = (field: string) =>\n isOPTXScoreVisibile && fieldsValues[field] === false;\n\n const hasNoOPTXScoreRationaleValueFor = (field: string) =>\n !rationale[field] || rationale[field] === DEFAULT_CELL_VALUE;\n\n const hasOPTXScoreRationaleValueFor = (field: string) =>\n rationale[field] && rationale[field] !== DEFAULT_CELL_VALUE;\n\n const threeFieldsOpenedCondition =\n isOPTXScoreRationaleVerifiedToFalse('optx_score_verified') &&\n hasNoOPTXScoreRationaleValueFor('optx_score_rationales');\n\n const threeFieldsOpenedExpandedCondition =\n isOPTXScoreRationaleVerifiedToFalse('optx_score_verified') &&\n hasOPTXScoreRationaleValueFor('optx_score_rationales') &&\n activeScoreRationaleReasonType !== null &&\n hasNoOPTXScoreRationaleValueFor('optx_score_lower_rationales') &&\n hasNoOPTXScoreRationaleValueFor('optx_score_upper_rationales');\n\n const fourFieldsOpenedCondition =\n isOPTXScoreRationaleVerifiedToFalse('optx_score_v3_verified') &&\n hasNoOPTXScoreRationaleValueFor('optx_score_v3_rationales');\n\n const fourFieldsOpenedExpandedCondition =\n isOPTXScoreRationaleVerifiedToFalse('optx_score_v3_verified') &&\n hasOPTXScoreRationaleValueFor('optx_score_v3_rationales') &&\n activeNewScoreRationaleReasonType !== null &&\n hasNoOPTXScoreRationaleValueFor('optx_score_v3_lower_rationales') &&\n hasNoOPTXScoreRationaleValueFor('optx_score_v3_upper_rationales');\n\n if (isStateChanged && fieldsValues.is_software !== null) {\n const shouldDisable =\n oneFieldOpenedCondition ||\n twoFieldsOpenedCondition ||\n threeFieldsOpenedCondition ||\n threeFieldsOpenedExpandedCondition ||\n (fourFieldsOpenedCondition && defaultScore !== 'il') ||\n (fourFieldsOpenedExpandedCondition && defaultScore !== 'il');\n\n setDisabled(!!shouldDisable);\n } else {\n setDisabled(true);\n }\n }, [\n rationale,\n initialRationale,\n fieldsValues,\n initialFieldsValues,\n activeScoreRationaleReasonType,\n activeNewScoreRationaleReasonType,\n defaultScore,\n ]);\n\n return (\n <Styled.TitleContainer $isChromePlugin={isChromePlugin}>\n <h2>Key Info Checklist</h2>\n <Styled.ButtonsContainer $isChromePlugin={isChromePlugin}>\n <Button className=\"btn-cancel\" onClick={handleCancel}>\n CANCEL\n </Button>\n <Button type=\"primary\" className=\"btn-send\" onClick={onSubmit} disabled={disabled}>\n SAVE\n </Button>\n </Styled.ButtonsContainer>\n </Styled.TitleContainer>\n );\n};\n\nexport default Header;\n","import React from 'react';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport { Col, Radio, Row, Typography } from 'antd';\nimport { useSelector } from 'react-redux';\n// models\nimport { AppState } from '@optx/redux/interfaces';\n//utils\nimport { getRange } from '@optx/utils/researchRationale';\n// redux\nimport { getFormRationales } from '@optx/redux/company/filters/selectors';\nimport { selectors } from '@features/add-research-rationale/state';\n\n// locals\nimport { OPTX_SCORE_RATIONALE_KEY } from '../../constants';\nimport * as Styled from '../AddResearchRationale.styles';\n\ninterface ScoreRationaleProps {\n handleRationaleChange: (e: RadioChangeEvent) => void;\n normalizedScore: number | 'N/A';\n newScore?: boolean;\n}\n\nconst ScoreRationale: React.FC<ScoreRationaleProps> = ({\n handleRationaleChange,\n normalizedScore,\n newScore,\n}) => {\n const rationaleOptions = useSelector((state: AppState) =>\n getFormRationales(state, OPTX_SCORE_RATIONALE_KEY)\n );\n const rationale = useSelector(selectors.getRationale);\n\n const disabledRange = normalizedScore === 'N/A' ? 'none' : getRange(normalizedScore);\n\n const isChromePlugin = window.location.pathname.startsWith('/chrome-extension');\n\n return (\n <Styled.RationalesWrapper>\n <Row>\n <Typography.Text\n style={{\n marginLeft: '15px',\n position: 'relative',\n bottom: '10px',\n color: 'rgb(0,0,0,0.45)',\n }}\n >\n What score would you assign?\n </Typography.Text>\n </Row>\n <Row>\n <Styled.CustomRadioGroup\n buttonStyle=\"solid\"\n $isChromePlugin={isChromePlugin}\n onChange={handleRationaleChange}\n value={newScore ? rationale.optx_score_v3_rationales : rationale.optx_score_rationales}\n columns={rationaleOptions?.length || 0}\n >\n {rationaleOptions?.map(option => {\n return (\n <Col key={option.value} style={{ textAlign: 'center', marginTop: 10 }}>\n <Radio value={option.value} disabled={option.value === disabledRange}>\n {option.label}\n </Radio>\n </Col>\n );\n })}\n </Styled.CustomRadioGroup>\n </Row>\n </Styled.RationalesWrapper>\n );\n};\n\nexport default ScoreRationale;\n","import React, { FC, useEffect, useState } from 'react';\nimport { TrendingLine } from '@optx/components/common/charts';\nimport { useSelector } from 'react-redux';\nimport { RadioChangeEvent } from 'antd/lib/radio';\n// models\nimport Company from '@models/Company';\nimport { ChartBarIntervalKeys } from '@optx/models/charts/data';\nimport { ChangeFieldsPayload } from '@optx/features/add-research-rationale/state/interfaces';\n// constants\nimport { NEW_OPTX_SCORE_RATIONALE_KEY } from '@optx/features/add-research-rationale/constants';\n// utils\nimport { getIsPsgCompany } from '@utils/company';\n// redux\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as cardSelectors } from '@features/long-card/company-card';\n// components\nimport logoCompany from '@assets/images/logo-company.png';\nimport ScoreRationale from '@optx/features/add-research-rationale/components/rationale/ScoreRationale';\nimport * as Styled from '../AddResearchRationale.styles';\n\ntype OptxScoreRationaleProps = {\n company: Company;\n isShowingRationale?: boolean;\n onChange: (field?: ChangeFieldsPayload, rationale?: ChangeFieldsPayload) => void;\n defaultScore: string;\n};\n\nlet selectSelector: any;\n\nif (window.location.pathname.startsWith('/user-lists')) {\n selectSelector = searchSelectors.getTrending('lists');\n} else if (window.location.pathname.startsWith('/chrome-extension-new')) {\n selectSelector = cardSelectors.getTrending;\n} else if (window.location.pathname.startsWith('/my-companies')) {\n selectSelector = searchSelectors.getTrending('myCompanies');\n} else {\n selectSelector = searchSelectors.getTrending('advancedSearch');\n}\n\nconst NewOptxScoreRationale: FC<OptxScoreRationaleProps> = ({\n company,\n onChange,\n isShowingRationale,\n defaultScore,\n}) => {\n const [period, setPeriod] = useState<ChartBarIntervalKeys>('1Y');\n\n const trending: ChartBarIntervalKeys = useSelector(selectSelector);\n\n const isChromePlugin = window.location.pathname.startsWith('/chrome-extension');\n\n const trendKey = 'optx_score_v3_trends';\n\n useEffect(() => {\n if (typeof trending === 'string') {\n setPeriod(trending);\n }\n }, [trending]);\n\n const handleNanOptxScore = () => {\n const score = company.score_v3;\n\n if (typeof score !== 'number') {\n return 'N/A';\n }\n\n return score;\n };\n\n const handleRationaleChange = (e: RadioChangeEvent) => {\n onChange(undefined, { key: NEW_OPTX_SCORE_RATIONALE_KEY, value: e.target.value });\n };\n\n if (!company) {\n return null;\n }\n\n return (\n <Styled.OptxScoreContainer $isChromePlugin={isChromePlugin}>\n {isShowingRationale === false && (\n <Styled.OptxScoreContentGraphicContainer>\n <Styled.OptxScore>\n <Styled.Logo src={logoCompany} />\n\n <span>\n {company[trendKey] && (\n <TrendingLine\n points={company[trendKey]![period]}\n color=\"#1890FF\"\n svgWidth={130}\n svgHeight={130}\n />\n )}\n </span>\n\n {getIsPsgCompany(company) ? (\n <Styled.PSGCompanyLabel>PSG</Styled.PSGCompanyLabel>\n ) : (\n <Styled.OptxScoreNumber>{handleNanOptxScore()}</Styled.OptxScoreNumber>\n )}\n </Styled.OptxScore>\n </Styled.OptxScoreContentGraphicContainer>\n )}\n {isShowingRationale === true && (\n <>\n <Styled.ScoreRationaleDivider />\n <ScoreRationale\n handleRationaleChange={handleRationaleChange}\n normalizedScore={handleNanOptxScore()}\n newScore\n />\n </>\n )}\n </Styled.OptxScoreContainer>\n );\n};\n\nexport default NewOptxScoreRationale;\n","import React, { useRef, useState, useEffect } from 'react';\nimport AsyncCreatable from 'react-select/async-creatable';\nimport { ActionMeta, InputActionMeta } from 'react-select';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\nimport { COMPANY_RATIONALE_ENDPOINT } from '@constants/asyncEndpoints';\n// hooks\nimport { useToggle } from '@optx/common/hooks/modal';\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\nimport { FormRationale } from '@optx/redux/company/filters/interfaces';\n\ninterface OtherOptionsProps {\n disabled: boolean;\n onInputChange: (e: any) => void;\n rationaleValue: string | null;\n rationaleOptions: FormRationale[];\n}\n\nconst OtherOptions: React.FC<OtherOptionsProps> = ({\n disabled,\n onInputChange,\n rationaleValue,\n rationaleOptions,\n}) => {\n const [showAddButton, toggleShowAddButton] = useToggle(false);\n const [inputValue, setInputValue] = useState<SelectOption | null>(null);\n\n useEffect(() => {\n // set initial reason for \"other\" option, if it exists\n if (\n rationaleValue &&\n rationaleValue !== DEFAULT_CELL_VALUE &&\n !rationaleOptions.some(option => option.value === rationaleValue)\n ) {\n setInputValue({ value: rationaleValue, label: rationaleValue });\n onInputChange(rationaleValue);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onChange = (option: any, actionMeta: ActionMeta<SelectOption<string | number>>) => {\n switch (actionMeta.action) {\n // @ts-ignore\n case 'select-option':\n onInputChange(option.value);\n setInputValue(option);\n\n // eslint-disable-next-line no-fallthrough\n case 'create-option': {\n onInputChange(option.value);\n setInputValue(option);\n\n toggleShowAddButton();\n break;\n }\n\n default:\n break;\n }\n };\n\n const { loadOptions } = useAsyncSearch({\n endpoint: COMPANY_RATIONALE_ENDPOINT,\n });\n\n const selectRef = useRef<AsyncCreatable<SelectOption> | null>(null);\n\n const handleMenuClose = () => {\n if (!showAddButton) {\n toggleShowAddButton();\n }\n\n setInputValue(null);\n };\n\n const handleInputChange = (newValue: string, { action }: InputActionMeta) => {\n switch (action) {\n case 'input-change': {\n // This prevents a bug where the query is called without the last letter of previous query\n // eg: If user writes 'auto', query is 'auto'. If the second time user writes 'auto', query will be 'aut'.\n // This seems to fix above problem;\n loadOptionsAfterInputChange(newValue, () => {});\n break;\n }\n\n default:\n break;\n }\n };\n\n const loadOptionsAfterInputChange = (query: string, callback: SuccessErrorCallback) => {\n loadOptions(query, options => {\n const callbackResult = callback(options);\n\n return callbackResult;\n });\n };\n\n return (\n <AsyncCreatable\n isDisabled={disabled}\n value={inputValue}\n loadOptions={loadOptionsAfterInputChange}\n className=\"rationale_select-async\"\n onChange={onChange}\n styles={{\n menu: baseStyle => ({\n ...baseStyle,\n position: 'sticky',\n }),\n }}\n onInputChange={handleInputChange}\n controlShouldRenderValue\n selectRef={selectRef}\n onMenuClose={handleMenuClose}\n closeMenuOnSelect\n bodyDisplay={false}\n disableValueRemove\n />\n );\n};\n\nexport default OtherOptions;\n","import React, { useState, useEffect } from 'react';\nimport { Col, Radio, Row, Tag, Typography } from 'antd';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport { useSelector } from 'react-redux';\n// models\nimport { RationaleType } from '@features/add-research-rationale/state/interfaces';\n// constants\nimport {\n PSG_FIT_RATIONALE_KEY,\n SOFTWARE_RATIONALE_KEY,\n OPTX_SCORE_UPPER_RATIONALE_KEY,\n OPTX_SCORE_LOWER_RATIONALE_KEY,\n} from '@features/add-research-rationale/constants';\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n// redux\nimport { AppState } from '@optx/redux/interfaces';\nimport { getFormRationales } from '@optx/redux/company/filters/selectors';\n// components\nimport OtherOptions from './OtherOptions';\nimport * as Styled from '../AddResearchRationale.styles';\n\ninterface OptionsRationaleProps {\n disabled?: boolean;\n fieldName: RationaleType;\n rationaleValue: string | null;\n handleRationaleChange: (e: RadioChangeEvent) => void;\n handleOtherOptionRationaleChange: (e: string) => void;\n}\n\nconst getRationaleTitle = (fieldName: string) => {\n let rationaleTitle = '';\n\n if (fieldName === 'Software Company') {\n rationaleTitle = 'Please indicate why you believe this is not a software company';\n }\n\n if (fieldName === 'PSG Fit') {\n rationaleTitle = 'Please indicate why you believe this is not a PSG Fit company';\n }\n\n if (fieldName === 'Score Lower') {\n rationaleTitle = 'Why score should be lower?';\n }\n\n if (fieldName === 'Score Upper') {\n rationaleTitle = 'Why score should be higher?';\n }\n\n return rationaleTitle;\n};\n\nconst OptionsRationale: React.FC<OptionsRationaleProps> = ({\n disabled,\n rationaleValue,\n handleRationaleChange,\n handleOtherOptionRationaleChange,\n fieldName,\n}) => {\n const [showTagRationale, setShowTagRationale] = React.useState<boolean>();\n const [optionValue, setOptionValue] = useState<string | null>(rationaleValue);\n\n const rationaleOptions = useSelector((state: AppState) => {\n switch (fieldName) {\n case 'Software Company':\n return getFormRationales(state, SOFTWARE_RATIONALE_KEY) ?? [];\n case 'PSG Fit':\n return getFormRationales(state, PSG_FIT_RATIONALE_KEY) ?? [];\n\n case 'Score Lower':\n return getFormRationales(state, OPTX_SCORE_LOWER_RATIONALE_KEY) ?? [];\n\n case 'Score Upper':\n return getFormRationales(state, OPTX_SCORE_UPPER_RATIONALE_KEY) ?? [];\n\n default:\n return [];\n }\n });\n\n const isChromePlugin = window.location.pathname.startsWith('/chrome-extension');\n\n const showIsOther = () => {\n const values = rationaleOptions.map(option => option.value).slice(0, -1);\n\n if (rationaleValue === null) {\n return false;\n }\n\n return (\n !values.includes(rationaleValue) &&\n rationaleValue !== DEFAULT_CELL_VALUE &&\n rationaleValue?.length > 0\n );\n };\n\n // if a reason is set for other option, set the value to \"other\", so that the\n // option is in the active state\n useEffect(() => {\n if (\n rationaleValue &&\n rationaleValue !== DEFAULT_CELL_VALUE &&\n !rationaleOptions.some(option => option.value === rationaleValue)\n ) {\n setOptionValue('other');\n } else {\n setOptionValue(rationaleValue);\n }\n }, [rationaleOptions, rationaleValue]);\n\n return (\n <Styled.RationalesWrapper>\n <Row className=\"profile-information__subtitle\">\n <Typography.Text>{getRationaleTitle(fieldName)}</Typography.Text>\n </Row>\n <Radio.Group\n buttonStyle=\"solid\"\n className=\"rationale-radio-group\"\n onChange={e => {\n setShowTagRationale(false);\n handleRationaleChange(e);\n }}\n value={optionValue}\n >\n {rationaleOptions?.map(option => (\n <Col key={option.value} style={{ textAlign: 'center', marginTop: 10, padding: 0 }}>\n <Radio.Button\n disabled={!!disabled}\n style={{ width: isChromePlugin ? '540px' : '450px' }}\n value={option.value}\n >\n {option.label}\n </Radio.Button>\n </Col>\n ))}\n </Radio.Group>\n {showIsOther() && (\n <div style={{ marginTop: '10px' }}>\n <Typography.Text>Please Explain</Typography.Text>\n <div style={{ width: `${isChromePlugin ? '542px' : '450px'}` }}>\n <OtherOptions\n disabled={!!disabled}\n onInputChange={e => {\n setShowTagRationale(true);\n handleOtherOptionRationaleChange(e);\n }}\n rationaleValue={rationaleValue}\n rationaleOptions={rationaleOptions}\n />\n </div>\n {showTagRationale && (\n <Tag color=\"blue\" style={{ marginTop: '5px' }}>\n {rationaleValue}\n </Tag>\n )}\n </div>\n )}\n </Styled.RationalesWrapper>\n );\n};\n\nexport default OptionsRationale;\n","/* eslint-disable no-nested-ternary */\nimport React, { useState, useEffect, useRef } from 'react';\nimport { RadioChangeEvent } from 'antd/lib/radio';\n// models\nimport {\n ChangeFieldsPayload,\n FieldType,\n RationaleType,\n} from '@features/add-research-rationale/state/interfaces';\n// utils\nimport { getRangeValues, getValuesRalation } from '@optx/utils/researchRationale';\n// constants\nimport {\n SOFTWARE_RATIONALE_KEY,\n PSG_FIT_RATIONALE_KEY,\n OPTX_SCORE_UPPER_RATIONALE_KEY,\n OPTX_SCORE_LOWER_RATIONALE_KEY,\n NEW_OPTX_SCORE_UPPER_RATIONALE_KEY,\n NEW_OPTX_SCORE_LOWER_RATIONALE_KEY,\n} from '../../constants';\n// components\nimport OptionsRationale from '../rationale/OptionsRationale';\n\ninterface CollapsableFieldsProps {\n score?: number;\n collapsableValue?: boolean | null;\n typeOptions: RationaleType;\n valueRationale: string | null;\n storeRationale: FieldType;\n onChange: (field?: ChangeFieldsPayload, rationale?: ChangeFieldsPayload) => void;\n scoreType: string;\n}\n\nconst CollapsableFields: React.FC<CollapsableFieldsProps> = ({\n score,\n onChange,\n collapsableValue,\n valueRationale,\n storeRationale,\n typeOptions,\n scoreType,\n}) => {\n const [rationaleValue, setRationaleValue] = useState<string | null>(valueRationale ?? '');\n const [isDisabled, setIsDisabled] = useState<boolean>(false);\n\n const typeOptionsRef = useRef<string>('');\n\n useEffect(() => {\n const scoreRationale =\n scoreType === 'score'\n ? storeRationale.optx_score_rationales\n : storeRationale.optx_score_v3_rationales;\n const rangeValues = typeof scoreRationale === 'string' && getRangeValues(scoreRationale);\n\n if (\n rangeValues &&\n rangeValues.length > 0 &&\n typeof score === 'number' &&\n !isNaN(Number(score)) &&\n getValuesRalation(rangeValues, score) === 'equal'\n ) {\n setIsDisabled(true);\n } else {\n setIsDisabled(false);\n }\n }, [storeRationale, score, scoreType]);\n\n useEffect(() => {\n typeOptionsRef.current = typeOptions;\n }, [typeOptions]);\n\n const getRationaleKey = () => {\n switch (typeOptions) {\n case 'PSG Fit':\n return PSG_FIT_RATIONALE_KEY;\n case 'Software Company':\n return SOFTWARE_RATIONALE_KEY;\n case 'Score Upper':\n return scoreType === 'score'\n ? OPTX_SCORE_UPPER_RATIONALE_KEY\n : NEW_OPTX_SCORE_UPPER_RATIONALE_KEY;\n case 'Score Lower':\n return scoreType === 'score'\n ? OPTX_SCORE_LOWER_RATIONALE_KEY\n : NEW_OPTX_SCORE_LOWER_RATIONALE_KEY;\n default:\n return '';\n }\n };\n\n const handleRationaleChange = (e: RadioChangeEvent) => {\n setRationaleValue(e.target.value);\n onChange(undefined, { key: getRationaleKey(), value: e.target.value });\n };\n\n const handleOtherOptionRationaleChange = (option: string) => {\n if (\n (typeOptionsRef.current === 'Score Upper' && typeOptions === 'Score Lower') ||\n (typeOptionsRef.current === 'Score Lower' && typeOptions === 'Score Upper')\n ) {\n setRationaleValue(null);\n } else {\n setRationaleValue(option);\n onChange(undefined, { key: getRationaleKey(), value: option });\n }\n };\n\n useEffect(() => {\n setRationaleValue(storeRationale[getRationaleKey()] as string | null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [storeRationale]);\n\n return (\n <>\n {collapsableValue === false && (\n <OptionsRationale\n disabled={\n (getRationaleKey() === OPTX_SCORE_UPPER_RATIONALE_KEY ||\n getRationaleKey() === OPTX_SCORE_LOWER_RATIONALE_KEY ||\n getRationaleKey() === NEW_OPTX_SCORE_UPPER_RATIONALE_KEY ||\n getRationaleKey() === NEW_OPTX_SCORE_LOWER_RATIONALE_KEY) &&\n collapsableValue === false\n ? isDisabled\n : false\n }\n rationaleValue={rationaleValue}\n handleOtherOptionRationaleChange={handleOtherOptionRationaleChange}\n handleRationaleChange={handleRationaleChange}\n fieldName={typeOptions}\n />\n )}\n </>\n );\n};\n\nexport default CollapsableFields;\n","import styled, { css } from 'styled-components';\n\nconst Thumb = styled.div`\n border-radius: 21px;\n width: 42px;\n height: 42px;\n padding: 7px;\n margin-right: 6px;\n cursor: pointer;\n`;\n\ninterface ThumbProps {\n checked?: boolean | null | string;\n}\n\nconst ThumbUp = styled(Thumb)<ThumbProps>`\n ${({ checked }) => css`\n background-color: ${checked === true ? '#52c41a' : null};\n padding: 5px 5px 5px 8px;\n border: 1px solid #52c41a;\n\n span,\n svg {\n color: ${checked === true ? 'white' : '#E8E8E8'};\n }\n ,\n path {\n fill-opacity: 1;\n }\n `}\n`;\n\nconst ThumbDown = styled(Thumb)<ThumbProps>`\n ${({ checked }) => css`\n background-color: ${checked === false ? '#f5222d' : null};\n padding: 9px 5px 5px 5px;\n border: 1px solid #f5222d;\n\n span,\n svg {\n color: ${checked === false ? 'white' : '#E8E8E8'};\n }\n ,\n path {\n fill-opacity: 1;\n }\n `}\n`;\n\nexport default { ThumbDown, ThumbUp };\n","import React from 'react';\nimport Icon from '@optx/components/common/Icon';\nimport AntIcon from '@ant-design/icons';\n\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport Styles from './ThumbActions.styled';\n\ninterface ThumbActionsProps {\n onUpdateThumbsChecked: (value: boolean | null, optionType: string) => void;\n collapsableOptions: 'PSG Fit' | 'Software' | 'Score' | 'New Score';\n isChecked?: boolean | null | string;\n activeKey: string[];\n}\n\nconst ThumbActions: React.FC<ThumbActionsProps> = ({\n onUpdateThumbsChecked,\n isChecked,\n collapsableOptions,\n activeKey,\n}) => {\n const handleClickThumbDown = (e: React.MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => {\n e.stopPropagation();\n\n const isInActiveKey = activeKey.includes(collapsableOptions);\n\n if (isChecked === false && isInActiveKey) {\n onUpdateThumbsChecked(null, collapsableOptions);\n } else if (isChecked === true || !isChecked || isChecked === DEFAULT_EMPTY_VALUE) {\n onUpdateThumbsChecked(false, collapsableOptions);\n }\n };\n\n const handleClickThumbUp = (e: React.MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => {\n e.stopPropagation();\n\n if (isChecked === true) {\n onUpdateThumbsChecked(null, collapsableOptions);\n } else if (!isChecked || isChecked === DEFAULT_EMPTY_VALUE) {\n onUpdateThumbsChecked(true, collapsableOptions);\n }\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'row' }}>\n <Styles.ThumbUp onClick={e => handleClickThumbUp(e)} checked={isChecked}>\n <AntIcon component={() => <Icon iconName=\"thumbs-up\" style={{ fontSize: 27 }} />} />\n </Styles.ThumbUp>\n\n <Styles.ThumbDown onClick={e => handleClickThumbDown(e)} checked={isChecked}>\n <AntIcon component={() => <Icon iconName=\"thumbs-down\" style={{ fontSize: 27 }} />} />\n </Styles.ThumbDown>\n </div>\n );\n};\n\nexport default ThumbActions;\n","import styled from 'styled-components';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n flex-wrap: wrap;\n\n .ant-card-meta-detail .ant-card-meta-title {\n margin-bottom: 0;\n line-height: 24px;\n }\n`;\n\nexport { Container };\n","import React from 'react';\nimport { Card } from 'antd';\n\nimport { Container } from './CollapsabeCardInfo.styled';\n\nconst { Meta } = Card;\n\ninterface CollapsableCardInfoProps {\n title: JSX.Element | string;\n description: string;\n}\n\nconst CollapsableCardInfo: React.FC<CollapsableCardInfoProps> = ({\n title,\n description,\n children,\n}) => {\n return (\n <Container>\n <div>\n <Meta title={title} description={description} />\n </div>\n {children}\n </Container>\n );\n};\n\nexport default CollapsableCardInfo;\n","import React, { useCallback, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Tag, Collapse } from 'antd';\n// models\nimport Company from '@optx/models/Company';\nimport {\n ChangeFieldsPayload,\n RationaleType,\n} from '@features/add-research-rationale/state/interfaces';\n// constants\nimport {\n SOFTWARE_RATIONALE_KEY,\n PSG_FIT_RATIONALE_KEY,\n OPTX_SCORE_RATIONALE_KEY,\n NEW_OPTX_SCORE_RATIONALE_KEY,\n SCORE_CARD_NAME,\n FIT_CARD_NAME,\n SOFTWARE_CARD_NAME,\n NEW_SCORE_CARD_NAME,\n} from '@features/add-research-rationale/constants';\nimport { OPTXChromePlugin } from '@optx/constants/pendoActions';\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n// hooks\nimport { useInjectFavoriteLists, useInjectAddRationale } from '@optx/common/hooks/inject';\nimport { useInjectEditFields } from '@optx/features/company/edit-fields';\n// redux\nimport { selectors, actions } from '@features/add-research-rationale/state';\nimport { selectors as userSelectors } from '@redux/user/information';\n// components\nimport Header from '@features/add-research-rationale/components/Header';\nimport OptxScoreRationale from '@features/add-research-rationale/components/fields/OptxScoreRationale';\nimport * as Styled from '@features/add-research-rationale/components/AddResearchRationale.styles';\nimport iconCompany from '@optx/assets/images/company_ico@2x.png';\nimport '@features/add-research-rationale/components/style.scss';\nimport CollapsableFields from './fields/CollapsableFields';\nimport ThumbActions from './rationale/ThumbActions';\nimport CollapsableCardInfo from './rationale/CollapsableCardInfo';\nimport NewOptxScoreRationale from './fields/NewOptxScoreRationale';\n\nconst handleCardTitle = (cardName: string, defaultScore?: string) => {\n let cardTitle: JSX.Element | string = '';\n\n if (cardName === SOFTWARE_CARD_NAME) {\n cardTitle = (\n <>\n Software Company <span className=\"card-title\">*Required</span>\n </>\n );\n }\n\n if (cardName === FIT_CARD_NAME) {\n cardTitle = (\n <>\n PSG FIT <span className=\"card-title\">*Required</span>\n </>\n );\n }\n\n if (cardName === SCORE_CARD_NAME) {\n cardTitle = (\n <>\n {defaultScore === 'il' ? 'IL ' : ''}OPTX Score{' '}\n <span className=\"card-title\">*Required</span>\n </>\n );\n }\n\n if (cardName === NEW_SCORE_CARD_NAME) {\n cardTitle = (\n <>\n OPTX Score BETA <span className=\"card-title\">*Required</span>\n </>\n );\n }\n\n return cardTitle;\n};\n\ninterface AddResearchRationaleProps {\n isInChromeExtension?: boolean;\n}\n\nconst AddResearchRationale: React.FC<AddResearchRationaleProps> = ({ isInChromeExtension }) => {\n useInjectAddRationale();\n useInjectFavoriteLists();\n useInjectEditFields();\n const dispatch = useDispatch();\n\n const company = useSelector(selectors.getCompanyInfo);\n const defaultScore = useSelector(userSelectors.getDefaultScore);\n const isOpen = useSelector(selectors.isOpen);\n const rationale = useSelector(selectors.getRationale);\n const activeRationaleScoreType = useSelector(selectors.getActiveRationaleReasonType);\n const activeRationaleNewScoreType = useSelector(selectors.getNewActiveRationaleReasonType);\n const [accordionKey, setAccordionKey] = useState<string[]>([]);\n\n const handleChange = (field?: ChangeFieldsPayload, rationale?: ChangeFieldsPayload) => {\n if (field) {\n dispatch(actions.changeFields({ key: field.key, value: field.value }));\n }\n\n if (rationale) {\n dispatch(\n actions.changeRationale({\n key: rationale.key,\n value: rationale.value,\n defaultScore,\n })\n );\n }\n };\n\n const toggle = useCallback(() => {\n setAccordionKey([]);\n\n if (company && company.company_id) {\n dispatch(\n actions.toggleAddResearchRationale({\n companyId: company.company_id,\n })\n );\n }\n }, [company, dispatch]);\n\n const getScoreRationaleReason = useCallback(() => {\n if (company && company.company_id) {\n if (defaultScore === 'us') {\n return company.optx_score_rationale_reason;\n }\n\n return company.il_optx_score_rationale_reason;\n }\n\n return null;\n }, [company, defaultScore]);\n\n const getNewScoreRationaleReason = useCallback(() => {\n if (company && company.company_id) {\n return company.optx_score_v3_rationale_reason;\n }\n\n return null;\n }, [company]);\n\n const handleCard = (cardName: string) => {\n if (cardName === SOFTWARE_CARD_NAME && company?.is_software === false) {\n setAccordionKey([cardName]);\n }\n\n if (cardName === FIT_CARD_NAME && company?.is_interesting === false) {\n setAccordionKey([cardName]);\n }\n\n const optxScoreVerified =\n defaultScore === 'us' ? company?.optx_score_verified : company?.il_optx_score_verified;\n\n if (cardName === SCORE_CARD_NAME && optxScoreVerified === false) {\n setAccordionKey(\n defaultScore === 'us' && company?.optx_score_v3_verified === false\n ? [NEW_SCORE_CARD_NAME, cardName]\n : [cardName]\n );\n }\n\n if (\n defaultScore === 'us' &&\n cardName === NEW_SCORE_CARD_NAME &&\n company?.optx_score_v3_verified === false\n ) {\n setAccordionKey(optxScoreVerified === false ? [SCORE_CARD_NAME, cardName] : [cardName]);\n }\n };\n\n if (!company) return null;\n\n const updateFields = (value: boolean | null, optionType: string) => {\n setAccordionKey(value === false ? [optionType] : []);\n\n if (optionType === 'Software') {\n dispatch(actions.changeFields({ key: 'is_software', value }));\n\n if (value === true) {\n window.pendo.track(\n OPTXChromePlugin.topHeader.actions.verifyKeyInfos.softwareCompanyThumbsUp\n );\n dispatch(actions.changeRationale({ key: SOFTWARE_RATIONALE_KEY, value: null }));\n }\n\n if (value === false || value === null) {\n window.pendo.track(\n OPTXChromePlugin.topHeader.actions.verifyKeyInfos.softwareCompanyThumbsDown\n );\n dispatch(actions.revertFieldsChanges({ key: SOFTWARE_CARD_NAME, value }));\n }\n }\n\n if (optionType === 'PSG Fit') {\n dispatch(actions.changeFields({ key: 'is_interesting', value }));\n\n if (value === true) {\n window.pendo.track(OPTXChromePlugin.topHeader.actions.verifyKeyInfos.psgFitThumbsUp);\n dispatch(actions.changeRationale({ key: PSG_FIT_RATIONALE_KEY, value: null }));\n }\n\n if (value === false || value === null) {\n window.pendo.track(OPTXChromePlugin.topHeader.actions.verifyKeyInfos.psgFitThumbsDown);\n dispatch(actions.revertFieldsChanges({ key: FIT_CARD_NAME, value }));\n }\n }\n\n if (optionType === 'Score') {\n dispatch(\n actions.changeFields({\n key: `${defaultScore === 'us' ? 'optx_score_verified' : 'il_optx_score_verified'}`,\n value,\n })\n );\n\n if (value === true || value === null) {\n dispatch(actions.changeRationale({ key: OPTX_SCORE_RATIONALE_KEY, value: null }));\n }\n }\n\n if (optionType === 'New Score') {\n dispatch(\n actions.changeFields({\n key: 'optx_score_v3_verified',\n value,\n })\n );\n\n if (value === true || value === null) {\n dispatch(actions.changeRationale({ key: NEW_OPTX_SCORE_RATIONALE_KEY, value: null }));\n }\n }\n };\n\n return (\n <Styled.StyledDrawer\n title={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <Header\n toggle={toggle}\n rationale={rationale}\n company={company}\n setAccordionKey={setAccordionKey}\n />\n }\n placement={isInChromeExtension ? 'bottom' : 'right'}\n visible={isOpen}\n onClose={toggle}\n className={`${isInChromeExtension ? 'plugin ' : ''}add-research-rationale`}\n closeIcon={false}\n height={isInChromeExtension ? 'calc(100vh - 60px)' : undefined}\n destroyOnClose\n >\n {!isInChromeExtension && (\n <Styled.CompanyInfoContainer>\n <Styled.ProfileInformationContainer>\n <Styled.CompanyLogo\n hasLogo={!!(company?.logo_url && company.logo_url !== DEFAULT_CELL_VALUE)}\n >\n <img\n src={\n company?.logo_url && company.logo_url !== DEFAULT_CELL_VALUE\n ? company.logo_url\n : iconCompany\n }\n alt=\"logo\"\n />\n </Styled.CompanyLogo>\n <Styled.CompanySecondaryInfo>\n <div className=\"et-label\">\n {!company?.source_tag.includes('et') ? (\n <Tag color=\"gray\">Not in ET</Tag>\n ) : (\n <Tag color=\"green\">In ET</Tag>\n )}\n </div>\n <Styled.CompanyName>{company?.company_name}</Styled.CompanyName>\n <Styled.Address>{company?.city}</Styled.Address>\n </Styled.CompanySecondaryInfo>\n </Styled.ProfileInformationContainer>\n </Styled.CompanyInfoContainer>\n )}\n <div>\n <Styled.ContentTitle>Validate the following company attributes</Styled.ContentTitle>\n <Styled.ContentSubTitle>\n Your input will be used to help train the algorithm, improving data accuracy\n </Styled.ContentSubTitle>\n {accordionKey}\n <Collapse\n bordered={false}\n accordion={accordionKey.length <= 1}\n activeKey={accordionKey}\n onChange={key => handleCard(key as string)}\n style={{\n display: 'grid',\n gap: '26px',\n backgroundColor: 'transparent',\n }}\n >\n <Styled.PanelContainer\n header={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <CollapsableCardInfo\n title={handleCardTitle(SOFTWARE_CARD_NAME)}\n description=\"Validate if this is a software company\"\n >\n <ThumbActions\n onUpdateThumbsChecked={updateFields}\n collapsableOptions=\"Software\"\n isChecked={company.is_software}\n activeKey={accordionKey}\n />\n </CollapsableCardInfo>\n }\n key={SOFTWARE_CARD_NAME}\n showArrow={false}\n >\n <CollapsableFields\n onChange={handleChange}\n valueRationale={company.is_software_rationale}\n typeOptions=\"Software Company\"\n collapsableValue={false}\n storeRationale={rationale}\n scoreType=\"score\"\n />\n </Styled.PanelContainer>\n <Styled.DependentPanelContainer\n canBeShown={company.is_software}\n showArrow={false}\n header={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <CollapsableCardInfo\n title={handleCardTitle(FIT_CARD_NAME)}\n description=\"Indicate if this company is a PSG FIT\"\n >\n <ThumbActions\n onUpdateThumbsChecked={updateFields}\n collapsableOptions=\"PSG Fit\"\n isChecked={company.is_interesting}\n activeKey={accordionKey}\n />\n </CollapsableCardInfo>\n }\n key={FIT_CARD_NAME}\n >\n <CollapsableFields\n onChange={handleChange}\n valueRationale={company.interesting_rationale}\n typeOptions=\"PSG Fit\"\n collapsableValue={false}\n storeRationale={rationale}\n scoreType=\"score\"\n />\n </Styled.DependentPanelContainer>\n\n <Styled.DependentPanelContainer\n canBeShown={!!(company.is_software && company.is_interesting === true)}\n showArrow={false}\n header={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <>\n <CollapsableCardInfo\n title={handleCardTitle(SCORE_CARD_NAME, defaultScore)}\n description=\"Do you agree with the score?\"\n >\n <ThumbActions\n onUpdateThumbsChecked={updateFields}\n collapsableOptions=\"Score\"\n isChecked={\n defaultScore === 'us'\n ? company.optx_score_verified\n : company.il_optx_score_verified\n }\n activeKey={accordionKey}\n />\n </CollapsableCardInfo>\n <Styled.CardInfoDivider $isChromePlugin={isInChromeExtension} />\n <OptxScoreRationale\n company={company as Company}\n onChange={handleChange}\n isShowingRationale={false}\n defaultScore={defaultScore}\n />\n </>\n }\n key={SCORE_CARD_NAME}\n >\n <OptxScoreRationale\n company={company as Company}\n onChange={handleChange}\n isShowingRationale\n defaultScore={defaultScore}\n />\n {activeRationaleScoreType !== null && (\n <CollapsableFields\n score={company[defaultScore === 'us' ? 'score' : 'il_optx_score']}\n onChange={handleChange}\n valueRationale={getScoreRationaleReason()}\n typeOptions={activeRationaleScoreType as RationaleType}\n collapsableValue={false}\n storeRationale={rationale}\n scoreType=\"score\"\n />\n )}\n </Styled.DependentPanelContainer>\n {defaultScore === 'us' && (\n <Styled.DependentPanelContainer\n canBeShown={!!(company.is_software && company.is_interesting === true)}\n showArrow={false}\n header={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <>\n <CollapsableCardInfo\n title={handleCardTitle(NEW_SCORE_CARD_NAME, defaultScore)}\n description=\"Do you agree with the new score?\"\n >\n <ThumbActions\n onUpdateThumbsChecked={updateFields}\n collapsableOptions=\"New Score\"\n isChecked={company.optx_score_v3_verified}\n activeKey={accordionKey}\n />\n </CollapsableCardInfo>\n <Styled.CardInfoDivider $isChromePlugin={isInChromeExtension} />\n <NewOptxScoreRationale\n company={company as Company}\n onChange={handleChange}\n isShowingRationale={false}\n defaultScore={defaultScore}\n />\n </>\n }\n key={NEW_SCORE_CARD_NAME}\n >\n <NewOptxScoreRationale\n company={company as Company}\n onChange={handleChange}\n isShowingRationale={true}\n defaultScore={defaultScore}\n />\n {activeRationaleNewScoreType !== null && (\n <CollapsableFields\n score={company.score_v3}\n onChange={handleChange}\n valueRationale={getNewScoreRationaleReason()}\n typeOptions={activeRationaleNewScoreType as RationaleType}\n collapsableValue={false}\n storeRationale={rationale}\n scoreType=\"score_v3\"\n />\n )}\n </Styled.DependentPanelContainer>\n )}\n </Collapse>\n </div>\n </Styled.StyledDrawer>\n );\n};\n\nexport default AddResearchRationale;\n","import { SpecialCriteria } from '@models/feature/analystsLeaderboard/SpecialCriteria';\n\nexport const specialCriterias: Record<SpecialCriteria, boolean> = { pipeline_information: true };\n","import { call, put, takeLatest, fork } from 'redux-saga/effects';\nimport { notifyAction } from '@optx/core/notifications';\nimport { FilterService } from '@services/api';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { Filter, FilterSource } from '@optx/models/filters';\n// constants\nimport { pipelineCriteria } from '../../constants/custom-criteria';\n// redux\nimport * as actions from '../actions';\nimport { UpdateValuePayload, FilterMeta } from '../filters/interfaces';\nimport { isSpecialCriteria } from '../../utils/isSpecialCriteria';\n\nexport function* getFiltersSaga() {\n try {\n const res: AxiosResponse<FilterSource<Filter<any>>[]> = yield call(\n FilterService.getAnalystLeaderboardOptions\n );\n\n yield put(actions.filters.fetchSuccess(res.data));\n } catch (error: any) {\n yield put(notifyAction('error', 'Error fetching analysts leaderboard filters!', { error }));\n }\n}\n\nexport function* searchSaga() {\n yield put(actions.search.search());\n yield put(actions.touchesAcrossRegion.fetchTouchesAcrossRegion());\n}\n\nexport function* updateValueSaga(action: PayloadAction<UpdateValuePayload>) {\n if (!isSpecialCriteria(action.payload.criteria)) {\n yield put(actions.search.search());\n yield put(actions.touchesAcrossRegion.fetchTouchesAcrossRegion());\n }\n}\n\nexport function* clearFilterSaga(action: PayloadAction<FilterMeta>) {\n const { criteria } = action.payload;\n\n if (criteria !== pipelineCriteria) {\n yield fork(searchSaga);\n }\n}\n\nexport default function* analystsSaga() {\n yield takeLatest(actions.filters.fetch, getFiltersSaga);\n yield takeLatest(actions.filters.fetchSuccess, searchSaga);\n yield takeLatest(actions.filters.clearAllFilters, searchSaga);\n yield takeLatest(actions.filters.clearFilter, clearFilterSaga);\n yield takeLatest(actions.filters.updateValue, updateValueSaga);\n}\n","import { SpecialCriteria } from '@optx/models/feature/analystsLeaderboard/SpecialCriteria';\nimport { specialCriterias } from '../constants/specialCriteria';\n\nexport function isSpecialCriteria(criteria?: string) {\n if (!criteria) {\n return false;\n }\n\n return specialCriterias[criteria as SpecialCriteria];\n}\n","import { Dictionary } from 'lodash';\nimport { call, put, select, takeLatest, fork } from 'redux-saga/effects';\nimport queryString from 'query-string';\nimport { AxiosResponse } from 'axios';\n// models\nimport { UserInformation } from '@models/user';\n// utils\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\n// services\nimport { AnalystService } from '@services/api';\nimport NotificationService from '@optx/services/NotificationService';\n// Redux\nimport {\n actions as userInformationActions,\n selectors as userInformationSelectors,\n} from '@redux/user/information';\n// Local\n// redux\nimport { BaseFilter, PreselectedFilter } from '@optx/models/filters';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\n\nexport function* searchAnalystsLeaderboardSaga() {\n const values: Dictionary<PreselectedFilter> = yield select(selectors.filters.getFilterValues);\n const filtersByColumn: Dictionary<BaseFilter> = yield select(\n selectors.filters.getNormalizedFilters\n );\n\n try {\n const queryValues = mapFiltersToURLParams(filtersByColumn, values);\n const query = queryString.stringify(queryValues, { arrayFormat: 'comma' });\n const res: AxiosResponse<any> = yield call(AnalystService.getDasboard, query);\n\n yield put(actions.search.searchSuccess(res.data));\n yield fork(updateFilterSettings);\n } catch (e: any) {\n yield put(actions.search.searchFail('Error fetching analysts leaderboard!'));\n }\n}\n\n/**\n * Update user settings filter.\n * @param query\n */\nfunction* updateFilterSettings() {\n // Compute again values but this time include all the values, not only values for current selected criteria.\n const allValues: Dictionary<PreselectedFilter> = yield select(selectors.filters.getAllValues);\n const filtersByColumn: Dictionary<BaseFilter> = yield select(\n selectors.filters.getNormalizedFilters\n );\n const queryValues = mapFiltersToURLParams(filtersByColumn, allValues);\n const query = queryString.stringify(queryValues, { arrayFormat: 'comma' });\n\n const userSettings: UserInformation | null = yield select(\n userInformationSelectors.getUserSettings\n );\n\n try {\n // filters are loaded after user info so it should have value.\n const oldQuery = userSettings!.settings.session_settings?.analysts_leaderboard_filters;\n\n if (query !== oldQuery) {\n yield put(userInformationActions.updateUserSettings({ analysts_leaderboard_filters: query }));\n }\n } catch (error: any) {\n NotificationService.error('Failed persisting filters settings!');\n }\n}\n\nexport default function* searchAnalystsLeaderboardSagas() {\n yield takeLatest(actions.search.search, searchAnalystsLeaderboardSaga);\n}\n","import { takeLatest, put, select } from 'redux-saga/effects';\nimport { History } from 'history';\nimport {\n actions as userInformationActions,\n selectors as userInformationSelectors,\n} from '@redux/user/information';\nimport { selectors as routerSelectors } from '@redux/router';\n// constants\nimport { ALL_REPORTS } from '@constants/routes';\n// redux\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { PAGE_LOADED } from '../init/types';\n\n/**\n * Initialize when page is loaded and if user comes from other pages.\n */\nexport function* pageLoadedSaga() {\n const shouldFetchFilters: boolean = yield select(selectors.filters.shouldFetch);\n const loaded: boolean = yield select(userInformationSelectors.loaded);\n\n if (loaded && shouldFetchFilters) {\n yield put(actions.filters.fetch());\n }\n}\n\n/**\n * Initialize filters when user information have been loade.\n * User is on analysts leaderboard page.\n */\nexport function* initFilters() {\n const router: History = yield select(routerSelectors.getRouter);\n\n if (router.location.pathname === ALL_REPORTS.sourcingAnalystsLeaderboard) {\n const shouldFetchFilters: boolean = yield select(selectors.filters.shouldFetch);\n\n if (shouldFetchFilters) {\n yield put(actions.filters.fetch());\n }\n }\n}\n\nexport default function* initSagas() {\n yield takeLatest(PAGE_LOADED, pageLoadedSaga);\n yield takeLatest(userInformationActions.fetchUserInformationSuccess, initFilters);\n}\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport queryString from 'query-string';\n// utils\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\n// services\nimport { AnalystService } from '@services/api';\n// Local\n// redux\nimport { Dictionary } from 'lodash';\nimport { BaseFilter, PreselectedFilter } from '@optx/models/filters';\nimport { AxiosResponse } from 'axios';\nimport { TouchesAcrossRegionResponse } from '@optx/models/feature/analystsLeaderboard/touchesAcrossRegion';\nimport * as selectors from '../selectors';\nimport * as actions from '../actions';\n\nexport function* fetchTouchesAcrossRegionSaga() {\n const values: Dictionary<PreselectedFilter> = yield select(selectors.filters.getFilterValues);\n const filtersByColumn: Dictionary<BaseFilter<any>> = yield select(\n selectors.filters.getNormalizedFilters\n );\n\n try {\n const queryValues = mapFiltersToURLParams(filtersByColumn, values);\n const query = queryString.stringify(queryValues, { arrayFormat: 'comma' });\n const res: AxiosResponse<TouchesAcrossRegionResponse> = yield call(\n AnalystService.getMapInfo,\n query\n );\n\n yield put(actions.touchesAcrossRegion.fetchTouchesAcrossRegionSuccess(res.data));\n } catch (e: any) {\n yield put(\n actions.touchesAcrossRegion.fetchTouchesAcrossRegionFail(\n 'Error fetching touches across region!'\n )\n );\n }\n}\n\nexport default function* touchesAcrossRegionSagas() {\n yield takeLatest(\n actions.touchesAcrossRegion.fetchTouchesAcrossRegion,\n fetchTouchesAcrossRegionSaga\n );\n}\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { EmailStatistics } from '@optx/models/feature/analystsLeaderboard/EmailStatistics';\n// services\nimport { AnalystService } from '@services/api';\n// Local\n// redux\nimport { AxiosResponse } from 'axios';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { UpdateValuePayload, FilterMeta } from '../filters/interfaces';\n\nexport function* fetchEmailStatistics() {\n try {\n yield put(actions.emailStatistics.fetch());\n const query: string = yield select(selectors.filters.getCommonFiltersQuery);\n const res: AxiosResponse<EmailStatistics> = yield call(\n AnalystService.getEmailStatistics,\n query\n );\n\n yield put(actions.emailStatistics.fetchSuccess(res.data));\n } catch (e: any) {\n yield put(actions.emailStatistics.fetchFail('Error fetching Email Statistics!'));\n }\n}\n\n/**\n * Call fetch email only when filter is common.\n * @param filterKey\n */\nexport function* commonFilterChangeSaga(filterKey: string) {\n const isCommonFilter: boolean = yield select(state =>\n selectors.filters.isCommonFilter(state, filterKey)\n );\n\n if (isCommonFilter) {\n yield call(fetchEmailStatistics);\n }\n}\n\nexport function* clearFilterSaga(action: PayloadAction<FilterMeta>) {\n const { filterKey } = action.payload;\n yield call(commonFilterChangeSaga, filterKey);\n}\n\nexport function* updateValueSaga(action: PayloadAction<UpdateValuePayload>) {\n const { filterKey } = action.payload;\n yield call(commonFilterChangeSaga, filterKey);\n}\n\nexport default function* emailStatisticsSagas() {\n yield takeLatest(actions.filters.fetchSuccess, fetchEmailStatistics);\n yield takeLatest(actions.filters.clearAllFilters, fetchEmailStatistics);\n yield takeLatest(actions.filters.clearFilter, clearFilterSaga);\n yield takeLatest(actions.filters.updateValue, updateValueSaga);\n}\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// services\nimport { AnalystService } from '@services/api';\n// Local\n// redux\nimport { AxiosResponse } from 'axios';\nimport { SmartTouchScore } from '@optx/models/feature/analystsLeaderboard/SmartTouchScore';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { UpdateValuePayload, FilterMeta } from '../filters/interfaces';\n\nexport function* fetchSmartTouchScore() {\n try {\n yield put(actions.smartTouchScore.fetch());\n const query: string = yield select(selectors.filters.getCommonFiltersQuery);\n const res: AxiosResponse<SmartTouchScore> = yield call(\n AnalystService.getSmartTouchScore,\n query\n );\n\n yield put(actions.smartTouchScore.fetchSuccess(res.data));\n } catch (e: any) {\n yield put(actions.smartTouchScore.fetchFail('Error fetching Smart Touch Score!'));\n }\n}\n\n/**\n * Call fetch email only when filter is common.\n * @param filterKey\n */\nexport function* commonFilterChangeSaga(filterKey: string) {\n const isCommonFilter: boolean = yield select(state =>\n selectors.filters.isCommonFilter(state, filterKey)\n );\n\n if (isCommonFilter) {\n yield call(fetchSmartTouchScore);\n }\n}\n\nexport function* clearFilterSaga(action: PayloadAction<FilterMeta>) {\n const { filterKey } = action.payload;\n yield call(commonFilterChangeSaga, filterKey);\n}\n\nexport function* updateValueSaga(action: PayloadAction<UpdateValuePayload>) {\n const { filterKey } = action.payload;\n yield call(commonFilterChangeSaga, filterKey);\n}\n\nexport default function* emailStatisticsSagas() {\n yield takeLatest(actions.filters.fetchSuccess, fetchSmartTouchScore);\n yield takeLatest(actions.filters.clearAllFilters, fetchSmartTouchScore);\n yield takeLatest(actions.filters.clearFilter, clearFilterSaga);\n yield takeLatest(actions.filters.updateValue, updateValueSaga);\n}\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { AdditionalStatistics } from '@optx/models/feature/analystsLeaderboard/AdditionalStatistics';\n// services\nimport { AnalystService } from '@services/api';\n// Local\n// redux\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { UpdateValuePayload, FilterMeta } from '../filters/interfaces';\n\nexport function* fetchAdditionalStatistics() {\n try {\n const query: string = yield select(selectors.filters.getCommonFiltersQuery);\n const res: AxiosResponse<AdditionalStatistics> = yield call(AnalystService.getOPTXStats, query);\n\n yield put(actions.additionalStatistics.fetchSuccess(res.data));\n } catch (e: any) {\n yield put(actions.additionalStatistics.fetchFail('Error fetching additional Statistics!'));\n }\n}\n\n/**\n * Call fetch only when filter is common.\n * @param filterKey\n */\nexport function* commonFilterChangeSaga(filterKey: string) {\n const isCommonFilter: boolean = yield select(state =>\n selectors.filters.isCommonFilter(state, filterKey)\n );\n\n if (isCommonFilter) {\n yield call(fetchAdditionalStatistics);\n }\n}\n\nexport function* clearFilterSaga(action: PayloadAction<FilterMeta>) {\n const { filterKey } = action.payload;\n yield call(commonFilterChangeSaga, filterKey);\n}\n\nexport function* updateValueSaga(action: PayloadAction<UpdateValuePayload>) {\n const { filterKey } = action.payload;\n yield call(commonFilterChangeSaga, filterKey);\n}\n\nexport default function* additionalStatisticsSagas() {\n yield takeLatest(actions.filters.fetchSuccess, fetchAdditionalStatistics);\n yield takeLatest(actions.filters.clearAllFilters, fetchAdditionalStatistics);\n yield takeLatest(actions.filters.clearFilter, clearFilterSaga);\n yield takeLatest(actions.filters.updateValue, updateValueSaga);\n}\n","import { call, put, takeLatest, fork, select } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\nimport { Dictionary } from 'lodash';\n\nimport { UserInformation } from '@optx/models/user';\nimport { BaseFilter, PreselectedFilter } from '@optx/models/filters';\nimport mapFiltersToURLParams from '@utils/filters/mapFiltersToURLParams';\nimport { getErrorMessage } from '@utils/api/errors';\nimport { AnalystService } from '@services/api';\nimport {\n actions as userInformationActions,\n selectors as userInformationSelectors,\n} from '@redux/user/information';\nimport NotificationService from '@optx/services/NotificationService';\nimport { UpdateValuePayload, FilterMeta } from '../filters/interfaces';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { pipelineCriteria } from '../../constants/custom-criteria';\n\nexport function* searchSaga(updateSettings: boolean = true) {\n try {\n const commonValues: Dictionary<PreselectedFilter> = yield select(\n selectors.filters.getCommonValues\n );\n const criteriaValues: Dictionary<PreselectedFilter> = yield select(state =>\n selectors.filters.getValuesByCriteria(state, pipelineCriteria)\n );\n const filtersByColumn: Dictionary<BaseFilter<any>> = yield select(\n selectors.filters.getNormalizedFilters\n );\n const values: Dictionary<PreselectedFilter> = {\n ...commonValues,\n ...criteriaValues,\n };\n\n // the pipeline_companies_rank filter has two options, one of them having the value as \"is_rank_of_5\",\n // but when applying this filter api expects to receive \"true\". this should ideally be fixed from api, but\n // for now will use this workaround.\n if (values.pipeline_companies_rank === 'is_rank_of_5') {\n values.pipeline_companies_rank = 'true';\n }\n\n const criteriaQueryValues = mapFiltersToURLParams(filtersByColumn, values);\n const query = queryString.stringify(criteriaQueryValues, { arrayFormat: 'comma' });\n\n const res: AxiosResponse = yield call(AnalystService.getPipelineInfo, query);\n\n yield put(actions.pipelineInformation.fetchSuccess(res.data));\n\n if (updateSettings) {\n yield fork(updateUserSettings, query);\n }\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to fetch analyst Pipeline Information!');\n yield put(actions.pipelineInformation.fetchFail(message));\n }\n}\n\nfunction* updateUserSettings(query: string) {\n try {\n const userSettings: UserInformation | null = yield select(\n userInformationSelectors.getUserSettings\n );\n\n const oldQuery = userSettings!.settings.session_settings?.analysts_leaderboard_filters;\n\n if (query !== oldQuery) {\n yield put(userInformationActions.updateUserSettings({ analysts_leaderboard_filters: query }));\n }\n } catch (error: any) {\n const message = getErrorMessage(error, 'Failed to update persisted filters!');\n NotificationService.error(message);\n }\n}\n\nexport function* updateValueSaga(action: PayloadAction<UpdateValuePayload>) {\n let shouldSearch = action.payload.criteria === pipelineCriteria;\n\n if (!shouldSearch) {\n shouldSearch = yield select(state =>\n selectors.filters.isCommonFilter(state, action.payload.filterKey)\n );\n }\n\n if (shouldSearch) {\n yield put(actions.pipelineInformation.fetch());\n yield fork(searchSaga);\n }\n}\n\n// Clear single filter.\nexport function* clearFilterSaga(action: PayloadAction<FilterMeta>) {\n const { criteria } = action.payload;\n\n if (criteria === pipelineCriteria) {\n yield put(actions.pipelineInformation.fetch());\n yield fork(searchSaga);\n }\n}\n\nexport function* clearAllFiltersSaga() {\n yield put(actions.pipelineInformation.fetch());\n // Don't update settings. They are already updated.\n yield fork(searchSaga, false);\n}\n\nexport function* initSaga() {\n yield put(actions.pipelineInformation.fetch());\n yield fork(searchSaga);\n}\n\nexport default function* pipelineInformationSagas() {\n yield takeLatest(actions.filters.fetchSuccess, initSaga);\n yield takeLatest(actions.filters.clearAllFilters, clearAllFiltersSaga);\n yield takeLatest(actions.filters.clearFilter, clearFilterSaga);\n yield takeLatest(actions.filters.updateValue, updateValueSaga);\n}\n","import { fork } from 'redux-saga/effects';\n// redux\nimport filters from './filters';\nimport search from './search';\nimport init from './init';\nimport touchesAcrossRegion from './touchesAcrossRegion';\nimport emailStatistics from './emailStatistics';\nimport smartTouchScore from './smartTouchScore';\nimport additionalStatistics from './additionalStatistics';\nimport pipelineInformation from './pipeline-information';\n\nexport default function* analystsLeaderboardSaga() {\n yield fork(init);\n yield fork(filters);\n yield fork(search);\n yield fork(touchesAcrossRegion);\n yield fork(emailStatistics);\n yield fork(smartTouchScore);\n yield fork(additionalStatistics);\n yield fork(pipelineInformation);\n}\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from './state';\nimport { featureName } from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","import moment from 'moment';\r\nimport { isEqual } from 'lodash';\r\nimport numeral from 'numeral';\r\n// models\r\nimport { SelectOption } from '@optx/models/Option';\r\nimport { DatePresented } from '@optx/models/Company';\r\n// interfaces\r\nimport {\r\n ChangedCompanyField,\r\n FinancialField,\r\n FieldChangedValue,\r\n} from '@features/company/audit-trail/state/interfaces';\r\n// constants\r\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\r\nimport { formatMoney } from './format';\r\nimport { abbreviateValue, roundNumber } from './number';\r\nimport { isOptionChecked } from './option';\r\n// utils\r\nimport { showRationaleForStage, showOpinionForNextSteps, formatNumber } from '@optx/utils/helpers';\r\nimport { highlightText } from './text';\r\n\r\nexport const renderAfterValue = (\r\n field: ChangedCompanyField,\r\n isMoney: boolean,\r\n options?: SelectOption[]\r\n) => {\r\n const afterValue = field.after_value;\r\n\r\n if (\r\n field.field_changed === 'Revenue' ||\r\n field.field_changed === 'Last Revenue' ||\r\n field.field_changed === 'ARR' ||\r\n field.field_changed === 'EBITDA' ||\r\n field.field_changed === 'GM %'\r\n ) {\r\n if (afterValue) {\r\n let value = (afterValue as FinancialField).value;\r\n const isFromDropdown = isOptionChecked(value, options);\r\n\r\n if (value === null) {\r\n return 'None';\r\n } else if (typeof value === 'number' && !isFromDropdown) {\r\n field.field_changed === 'GM %'\r\n ? (value = `${formatMoney(value, true)}%`)\r\n : (value = `$${formatMoney(value, true)}`);\r\n } else if (typeof value === 'object' && isFromDropdown) {\r\n value = options?.find(option => isEqual(option.rangeValue, value))?.label ?? null;\r\n }\r\n\r\n return (\r\n <>\r\n <span style={highlightText(value as string)}>{`${value} `}</span>\r\n <span>in {moment((afterValue as FinancialField)?.year?.toString()).format('YYYY')}</span>\r\n </>\r\n );\r\n }\r\n }\r\n\r\n if (field.field_changed === 'Date Presented') {\r\n if (afterValue === null) {\r\n return 'None';\r\n }\r\n\r\n const formatedValue = (afterValue as DatePresented[])\r\n .map(date => moment(date.date as string).format('DD MMM, YYYY'))\r\n .join(', ');\r\n\r\n return formatedValue;\r\n }\r\n\r\n if (field.field_changed === 'Ic Status Date' || field.field_changed === 'Expected Close Date') {\r\n return `${moment(afterValue as string).format('DD MMM, YYYY')}`;\r\n }\r\n\r\n if (field.field_changed === 'Product Category') {\r\n return afterValue === '[]' || afterValue === null ? 'None' : afterValue;\r\n }\r\n\r\n if (\r\n field.field_changed === 'US Website Rank' ||\r\n field.field_changed === 'WW Website Rank' ||\r\n field.field_changed === 'Crunchbase Rank' ||\r\n field.field_changed === 'G2 Reviews' ||\r\n field.field_changed === 'Capterra Reviews' ||\r\n field.field_changed === 'GD Reviews' ||\r\n field.field_changed === 'Twitter Followers'\r\n ) {\r\n if (afterValue === null) {\r\n return 'None';\r\n }\r\n\r\n return numeral(afterValue).format('0,0');\r\n }\r\n\r\n if (field.field_changed === 'Number of Employees') {\r\n if (afterValue === null) {\r\n return 'None';\r\n }\r\n\r\n return abbreviateValue(afterValue?.toString(), undefined, undefined, true);\r\n }\r\n\r\n if (field.field_changed === 'Optx Score' && afterValue === null) {\r\n return 'None';\r\n }\r\n\r\n if (Array.isArray(afterValue)) {\r\n if (afterValue.length === 0) {\r\n return 'None';\r\n }\r\n\r\n const formattedValue = (afterValue as string[]).join(', ');\r\n\r\n return formattedValue;\r\n }\r\n\r\n if (typeof afterValue === 'boolean') {\r\n return afterValue ? 'Yes' : 'No';\r\n }\r\n\r\n if (field.field_changed === FieldChangedValue.lastFundingDate) {\r\n return moment(afterValue as string).format('DD MMM, YYYY');\r\n }\r\n\r\n if (field.field_changed === FieldChangedValue.askingAmount) {\r\n if (afterValue === null) return 'None';\r\n\r\n return roundNumber(afterValue as string, NUMBER_FORMAT);\r\n }\r\n\r\n if (field.field_changed === FieldChangedValue.capitalRaised) {\r\n if (afterValue === null) {\r\n return 'None';\r\n }\r\n\r\n if (typeof afterValue === 'string' && afterValue.includes(' (plus Unknown)')) {\r\n const number = afterValue.split(' (')[0];\r\n\r\n return `${formatMoney(number)} (plus Unknown)`;\r\n }\r\n\r\n return formatMoney(afterValue as number);\r\n }\r\n\r\n if (\r\n (field.field_changed === 'Revenue Growth' || field.field_changed === 'Emp Growth Percent') &&\r\n typeof afterValue === 'number'\r\n ) {\r\n return `${numeral(afterValue).format(NUMBER_FORMAT)}%`;\r\n }\r\n\r\n if (field.field_changed === FieldChangedValue.sizeMultiple) {\r\n if (afterValue === null) {\r\n return 'None';\r\n }\r\n\r\n return formatNumber(afterValue as number);\r\n }\r\n\r\n // eslint-disable-next-line no-nested-ternary\r\n return isMoney && afterValue !== null\r\n ? formatMoney(afterValue as number)\r\n : afterValue !== null\r\n ? handleTypeOfValue(afterValue as string | number | FinancialField)\r\n : 'None';\r\n};\r\n\r\nconst handleTypeOfValue = (value: string | number | FinancialField) => {\r\n if (typeof value === 'number') {\r\n return numeral(value).format(NUMBER_FORMAT);\r\n }\r\n\r\n return value;\r\n};\r\n\r\nexport const renderFormerValue = (\r\n field: ChangedCompanyField,\r\n isMoney: boolean,\r\n options?: SelectOption[]\r\n) => {\r\n const beforeValue = field.before_value;\r\n\r\n if (field.field_changed === FieldChangedValue.lastFundingDate && beforeValue) {\r\n return `(was ${moment(beforeValue as string).format('DD MMM, YYYY')})`;\r\n }\r\n\r\n if (field.field_changed === FieldChangedValue.askingAmount) {\r\n if ([undefined, 'null', '0'].includes(beforeValue?.toString())) {\r\n return '(was None)';\r\n }\r\n\r\n if (beforeValue) {\r\n return `(was ${roundNumber(beforeValue as string, NUMBER_FORMAT)})`;\r\n }\r\n }\r\n\r\n if (field.field_changed === 'Date Presented') {\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n const formatedValue = (beforeValue as DatePresented[])\r\n .map(date => moment(date.date as string).format('DD MMM, YYYY'))\r\n .join(', ');\r\n\r\n return `(was ${formatedValue})`;\r\n }\r\n\r\n if (field.field_changed === 'Ic Status Date' || field.field_changed === 'Expected Close Date') {\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n return `(was ${moment(beforeValue as string).format('DD MMM, YYYY')})`;\r\n }\r\n\r\n if (field.field_changed === 'Product Category') {\r\n return `(was ${beforeValue === '[]' || beforeValue === null ? 'None' : beforeValue})`;\r\n }\r\n\r\n if (\r\n field.field_changed === 'US Website Rank' ||\r\n field.field_changed === 'WW Website Rank' ||\r\n field.field_changed === 'Crunchbase Rank' ||\r\n field.field_changed === 'G2 Reviews' ||\r\n field.field_changed === 'Capterra Reviews' ||\r\n field.field_changed === 'GD Reviews' ||\r\n field.field_changed === 'Twitter Followers'\r\n ) {\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n return `(was ${numeral(beforeValue).format('0,0')})`;\r\n }\r\n\r\n if (field.field_changed === 'Number of Employees') {\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n return `(was ${abbreviateValue(beforeValue?.toString(), undefined, undefined, true)})`;\r\n }\r\n\r\n if (field.field_changed === 'Optx Score' && beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n if (\r\n field.field_changed === 'Revenue' ||\r\n field.field_changed === 'Last Revenue' ||\r\n field.field_changed === 'ARR' ||\r\n field.field_changed === 'EBITDA' ||\r\n field.field_changed === 'GM %'\r\n ) {\r\n if (beforeValue && !isEmptyRevenue(field)) {\r\n let value = (beforeValue as FinancialField).value;\r\n const isFromDropdown = isOptionChecked(value, options);\r\n\r\n if (typeof value === 'number' && !isFromDropdown) {\r\n field.field_changed === 'GM %'\r\n ? (value = `${formatMoney(value, true)}%`)\r\n : (value = `$${formatMoney(value, true)}`);\r\n } else if (typeof value === 'object' && isFromDropdown) {\r\n value = options?.find(option => isEqual(option.rangeValue, value))?.label ?? null;\r\n }\r\n\r\n return (\r\n <>\r\n <span>\r\n (was <span style={highlightText(value as string)}>{`${value}`}</span> in{' '}\r\n </span>\r\n <span>{moment((beforeValue as FinancialField)?.year?.toString()).format('YYYY')})</span>\r\n </>\r\n );\r\n }\r\n\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n if (field.field_changed === FieldChangedValue.yearFounded) {\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n return `(was ${beforeValue?.toString()})`;\r\n }\r\n\r\n if (field.field_changed === FieldChangedValue.stage) {\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n return `(was ${beforeValue}${showRationaleForStage(beforeValue as string) ? '' : ')'}`;\r\n }\r\n\r\n if (field.field_changed === FieldChangedValue.nextSteps) {\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n return `(was ${beforeValue}${\r\n showOpinionForNextSteps(beforeValue as string) && field.before_value_opinion ? '' : ')'\r\n }`;\r\n }\r\n\r\n if (field.field_changed === FieldChangedValue.capitalRaised) {\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n if (typeof beforeValue === 'string' && beforeValue.includes(' (plus Unknown)')) {\r\n const number = beforeValue.split(' (')[0];\r\n\r\n return `(was ${formatMoney(number)} (plus Unknown))`;\r\n }\r\n\r\n return `(was ${formatMoney(beforeValue as number)})`;\r\n }\r\n\r\n if (field.field_changed === FieldChangedValue.sizeMultiple) {\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n return `(was ${formatNumber(beforeValue as number)})`;\r\n }\r\n\r\n if (Array.isArray(beforeValue)) {\r\n if (beforeValue.length === 0) {\r\n return '(was None)';\r\n }\r\n\r\n const formattedValue = (beforeValue as string[]).join(', ');\r\n\r\n return `(was ${formattedValue})`;\r\n }\r\n\r\n if (typeof beforeValue === 'boolean') {\r\n return `(was ${beforeValue ? 'Yes' : 'No'})`;\r\n }\r\n\r\n if (\r\n (field.field_changed === 'Revenue Growth' || field.field_changed === 'Emp Growth Percent') &&\r\n typeof beforeValue === 'number'\r\n ) {\r\n return `(was ${numeral(beforeValue).format(NUMBER_FORMAT)}%)`;\r\n }\r\n\r\n if (beforeValue || beforeValue === 0) {\r\n if (isMoney) {\r\n return `(was ${formatMoney(beforeValue as number)})`;\r\n }\r\n\r\n return `(was ${handleTypeOfValue(beforeValue as string | number | FinancialField)})`;\r\n }\r\n\r\n if (beforeValue === null) {\r\n return '(was None)';\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * render the 'after_optx' value from history field\r\n * @param {ChangedCompanyField} field\r\n */\r\nexport const renderAfterOPTX = (field: ChangedCompanyField) => {\r\n const afterOPTX = field.after_optx;\r\n\r\n if (afterOPTX || afterOPTX === 0) {\r\n return handleTypeOfValue(afterOPTX);\r\n }\r\n\r\n if (afterOPTX === null) {\r\n return 'None';\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * render the 'before_optx' value from history field\r\n * @param {ChangedCompanyField} field\r\n */\r\nexport const renderFormerOPTX = (field: ChangedCompanyField) => {\r\n const beforeOPTX = field.before_optx;\r\n\r\n if (beforeOPTX || beforeOPTX === 0) {\r\n return `(was ${handleTypeOfValue(beforeOPTX)})`;\r\n }\r\n\r\n if (beforeOPTX === null) {\r\n return '(was None)';\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * get internal filter value based on active tab\r\n * @param {string} tabKey active tab key\r\n */\r\nexport const getInternalValue = (tabKey: string) => {\r\n switch (tabKey) {\r\n case '2': {\r\n return 'False';\r\n }\r\n\r\n case '3': {\r\n return 'True';\r\n }\r\n\r\n default: {\r\n return undefined;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * get optx filter value based on active tab\r\n * @param {string} tabKey active tab key\r\n */\r\nexport const getOPTXValue = (tabKey: string) => {\r\n switch (tabKey) {\r\n case '2': {\r\n return 'False';\r\n }\r\n\r\n case '3': {\r\n return 'False';\r\n }\r\n\r\n case '4': {\r\n return 'True';\r\n }\r\n\r\n default: {\r\n return undefined;\r\n }\r\n }\r\n};\r\n\r\nexport const isEmptyRevenue = (field: ChangedCompanyField) => {\r\n if (field.field_changed === 'Last Revenue')\r\n return (\r\n isEqual(field.before_value, { value: 0, year: null }) ||\r\n isEqual(field.before_value, { value: null, year: 0 }) ||\r\n field.after_value === null ||\r\n field.before_value === null\r\n );\r\n\r\n return false;\r\n};\r\n","import styled, { css } from 'styled-components';\nimport { Card, Input, DatePicker } from 'antd';\n\nconst AuditTrailWrapper = styled(Card)<{ $hasFields: boolean }>`\n .ant-card-body {\n padding: 0;\n }\n\n .ant-row {\n padding: 15px 24px 0;\n }\n\n .profile-rationale > .ant-row:not(.profile-information__subtitle) {\n padding: 0;\n }\n\n .ant-tabs {\n overflow: unset;\n\n .ant-tabs-content-holder {\n ${props =>\n props.$hasFields &&\n css`\n margin-top: 30px;\n `}\n position: relative;\n padding: 15px 24px 0;\n\n &:before {\n ${props =>\n props.$hasFields &&\n css`\n content: '';\n display: block;\n position: absolute;\n top: -70px;\n left: calc(24% - 2px);\n width: 2px;\n height: 90px;\n background: #f0f0f0;\n `}\n }\n }\n\n .ant-timeline-item {\n &-label {\n width: calc(20% - 12px);\n font-weight: 600;\n color: #616f82;\n }\n\n &-head,\n &-tail {\n left: 22%;\n }\n\n .ant-timeline-item-content {\n left: calc(22% - 4px);\n width: calc(70% - 12px);\n }\n }\n\n .ant-tabs-nav {\n border-bottom: 2px solid #f0f0f0;\n margin: 0;\n padding: 15px 24px 0;\n }\n\n .ant-tabs-tab {\n color: #000000 !important;\n text-transform: none !important;\n letter-spacing: unset !important;\n }\n\n .ant-tabs-tab-active .ant-tabs-tab-btn {\n color: #1890ff !important;\n }\n .ant-tabs-ink-bar {\n background: #1890ff !important;\n }\n\n .ant-timeline-item-pending {\n .ant-timeline-item-tail {\n top: 0;\n height: 100%;\n border-left: 2px solid #f0f0f0;\n }\n\n .ant-timeline-item-head {\n display: none;\n }\n }\n }\n`;\n\nconst Label = styled.span`\n font-size: 14px;\n line-height: 22px;\n text-transform: uppercase;\n /* Gray */\n color: #90a0b7;\n`;\n\nconst Value = styled.span<{ isDescription?: boolean }>`\n font-weight: 600;\n /* Blue */\n color: #1890ff;\n\n ${({ isDescription }) =>\n isDescription &&\n css`\n span {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n `}\n`;\n\nconst Rationale = styled.span<{ isAfterRationale?: boolean }>`\n display: inline-block;\n padding-left: 5px;\n\n ${props =>\n props.isAfterRationale &&\n css`\n font-weight: 600;\n /* Blue */\n color: #1890ff;\n `}\n`;\n\nconst Opinion = styled.span`\n font-weight: 600;\n /* Blue */\n color: #1890ff;\n`;\n\nconst FormerValue = styled.span<{ isDescription?: boolean }>`\n color: #90a0b7;\n\n ${({ isDescription }) =>\n isDescription &&\n css`\n span {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n `}\n`;\n\nconst User = styled.span`\n display: block;\n font-weight: 600;\n color: #000000;\n`;\n\nconst Bar = styled.div`\n width: 1px;\n height: 31px;\n background: #d9d9d9;\n display: block;\n position: absolute;\n left: 47%;\n top: 0;\n padding: 0;\n`;\n\nconst SearchField = styled(Input.Search)`\n margin-left: 0;\n padding-left: 0;\n .ant-input-wrapper {\n display: flex;\n flex-direction: row-reverse;\n margin-left: 0;\n padding-left: 0;\n .ant-input {\n padding-left: 35px;\n }\n .ant-input-group-addon:last-child,\n .ant-input-group-addon {\n position: absolute;\n z-index: 2;\n top: 1px;\n left: 1px;\n .ant-btn {\n vertical-align: top;\n border: 0 none;\n height: 29px;\n }\n &:hover .ant-btn {\n color: rgba(0, 0, 0, 0.85);\n }\n }\n }\n .ant-input-search-icon {\n margin-left: 0;\n &:before {\n display: none;\n }\n }\n`;\n\nconst { RangePicker } = DatePicker;\n\nconst CustomRangePicker = styled(RangePicker)`\n .left-calendar {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: 35%;\n padding: 10px;\n }\n\n .ant-picker-input {\n width: calc(100% - 20px);\n &:first-of-type {\n margin-right: 20px;\n }\n }\n\n .ant-picker-range-separator {\n padding: 0;\n }\n\n .ant-picker-active-bar {\n display: none;\n }\n`;\n\nexport const Styles = {\n AuditTrailWrapper,\n Label,\n Value,\n Rationale,\n Opinion,\n FormerValue,\n User,\n Bar,\n SearchField,\n CustomRangePicker,\n};\n","/* eslint-disable max-len */\nimport React, { useMemo, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { Menu, Button, Dropdown, Typography, Tooltip } from 'antd';\n// models\nimport { ProductCategory, DatePresented } from '@optx/models/Company';\nimport { ChangedCompanyField, FieldChangedValue } from '../state/interfaces';\n// constants\nimport globalConfig from '@optx/constants/config';\nimport { CompanyPageHistory } from '@constants/pendoActions';\nimport { NEXT_STEPS_OPINION_ENDPOINT } from '@constants/asyncEndpoints';\n// utils\nimport {\n renderAfterValue,\n renderFormerValue,\n isEmptyRevenue,\n renderFormerOPTX,\n renderAfterOPTX,\n} from '@optx/utils/auditFields';\nimport { showRationaleForStage, showOpinionForNextSteps } from '@optx/utils/helpers';\nimport { validateField } from '@optx/utils/editFields';\nimport { formatValueToMillions } from '@optx/utils/format';\n// hooks\nimport {\n useInitialFetchEditOptions,\n useInject as useInjectCompanyIndividualEdit,\n} from '@optx/components/feature/company-individual-edit';\n// redux\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport { getFinancialFilterOptions } from '@optx/redux/company/filters/selectors';\nimport { CompanyService, UserService } from '@optx/services/api';\nimport { getIsAdminOrAnalyst } from '@optx/redux/user/information/selectors';\nimport { selectors as auditSelectors } from '@features/company/audit-trail/state/index';\nimport { selectors as opportunitySelectors } from '@redux/company/opportunity-presentation';\n// components\nimport Icon from '@components/common/Icon';\nimport {\n EditFieldCheckBoxSelectAsync,\n EditFieldRadio,\n EditFieldSingleSelect,\n EditFieldSingleSelectOther,\n EditFieldSingleSelectText,\n EditFieldFinancial,\n EditFieldRadioRationale,\n EditFieldMultiSelect,\n EditFieldMultiSelectAsyncProductCategory,\n EditFieldCheckboxText,\n EditFieldMultiSelectAsyncCreatable,\n EditFieldTextarea,\n} from '../../edit-fields/components';\nimport EditFieldText from '../../edit-fields/components/EditFieldText';\nimport EditFieldDate from '../../edit-fields/components/EditFieldDate';\nimport EditFieldNumber from '@optx/components/pages/CompanyProfile/ProfileTabs/DealPresentation/components/inputs/EditFieldNumber';\nimport EditPreparationFieldSingleSelect from '@components/pages/CompanyProfile/ProfileTabs/DealPresentation/components/inputs/EditFieldSingleSelect';\n// styles\nimport { Styles } from './AuditTrail.styled';\n\nconst Container = styled.div`\n display: grid;\n grid-template-columns: 1fr 32px;\n position: relative;\n\n .ant-popover {\n z-index: 1060;\n }\n`;\n\ninterface AuditFieldProps {\n field: ChangedCompanyField;\n}\n\nexport const AuditField: React.FC<AuditFieldProps> = ({ field }) => {\n const containerRef = useRef(null);\n const company = useSelector(profileSelectors.getProfile);\n const fields = useSelector(auditSelectors.getFields);\n const isAdminOrAnalyst = useSelector(getIsAdminOrAnalyst);\n const opportunityData = useSelector(opportunitySelectors.getOpportunityPresentation);\n const opportunityDataDealPreparation = useSelector(opportunitySelectors.getDealPreparationValue);\n const dealValues = useSelector(opportunitySelectors.getDealPreparationValue);\n\n const arrOptions = useSelector(getFinancialFilterOptions('last_arr_value'));\n const ebitdaOptions = useSelector(getFinancialFilterOptions('ebitda_numeric'));\n const revenueOptions = useSelector(getFinancialFilterOptions('last_rev_update_amount'));\n const gmOptions = useSelector(getFinancialFilterOptions('last_gross_margin'));\n\n const fieldOptions = {\n [FieldChangedValue.revenue]: revenueOptions,\n [FieldChangedValue.lastRevenue]: revenueOptions,\n [FieldChangedValue.lastRevUpdateAmount]: revenueOptions,\n [FieldChangedValue.ebitda]: ebitdaOptions,\n [FieldChangedValue.arr]: arrOptions,\n [FieldChangedValue.gm]: gmOptions,\n };\n\n const optxScoreImpactLabel =\n field.score_type === 'il'\n ? 'IL OPTX Score Impact: '\n : field.score_type === 'us'\n ? 'OPTX Score Impact: '\n : 'OPTX Score Beta Impact: ';\n\n const isMoney =\n field.field_changed === FieldChangedValue.revenue ||\n field.field_changed === FieldChangedValue.lastRaisedAmount ||\n field.field_changed === FieldChangedValue.lastRevUpdateAmount ||\n field.field_changed === FieldChangedValue.ebitda ||\n field.field_changed === FieldChangedValue.arr ||\n field.field_changed === FieldChangedValue.capitalRaised;\n const shouldDisplayRationale = field.field_changed === FieldChangedValue.stage;\n const shouldDisplayOpinion = field.field_changed === FieldChangedValue.nextSteps;\n const options = fieldOptions[field.field_changed as keyof typeof fieldOptions];\n const afterValue = renderAfterValue(field, isMoney, options);\n const fromValue = renderFormerValue(field, isMoney, options);\n const afterOPTX = renderAfterOPTX(field);\n const fromOPTX = renderFormerOPTX(field);\n\n useInjectCompanyIndividualEdit();\n useInitialFetchEditOptions();\n\n const lastTemporaryFieldValue = useMemo(() => {\n return fields.find(item => item.field_changed === field.field_changed)?.after_value;\n }, [field.field_changed, fields]);\n\n const showDropdown = useMemo(() => {\n if (!company) return false;\n\n if (\n (company.source_tag.includes('et') &&\n (field.field_changed === FieldChangedValue.pipelineRank ||\n field.field_changed === FieldChangedValue.stage ||\n field.field_changed === FieldChangedValue.companyOwner ||\n field.field_changed === FieldChangedValue.seniorAdvisor ||\n field.field_changed === FieldChangedValue.fund ||\n field.field_changed === FieldChangedValue.leadSource ||\n field.field_changed === FieldChangedValue.nextSteps ||\n field.field_changed === FieldChangedValue.rationale)) ||\n field.field_changed === FieldChangedValue.sector ||\n field.field_changed === FieldChangedValue.subSector ||\n field.field_changed === FieldChangedValue.subSectorAPI ||\n field.field_changed === FieldChangedValue.psgFit ||\n field.field_changed === FieldChangedValue.softwareCompany ||\n field.field_changed === FieldChangedValue.aiMl ||\n field.field_changed === FieldChangedValue.datePresented ||\n field.field_changed === FieldChangedValue.icStatusDate ||\n field.field_changed === FieldChangedValue.expectedCloseDate ||\n field.field_changed === FieldChangedValue.addon ||\n field.field_changed === FieldChangedValue.lastFundingDate ||\n field.field_changed === FieldChangedValue.capitalRaised ||\n field.field_changed === FieldChangedValue.numberOfEmployees ||\n field.field_changed === FieldChangedValue.addonBool ||\n field.field_changed === FieldChangedValue.revenue ||\n field.field_changed === FieldChangedValue.lastRevenue ||\n field.field_changed === FieldChangedValue.arr ||\n field.field_changed === FieldChangedValue.gm ||\n field.field_changed === FieldChangedValue.lastRaisedAmount ||\n field.field_changed === FieldChangedValue.psgPlatformCompany ||\n field.field_changed === FieldChangedValue.lastRound ||\n field.field_changed === FieldChangedValue.lastInvestors ||\n field.field_changed === FieldChangedValue.parentCompany ||\n field.field_changed === FieldChangedValue.isInBusiness ||\n field.field_changed === FieldChangedValue.psgPlatformCompany ||\n field.field_changed === FieldChangedValue.productCategory ||\n field.field_changed === FieldChangedValue.subVertical ||\n field.field_changed === FieldChangedValue.dealTeam ||\n field.field_changed === FieldChangedValue.opsTeam ||\n field.field_changed === FieldChangedValue.seniorDealTeamLead ||\n field.field_changed === FieldChangedValue.opportunityType ||\n field.field_changed === FieldChangedValue.activeOnPipeline ||\n field.field_changed === FieldChangedValue.ebitda ||\n field.field_changed === FieldChangedValue.askingAmount ||\n field.field_changed === FieldChangedValue.banker ||\n field.field_changed === FieldChangedValue.bankerName ||\n field.field_changed === FieldChangedValue.dealType ||\n field.field_changed === FieldChangedValue.addonCompany ||\n field.field_changed === FieldChangedValue.linkedinUrl ||\n field.field_changed === FieldChangedValue.useParentCompany ||\n field.field_changed === FieldChangedValue.companyType ||\n field.field_changed === FieldChangedValue.yearFounded ||\n field.field_changed === FieldChangedValue.websiteActive ||\n field.field_changed === FieldChangedValue.transactionNotes\n ) {\n return true;\n }\n\n return false;\n }, [company, field.field_changed]);\n\n const EditTrigger = useMemo(() => {\n if (!company) return <></>;\n\n switch (field.field_changed) {\n case FieldChangedValue.revenue:\n if (!isEmptyRevenue(field))\n return (\n <EditFieldFinancial\n companyId={company.company_id}\n companyUrl={company.company_url}\n fieldKey=\"revenue_list\"\n extraKeys={['last_rev_update_amount', 'last_rev_update_year']}\n fieldListValues={company.revenue_list}\n fieldName=\"Revenue\"\n service={UserService.updateCompanyUserValues}\n isFromGrid={false}\n hidePenIcon\n isFromHistory\n options={revenueOptions}\n />\n );\n break;\n case FieldChangedValue.sector:\n return (\n <EditFieldSingleSelect\n value={field.after_value as string}\n record={company}\n isFromGrid={false}\n isFromHistory\n hidePenIcon\n service={CompanyService.updateCompanyData}\n successMessage=\"Company sector updated successfully!\"\n errorMessage=\"Company sector update failed, Server error!\"\n fieldName=\"Sector\"\n fieldKey=\"sector\"\n getPopupContainer={element => containerRef.current || element}\n openMenuOnFocus\n autoFocus\n destroyOnHide\n />\n );\n\n case FieldChangedValue.subSector:\n case FieldChangedValue.subSectorAPI:\n return (\n <EditFieldSingleSelect\n value={field.after_value as string}\n record={company}\n isFromGrid={false}\n isFromHistory\n hidePenIcon\n service={CompanyService.updateCompanyData}\n successMessage=\"Company sub-sector updated successfully!\"\n errorMessage=\"Company sub-sector update failed, Server error!\"\n fieldName=\"Sub-Sector\"\n fieldKey=\"sub_sector\"\n getPopupContainer={element => containerRef.current || element}\n openMenuOnFocus\n autoFocus\n destroyOnHide\n />\n );\n\n case FieldChangedValue.numberOfEmployees:\n return (\n <EditFieldText\n fieldName=\"Number of Employees\"\n isFromGrid={false}\n record={company}\n isFromHistory\n hidePenIcon\n service={CompanyService.updateCompanyData}\n value={field.after_value as string}\n triggerLabel=\"Edit Field\"\n />\n );\n\n case FieldChangedValue.capitalRaised:\n return (\n <EditFieldText\n fieldName=\"Capital Raised\"\n isFromGrid={false}\n record={company}\n isFromHistory\n service={UserService.updateCompanyUserValues}\n value={field.after_value as string}\n triggerLabel=\"Edit Field\"\n hidePenIcon\n />\n );\n\n case FieldChangedValue.lastRound:\n return (\n <EditFieldSingleSelectText\n company={company}\n hidePenIcon\n lastTemporaryFieldValue={lastTemporaryFieldValue as string}\n isFromAuditField\n formatValue={formatValueToMillions}\n isProfileInformation\n validation={value => validateField(value, 'Last Round', undefined)}\n service={UserService.updateCompanyUserValues}\n fieldName=\"Last Round\"\n getPopupContainer={element => containerRef.current || element}\n isDynamicPopoverHeight\n destroyOnHide\n />\n );\n\n case FieldChangedValue.lastInvestors:\n return (\n <EditFieldSingleSelectText\n company={company}\n hidePenIcon\n lastTemporaryFieldValue={lastTemporaryFieldValue as string}\n isFromAuditField\n formatValue={formatValueToMillions}\n isProfileInformation\n validation={value => validateField(value, 'Last Round', undefined)}\n service={UserService.updateCompanyUserValues}\n fieldName=\"Last Round\"\n getPopupContainer={element => containerRef.current || element}\n isDynamicPopoverHeight\n destroyOnHide\n />\n );\n\n case FieldChangedValue.lastRaisedAmount:\n return (\n <EditFieldSingleSelectText\n company={company}\n hidePenIcon\n lastTemporaryFieldValue={lastTemporaryFieldValue as string}\n isProfileInformation\n isFromAuditField\n formatValue={formatValueToMillions}\n service={UserService.updateCompanyUserValues}\n validation={value => validateField(value, 'Last Round', undefined)}\n fieldName=\"Last Round\"\n getPopupContainer={element => containerRef.current || element}\n isDynamicPopoverHeight\n destroyOnHide\n />\n );\n\n case FieldChangedValue.parentCompany:\n return (\n <EditFieldSingleSelectText\n company={company}\n hidePenIcon\n lastTemporaryFieldValue={lastTemporaryFieldValue as string}\n isFromAuditField\n formatValue={formatValueToMillions}\n isProfileInformation\n service={UserService.updateCompanyUserValues}\n fieldName=\"Last Round\"\n getPopupContainer={element => containerRef.current || element}\n isDynamicPopoverHeight\n destroyOnHide\n />\n );\n\n case FieldChangedValue.lastFundingDate:\n return (\n <EditFieldDate\n fieldName=\"Last Funding Date\"\n value={field.after_value as string}\n fieldKey=\"raise_date\"\n isFromGrid={false}\n service={UserService.updateCompanyUserValues}\n hidePenIcon\n getPopupContainer={element => containerRef.current || element}\n record={company}\n format={globalConfig.short_date.DATE_FORMAT}\n isFromHistory\n destroyOnHide\n />\n );\n\n case FieldChangedValue.pipelineRank:\n return (\n <EditFieldSingleSelect\n value={field.after_value as string}\n record={company}\n isFromGrid={false}\n isFromHistory\n hidePenIcon\n service={CompanyService.updateCompanyData}\n successMessage=\"Pipeline rank updated successfully!\"\n errorMessage=\"Pipeline rank update failed, Server error!\"\n fieldName=\"Pipeline Rank\"\n fieldKey=\"rank\"\n getPopupContainer={element => containerRef.current || element}\n openMenuOnFocus\n autoFocus\n destroyOnHide\n />\n );\n\n case FieldChangedValue.nextSteps:\n return (\n <EditFieldSingleSelectOther\n value={field.after_value as string}\n record={company}\n fieldOtherKey={'next_steps_opinion'}\n fieldOtherValue={field.after_value_opinion as string}\n isFromGrid={false}\n isFromHistory\n hidePenIcon\n service={UserService.updateCompanyUserValues}\n successMessage=\"Company next steps updated successfully!\"\n errorMessage=\"Company next steps update failed, Server error!\"\n fieldName=\"Next Steps\"\n otherEndpoint={NEXT_STEPS_OPINION_ENDPOINT}\n destroyOnHide\n autoFocus\n defaultMenuIsOpen\n />\n );\n\n case FieldChangedValue.stage:\n return (\n <EditFieldSingleSelect\n value={field.after_value as string}\n rationaleAfterValue={\n typeof field.after_value_rationale === 'string'\n ? field.after_value_rationale.toLowerCase()\n : field.after_value_rationale\n }\n record={company}\n isFromGrid={false}\n isFromHistory\n hidePenIcon\n service={CompanyService.updateCompanyData}\n successMessage=\"Company stage updated successfully!\"\n errorMessage=\"Company stage update failed, Server error!\"\n fieldName=\"Stage\"\n fieldKey=\"stage\"\n getPopupContainer={element => containerRef.current || element}\n openMenuOnFocus\n autoFocus\n destroyOnHide\n />\n );\n\n case FieldChangedValue.companyOwner:\n return (\n <EditFieldSingleSelect\n value={field.after_value as string}\n fieldName=\"Company Owner\"\n fieldKey=\"deal_team_leader\"\n isFromGrid={false}\n hidePenIcon\n service={CompanyService.updateCompanyData}\n isFromHistory\n successMessage=\"Company owner updated successfully!\"\n errorMessage=\"Company owner update failed, Server error!\"\n record={company}\n getPopupContainer={element => containerRef.current || element}\n openMenuOnFocus\n autoFocus\n destroyOnHide\n />\n );\n\n case FieldChangedValue.fund:\n return (\n <EditFieldSingleSelect\n value={field.after_value as string}\n fieldName=\"Fund\"\n fieldKey=\"fund\"\n isFromGrid={false}\n hidePenIcon\n service={CompanyService.updateCompanyData}\n isFromHistory\n successMessage=\"Company fund updated successfully!\"\n errorMessage=\"Company fund update failed, Server error!\"\n getPopupContainer={element =>\n containerRef.current || (element.parentElement as HTMLElement)\n }\n record={company}\n openMenuOnFocus\n autoFocus\n destroyOnHide\n />\n );\n\n case FieldChangedValue.addon:\n case FieldChangedValue.addonCompany:\n case FieldChangedValue.addonBool:\n return (\n <EditFieldCheckBoxSelectAsync\n fieldName=\"Add-on\"\n isFromGrid={false}\n record={company}\n hidePenIcon\n service={CompanyService.updateAddon}\n successMessage=\"Add-on updated successfully!\"\n getPopupContainer={element => containerRef.current || element}\n errorMessage=\"\"\n value={company.addon}\n isFromHistory\n />\n );\n\n case FieldChangedValue.datePresented:\n return (\n <EditFieldDate\n fieldName=\"Date Presented\"\n value={(field.after_value as DatePresented[])?.map(date => date.date as string)}\n fieldKey=\"date_presented\"\n isFromGrid={false}\n service={CompanyService.updateDatePresented}\n successMessage=\"Success updating company presentation!\"\n hidePenIcon\n record={company}\n format={globalConfig.short_date.DATE_FORMAT}\n isFromHistory\n getPopupContainer={element => containerRef.current || element}\n destroyOnHide\n />\n );\n\n case FieldChangedValue.askingAmount:\n return (\n <EditFieldNumber\n companyId={company.company_id}\n fieldPropietaryInfoType=\"deal_preparation\"\n initialValue={(field.after_value as number) / 1000000}\n fieldKey=\"Asking Amount\"\n isFromAuditField\n />\n );\n\n case FieldChangedValue.banker:\n return (\n <EditFieldCheckboxText\n companyId={company.company_id}\n checkboxKey=\"banker\"\n textInputKey=\"banker_name\"\n checkValue={(opportunityDataDealPreparation.banker?.value as boolean) ?? null}\n textValue={opportunityDataDealPreparation.banker_name ?? undefined}\n isCheckbox\n getPopupContainer={element => containerRef.current || element}\n isFromHistory\n />\n );\n\n case FieldChangedValue.bankerName:\n return (\n <EditFieldCheckboxText\n companyId={company.company_id}\n checkboxKey=\"banker\"\n textInputKey=\"banker_name\"\n checkValue={(opportunityDataDealPreparation.banker?.value as boolean) ?? null}\n textValue={opportunityDataDealPreparation.banker_name ?? undefined}\n getPopupContainer={element => containerRef.current || element}\n isFromHistory\n />\n );\n\n case FieldChangedValue.dealType:\n return (\n <EditPreparationFieldSingleSelect\n companyId={company.company_id}\n fieldKey=\"Deal Type\"\n options={dealValues.deal_type?.data}\n fieldPropietaryInfoType=\"deal_preparation\"\n initialValue={field.after_value as string}\n isFromAuditField\n />\n );\n\n case FieldChangedValue.softwareCompany:\n return isAdminOrAnalyst ? (\n <EditFieldRadioRationale\n value={field.after_value as boolean}\n record={company}\n labelValue=\"Edit Field\"\n fieldName=\"Software Company\"\n isFromGrid={false}\n service={UserService.addCompanySoftwareEvaluation}\n successMessage=\"Company software company updated successfully!\"\n errorMessage=\"Failed to update value!\"\n hidePen\n getPopupContainer={element => containerRef.current || element}\n isDynamicPopoverHeight\n destroyOnHide\n isFromHistory\n />\n ) : (\n <EditFieldRadio\n value={field.after_value as boolean}\n record={company}\n labelValue=\"Edit Field\"\n fieldName=\"Software Company\"\n isFromGrid={false}\n service={UserService.addCompanySoftwareEvaluation}\n successMessage=\"Company software company updated successfully!\"\n errorMessage=\"Failed to update value!\"\n hidePen\n isFromHistory\n />\n );\n\n case FieldChangedValue.aiMl:\n return (\n <EditFieldRadio\n value={field.after_value as boolean}\n record={company}\n labelValue=\"Edit Field\"\n isFromGrid={false}\n fieldName=\"AI / ML\"\n service={UserService.updateAiMl}\n successMessage=\"Company AI / ML updated successfully!\"\n errorMessage=\"Failed to update value!\"\n hidePen\n isFromHistory\n />\n );\n\n case FieldChangedValue.psgFit:\n return isAdminOrAnalyst ? (\n <EditFieldRadioRationale\n value={field.after_value}\n record={company}\n labelValue=\"Edit Field\"\n fieldName=\"PSG Fit\"\n isFromGrid={false}\n service={UserService.updateFitEvaluation}\n successMessage=\"Company PSG fit updated successfully!\"\n errorMessage=\"Failed to update value!\"\n hidePen\n getPopupContainer={element => containerRef.current || element}\n isFromHistory\n isDynamicPopoverHeight\n destroyOnHide\n />\n ) : (\n <EditFieldRadio\n value={field.after_value}\n record={company}\n labelValue=\"Edit Field\"\n fieldName=\"PSG Fit\"\n isFromGrid={false}\n service={UserService.updateFitEvaluation}\n successMessage=\"Company PSG fit updated successfully!\"\n errorMessage=\"Failed to update value!\"\n hidePen\n isFromHistory\n />\n );\n\n case FieldChangedValue.psgPlatformCompany:\n return (\n <EditFieldRadio\n value={field.after_value as boolean}\n record={company}\n labelValue=\"Edit Field\"\n fieldName=\"PSG Platform\"\n isFromGrid={false}\n service={CompanyService.updatePortfolio}\n successMessage=\"PSG platform company successfully updated!\"\n errorMessage=\"Error updating company portfolio!\"\n hidePen\n isFromHistory\n />\n );\n\n case FieldChangedValue.useParentCompany:\n return (\n <EditFieldRadio\n value={field.after_value as boolean}\n record={company}\n labelValue=\"Edit Field\"\n fieldName=\"Use Parent Company\"\n isFromGrid={false}\n service={UserService.updateCompanyUserValues}\n successMessage=\"Parent company influence successfully updated!\"\n errorMessage=\"Error updating parent company influence!\"\n hidePen\n isFromHistory\n />\n );\n\n case FieldChangedValue.arr:\n return (\n <EditFieldFinancial\n companyId={company.company_id}\n companyUrl={company.company_url}\n fieldKey=\"annual_recurring_revenue\"\n service={null}\n fieldName=\"ARR\"\n fieldListValues={opportunityData?.financial?.annual_recurring_revenue || []}\n isFromGrid={false}\n hidePenIcon\n isFromHistory\n options={arrOptions}\n />\n );\n\n case FieldChangedValue.gm:\n return (\n <EditFieldFinancial\n companyId={company.company_id}\n companyUrl={company.company_url}\n fieldKey=\"gross_margin_list\"\n service={CompanyService.addOpportunityPresentation}\n fieldName=\"GM %\"\n fieldListValues={opportunityData?.financial?.gm || []}\n isFromGrid={false}\n hidePenIcon\n isFromHistory\n options={gmOptions}\n />\n );\n\n case FieldChangedValue.lastRevenue:\n return (\n <EditFieldFinancial\n companyId={company.company_id}\n fieldKey=\"revenue_list\"\n companyUrl={company.company_url}\n extraKeys={['last_rev_update_amount', 'last_rev_update_year']}\n fieldListValues={company.revenue_list}\n fieldName=\"Revenue\"\n service={UserService.updateCompanyUserValues}\n isFromGrid={false}\n hidePenIcon\n isFromHistory\n options={revenueOptions}\n />\n );\n\n case FieldChangedValue.ebitda:\n return (\n <EditFieldFinancial\n companyId={company.company_id}\n companyUrl={company.company_url}\n fieldKey=\"ebitda_list\"\n extraKeys={['ebitda_amount', 'ebitda_year']}\n fieldListValues={company.ebitda_list}\n service={UserService.updateCompanyUserValues}\n fieldName=\"EBITDA\"\n options={ebitdaOptions}\n hidePenIcon\n isFromHistory\n />\n );\n\n case FieldChangedValue.seniorAdvisor: {\n return (\n <EditFieldSingleSelect\n value={field.after_value as string}\n fieldName=\"Senior Advisor Thesis\"\n fieldKey=\"senior_advisor_thesis\"\n isFromGrid={false}\n isFromGridDropDown\n dropdownLabel=\"Edit Field\"\n hidePenIcon\n service={CompanyService.updateCompanyData}\n isFromHistory\n successMessage=\"Senior Advisor Thesis updated successfully!\"\n errorMessage=\"Senior Advisor Thesis update failed, Server error!\"\n record={company}\n getPopupContainer={element => containerRef.current || element}\n />\n );\n }\n\n case FieldChangedValue.leadSource:\n return (\n <EditFieldSingleSelect\n value={field.after_value as string}\n fieldName=\"Lead Source\"\n fieldKey=\"lead_source\"\n isFromGrid={false}\n dropdownLabel=\"Edit Field\"\n hidePenIcon\n service={CompanyService.updateCompanyData}\n isFromHistory\n successMessage=\"Lead Source updated successfully!\"\n errorMessage=\"Lead Source update failed, Server error!\"\n record={company}\n getPopupContainer={element => containerRef.current || element}\n />\n );\n\n case FieldChangedValue.isInBusiness:\n return (\n <EditFieldRadio\n value={field.after_value as boolean}\n record={company}\n labelValue=\"Edit Field\"\n fieldName=\"In Business\"\n isFromGrid={false}\n service={UserService.addCompanyInBusinessEvaluation}\n successMessage=\"Company in business state updated successfully!\"\n errorMessage=\"Failed to update company in business state!\"\n hidePen\n isFromHistory\n />\n );\n\n case FieldChangedValue.productCategory:\n return (\n <EditFieldMultiSelectAsyncProductCategory\n record={company}\n value={\n company.product_category === null\n ? []\n : (company.product_category as ProductCategory[])\n }\n lastTemporaryFieldValue={lastTemporaryFieldValue}\n isFromGrid={false}\n successMessage=\"Product category updated successfully!\"\n asyncSearchEndpoint=\"/search/company_product_category\"\n service={CompanyService.updateCompanyData}\n hidePenIcon\n fieldName=\"Product Category\"\n fieldKey=\"product_category\"\n getPopupContainer={element => containerRef.current || element}\n isDynamicPopoverHeight\n destroyOnHide\n />\n );\n\n case FieldChangedValue.subVertical:\n return (\n <EditFieldMultiSelectAsyncCreatable\n record={company}\n value={company.sub_vertical === null ? [] : (company.sub_vertical as string[])}\n lastTemporaryFieldValue={lastTemporaryFieldValue}\n successMessage=\"Sub Vertical updated successfully!\"\n errorMessage=\"Sub Vertical update failed, Server error!\"\n asyncSearchEndpoint=\"/search/sub_vertical\"\n service={UserService.subVertical}\n hidePenIcon\n fieldName=\"Sub Vertical\"\n getPopupContainer={element => containerRef.current || element}\n isDynamicPopoverHeight\n destroyOnHide\n />\n );\n\n case FieldChangedValue.icStatusDate:\n return (\n <EditFieldDate\n fieldName=\"IC Status Date\"\n value={field.after_value as string}\n fieldKey=\"ic_status_date\"\n isFromGrid={false}\n service={UserService.updateCompanyUserValues}\n successMessage=\"IC Status Date updated successfully!\"\n errorMessage=\"IC Status Date update failed, Server error\"\n hidePenIcon\n getPopupContainer={element => containerRef.current || element}\n record={company}\n format={globalConfig.short_date.DATE_FORMAT}\n isFromHistory\n destroyOnHide\n />\n );\n\n case FieldChangedValue.opsTeam:\n return (\n <EditFieldMultiSelect\n record={company}\n value={(field.after_value as string)?.split(', ')}\n fieldName=\"OPS Team\"\n labelValue=\"Edit Field\"\n isFromGrid={false}\n hidePenIcon\n getPopupContainer={element => containerRef.current || element}\n isDynamicPopoverHeight\n destroyOnHide\n isFromHistory\n successMessage=\"Ops team added successfully!\"\n errorMessage=\"Ops team update failed, Server error!\"\n service={UserService.updateCompanyUserValues}\n />\n );\n\n case FieldChangedValue.opportunityType:\n return (\n <EditFieldSingleSelect\n value={field.after_value as string}\n fieldName=\"Opportunity Type\"\n fieldKey=\"opportunity_type\"\n isFromGrid={false}\n hidePenIcon\n service={CompanyService.updateCompanyData}\n isFromHistory\n successMessage=\"Opportunity Type updated successfully!\"\n errorMessage=\"Opportunity Type update failed, Server error!\"\n record={company}\n getPopupContainer={element => containerRef.current || element}\n />\n );\n\n case FieldChangedValue.activeOnPipeline:\n return (\n <EditFieldRadio\n value={field.after_value as boolean}\n record={company}\n labelValue=\"Edit Field\"\n fieldName=\"Active on Pipeline\"\n isFromGrid={false}\n service={UserService.updateCompanyUserValues}\n successMessage=\"Company active state updated successfully!\"\n errorMessage=\"Failed to update company in business state!\"\n hidePen\n isFromHistory\n />\n );\n\n case FieldChangedValue.dealTeam:\n return (\n <EditFieldMultiSelect\n record={company}\n value={(field.after_value as string)?.split(', ')}\n fieldName=\"Deal Team\"\n labelValue=\"Edit Field\"\n isFromGrid={false}\n hidePenIcon\n getPopupContainer={element => containerRef.current || element}\n isDynamicPopoverHeight\n destroyOnHide\n isFromHistory\n successMessage=\"Deal team added successfully!\"\n errorMessage=\"Deal team update failed, Server error!\"\n service={UserService.updateCompanyUserValues}\n />\n );\n\n case FieldChangedValue.seniorDealTeamLead:\n return (\n <EditFieldMultiSelect\n value={(field.after_value as string)?.split(', ')}\n fieldName=\"Senior Deal Team Lead\"\n labelValue=\"Edit Field\"\n isFromGrid={false}\n hidePenIcon\n getPopupContainer={element => containerRef.current || element}\n isDynamicPopoverHeight\n destroyOnHide\n service={UserService.updateCompanyUserValues}\n isFromHistory\n successMessage=\"Senior Deal Team Lead updated successfully!\"\n errorMessage=\"Senior Deal Team Lead update failed, Server error!\"\n record={company}\n />\n );\n\n case FieldChangedValue.expectedCloseDate:\n return (\n <EditFieldDate\n fieldName=\"Expected Close Date\"\n value={field.after_value as string}\n fieldKey=\"expected_close_date\"\n isFromGrid={false}\n service={UserService.updateCompanyUserValues}\n successMessage=\"Expected Close Date updated successfully!\"\n errorMessage=\"Expected Close Date update failed, Server error!\"\n hidePenIcon\n getPopupContainer={element => containerRef.current || element}\n record={company}\n format={globalConfig.short_date.DATE_FORMAT}\n isFromHistory\n destroyOnHide\n />\n );\n\n case FieldChangedValue.linkedinUrl:\n return (\n <EditFieldText\n fieldName=\"Linkedin Profile\"\n isFromGrid={false}\n record={company}\n isFromHistory\n service={CompanyService.updateLinkedinURL}\n value={field.after_value as string}\n triggerLabel=\"Edit Field\"\n entityType=\"company\"\n hidePenIcon\n isURL\n />\n );\n\n case FieldChangedValue.websiteActive:\n return (\n <EditFieldRadio\n value={field.after_value as string}\n record={company}\n fieldName=\"Website Status\"\n service={UserService.updateCompanyUserValues}\n successMessage=\"Company website status updated successfully!\"\n errorMessage=\"Failed to update value!\"\n isFromGrid={false}\n isFromHistory\n hidePen\n labelValue=\"Edit Field\"\n />\n );\n case FieldChangedValue.companyType:\n return (\n <EditFieldSingleSelect\n isFromGrid={false}\n service={CompanyService.updateCompanyData}\n fieldName=\"Company Type\"\n fieldKey=\"company_type\"\n value={field.after_value as string}\n successMessage=\"Company Type updated successfully!\"\n errorMessage=\"Company Type update failed, Server error!\"\n isFromHistory\n hidePenIcon\n isFromGridDropDown\n record={company}\n getPopupContainer={element => containerRef.current || element}\n openMenuOnFocus\n autoFocus\n destroyOnHide\n />\n );\n case FieldChangedValue.yearFounded:\n return (\n <EditFieldSingleSelect\n isFromGrid={false}\n fieldName=\"Year Founded\"\n fieldKey=\"year_founded\"\n service={CompanyService.updateCompanyData}\n value={field.after_value as string}\n successMessage=\"Company year founded updated successfully!\"\n errorMessage=\"Company year founded update failed, Server error!\"\n isFromHistory\n hidePenIcon\n isFromGridDropDown\n getPopupContainer={element => containerRef.current || element}\n record={company}\n openMenuOnFocus\n autoFocus\n destroyOnHide\n />\n );\n case FieldChangedValue.rationale:\n return (\n <EditFieldTextarea\n value={field.after_value as string}\n record={company}\n fieldName=\"Rationale\"\n isFromGrid={false}\n isFromHistory\n service={CompanyService.updateCompanyRationale}\n successMessage=\"Company Rationale updated successfully!\"\n errorMessage=\"Company Rationale update failed, Server error!\"\n hidePenIcon\n triggerLabel=\"Edit Field\"\n />\n );\n case FieldChangedValue.transactionNotes:\n return (\n <EditFieldTextarea\n value={field.after_value as string}\n record={company}\n fieldName=\"Commentary\"\n isFromGrid={false}\n isFromHistory\n service={CompanyService.addOpportunityPresentation}\n successMessage=\"Company commentary updated successfully!\"\n errorMessage=\"Company commentary update failed, Server error!\"\n hidePenIcon\n triggerLabel=\"Edit Field\"\n />\n );\n\n default:\n break;\n }\n\n return <></>;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [company, field, containerRef.current]);\n\n const menu = () => (\n <Menu>\n <Menu.Item key=\"1\">{EditTrigger}</Menu.Item>\n </Menu>\n );\n\n return (\n <Container ref={containerRef}>\n <Typography.Paragraph>\n <Styles.Label>{field.field_changed}: </Styles.Label>\n {field.field_changed === FieldChangedValue.generatedDescription ? (\n <Styles.Value isDescription>\n <Tooltip title={field.after_value} overlayStyle={{ minWidth: '550px' }}>\n {afterValue}\n </Tooltip>\n </Styles.Value>\n ) : (\n <Styles.Value>\n {afterValue !== 'Invalid date' ? afterValue : 'Date was removed'}\n {shouldDisplayRationale &&\n afterValue &&\n showRationaleForStage(afterValue as string) && (\n <Styles.Rationale isAfterRationale>\n (rationale: {!field.after_value_rationale ? 'None' : field.after_value_rationale})\n </Styles.Rationale>\n )}\n {shouldDisplayOpinion &&\n afterValue &&\n showOpinionForNextSteps(afterValue as string) && (\n <Styles.Opinion>\n {field.after_value_opinion && ': ' + field.after_value_opinion}\n </Styles.Opinion>\n )}\n </Styles.Value>\n )}{' '}\n {field.field_changed === FieldChangedValue.generatedDescription ? (\n field.opinion !== 'Positive' && (\n <Styles.FormerValue isDescription>\n <Tooltip title={field.before_value} overlayStyle={{ minWidth: '550px' }}>\n {fromValue}\n </Tooltip>\n </Styles.FormerValue>\n )\n ) : (\n <Styles.FormerValue>\n {fromValue !== 'Invalid date' ? fromValue : 'Date was removed'}\n {shouldDisplayRationale &&\n field.before_value &&\n showRationaleForStage(field.before_value as string) && (\n <>\n {' '}\n (rationale:{' '}\n {!field.before_value_rationale ? 'None' : field.before_value_rationale}\n ))\n </>\n )}\n {shouldDisplayOpinion &&\n field.before_value &&\n showOpinionForNextSteps(field.before_value as string) && (\n <>{!field.before_value_opinion ? '' : ': ' + field.before_value_opinion + ')'}</>\n )}\n </Styles.FormerValue>\n )}\n {field.opinion && (\n <div>\n <Styles.Label>OPINION: </Styles.Label> <Styles.Value>{field.opinion}</Styles.Value>\n </div>\n )}\n {field.regeneration_type && (\n <div>\n <Styles.Label>REGENERATION TYPE: </Styles.Label>\n <Styles.Value>{field.regeneration_type}</Styles.Value>\n </div>\n )}\n <Styles.User>{field.user}</Styles.User>\n {field.optx && (\n <>\n <Styles.Label>{optxScoreImpactLabel}</Styles.Label>\n <Styles.Value>{afterOPTX}</Styles.Value>{' '}\n <Styles.FormerValue>{fromOPTX}</Styles.FormerValue>\n </>\n )}\n </Typography.Paragraph>\n {showDropdown && (\n <Dropdown\n overlay={menu}\n overlayClassName=\"dropdown--save-list dropdown--audit-field\"\n trigger={['click']}\n placement=\"bottomLeft\"\n getPopupContainer={trigger => trigger.parentNode as HTMLElement}\n >\n <Button\n icon={<Icon iconName=\"three-dots\" />}\n onClick={() => window.pendo.track(CompanyPageHistory.auditTrail_editField)}\n />\n </Dropdown>\n )}\n </Container>\n );\n};\n","import React from 'react';\nimport { Styles } from './AuditTrail.styled';\n\nexport const Separator = () => {\n return <Styles.Bar />;\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Row, Col } from 'antd';\nimport { CalendarOutlined } from '@ant-design/icons';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport moment, { Moment } from 'moment';\nimport queryString from 'query-string';\n// constants\nimport globalConfig from '@optx/constants/config';\nimport { CompanyProfileTabs } from '@optx/constants/routes';\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\nimport { CompanyPageHistory } from '@optx/constants/pendoActions';\n// utils\nimport { getInternalValue, getOPTXValue } from '@utils/auditFields';\n// redux\nimport { actions as auditActions } from '../state';\nimport { ChangedCompanyFieldsPayload } from '../state/interfaces';\nimport { selectors as companyFiltersSelectors } from '@redux/company/filters';\n// components\nimport { Separator } from './Separator';\nimport { Styles } from './AuditTrail.styled';\n\ninterface AuditTrailHeaderProps {\n companyId: number;\n activeTab: string;\n activeProfileKey: string;\n}\n\ntype EventValue<DateType> = DateType | null;\ntype RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n\nexport const AuditTrailHeader: React.FC<AuditTrailHeaderProps> = ({\n companyId,\n activeTab,\n activeProfileKey,\n}) => {\n const filtersLoaded = useSelector(companyFiltersSelectors.filtersLoaded);\n const dispatch = useDispatch();\n const location = useLocation();\n\n const [searchQuery, setSearchQuery] = useState<string>();\n const [startDate, setStartDate] = useState<string>();\n const [endDate, setEndDate] = useState<string>();\n\n const fetchFields = useCallback(\n (payload: ChangedCompanyFieldsPayload) => {\n dispatch(auditActions.fetchChangedCompanyFields(payload));\n },\n [dispatch]\n );\n\n const changeDate = (value: RangeValue<Moment>) => {\n if (value) {\n const [startDate, endDate] = value;\n\n if (startDate) {\n window.pendo.track(CompanyPageHistory.auditTrail_startDate);\n setStartDate(moment(startDate).format(ISO_DATE_FORMAT));\n } else {\n setStartDate(undefined);\n }\n\n if (endDate) {\n window.pendo.track(CompanyPageHistory.auditTrail_endDate);\n setEndDate(moment(endDate).format(ISO_DATE_FORMAT));\n } else {\n setEndDate(undefined);\n }\n } else {\n setStartDate(undefined);\n setEndDate(undefined);\n }\n };\n\n useEffect(() => {\n const { field } = queryString.parse(location.search);\n setSearchQuery(field as string);\n }, [location.search]);\n\n useEffect(() => {\n if (activeProfileKey === CompanyProfileTabs.HISTORY && filtersLoaded) {\n const delayDebounceFn = setTimeout(() => {\n window.pendo.track(CompanyPageHistory.auditTrail_search);\n\n const currentURL = queryString.parse(location.search);\n\n if (!searchQuery) {\n delete currentURL.field;\n window.history.replaceState(\n null,\n '',\n `${location.pathname}?${queryString.stringify(currentURL)}`\n );\n }\n\n fetchFields({\n companyId,\n startDate,\n endDate,\n pagination: { pageNumber: 1, pageSize: 25 },\n field: searchQuery,\n internal: getInternalValue(activeTab),\n optx: getOPTXValue(activeTab),\n });\n }, 1000);\n\n return () => clearTimeout(delayDebounceFn);\n }\n\n return () => null;\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchQuery, activeProfileKey, startDate, endDate, filtersLoaded]);\n\n return (\n <Row gutter={[20, 0]}>\n <Col>\n <Styles.SearchField\n placeholder=\"Search by field name\"\n onChange={e => setSearchQuery(e.target.value)}\n value={searchQuery}\n />\n </Col>\n <Col>\n <Styles.CustomRangePicker\n placeholder={['Start', 'End']}\n onChange={changeDate}\n format={globalConfig.short_date.DATE_FORMAT}\n separator={<Separator />}\n suffixIcon={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <>\n <CalendarOutlined />\n <CalendarOutlined className=\"left-calendar\" />\n </>\n }\n />{' '}\n </Col>\n </Row>\n );\n};\n","import React, { useCallback, useState } from 'react';\nimport { Timeline, Tabs, Typography } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\nimport moment from 'moment';\nimport { useInfiniteScroll } from 'react-infinite-scroll-hook';\n// constants\nimport { CompanyProfileTabs } from '@optx/constants/routes';\nimport { CompanyPageHistory } from '@optx/constants/pendoActions';\n// redux\nimport { actions as auditActions, selectors as auditSelectors } from '../state';\nimport { ChangedCompanyFieldsPayload } from '../state/interfaces';\nimport { AuditField } from './AuditField';\nimport { Styles } from './AuditTrail.styled';\nimport { AuditTrailHeader } from './AuditTrailHeader';\n\ninterface AuditTrailProps {\n companyId: number;\n activeProfileKey: string;\n}\n\nconst AuditTrail: React.FC<AuditTrailProps> = ({ companyId, activeProfileKey }) => {\n const dispatch = useDispatch();\n const { TabPane } = Tabs;\n const fields = useSelector(auditSelectors.getFields);\n const loading = useSelector(auditSelectors.loading);\n const searchQuery = useSelector(auditSelectors.getSearchQuery);\n const startDate = useSelector(auditSelectors.getStartDate);\n const endDate = useSelector(auditSelectors.getEndDate);\n const pagination = useSelector(auditSelectors.getPagination);\n const count = useSelector(auditSelectors.getCount);\n const internalFields = useSelector(auditSelectors.getInternal);\n const optxFields = useSelector(auditSelectors.getOPTX);\n const hasReachedResultsEnd = useSelector(auditSelectors.getHasReachedResultsEnd);\n\n const [activeTab, setActiveTab] = useState('1');\n\n const payload: ChangedCompanyFieldsPayload = {\n companyId,\n pagination,\n field: searchQuery,\n internal: internalFields,\n optx: optxFields,\n startDate,\n endDate,\n };\n\n const fetchFields = useCallback(\n (payload: ChangedCompanyFieldsPayload) => {\n dispatch(auditActions.fetchChangedCompanyFields(payload));\n },\n [dispatch]\n );\n\n const handleLoadMore = () => {\n fetchFields({\n ...payload,\n pagination: { ...pagination, pageNumber: pagination.pageNumber + 1 },\n });\n };\n\n const infiniteScrollRef = useInfiniteScroll<HTMLDivElement>({\n loading,\n hasNextPage:\n activeProfileKey === CompanyProfileTabs.HISTORY &&\n fields.length > 0 &&\n count > fields.length &&\n !hasReachedResultsEnd,\n onLoadMore: handleLoadMore,\n });\n\n const filterFields = (key: string) => {\n if (key === '1') {\n window.pendo.track(CompanyPageHistory.auditTrail_all);\n fetchFields({\n ...payload,\n internal: undefined,\n optx: undefined,\n pagination: { ...pagination, pageNumber: 1 },\n });\n }\n\n if (key === '2') {\n const newPayload: ChangedCompanyFieldsPayload = {\n ...payload,\n internal: 'False',\n optx: 'False',\n pagination: { ...pagination, pageNumber: 1 },\n };\n fetchFields(newPayload);\n }\n\n if (key === '3') {\n const newPayload: ChangedCompanyFieldsPayload = {\n ...payload,\n internal: 'True',\n optx: 'False',\n pagination: { ...pagination, pageNumber: 1 },\n };\n fetchFields(newPayload);\n }\n\n if (key === '4') {\n const newPayload: ChangedCompanyFieldsPayload = {\n ...payload,\n internal: undefined,\n optx: 'True',\n pagination: { ...pagination, pageNumber: 1 },\n };\n fetchFields(newPayload);\n }\n\n setActiveTab(key);\n };\n\n const noFields = (\n <Typography.Title level={5} style={{ margin: '1.5rem 0' }}>\n No Fields Found\n </Typography.Title>\n );\n\n const mappedFields = fields?.map((field, index) => {\n return (\n <Timeline.Item label={moment(field.modified_at).format('MMMM D, YYYY')} key={index}>\n <AuditField field={field} />\n </Timeline.Item>\n );\n });\n\n return (\n <div ref={infiniteScrollRef}>\n <Styles.AuditTrailWrapper title=\"Audit Trail\" $hasFields={!!fields.length}>\n <AuditTrailHeader\n activeProfileKey={activeProfileKey}\n companyId={companyId}\n activeTab={activeTab}\n />\n\n <Tabs onChange={filterFields} defaultActiveKey=\"1\">\n <TabPane tab=\"All\" key={1}>\n {!loading && !fields.length && noFields}\n {fields?.length ? <Timeline mode=\"left\">{mappedFields}</Timeline> : null}\n </TabPane>\n <TabPane tab=\"Data Sources\" key={2}>\n {!loading && !fields.length && noFields}\n {fields?.length ? <Timeline mode=\"left\">{mappedFields}</Timeline> : null}\n </TabPane>\n <TabPane tab=\"Internal\" key={3}>\n {!loading && !fields.length && noFields}\n {fields?.length ? <Timeline mode=\"left\">{mappedFields}</Timeline> : null}\n </TabPane>\n <TabPane tab=\"OPTX score\" key={4}>\n {!loading && !fields.length && noFields}\n {fields?.length ? <Timeline mode=\"left\">{mappedFields}</Timeline> : null}\n </TabPane>\n </Tabs>\n </Styles.AuditTrailWrapper>\n </div>\n );\n};\n\nexport default AuditTrail;\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as types from './types';\nimport { EditCompanySector } from './interfaces';\n\nexport const addSector = createFeatureAction<EditCompanySector>(\n featureName,\n types.ADD_COMPANY_SECTOR\n);\n\nexport const addSectorSuccess = createFeatureAction<EditCompanySector>(\n featureName,\n types.ADD_COMPANY_SECTOR_SUCCESS\n);\n\nexport const addSectorFail = createFeatureAction<string>(\n featureName,\n types.ADD_COMPANY_SECTOR_FAIL\n);\n","export const ADD_COMPANY_SECTOR = 'ADD_COMPANY_SECTOR';\nexport const ADD_COMPANY_SECTOR_SUCCESS = 'ADD_COMPANY_SECTOR_SUCCESS';\nexport const ADD_COMPANY_SECTOR_FAIL = 'ADD_COMPANY_SECTOR_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n\nimport * as actions from './actions';\nimport { CompanySectorState, EditCompanySector } from './interfaces';\n\nexport const initialState: CompanySectorState = {\n companyId: null,\n error: null,\n loading: false,\n};\n\nconst addSector: CaseReducer<CompanySectorState, PayloadAction<EditCompanySector>> = (\n draftState,\n action\n) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n draftState.loading = true;\n};\n\nconst addSectorSuccess: CaseReducer<CompanySectorState, PayloadAction<EditCompanySector>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addSector, addSector)\n .addCase(actions.addSectorSuccess, addSectorSuccess)\n .addCase(actions.addSectorFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Company } from '@optx/models/Company';\nimport { selectors } from '../state';\nimport { actions } from '../state/sector';\n\nexport default function useSectorEditableField(company: Company) {\n const dispatch = useDispatch();\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.sectorOptions),\n ];\n const initialSelectValue = company.sector\n ? selectOptions.filter(option => company.sector === option.label)\n : selectOptions[0];\n\n const addCompanySector = useCallback(\n (companyId, sector, sectorName) =>\n dispatch(\n actions.addSector({\n companyId,\n sector,\n sectorName,\n })\n ),\n [dispatch]\n );\n\n const value = company.sector;\n\n return { addCompanySector, initialSelectValue, value, selectOptions };\n}\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as types from './types';\nimport { EditCompanySubSector } from './interfaces';\n\nexport const addSubSector = createFeatureAction<EditCompanySubSector>(\n featureName,\n types.ADD_COMPANY_SUB_SECTOR\n);\n\nexport const addSubSectorSuccess = createFeatureAction<EditCompanySubSector>(\n featureName,\n types.ADD_COMPANY_SUB_SECTOR_SUCCESS\n);\n\nexport const addSubSectorFail = createFeatureAction<string>(\n featureName,\n types.ADD_COMPANY_SUB_SECTOR_FAIL\n);\n","export const ADD_COMPANY_SUB_SECTOR = 'ADD_COMPANY_SUB_SECTOR';\nexport const ADD_COMPANY_SUB_SECTOR_SUCCESS = 'ADD_COMPANY_SUB_SECTOR_SUCCESS';\nexport const ADD_COMPANY_SUB_SECTOR_FAIL = 'ADD_COMPANY_SUB_SECTOR_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n\nimport * as actions from './actions';\nimport { CompanySubSectorState, EditCompanySubSector } from './interfaces';\n\nexport const initialState: CompanySubSectorState = {\n companyId: null,\n error: null,\n loading: false,\n};\n\nconst addSubSector: CaseReducer<CompanySubSectorState, PayloadAction<EditCompanySubSector>> = (\n draftState,\n action\n) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n draftState.loading = true;\n};\n\nconst addSubSectorSuccess: CaseReducer<\n CompanySubSectorState,\n PayloadAction<EditCompanySubSector>\n> = (draftState, action) => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addSubSector, addSubSector)\n .addCase(actions.addSubSectorSuccess, addSubSectorSuccess)\n .addCase(actions.addSubSectorFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Company } from '@optx/models/Company';\nimport { selectors } from '../state';\nimport { actions } from '../state/subSector';\n\nexport default function useSubSectorEditableField(company: Company) {\n const dispatch = useDispatch();\n const selectOptions = [\n { value: 'blank', label: 'None' },\n ...useSelector(selectors.companyIndividualEdit.subSectorOptions),\n ];\n const initialSelectValue = company.sub_sector\n ? selectOptions.filter(option => company.sub_sector === option.label)\n : selectOptions[0];\n\n const addCompanySubSector = useCallback(\n (companyId, subSector, subSectorName) =>\n dispatch(\n actions.addSubSector({\n companyId,\n subSector,\n subSectorName,\n })\n ),\n [dispatch]\n );\n\n const value = company.sub_sector;\n\n return { addCompanySubSector, initialSelectValue, value, selectOptions };\n}\n","export const FETCH_COGNITO_LOGIN_URL = 'auth/cognitoLogin/FETCH_COGNITO_LOGIN_URL';\nexport const FETCH_COGNITO_LOGIN_URL_SUCCESS = 'auth/cognitoLogin/FETCH_COGNITO_LOGIN_URL_SUCCESS';\nexport const FETCH_COGNITO_LOGIN_URL_FAIL = 'auth/cognitoLogin/FETCH_COGNITO_LOGIN_URL_FAIL';\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\nimport { CognitoButton } from './interfaces';\n\nexport const fetchCognitoLoginURL = createAction(types.FETCH_COGNITO_LOGIN_URL);\n\nexport const fetchCognitoLoginURLSuccess = createAction<CognitoButton[]>(\n types.FETCH_COGNITO_LOGIN_URL_SUCCESS\n);\n\nexport const fetchCognitoLoginURLFail = createAction<string>(types.FETCH_COGNITO_LOGIN_URL_FAIL);\n","import { AppState } from '@optx/redux/interfaces';\nimport { createSelector } from 'reselect';\n\nconst selectCognitoLogin = (state: AppState) => state.auth.cognitoLogin;\n\nexport const cognitoButtons = createSelector(selectCognitoLogin, state => state.cognitoButtons);\n\nexport const isLoading = createSelector(selectCognitoLogin, state => state.loading);\n\nexport const shouldFetchCognitoURL = createSelector(\n selectCognitoLogin,\n state => !state.loading && !state.cognitoButtons.length\n);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { fetchReducer, fetchFailReducer } from '@optx/redux/feature/fetch/reducers';\nimport { CognitoLoginState, CognitoButton } from './interfaces';\nimport * as actions from './actions';\n\nexport const initialState: CognitoLoginState = {\n loading: false,\n error: '',\n cognitoButtons: [],\n};\n\nconst fetchCognitoLoginURLSuccessReducer: CaseReducer<\n CognitoLoginState,\n PayloadAction<CognitoButton[]>\n> = (draftState, action) => {\n draftState.loading = false;\n\n if (Array.isArray(action.payload)) {\n draftState.cognitoButtons = action.payload;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchCognitoLoginURL, fetchReducer)\n .addCase(actions.fetchCognitoLoginURLSuccess, fetchCognitoLoginURLSuccessReducer)\n .addCase(actions.fetchCognitoLoginURLFail, fetchFailReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { FETCH_COGNITO_LOGIN_URL } from './actionTypes';\nimport { fetchCognitoLoginURLFail, fetchCognitoLoginURLSuccess } from './actions';\n// services\nimport NotificationService from '../../../services/NotificationService';\nimport { AuthService } from '../../../services/api';\nimport { CognitoButton } from './interfaces';\n\nexport const errorMessage = 'Cognito Login URL failure!';\n\nexport function* fetchCognitoLoginURLSaga() {\n try {\n const res: AxiosResponse<CognitoButton[]> = yield call(AuthService.getCognitoURL);\n\n if (res.data) {\n yield put(fetchCognitoLoginURLSuccess(res.data));\n } else {\n yield put(fetchCognitoLoginURLFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n yield put(fetchCognitoLoginURLFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* cognitoLogOutSaga() {\n yield takeLatest(FETCH_COGNITO_LOGIN_URL, fetchCognitoLoginURLSaga);\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\n\nexport const toggleUserEditModal = createAction(types.TOGGLE_USER_EDIT_MODAL);\n","export const TOGGLE_USER_EDIT_MODAL = 'TOGGLE_USER_EDIT_MODAL';\n","import { AppState } from '@optx/redux/interfaces';\n\nexport const isOpen = (state: AppState) => state.ui.modals.userEdit;\n","import { createReducer } from '@reduxjs/toolkit';\n// redux\nimport { toggleReducer } from '@redux/feature/toggle/reducers';\nimport { toggleUserEditModal } from './actions';\n\nconst userEditModal = createReducer(false, builder =>\n builder.addCase(toggleUserEditModal, toggleReducer)\n);\n\nexport default userEditModal;\n","import { SuccessErrorCallback } from '@optx/models/callback';\nimport { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\n\nexport const updateProfileImage = createAction(\n types.UPDATE_PROFILE_IMAGE,\n (imageBlob: Blob | null, callback: SuccessErrorCallback) => ({\n payload: imageBlob,\n meta: callback,\n })\n);\n\nexport const updateProfileImageSuccess = createAction<Blob | null>(\n types.UPDATE_PROFILE_IMAGE_SUCCESS\n);\n\nexport const updateProfileImageFail = createAction<string>(types.UPDATE_PROFILE_IMAGE_FAIL);\n","export const UPDATE_PROFILE_IMAGE = 'user/UPDATE_PROFILE_IMAGE';\nexport const UPDATE_PROFILE_IMAGE_SUCCESS = 'user/UPDATE_PROFILE_IMAGE_SUCCESS';\nexport const UPDATE_PROFILE_IMAGE_FAIL = 'user/UPDATE_PROFILE_IMAGE_FAIL';\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, put, takeLatest } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { UserService } from '@services/api';\n// models\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// redux\nimport * as actions from './actions';\n\nexport function* updateProfileImageSaga(\n action: PayloadAction<Blob | null, any, SuccessErrorCallback>\n) {\n const imageBlob = action.payload;\n const callback = action.meta;\n\n try {\n if (imageBlob) {\n const res: AxiosResponse<Blob> = yield call(UserService.updateProfilePicture, imageBlob);\n yield put(actions.updateProfileImageSuccess(res.data));\n callback && callback(true);\n NotificationService.success('Profile image updated');\n }\n } catch (error: any) {\n const errorMessage = 'Failed to update profile image!!!';\n callback && callback(null, errorMessage);\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* profileSaga() {\n yield takeLatest(actions.updateProfileImage, updateProfileImageSaga);\n}\n","export const FILTER_PATH_KEYWORDS = [\n 'companiesOutReach',\n 'add-to-equity-touch',\n 'add-to-salesloft',\n 'profile',\n];\n","import { put, takeLatest, select, call } from 'redux-saga/effects';\nimport { Location } from 'history';\nimport { AxiosResponse } from 'axios';\nimport queryString from 'query-string';\n// models\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { FILTER_PATH_KEYWORDS } from '@optx/constants/sourcingOutReachFilters';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { FilterService } from '@services/api';\n// redux\nimport { actions as searchKeyActions } from '@features/grid/searchkey';\nimport { selectors as routerSelectors } from '@redux/router';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { selectors as searchSelectors, actions as searchActions } from '@features/grid/search';\nimport { actions as filterActions, selectors as filterSelectors } from '../filters';\n\nexport function* getSourcingOutReachFilters() {\n try {\n const res: AxiosResponse<any> = yield call(FilterService.companiesOutReachFilters);\n yield put(filterActions.fetchSourcingOutReachFiltersSuccess(res.data.sourcing_filters));\n const tableGridQuery: string = yield select(\n searchSelectors.getTableGridQuery('outreachDetails')\n );\n\n const parsedGridQuery = queryString.parse(tableGridQuery);\n const analystIdFilter: [string | null, string | null] | SelectOption<string> | undefined =\n yield select(filterSelectors.getSourcingFiltersOptions('analyst_id'));\n const listOfColumnNames: [string | null, string | null] | SelectOption<string> | undefined =\n yield select(filterSelectors.getSourcingFiltersOptions('column_name'));\n\n yield put(\n filterActions.setDefaultSourcingOutReachFilters({\n tableGridQuery: parsedGridQuery,\n listOfAnalyst: analystIdFilter,\n listOfColumNames: listOfColumnNames,\n })\n );\n } catch (error) {\n const errorMessage = 'Failed to Fetch SourcingOutReach Filters!';\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* resetFilterSettings() {\n const location: Location<unknown> = yield select(routerSelectors.getLocation);\n\n const splitedLocationPathName = location.pathname.split('/');\n\n if (!splitedLocationPathName.some(path => FILTER_PATH_KEYWORDS.includes(path))) {\n try {\n yield put(\n userInformationActions.updateUserSettings({\n sourcing_outreach_detail_sorting: '',\n sourcing_outreach_detail_filters: '',\n sourcing_outreach_detail_page_number: 1,\n sourcing_outreach_results_page_number: 1,\n })\n );\n yield put(filterActions.resetStoreFilter());\n yield put(searchKeyActions.setSearchKey({ data: '', gridKey: 'outreachDetails' }));\n yield put(searchActions.shouldUpdateSourcingOutReachAnalystInfo(true));\n } catch (error) {}\n } else {\n yield put(searchActions.shouldUpdateSourcingOutReachAnalystInfo(false));\n }\n}\n\nexport default function* companiesSaga() {\n // external\n yield takeLatest(filterActions.resetSessionFilter, resetFilterSettings);\n}\n","import styled from 'styled-components';\nimport { Button } from 'antd';\n\nexport const SyledButton = styled(Button)`\n /* Gray / gray-7 */\n color: #8c8c8c;\n font-size: 16px;\n line-height: 24px;\n pointer-events: none;\n padding: 6px 40px;\n height: 36px;\n`;\n\nexport const Wrapper = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 150px;\n background: linear-gradient(180deg, #f0f0f0 -110.27%, rgba(196, 196, 196, 0) 100%);\n\n ${SyledButton} {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n`;\n\nexport default {\n Wrapper,\n Button: SyledButton,\n};\n","import React from 'react';\nimport Styled from './styled';\n\nconst EmptyChart: React.FC = ({ children = 'No Data' }) => {\n return (\n <Styled.Wrapper>\n <Styled.Button size=\"middle\">{children}</Styled.Button>\n </Styled.Wrapper>\n );\n};\n\nexport default EmptyChart;\n","/**\n * The `PluginManager` class is responsible for managing the origin of plugin\n * within the application. It provides a mechanism to set and retrieve the\n * origin of plugin, which is crucial for ensuring that plugins are loaded\n * from trusted sources.\n *\n * @class PluginManager\n * @private _pluginOrigin - A private property that stores the origin of the plugin.\n * @property {string} pluginOrigin - A getter and setter for the plugin origin.\n *\n * @example\n * const manager = new PluginManager();\n * manager.pluginOrigin = 'https://trusted-source.com';\n * console.log(manager.pluginOrigin); // Outputs: 'https://trusted-source.com'\n */\nclass PluginManager {\n private _pluginOrigin: string = '*';\n\n set pluginOrigin(origin: string) {\n this._pluginOrigin = origin;\n }\n\n get pluginOrigin(): string {\n return this._pluginOrigin;\n }\n}\n\nconst pluginVersionManager = new PluginManager();\n\n/**\n * Sets the origin for the plugin by updating the `pluginOrigin` property\n * of the `pluginVersionManager` object.\n *\n * @param {string} origin - The origin URL or identifier to be set for the plugin.\n *\n * @returns {void} This function does not return any value.\n */\nexport const setPluginOrigin = (origin: string): void => {\n pluginVersionManager.pluginOrigin = origin;\n};\n\n/**\n * Retrieves the origin of the plugin from the plugin version manager.\n *\n * @returns {string} The origin of the plugin as a string.\n */\nexport const getPluginOrigin = (): string => {\n return pluginVersionManager.pluginOrigin;\n};\n","import { CompanyExtendedKeys } from '@optx/models/table/Columns';\n\n/**\n * Get the name of a property/column belonging to company related data\n * Can be updated with other properties as needed\n * @param {CompanyKeys} key company property\n */\n\nexport const mapCompanyPropName = (key: CompanyExtendedKeys) => {\n let name = '';\n\n switch (key) {\n case 'num_employees':\n name = 'Number of Employees';\n break;\n case 'capital_raised':\n name = 'Total Raised';\n break;\n case 'raise_date':\n name = 'Last Funding Date';\n break;\n case 'last_raised_amount':\n name = 'Last Round';\n break;\n case 'last_rev_update_amount':\n name = 'Revenue';\n break;\n case 'ebitda_amount':\n name = 'EBITDA';\n break;\n case 'stage':\n name = 'Stage';\n break;\n case 'pipeline_rank':\n name = 'Pipeline Rank';\n break;\n case 'company_owner_id':\n name = 'Company Owner';\n break;\n case 'fund':\n name = 'Fund';\n break;\n case 'rationale':\n name = 'Rationale';\n break;\n\n default:\n break;\n }\n\n return name;\n};\n","/* eslint-disable max-len */\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport {\n SaveResearchRationaleResponse,\n ScoreRationaleResponse,\n} from '@optx/features/add-research-rationale/state/interfaces';\nimport { CompanyCardState } from '@optx/features/long-card/company-card/state/interfaces';\nimport { CompanyProfileState } from '@optx/redux/company/profile/interfaces';\nimport { CompanyProfile } from '@optx/models/Company';\n\nexport const submitResearchRationaleSuccessReducer = (\n draftState: CompanyCardState | CompanyProfileState,\n action: PayloadAction<SaveResearchRationaleResponse>\n) => {\n const {\n company_id: companyId,\n fields,\n scoreValues,\n scoreRationale,\n newScoreRationale,\n } = action.payload;\n\n if (draftState.data && draftState.data.company_id === companyId) {\n // for score values, according to backend, psg fit and software are called sequentially.\n // so, first we update the data with values coming from psg_fit,\n // then we update the data, if it exists, with values coming from software\n if (fields.psg_fit) {\n draftState.data.is_interesting = fields.psg_fit.value as boolean | null;\n draftState.data.interesting_rationale = fields.psg_fit.rationale as string | null;\n // score values for default score\n draftState.data.score = scoreValues?.fitScore as number;\n draftState.data.score_growth = scoreValues?.fitScoreGrowth?.toString() || null;\n draftState.data.score_v3 = scoreValues?.fitNewScore as number;\n draftState.data.score_v3_growth = scoreValues?.fitNewScoreGrowth?.toString() || null;\n\n // TODO there are two properties for each israel and default score growth, should change api to\n // keep only one\n if ((draftState.data as CompanyProfile).optx_score_growth !== undefined) {\n (draftState.data as CompanyProfile).optx_score_growth = scoreValues?.fitScoreGrowth || null;\n }\n\n // score values for israel score\n draftState.data.il_optx_score = scoreValues?.fitIsraelScore as number;\n\n if (draftState.data.il_score_growth !== undefined) {\n draftState.data.il_score_growth = scoreValues?.fitIsraelScoreGrowth?.toString() || null;\n }\n\n if ((draftState.data as CompanyProfile).il_optx_score_growth !== undefined) {\n (draftState.data as CompanyProfile).il_optx_score_growth =\n scoreValues?.fitIsraelScoreGrowth || null;\n }\n }\n\n if (fields.software_company) {\n if (draftState.data.is_software !== fields.software_company.value) {\n draftState.data.is_software_verified = true;\n }\n\n draftState.data.is_software = fields.software_company.value as boolean;\n draftState.data.is_software_rationale = fields.software_company.rationale as string | null;\n // score values for default score\n draftState.data.score = scoreValues?.softwareScore as number;\n draftState.data.score_growth = scoreValues?.softwareScoreGrowth?.toString() || null;\n draftState.data.score_v3 = scoreValues?.softwareNewScore as number;\n draftState.data.score_v3_growth = scoreValues?.softwareNewScoreGrowth?.toString() || null;\n\n if ((draftState.data as CompanyProfile).optx_score_growth !== undefined) {\n (draftState.data as CompanyProfile).optx_score_growth =\n scoreValues?.softwareScoreGrowth || null;\n }\n\n // score values for israel score\n draftState.data.il_optx_score = scoreValues?.softwareIsraelScore as number;\n\n if (draftState.data.il_score_growth !== undefined) {\n draftState.data.il_score_growth =\n scoreValues?.softwareIsraelScoreGrowth?.toString() || null;\n }\n\n if ((draftState.data as CompanyProfile).il_optx_score_growth !== undefined) {\n (draftState.data as CompanyProfile).il_optx_score_growth =\n scoreValues?.softwareIsraelScoreGrowth || null;\n }\n }\n\n // if api returns false for this property, it means no verification was sent for optx score\n if (scoreRationale !== false) {\n if ((scoreRationale as ScoreRationaleResponse).score_type === 'il_optx_score') {\n draftState.data.il_optx_score_rationale = (\n scoreRationale as ScoreRationaleResponse\n ).rationale;\n draftState.data.il_optx_score_rationale_reason = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason;\n draftState.data.il_optx_score_rationale_reason_type = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason_type;\n draftState.data.il_optx_score_verified = (\n scoreRationale as ScoreRationaleResponse\n ).optx_score_verified;\n } else {\n draftState.data.optx_score_rationale = (scoreRationale as ScoreRationaleResponse).rationale;\n draftState.data.optx_score_rationale_reason = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason;\n draftState.data.optx_score_rationale_reason_type = (\n scoreRationale as ScoreRationaleResponse\n ).rationale_reason_type;\n draftState.data.optx_score_verified = (\n scoreRationale as ScoreRationaleResponse\n ).optx_score_verified;\n }\n }\n\n if (\n newScoreRationale !== false &&\n (newScoreRationale as ScoreRationaleResponse).score_type === 'score_v3'\n ) {\n draftState.data.optx_score_v3_rationale = (\n newScoreRationale as ScoreRationaleResponse\n ).rationale;\n draftState.data.optx_score_v3_rationale_reason = (\n newScoreRationale as ScoreRationaleResponse\n ).rationale_reason;\n draftState.data.optx_score_v3_rationale_reason_type = (\n newScoreRationale as ScoreRationaleResponse\n ).rationale_reason_type;\n draftState.data.optx_score_v3_verified = (\n newScoreRationale as ScoreRationaleResponse\n ).optx_score_verified;\n }\n }\n};\n","import { SelectOption } from '@optx/models/Option';\n\nexport const SELECT_ALL: SelectOption = { label: '(select all / none)', value: '*' };\n","import { Dictionary } from 'lodash';\nimport { PreselectedFilter } from '@models/filters';\n\nexport const myCompaniesPreselectedFilter: Dictionary<PreselectedFilter> = {\n source_tag_filter: [\n {\n label: 'Source Scrub',\n value: 'ss',\n in: false,\n notIn: false,\n },\n {\n label: 'EquityTouch',\n value: 'et',\n in: true,\n notIn: false,\n },\n {\n label: 'Crunch Base',\n value: 'cb',\n in: false,\n notIn: false,\n },\n {\n label: 'Glassdoor',\n value: 'gd',\n in: false,\n notIn: false,\n },\n {\n label: 'G2Crowd',\n value: 'g2',\n in: false,\n notIn: false,\n },\n {\n label: 'Capterra',\n value: 'ct',\n in: false,\n notIn: false,\n },\n {\n label: 'Orbis',\n value: 'bvd',\n in: false,\n notIn: false,\n },\n {\n label: 'Optx',\n value: 'optx',\n in: false,\n notIn: false,\n },\n {\n label: 'IVC',\n value: 'ivc',\n in: false,\n notIn: false,\n },\n {\n label: 'Grata',\n value: 'gr',\n in: false,\n notIn: false,\n },\n {\n label: 'Pitchbook',\n value: 'pb',\n in: false,\n notIn: false,\n },\n ],\n};\n","import React from 'react';\nimport { Tag } from 'antd';\nimport { TagProps } from 'antd/lib/tag';\nimport { useDispatch, useSelector } from 'react-redux';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n// utils\nimport { searchInNewTab } from '@optx/utils/search';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\n\nconst filterIsAiMlSelected = [\n { label: 'Yes', value: '1', checked: true },\n { label: 'No', value: '0', checked: false },\n { label: 'Unknown', value: 'blank', checked: false },\n];\n\ninterface IsAiMlTagProps extends TagProps {\n isAiMl: boolean | null | string;\n newTab?: boolean;\n}\n\nconst IsAIMlTag: React.FC<IsAiMlTagProps> = ({ isAiMl, newTab, onClick, ...restProps }) => {\n const dispatch = useDispatch();\n const clearedFilter = useSelector(filterSelectors.getClearedFilter('advancedSearch'));\n const sources = useSelector(filterSourcesSelectors.getFiltersMap);\n const { advancedSearchPathname } = useUserRole();\n\n if (!isAiMl || isAiMl === DEFAULT_CELL_VALUE) {\n return null;\n }\n\n const handleClick = (event: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n if (newTab) {\n searchInNewTab(\n clearedFilter,\n sources,\n 'is_ai_ml',\n filterIsAiMlSelected,\n {},\n advancedSearchPathname\n );\n } else {\n dispatch(\n searchActions.loadCompaniesByFilter('is_ai_ml', {\n gridKey: 'advancedSearch',\n data: filterIsAiMlSelected,\n })\n );\n\n onClick && onClick(event);\n }\n };\n\n return (\n <Tag className=\"special-tag show-child\" onClick={handleClick} {...restProps}>\n AI / ML\n </Tag>\n );\n};\n\nexport default IsAIMlTag;\n","import styled from 'styled-components';\nimport { Tag } from 'antd';\n\nconst ListTag = styled(Tag)`\n cursor: pointer;\n color: #006d75;\n`;\n\nexport default ListTag;\n","import { useState, useLayoutEffect } from 'react';\n\nconst useHeaderHeight = (searchHeaderHeight: number) => {\n const [height, setHeight] = useState(0);\n useLayoutEffect(() => {\n const header = document.querySelector('#mainHeader');\n\n function updateHeight() {\n const headerHeight = header?.clientHeight! + searchHeaderHeight;\n if (headerHeight) setHeight(headerHeight);\n }\n\n window.addEventListener('resize', updateHeight);\n window.addEventListener('scroll', updateHeight);\n updateHeight();\n\n return () => {\n window.removeEventListener('resize', updateHeight);\n window.removeEventListener('scroll', updateHeight);\n };\n }, [searchHeaderHeight]);\n\n return height;\n};\n\nexport default useHeaderHeight;\n","import styled, { keyframes, css } from 'styled-components';\n\ninterface LoaderProps {\n $isChromePlugin?: boolean;\n}\n\nconst load = keyframes`\n 0% {\n transform: rotate(0deg) scale(2);\n }\n 100% {\n transform: rotate(360deg) scale(2);\n }\n`;\n\nconst Loader = styled.div<LoaderProps>`\n width: 100%;\n height: 300px;\n position: relative;\n\n &.fixed {\n ${({ $isChromePlugin }) => css`\n width: ${$isChromePlugin ? '60vw' : '100vw'};\n `}\n height: 100%;\n background: rgba(223, 223, 223, 0.5);\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1060;\n }\n\n .load__icon {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-left: -16px;\n z-index: 1000;\n transform: translate(-50%, -50%);\n\n animation: linear ${load} 2s infinite;\n width: 32px;\n height: 32px;\n }\n`;\n\nconst Overlay = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n background: rgba(223, 223, 223, 0.5);\n`;\n\nexport const Styled = {\n Loader,\n Overlay,\n};\n","import { Dictionary } from 'lodash';\nimport { AuthorizationComponentType } from '@models/auth';\n\n/** Function that verify if the user has access\n * return true/false\n * At least one item should be accessible to return as true.\n @param {string} components - Dictionary\n @param {string} accessFor - String/Array\n */\n\nexport const verifyAccess = (\n components: Dictionary<boolean>,\n accessFor: AuthorizationComponentType | Array<AuthorizationComponentType>\n) => {\n if (Array.isArray(accessFor)) {\n let hasAccess = false;\n\n for (let index = 0; index < accessFor.length; index++) {\n const element = accessFor[index];\n\n if (components[element] === true) {\n hasAccess = true;\n break;\n }\n }\n\n if (!hasAccess) {\n return false;\n }\n } else if (components[accessFor] !== true) {\n return false;\n }\n\n return true;\n};\n","import { STATE_KEY } from '../constants';\n\nexport const PAGE_LOADED = `[${STATE_KEY}] PAGE_LOADED`;\n","import styled from 'styled-components';\n\ntype TrendingDirection = 'up' | 'down' | 'none';\n\nconst TrendingValue = styled.span<{ trending?: TrendingDirection }>`\n color: ${props => {\n switch (props.trending) {\n case 'up':\n // green-6\n return '#52c41a';\n case 'down':\n // red-6\n return '#f5222d';\n default:\n return 'inherit';\n }\n }};\n`;\n\nexport default { TrendingValue };\n","export default \"data:image/png;base64,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\"","import { createSelector } from 'reselect';\n\n// redux\nimport { selectors as companyFiltersSelectors } from '@redux/company/filters';\nimport { selectors as companiesOutReachFilterSelectors } from '@redux/company-outreach/filters';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as savedSearchesSelector } from '@redux/company/saved-searches';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { getSortingLoading } from '@features/grid/sort/state/selectors';\n\nexport const isLoading = createSelector(\n companyFiltersSelectors.isLoading,\n searchSelectors.isLoading('outreachDetails'),\n savedSearchesSelector.isLoading,\n getSortingLoading('outreachDetails'),\n (loadingFilters, loadingCompaniesOutReachSearch, loadingSavedSearch, sortLoading) =>\n loadingFilters || loadingCompaniesOutReachSearch || loadingSavedSearch || sortLoading\n);\n\nexport const shouldFetchCompaniesOutReach = createSelector(\n userSelectors.loaded,\n companyFiltersSelectors.filtersLoaded,\n companiesOutReachFilterSelectors.sourcingOutReachFiltersLoaded,\n savedSearchesSelector.loaded,\n (loadedUser, loadedFilters, loadedCompaniesOutReachFilters, savedSearchLoaded) =>\n loadedUser && loadedFilters && loadedCompaniesOutReachFilters && savedSearchLoaded\n);\n","import React from 'react';\nimport { Button } from 'antd';\nimport { ButtonProps } from 'antd/lib/button/button';\nimport styled, { css } from 'styled-components';\n\nexport const SearchViewButton = styled<React.FC<ButtonProps & { $active?: boolean }>>(Button)`\n ${props =>\n css`\n color: ${props.color ? 'white' : 'rgb(178,189,207)'};\n `}\n svg {\n font-size: 20px;\n }\n\n ${props =>\n props.$active &&\n css`\n color: #1890ff;\n `}\n`;\n","import React from 'react';\nimport moment from 'moment';\n// models\nimport { ChartIntervalKeys, ChartTicks } from '@optx/models/charts/data';\n\ninterface CombinedChartTicksProps extends ChartTicks {\n startDate: string;\n endDate: string;\n intervalKey: ChartIntervalKeys;\n}\n\nconst CombinedChartTicks: React.FC<CombinedChartTicksProps> = ({\n y,\n // the position of the tick inside the tick list array\n index,\n payload,\n // start and end date of the time interval\n startDate,\n endDate,\n // width of the graph\n width,\n intervalKey,\n}) => {\n if (typeof payload.value !== 'string') {\n return null;\n }\n\n // calculations to determine the position of the tick on the x axis\n // the position is calculated in pixels\n\n // initial position, starting from 0 pixels\n let x = 0;\n // this is used to center the tick to the point on the graph\n let spacing = 10;\n\n // how many pixels between two days\n let unit;\n\n // total number of days in the time period\n const totalDaysInInterval = moment(endDate).diff(moment(startDate), 'days');\n\n if (intervalKey === '2Y') {\n unit = (width + 50) / totalDaysInInterval;\n } else if (intervalKey === '6M') {\n unit = (width - 30) / totalDaysInInterval;\n } else if (intervalKey === '3M' && totalDaysInInterval < 90) {\n unit = width / 3 / totalDaysInInterval;\n } else {\n unit = width / totalDaysInInterval;\n }\n\n // the first tick will always start from 0, no need to calculate anything for it\n if (index > 0) {\n // the first point's date, from the interval's corresponding data,\n // does not always match the starting date of the time interval,\n // so here we calculate how many days are left until the next month\n let days = moment(startDate).daysInMonth() - Number(moment(startDate).format('D'));\n spacing = 15;\n\n if (intervalKey === '1Y' || intervalKey === '2Y') {\n // here we calculate how many days until the next quarter,\n // depending on the month's position in the quarter\n const monthInQuarter = Number(moment(startDate).format('M')) % 3;\n\n // if monthInQuarter is 0, it means it's the last month in the quarter, no need to do anything else,\n // otherwise we need to add the rest of the month or months in the quarter\n if (monthInQuarter > 0 && monthInQuarter < 0.5) {\n days += 30;\n } else if (monthInQuarter > 0.5) {\n days += 60;\n }\n\n spacing = 23;\n }\n\n // for the rest of the ticks the distance between them is either 30 or 90 days\n for (let i = 1; i < index; i++) {\n if (intervalKey === '1Y' || intervalKey === '2Y') {\n days += 90;\n } else {\n days += moment(startDate).add(i, 'months').daysInMonth();\n }\n }\n\n x = days * unit;\n }\n\n // fix for second tick, to prevent overlapping with the first one\n // this is caused by the interval's starting date being very close\n // to the first point's date\n if (index === 1 && x < 35 && totalDaysInInterval !== 0) {\n x = x + 20;\n }\n\n if (Number.isNaN(x)) {\n return null;\n }\n\n // Fix case when totalDaysInInterval is 0, meaning the start and end date are the same.\n // In this case, we need to place the first tick at the beginning of the graph,\n // the second tick in the middle, and the third at the end\n if (totalDaysInInterval === 0) {\n if (index === 0) {\n x = x + 10;\n } else if (index === 1) {\n x = width / 2;\n } else if (index === 2) {\n x = width;\n }\n\n spacing = 0;\n }\n\n return (\n <text x={x + spacing} y={y} dy={7} fill=\"#C2CFE0\">\n {payload.value}\n </text>\n );\n};\n\nexport default CombinedChartTicks;\n","var _defs;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgGradientDefinitions(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 0,\n height: 0,\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"lineChartGradient\",\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 1\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: \"5%\",\n stopColor: \"#C2E6F8\",\n stopOpacity: 1\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: \"95%\",\n stopColor: \"#e6f7ff\",\n stopOpacity: 0\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"chartEmptyGradient\",\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 1\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: \"0%\",\n stopColor: \"#c4c4c4\",\n stopOpacity: 0.1\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: \"100%\",\n stopColor: \"#F0F0F0\",\n stopOpacity: 0\n })))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgGradientDefinitions);\nexport default __webpack_public_path__ + \"static/media/gradient-definitions.5e43f562.svg\";\nexport { ForwardRef as ReactComponent };","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as actionTypes from './actionTypes';\nimport { EditOpportunityType } from './interfaces';\n\nexport const addOpportunityType = createFeatureAction<EditOpportunityType>(\n featureName,\n actionTypes.ADD_OPPORTUNITY_TYPE\n);\n\nexport const addOpportunityTypeSuccess = createFeatureAction<EditOpportunityType>(\n featureName,\n actionTypes.ADD_OPPORTUNITY_TYPE_SUCCESS\n);\n\nexport const addOpportunityTypeFail = createFeatureAction<string>(\n featureName,\n actionTypes.ADD_OPPORTUNITY_TYPE_FAIL\n);\n","// fetch options lists for stage, rank and company owner\nexport const ADD_OPPORTUNITY_TYPE = 'ADD_OPPORTUNITY_TYPE';\nexport const ADD_OPPORTUNITY_TYPE_SUCCESS = 'ADD_OPPORTUNITY_TYPE_SUCCESS';\nexport const ADD_OPPORTUNITY_TYPE_FAIL = 'ADD_OPPORTUNITY_TYPE_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n\nimport * as actions from './actions';\nimport { EditOpportunityType, OpportunityTypeState } from './interfaces';\n\nexport const initialState: OpportunityTypeState = {\n companyId: null,\n error: null,\n loading: false,\n};\n\nconst addOpportunityType: CaseReducer<OpportunityTypeState, PayloadAction<EditOpportunityType>> = (\n draftState,\n action\n) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n draftState.loading = true;\n};\n\nconst addOpportunityTypeSuccess: CaseReducer<\n OpportunityTypeState,\n PayloadAction<EditOpportunityType>\n> = (draftState, action) => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addOpportunityType, addOpportunityType)\n .addCase(actions.addOpportunityTypeSuccess, addOpportunityTypeSuccess)\n .addCase(actions.addOpportunityTypeFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as actionTypes from './actionTypes';\nimport { EditCompanyPipelineRank } from './interfaces';\n\nexport const addCompanyPipelineRank = createFeatureAction<EditCompanyPipelineRank>(\n featureName,\n actionTypes.ADD_COMPANY_PIPELINE_RANK\n);\n\nexport const addCompanyPipelineRankSuccess = createFeatureAction<EditCompanyPipelineRank>(\n featureName,\n actionTypes.ADD_COMPANY_PIPELINE_RANK_SUCCESS\n);\n\nexport const addCompanyPipelineRankFail = createFeatureAction<string>(\n featureName,\n actionTypes.ADD_COMPANY_PIPELINE_RANK_FAIL\n);\n","export const ADD_COMPANY_PIPELINE_RANK = 'ADD_COMPANY_PIPELINE_RANK';\nexport const ADD_COMPANY_PIPELINE_RANK_SUCCESS = 'ADD_COMPANY_PIPELINE_RANK_SUCCESS';\nexport const ADD_COMPANY_PIPELINE_RANK_FAIL = 'ADD_COMPANY_PIPELINE_RANK_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n\nimport * as actions from './actions';\nimport { CompanyPipelineRankState, EditCompanyPipelineRank } from './interfaces';\n\nexport const initialState: CompanyPipelineRankState = {\n companyId: null,\n error: null,\n loading: false,\n};\n\nconst addCompanyPipelineRank: CaseReducer<\n CompanyPipelineRankState,\n PayloadAction<EditCompanyPipelineRank>\n> = (draftState, action) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addCompanyPipelineRank, addCompanyPipelineRank)\n .addCase(actions.addCompanyPipelineRankFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as actionTypes from './actionTypes';\nimport { EditLeadSource } from './interfaces';\n\nexport const addLeadSource = createFeatureAction<EditLeadSource>(\n featureName,\n actionTypes.ADD_LEAD_SOURCE\n);\n\nexport const addLeadSourceSuccess = createFeatureAction<EditLeadSource>(\n featureName,\n actionTypes.ADD_LEAD_SOURCE_SUCCESS\n);\n\nexport const addLeadSourceFail = createFeatureAction<string>(\n featureName,\n actionTypes.ADD_LEAD_SOURCE_FAIL\n);\n","// fetch options lists for stage, rank and company owner\nexport const ADD_LEAD_SOURCE = 'ADD_LEAD_SOURCE';\nexport const ADD_LEAD_SOURCE_SUCCESS = 'ADD_LEAD_SOURCE_SUCCESS';\nexport const ADD_LEAD_SOURCE_FAIL = 'ADD_LEAD_SOURCE_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n\nimport * as actions from './actions';\nimport { LeadSourceState, EditLeadSource } from './interfaces';\n\nexport const initialState: LeadSourceState = {\n companyId: null,\n error: null,\n loading: false,\n};\n\nconst addLeadSource: CaseReducer<LeadSourceState, PayloadAction<EditLeadSource>> = (\n draftState,\n action\n) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n draftState.loading = true;\n};\n\nconst addLeadSourceSuccess: CaseReducer<LeadSourceState, PayloadAction<EditLeadSource>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addLeadSource, addLeadSource)\n .addCase(actions.addLeadSourceSuccess, addLeadSourceSuccess)\n .addCase(actions.addLeadSourceFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { createFeatureAction } from '@utils/feature';\nimport featureName from '../../featureName';\nimport * as actionTypes from './actionTypes';\nimport { EditSeniorAdvisor } from './interfaces';\n\nexport const addSeniorAdviser = createFeatureAction<EditSeniorAdvisor>(\n featureName,\n actionTypes.ADD_SENIOR_ADVISER\n);\n\nexport const addSeniorAdviserSuccess = createFeatureAction<EditSeniorAdvisor>(\n featureName,\n actionTypes.ADD_SENIOR_ADVISER_SUCCESS\n);\n\nexport const addSeniorAdviserFail = createFeatureAction<string>(\n featureName,\n actionTypes.ADD_SENIOR_ADVISER_FAIL\n);\n","// fetch options lists for stage, rank and company owner\nexport const ADD_SENIOR_ADVISER = 'ADD_SENIOR_ADVISER';\nexport const ADD_SENIOR_ADVISER_SUCCESS = 'ADD_SENIOR_ADVISER_SUCCESS';\nexport const ADD_SENIOR_ADVISER_FAIL = 'ADD_SENIOR_ADVISER_FAIL';\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\n\nimport * as actions from './actions';\nimport { EditSeniorAdvisor, SeniorAdvisorState } from './interfaces';\n\nexport const initialState: SeniorAdvisorState = {\n companyId: null,\n error: null,\n loading: false,\n};\n\nconst addSeniorAdviser: CaseReducer<SeniorAdvisorState, PayloadAction<EditSeniorAdvisor>> = (\n draftState,\n action\n) => {\n const { companyId } = action.payload;\n draftState.companyId = companyId;\n draftState.loading = true;\n};\n\nconst addSeniorAdviserSuccess: CaseReducer<SeniorAdvisorState, PayloadAction<EditSeniorAdvisor>> = (\n draftState,\n action\n) => {\n draftState.loading = false;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.addSeniorAdviser, addSeniorAdviser)\n .addCase(actions.addSeniorAdviserSuccess, addSeniorAdviserSuccess)\n .addCase(actions.addSeniorAdviserFail, fetchReducers.fetchFailReducer)\n);\n\nexport default reducer;\n","import { FEATURE } from '../constants';\n\nexport const NOTIFY = `${FEATURE} notify`;\n","export const FEATURE = '[CORE]';\n","import { Middleware } from 'redux';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { AppState } from '@optx/redux/interfaces';\n// services\nimport NotificationService from '@services/NotificationService';\n// redux\nimport { NOTIFY } from './types';\nimport { INotifyMeta, INotifyPayload } from './interfaces';\n\n// {} legacy type parameter added to satisfy interface signature\nconst notificationMiddleware: Middleware<{}, AppState> = store => next => action => {\n if (action.type === NOTIFY) {\n const { payload, meta } = action as PayloadAction<INotifyPayload, any, INotifyMeta>;\n const { type, message } = payload;\n const { error, options } = meta;\n\n NotificationService[type](message, options);\n\n if (process.env.NODE_ENV === 'development' && error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n } else {\n next(action);\n }\n};\n\nexport default notificationMiddleware;\n","import { createAction } from '@reduxjs/toolkit';\nimport { NOTIFY } from './types';\nimport { NotifyType, INotifyMeta } from './interfaces';\n\nexport const notifyAction = createAction(\n NOTIFY,\n (type: NotifyType, message: string, meta: INotifyMeta = {}) => ({\n payload: {\n type,\n message,\n },\n meta,\n })\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { CompanyDatePresented } from '@optx/models/Company';\nimport * as types from './types';\n\nexport const updateCompanyDatePresented = createAction<CompanyDatePresented>(\n types.UPDATE_COMPANY_DATE_PRESENTED\n);\n\nexport const updateCompanyDatePresentedSuccess = createAction<string[] | null[]>(\n types.UPDATE_COMPANY_DATE_PRESENTED_SUCCESS\n);\n","export const UPDATE_COMPANY_DATE_PRESENTED = 'UPDATE_COMPANY_DATE_PRESENTED';\nexport const UPDATE_COMPANY_DATE_PRESENTED_SUCCESS = 'UPDATE_COMPANY_DATE_PRESENTED_SUCCESS';\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyDatePresented, UpdateOpportunityDealPreparation } from '@optx/models/Company';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport * as actions from './actions';\nimport { actions as presentantionActions } from '../opportunity-presentation';\nimport { OpportunityPresentationState } from '../opportunity-presentation/interfaces';\n\nexport function* updateCompanyDatePresentedSaga(action: PayloadAction<CompanyDatePresented>) {\n try {\n const presentation: OpportunityPresentationState = yield select(\n state => state.opportunityPresentation\n );\n // @ts-ignore\n const res = yield call(CompanyService.updateDatePresented, {\n ...action.payload,\n value: action.payload.newDate,\n });\n\n if (res.data) {\n yield put(actions.updateCompanyDatePresentedSuccess(action.payload.newDate));\n\n if (presentation && presentation.data)\n yield put(\n presentantionActions.updateOpportunityPresentationSuccess({\n ...presentation.data,\n deal_preparation: {\n ...(presentation.data.deal_preparation as UpdateOpportunityDealPreparation),\n date_presented: res.data.date_presented,\n },\n company_id: action.payload.companyId,\n })\n );\n\n if (!action.payload.isDatePresentedModified) {\n NotificationService.success('Company date presented updated successfully!');\n }\n } else {\n NotificationService.error('Failed to update date!');\n }\n } catch (e: any) {\n NotificationService.error('Failed to update date!');\n }\n}\n\nexport default function* datePresentedSaga() {\n yield takeLatest(actions.updateCompanyDatePresented, updateCompanyDatePresentedSaga);\n}\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport CompanyIndividualEditOptions from '@models/feature/companyIndividualEdit/CompanyIndividualEditOptions';\nimport { reducers as fetchReducers } from '@redux/feature/fetch';\nimport { CompanyIndividualEditState } from './interfaces';\nimport * as actions from './actions';\n\nexport const initialState: CompanyIndividualEditState = {\n data: null,\n error: null,\n loading: false,\n fetchedAt: null,\n};\n\nconst fetchSelectOptionsSuccess: CaseReducer<\n CompanyIndividualEditState,\n PayloadAction<CompanyIndividualEditOptions>\n> = (draftState, action) => {\n fetchReducers.fetchSuccessReducer(draftState, action);\n draftState.fetchedAt = new Date().toISOString();\n};\n\nconst reducer = createReducer(\n initialState,\n builder =>\n builder\n // fetch individual edit options\n .addCase(actions.fetchSelectOptions, fetchReducers.fetchReducer)\n .addCase(actions.fetchSelectOptionsSuccess, fetchSelectOptionsSuccess)\n .addCase(actions.fetchSelectOptionsFail, fetchReducers.fetchFailReducer)\n // share list\n // .addCase(actions.shareList, fetchReducers.fetchReducer)\n // .addCase(actions.shareListSuccess, shareListSuccessReducer)\n // .addCase(actions.shareListFail, fetchReducers.fetchFailReducer)\n // // edit share list\n // .addCase(actions.editShareList, editShareListReducer)\n // .addCase(actions.cancelEditShareList, cancelEditShareListReducer)\n);\n\nexport default reducer;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n// components\nimport Icon from '../Icon';\n\ninterface OpenInNewTabProps {\n url: string | null | undefined;\n}\n\nconst Wrapper = styled.div`\n display: flex;\n\n &:hover {\n & > a:last-child {\n display: inline-block;\n }\n }\n`;\n\nconst StyledLink = styled(Link)`\n display: none;\n color: #595959;\n margin: 0 0 0 8px;\n`;\n\nconst OpenInNewTabHover: React.FC<OpenInNewTabProps> = ({ children, url }) => {\n return (\n <Wrapper>\n {children}\n {url && (\n <StyledLink to={url} target=\"_blank\">\n <Icon iconName=\"open-in-new\" />\n </StyledLink>\n )}\n </Wrapper>\n );\n};\n\nexport default OpenInNewTabHover;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Typography } from 'antd';\nimport { LinkProps } from 'antd/lib/typography/Link';\n\nconst { Link } = Typography;\n\nconst StyledWrapper = styled.div`\n position: relative;\n`;\n\nconst StyledLink = styled(Link)<LinkProps>`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n`;\n\n/**\n * Content added as children will be clickable and redirect on Link to property.\n * Component is using click propagation on container to the Link.\n */\nconst ContentLink: React.FC<LinkProps> = ({ children, ...restProps }) => {\n return (\n <StyledWrapper>\n <StyledLink {...restProps} />\n {children}\n </StyledWrapper>\n );\n};\n\nexport default ContentLink;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\n// local\nimport reducer, { saga } from './state';\nimport { featureName } from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","import React from 'react';\n// constats\nimport { DEFAULT_LAST_TOUCH, DEFAULT_NEXT_TOUCH } from '@optx/constants/table/cells';\nimport globalConfig from '@optx/constants/config';\nimport { NEXT_STEPS_OPINION_ENDPOINT } from '@constants/asyncEndpoints';\n// components\nimport Company, { CompanyProfile } from '@optx/models/Company';\nimport {\n EditFieldSingleSelect,\n EditFieldSingleSelectOther,\n EditFieldRadio,\n} from '@optx/features/company/edit-fields/components';\nimport { UserService, CompanyService } from '@optx/services/api';\nimport {\n TableCellOPTXScore,\n TableCellActions,\n TableCellScoreAdmin,\n TableCellFitRationale,\n} from '@optx/components/common/table/Companies/cells';\nimport { TableCellDate, TableCellListDate } from '@optx/components/common/table/AntTable/cells';\nimport {\n TableCellCompanyURL,\n TableCellName,\n} from '@optx/components/common/table/Companies/styled-cells';\nimport { CompanyColumnType } from '@optx/components/common/table/Companies/columns/virtual-column-config';\n\nexport const columns: Array<CompanyColumnType> = [\n {\n dataIndex: 'company_url',\n className: 'company_url',\n title: '',\n width: 60,\n fixed: 'left',\n align: 'center',\n render: (value: string | null, record: Company, index: number) => (\n <TableCellCompanyURL value={value} record={record} />\n ),\n },\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n className: 'company_name',\n sorter: true,\n render: (value: string, record: CompanyProfile, index: number) => (\n <TableCellName value={value} record={record} />\n ),\n width: 240,\n fixed: 'left',\n ellipsis: true,\n },\n {\n dataIndex: 'is_interesting',\n title: 'PSG Fit',\n className: 'is_interesting',\n sorter: true,\n render: (value: boolean | null, record: Company) => (\n <TableCellFitRationale value={value} record={record} />\n ),\n width: 110,\n align: 'center',\n ellipsis: true,\n },\n {\n dataIndex: 'score',\n title: 'OPTX Score',\n className: 'score',\n sorter: true,\n width: 120,\n render: (value: number, record: CompanyProfile) => (\n <TableCellScoreAdmin record={record}>\n <TableCellOPTXScore company={record} />\n </TableCellScoreAdmin>\n ),\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'score_v3',\n title: 'OPTX Score BETA',\n className: 'score_v3',\n sorter: true,\n width: 120,\n render: (value: number, record: CompanyProfile) => (\n <TableCellScoreAdmin record={record} isNewScore>\n <TableCellOPTXScore company={record} isNewScore />\n </TableCellScoreAdmin>\n ),\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'il_optx_score',\n title: 'IL OPTX Score',\n className: 'il_optx_score',\n sorter: true,\n width: 120,\n render: (value: number, record: CompanyProfile) => (\n <TableCellScoreAdmin record={record}>\n <TableCellOPTXScore company={record} />\n </TableCellScoreAdmin>\n ),\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'stage',\n title: 'Stage',\n className: 'stage',\n sorter: true,\n render: (value: string, record: Company) =>\n record.source_tag.includes('et') ? (\n <EditFieldSingleSelect\n isFromGrid\n service={CompanyService.updateCompanyData}\n fieldName=\"Stage\"\n fieldKey=\"stage\"\n value={value}\n successMessage=\"Company stage updated successfully\"\n errorMessage=\"Company stage update failed, Server error!\"\n record={record}\n getPopupContainer={triggerNode => triggerNode.parentElement!}\n />\n ) : (\n value\n ),\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'next_steps',\n title: 'Next Steps',\n className: 'next_steps',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldSingleSelectOther\n isFromGrid\n service={UserService.updateCompanyUserValues}\n fieldName=\"Next Steps\"\n value={value}\n successMessage=\"Company next steps updated successfully!\"\n errorMessage=\"Company next steps update failed, Server error!\"\n record={record}\n fieldOtherKey={'next_steps_opinion'}\n fieldOtherValue={record.next_steps_opinion}\n otherEndpoint={NEXT_STEPS_OPINION_ENDPOINT}\n />\n ),\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'last_touch_date',\n title: 'Last Touch',\n className: 'last_touch_date',\n sorter: true,\n render: (value: string, record: Company) => (\n <TableCellDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={\n value !== DEFAULT_LAST_TOUCH && value !== DEFAULT_NEXT_TOUCH ? undefined : value\n }\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'next_touch_date',\n title: 'Scheduled Touch',\n className: 'next_touch_date',\n sorter: true,\n render: (value: string | string[], record: Company, index: number) => (\n <TableCellListDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={typeof value === 'string' ? value : undefined}\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'active',\n title: 'Active on Pipeline',\n className: 'active',\n sorter: true,\n render: (value, record, index) => (\n <EditFieldRadio\n value={value}\n record={record}\n service={UserService.updateCompanyUserValues}\n fieldName=\"Active on Pipeline\"\n successMessage=\"Company active state updated successfully!\"\n errorMessage=\"Failed to update company active state!\"\n isFromGrid\n />\n ),\n width: 90,\n ellipsis: true,\n },\n {\n dataIndex: 'row_actions',\n title: 'Action',\n className: 'row_actions',\n render: (value: unknown, record: CompanyProfile, index: number) => (\n <TableCellActions value={value} record={record} index={index} />\n ),\n width: 65,\n fixed: 'right',\n },\n];\n","import { GridKeys } from '@optx/models/grid';\nimport columns from '@components/common/table/Companies/columns/virtual-column-config';\nimport contactColumns from '@components/common/table/TableContactsSearch/defaultColumns';\nimport { columns as adddonColumns } from '@components/pages/CompanyProfile/ProfileTabs/Addon/table/defaultColumns';\nimport pipelineReportColumns from '@features/pipeline-report/components/Table/columns/index';\nimport AnalystColumn from '@features/checklist-research-insights/components/Table/columns/analystColumn';\nimport CompanyColumn from '@features/checklist-research-insights/components/Table/columns/companyColumn';\n\n/**\n * Determines the appropriate column configuration for a given grid.\n *\n * @param {GridKeys} gridKey - The key representing the specific grid for which the column configuration is needed.\n * @param {boolean} hasActionColumn - A flag indicating whether the grid includes an action column.\n * @returns {ColumnConfig[]} The column configuration corresponding to the provided grid key and action column presence.\n *\n * @example\n * // Returns contactColumns configuration\n * const config = checkCurrentGridColumnsConfig('contacts', false);\n *\n * @example\n * // Returns adddonColumns configuration\n * const config = checkCurrentGridColumnsConfig('addons', true);\n *\n * @example\n * // Returns pipelineReportColumns configuration\n * const config = checkCurrentGridColumnsConfig('pipelineReport', false);\n *\n * @example\n * // Returns CompanyColumn configuration\n * const config = checkCurrentGridColumnsConfig('checklistResearchInsights', true);\n *\n * @example\n * // Returns AnalystColumn configuration\n * const config = checkCurrentGridColumnsConfig('checklistResearchInsights', false);\n *\n * @example\n * // Returns default columns configuration\n * const config = checkCurrentGridColumnsConfig('unknownGridKey', false);\n */\nexport const checkCurrentGridColumnsConfig = (gridKey: GridKeys, hasActionColumn?: boolean) => {\n if (gridKey === 'contacts') {\n return contactColumns;\n }\n\n if (gridKey === 'addons') {\n return adddonColumns;\n }\n\n if (gridKey === 'pipelineReport') {\n return pipelineReportColumns;\n }\n\n if (gridKey === 'checklistResearchInsights') {\n return hasActionColumn ? CompanyColumn : AnalystColumn;\n }\n\n return columns;\n};\n","import styled, { css } from 'styled-components';\nimport DefaultTable from '@shared/view/organims/Table';\nimport { styledColors } from '@utils/theme/colors';\n\nconst CompanyTableWrapper = styled.div`\n .ant-table-wrapper {\n position: relative;\n z-index: 1;\n }\n .external-scroll-wrapper,\n .external-scroll {\n bottom: 64px;\n }\n .react-resizable {\n position: relative;\n overflow: hidden;\n background-clip: padding-box;\n }\n\n .ant-table-body {\n overflow: hidden;\n min-height: 18px;\n }\n\n .react-resizable-handle {\n position: absolute;\n width: 10px;\n height: 100%;\n bottom: 0;\n right: -5px;\n cursor: col-resize;\n z-index: 1;\n }\n\n .dragHandler:hover {\n cursor: move;\n background-color: #ccc;\n }\n\n .resizeHandle {\n position: absolute;\n width: 10px;\n height: 100%;\n bottom: 0;\n right: -5px;\n cursor: col-resize;\n z-index: 5;\n }\n`;\n\nconst CompanyTable = styled(DefaultTable)<{\n isEmpty?: boolean;\n overflowHeight?: number | null;\n}>`\n ${props =>\n !props.isEmpty &&\n props.overflowHeight &&\n css`\n .ant-table-body::after {\n content: '';\n display: block;\n position: absolute;\n height: ${props.overflowHeight}px;\n width: 100%;\n bottom: 0;\n z-index: 2;\n background: #fff;\n }\n `}\n .ant-table-body {\n min-height: 18px;\n }\n\n /* Temporary styles until we fix issue with DropdownAdd; seems can't be imported and used styled on it\n because is undefined */\n .ant-spin-dot-item {\n display: none;\n }\n\n .row_actions {\n .anticon-ellipsis {\n transform: scale(1.7);\n color: #c2cfe0;\n\n svg {\n width: 22px;\n height: 22px;\n }\n }\n }\n\n .ant-table-cell.row_actions.ant-table-cell-fix-right.ant-table-cell-fix-right-first::after {\n border-right: 1px solid #f0f0f0 !important;\n }\n\n .ant-table-selection {\n text-align: center;\n display: block;\n }\n\n /* row hover */\n .ant-table-row {\n :hover {\n .row_actions .anticon-ellipsis,\n .company_url .anticon-global {\n color: #000;\n }\n\n .company_url {\n .anticon-global {\n :hover {\n color: inherit;\n }\n }\n }\n\n .row_actions {\n .anticon-ellipsis {\n :hover {\n color: ${styledColors.blue6};\n }\n }\n }\n }\n }\n\n .active-row {\n & > td {\n background-color: ${styledColors.blue1};\n }\n }\n\n .ant-table-header {\n .ant-table-cell::after {\n content: attr(data-order);\n width: auto;\n position: absolute;\n top: unset;\n bottom: 58%;\n right: 5px;\n left: unset;\n font-size: 14px;\n color: #1890ff;\n transform: unset;\n box-shadow: none;\n }\n }\n`;\n\nexport const Styled = {\n CompanyTableWrapper,\n CompanyTable,\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { CompanyTabListPaginationState, CompanyTabListResponse } from './interfaces';\nimport * as types from './types';\n\nexport const getCompanyTabLists = createAction<CompanyTabListPaginationState | undefined>(\n types.GET_COMPANY_LISTS\n);\n\nexport const getCompanyTabListsSuccess = createAction(\n types.GET_COMPANY_LISTS_SUCCESS,\n (companyTabLists: CompanyTabListResponse, searchPayload: CompanyTabListPaginationState) => ({\n payload: companyTabLists,\n meta: searchPayload,\n })\n);\n\nexport const sortCompanyTabLists = createAction<CompanyTabListPaginationState>(\n types.SORT_COMPANY_LISTS\n);\n\nexport const getCompanyTabListsFail = createAction<string>(types.GET_COMPANY_LISTS_FAIL);\n\nexport const clearCompanyTabList = createAction(types.CLEAR_COMPANY_LİSTS);\n","export const GET_COMPANY_LISTS = 'GET_COMPANY_LISTS';\nexport const GET_COMPANY_LISTS_SUCCESS = 'GET_COMPANY_LISTS_SUCCESS';\nexport const GET_COMPANY_LISTS_FAIL = 'GET_COMPANY_LISTS_FAIL';\nexport const CLEAR_COMPANY_LİSTS = 'CLEAR_COMPANY_LİSTS';\nexport const SORT_COMPANY_LISTS = 'SORT_COMPANY_LISTS';\n","import React from 'react';\nimport { ColumnType } from 'antd/es/table';\n// models\nimport { CompanyTabLists } from '@optx/models/Company';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\nimport globalConfig from '@optx/constants/config';\n// components\nimport { TableCellDefault, TableCellListURL, TableCellDate } from '../AntTable/cells';\n\nexport const columns: ColumnType<CompanyTabLists>[] = [\n {\n dataIndex: 'title',\n key: 'title',\n title: 'List Name',\n render: TableCellListURL,\n width: '30%',\n },\n {\n dataIndex: 'owner_name',\n key: 'owner_name',\n title: 'Owner',\n render: TableCellDefault,\n },\n {\n dataIndex: 'origin',\n key: 'origin',\n title: 'Origin',\n render: TableCellDefault,\n },\n {\n dataIndex: 'created_at',\n title: 'Start Date',\n className: 'created_at',\n sorter: true,\n align: 'left',\n render: (value: string, record: CompanyTabLists, index: number) => (\n <TableCellDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={!value || value === DEFAULT_CELL_VALUE ? DEFAULT_CELL_VALUE : undefined}\n />\n ),\n },\n {\n dataIndex: 'modified_at',\n title: 'Date Updated',\n className: 'modified_at',\n sorter: true,\n align: 'left',\n render: (value: string, record: CompanyTabLists, index: number) => (\n <TableCellDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={!value || value === DEFAULT_CELL_VALUE ? DEFAULT_CELL_VALUE : undefined}\n />\n ),\n },\n];\n\nexport default columns;\n","import { createSelector } from 'reselect';\nimport { sortColumns } from '@utils/table/sorting';\nimport { AppState } from '@optx/redux/interfaces';\nimport { defaultColumns } from '@components/common/table/TableCompanyTabLists';\nimport { getDefaultScore } from '@optx/redux/user/information/selectors';\n\nconst selectCompanyTabList = (state: AppState) => state.companyTabLists;\n\nexport const isLoading = createSelector(selectCompanyTabList, state => state?.loading);\nexport const shouldFetch = createSelector(\n selectCompanyTabList,\n state => !state.loading && !state.fetchedAt\n);\nexport const getListData = createSelector(selectCompanyTabList, state => state.data);\n\nexport const getHasMore = createSelector(selectCompanyTabList, state => state.hasMore);\nexport const getPaginationQuery = createSelector(selectCompanyTabList, state => state.pagination);\n\nexport const getGridColumns = createSelector(\n getPaginationQuery,\n getDefaultScore,\n (pagination, defaultOptxScore) => sortColumns(defaultColumns, pagination.sortBy, defaultOptxScore)\n);\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyTabLists } from '@optx/models/Company';\nimport {\n AddCompanyToWatchList,\n DeleteCompanyFromWatchList,\n CompanyWatchList,\n} from '@optx/models/WatchList';\nimport { UserInformation } from '@optx/models/user';\nimport {\n CompanyTabListsState,\n CompanyTabListPaginationState,\n CompanyTabListResponse,\n} from '@redux/company/lists/interfaces';\n// constants\nimport { COMPANY_TAB_LISTS_DEFAULT_SORT } from '@constants/table/sort/defaultSort';\n// utils\nimport { parseSorting } from '@optx/utils/filters/parseSorting';\n// redux\nimport * as favoriteListsActions from '@optx/redux/favorite-lists/lists/actions';\nimport * as favoriteListsActionsPopup from '@optx/redux/favorite-lists/lists-popup/actions';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { fetchReducer, fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport * as actions from './actions';\n\nconst initialState: CompanyTabListsState = {\n error: '',\n loading: false,\n data: [],\n fetchedAt: '',\n hasMore: false,\n pagination: {\n pageNumber: 1,\n pageSize: 50,\n sortBy: COMPANY_TAB_LISTS_DEFAULT_SORT,\n },\n};\n\nconst companyTabListsSuccessReducer: CaseReducer<\n CompanyTabListsState,\n PayloadAction<CompanyTabListResponse, any, CompanyTabListPaginationState>\n> = (draftState, action) => {\n draftState.loading = false;\n\n if (action.payload.page === 1) {\n draftState.data = action.payload.lists;\n }\n\n if (action.payload.page !== 1) {\n draftState.data = [...draftState.data, ...action.payload.lists];\n }\n\n draftState.fetchedAt = new Date().toISOString();\n draftState.pagination.pageNumber = action.payload.page;\n draftState.hasMore =\n action.payload.page * draftState.pagination.pageSize < action.payload.total_list_count;\n draftState.pagination.sortBy = action.meta.sortBy;\n};\n\nconst addCompanyToListSuccessReducer: CaseReducer<\n CompanyTabListsState,\n PayloadAction<AddCompanyToWatchList>\n> = (draftState, action) => {\n const { watchLists } = action.payload;\n\n const newWatchlists = watchLists\n .map(list => {\n const newList: CompanyTabLists = {\n unique_id: list.unique_id,\n title: list.title,\n owner_name: list.owner_name,\n origin: 'OPTX',\n list_type: 'Watchlist',\n count: list.count,\n clickable: true,\n created_at: list.date,\n modified_at: list.modified_at,\n };\n\n return newList;\n })\n .concat(draftState.data);\n\n draftState.data = newWatchlists;\n};\n\nconst deleteCompanyToListSuccessReducer: CaseReducer<\n CompanyTabListsState,\n PayloadAction<DeleteCompanyFromWatchList>\n> = (draftState, action) => {\n const { listId } = action.payload;\n\n const index = draftState.data.findIndex(item => item.unique_id === listId);\n\n if (index !== -1) {\n draftState.data.splice(index, 1);\n }\n};\n\nconst clearCompanyTabList: CaseReducer<CompanyTabListsState> = draftState => {\n draftState.data = [];\n draftState.pagination = initialState.pagination;\n};\n\nconst createCompanyToListSuccessReducer: CaseReducer<\n CompanyTabListsState,\n PayloadAction<{\n companyId: number;\n list: CompanyWatchList;\n }>\n> = (draftState, action) => {\n const { list } = action.payload;\n\n draftState.data.unshift({\n ...list,\n origin: list.origin as string,\n list_type: 'Watchlist',\n clickable: true,\n created_at: new Date().toISOString(),\n });\n};\n\nexport const fetchUserInformationSuccessReducer: CaseReducer<\n CompanyTabListsState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const sorting = action.payload.settings.session_settings?.profile_lists_tab_sorting;\n\n if (sorting) {\n const { sortBy } = parseSorting(sorting);\n draftState.pagination.sortBy = sortBy;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.getCompanyTabLists, fetchReducer)\n .addCase(actions.clearCompanyTabList, clearCompanyTabList)\n .addCase(actions.getCompanyTabListsSuccess, companyTabListsSuccessReducer)\n .addCase(actions.getCompanyTabListsFail, fetchFailReducer)\n // Company Profile\n .addCase(favoriteListsActions.addCompanyToListSuccess, addCompanyToListSuccessReducer)\n .addCase(favoriteListsActions.deleteCompanyFromListSuccess, deleteCompanyToListSuccessReducer)\n .addCase(favoriteListsActions.createFavoriteListSuccess, createCompanyToListSuccessReducer)\n .addCase(favoriteListsActionsPopup.addCompanyToListPopupSuccess, addCompanyToListSuccessReducer)\n .addCase(\n favoriteListsActionsPopup.deleteCompanyFromListPopupSuccess,\n deleteCompanyToListSuccessReducer\n )\n .addCase(\n favoriteListsActionsPopup.createFavoriteListPopupSuccess,\n createCompanyToListSuccessReducer\n )\n // Sorting\n .addCase(actions.sortCompanyTabLists, fetchReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\nimport { AxiosResponse } from 'axios';\n// services\nimport NotificationService from '@optx/services/NotificationService';\nimport CompanyService from '@optx/services/api/CompanyService';\n// utils\nimport { mapSortQuery } from '@optx/utils/search';\n// redux\nimport { actions as userActions } from '@redux/user/information';\nimport { CompanyTabListPaginationState, CompanyTabListResponse } from './interfaces';\nimport {\n getCompanyTabLists,\n getCompanyTabListsSuccess,\n getCompanyTabListsFail,\n sortCompanyTabLists,\n} from './actions';\n\nexport function* getCompanyTabListsSaga(action: PayloadAction<CompanyTabListPaginationState>) {\n try {\n const res: AxiosResponse<CompanyTabListResponse> = yield call(\n CompanyService.getCompanyTabLists,\n action.payload\n );\n\n if (res.data) {\n yield put(getCompanyTabListsSuccess(res.data, action.payload));\n } else {\n const errorMessage = 'Company list fail!';\n yield put(getCompanyTabListsFail('Error for company lists rounds!'));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Company list fail!';\n yield put(getCompanyTabListsFail('Error for company lists rounds!'));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* sortCompanyListsSaga(action: PayloadAction<CompanyTabListPaginationState>) {\n const sortBy = action.payload.sortBy;\n\n const sortQuery = queryString.stringify(mapSortQuery(sortBy), {\n arrayFormat: 'comma',\n });\n\n try {\n const res: AxiosResponse<CompanyTabListResponse> = yield call(\n CompanyService.getCompanyTabLists,\n action.payload\n );\n yield put(userActions.updateUserSettings({ profile_lists_tab_sorting: sortQuery }));\n\n if (res.data) {\n yield put(getCompanyTabListsSuccess(res.data, action.payload));\n } else {\n const errorMessage = 'Company list fail!';\n yield put(getCompanyTabListsFail('Error for company lists rounds!'));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Company list fail!';\n yield put(getCompanyTabListsFail('Error for company lists rounds!'));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companySaga() {\n yield takeLatest(getCompanyTabLists, getCompanyTabListsSaga);\n yield takeLatest(sortCompanyTabLists, sortCompanyListsSaga);\n}\n","export const featureName = 'admin-home';\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const FETCH_ADMIN_COMPANY_ACTIVITY = createFeatureActionType(\n featureName,\n 'FETCH_ADMIN_COMPANY_ACTIVITY'\n);\nexport const FETCH_ADMIN_COMPANY_ACTIVITY_SUCCESS = createFeatureActionType(\n featureName,\n 'FETCH_ADMIN_COMPANY_ACTIVITY_SUCCESS'\n);\nexport const FETCH_ADMIN_COMPANY_ACTIVITY_FAIL = createFeatureActionType(\n featureName,\n 'FETCH_ADMIN_COMPANY_ACTIVITY_FAIL'\n);\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const FETCH_INSIGHTS_STATS = createFeatureActionType(featureName, 'FETCH_INSIGHTS_STATS');\nexport const FETCH_INSIGHTS_STATS_SUCCESS = createFeatureActionType(\n featureName,\n 'FETCH_INSIGHTS_STATS_SUCCESS'\n);\nexport const FETCH_INSIGHTS_STATS_FAIL = createFeatureActionType(\n featureName,\n 'FETCH_INSIGHTS_STATS_FAIL'\n);\nexport const UPDATE_INSIGHTS_REGION = createFeatureActionType(\n featureName,\n 'UPDATE_INSIGHTS_REGION'\n);\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const FETCH_FILTERS = createFeatureActionType(featureName, 'FETCH_FILTERS');\nexport const FETCH_FILTERS_SUCCESS = createFeatureActionType(featureName, 'FETCH_FILTERS_SUCCESS');\nexport const FETCH_FILTERS_FAIL = createFeatureActionType(featureName, 'FETCH_FILTERS_FAIL');\n\nexport const UPDATE_FILTER = createFeatureActionType(featureName, 'UPDATE_FILTER');\n","import { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../../featureName';\n\nexport const FETCH_INIT_ACTIVITY = createFeatureActionType(featureName, 'FETCH_INIT_ACTIVITY');\nexport const FETCH_ACTIVITY = createFeatureActionType(featureName, 'FETCH_ACTIVITY');\nexport const FETCH_ACTIVITY_SUCCESS = createFeatureActionType(\n featureName,\n 'FETCH_ACTIVITY_SUCCESS'\n);\nexport const FETCH_ACTIVITY_FAIL = createFeatureActionType(featureName, 'FETCH_ACTIVITY_FAIL');\n","// constants\nimport { featureName } from '../../featureName';\n// utils\nimport { createFeatureActionType } from '@optx/utils/feature';\n// redux\nimport * as company from './company';\nimport * as insights from './insights';\nimport * as filters from './filters';\nimport * as activity from './activity';\n\nconst init = createFeatureActionType(featureName, 'INIT');\n\nexport const types = {\n init,\n company,\n insights,\n activity,\n filters,\n};\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { types } from '../types';\nimport { AdminCompanyActivityResponse } from '../interfaces';\n\nexport const fetchAdminCompanyActivity = createAction(types.company.FETCH_ADMIN_COMPANY_ACTIVITY);\nexport const fetchAdminCompanyActivitySuccess = createAction<AdminCompanyActivityResponse>(\n types.company.FETCH_ADMIN_COMPANY_ACTIVITY_SUCCESS\n);\nexport const fetchAdminCompanyActivityFail = createAction<string>(\n types.company.FETCH_ADMIN_COMPANY_ACTIVITY_FAIL\n);\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { InsightsDataState } from '../interfaces';\nimport { types } from '../types';\n\nexport const fetchInsightsStats = createAction(types.insights.FETCH_INSIGHTS_STATS);\nexport const fetchInsightsStatsSuccess = createAction<InsightsDataState>(\n types.insights.FETCH_INSIGHTS_STATS_SUCCESS\n);\nexport const fetchInsightsStatsFail = createAction<string>(\n types.insights.FETCH_INSIGHTS_STATS_FAIL\n);\nexport const updateInsightsRegion = createAction<string>(types.insights.UPDATE_INSIGHTS_REGION);\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { FiltersState } from '../interfaces';\nimport { types } from '../types';\n\nexport const fetchFilters = createAction(types.filters.FETCH_FILTERS);\nexport const fetchFiltersSuccess = createAction<FiltersState>(types.filters.FETCH_FILTERS_SUCCESS);\nexport const fetchFiltersFail = createAction<string>(types.filters.FETCH_FILTERS_FAIL);\n\nexport const updateFilter = createAction<{ value: [string, string] }>(types.filters.UPDATE_FILTER);\n","import { createAction } from '@reduxjs/toolkit';\n// models\nimport { ActivityState } from '@optx/features/analyst-home/state/interfaces';\nimport { types } from '../types';\n\nexport const fetchInitActivity = createAction(types.activity.FETCH_INIT_ACTIVITY);\nexport const fetchActivity = createAction(types.activity.FETCH_ACTIVITY);\nexport const fetchActivitySuccess = createAction<ActivityState>(\n types.activity.FETCH_ACTIVITY_SUCCESS\n);\nexport const fetchActivityFail = createAction<string>(types.activity.FETCH_ACTIVITY_FAIL);\n","import { createAction } from '@reduxjs/toolkit';\nimport { types } from '../types';\nimport * as company from './company';\nimport * as insights from './insights';\nimport * as filters from './filters';\nimport * as activity from './activity';\n\nconst init = createAction(types.init);\n\nexport const actions = {\n init,\n company,\n insights,\n activity,\n filters,\n};\n","export const DEFAULT_REGION = 'US';\nexport const ACTIVITY_INSIGHT_ORDER = [\n 'companies_reached',\n 'stage_change',\n 'companies_added',\n 'qualified_leads',\n];\nexport const TOTALS_ORDER = ['active', 'rank_5s', 'add_ons', 'Pass', 'Dead'];\nexport const FILTER_REGIONS_ORDER = ['ALL', 'US', 'EU'];\n","import { createSelector } from 'reselect';\nimport { Dictionary } from 'lodash';\n// models\nimport { labelNameMap } from '@optx/features/analyst-home/constants/labels';\nimport { ActivityState } from '@optx/features/analyst-home/state/interfaces';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { AppState } from '@optx/redux/interfaces';\n// constants\nimport { ACTIVITY_INSIGHT_ORDER, FILTER_REGIONS_ORDER, TOTALS_ORDER } from '../constants';\n// utils\nimport { parseFilter } from '@optx/utils/filters/parseFilters';\n// redux\nimport * as searchFilters from '@redux/company/filters/selectors';\n\nconst selectFeatureState = (state: AppState) => state.adminHome;\n\nconst getPipelineInsigthsRegions = createSelector(selectFeatureState, state => {\n if (state.insights.data) {\n return FILTER_REGIONS_ORDER.map(region => ({\n label: region,\n end: region,\n start: region,\n }));\n } else {\n return [];\n }\n});\n\nconst getPipelineInsightsLoading = createSelector(\n selectFeatureState,\n state => state.insights.loading\n);\n\nconst getFiltersLoading = createSelector(selectFeatureState, state => state.filters.loading);\n\nconst getPipelineInsightsRegionSelectedValue = createSelector(selectFeatureState, state => {\n return [state.insights.insightsRegion, state.insights.insightsRegion];\n});\n\nconst getPipelineData = createSelector(selectFeatureState, state => {\n const insightsData = state.insights.data;\n\n if (insightsData) {\n const { stages, ...totals } = state.insights.data?.[state.insights.insightsRegion]!;\n\n const stagesData = Object.entries(stages ?? {}).map(([item, value]) => ({\n label: item,\n value,\n }));\n\n const totalsData = Object.entries(totals ?? {})\n .sort(function (a, b) {\n return TOTALS_ORDER.indexOf(a[0]) - TOTALS_ORDER.indexOf(b[0]);\n })\n .map(([item, value]) => ({\n label: item,\n value,\n }));\n\n return {\n stages: stagesData,\n totals: totalsData,\n };\n }\n\n return { stages: [], totals: [] };\n});\n\nconst getSourcingActivityInsightsDateFilter = createSelector(selectFeatureState, state => {\n return state.filters.value.activity_insights_date;\n});\n\nconst getActivityInsightsDates = createSelector(selectFeatureState, state => {\n const filterdata = state.filters.data;\n\n if (filterdata) {\n const dates = filterdata.activity_insights_date;\n\n return dates;\n }\n\n return [];\n});\n\nconst getSourcingActivityInsightsData = createSelector(selectFeatureState, state => {\n // to reoreder activity insight object\n\n const activityInsightData = state.activity.insight.data;\n\n if (activityInsightData) {\n return Object.entries(activityInsightData ?? {})\n .sort(function (a, b) {\n return ACTIVITY_INSIGHT_ORDER.indexOf(a[0]) - ACTIVITY_INSIGHT_ORDER.indexOf(b[0]);\n })\n .map(([item, value]) => {\n const { analyst, analyst_previous, ...totals } = value;\n const label = labelNameMap[item as keyof ActivityState];\n\n const customTotals = {\n ...totals,\n growth: undefined,\n };\n\n return {\n label: label,\n values: [value.analyst, value.analyst_previous],\n totals: customTotals,\n growth: value.growth,\n };\n });\n }\n\n return [];\n});\n\nconst getSourcingActivityInsightsRedirect = createSelector(selectFeatureState, state => {\n return state.filters.data?.activity_insights_redirect || {};\n});\n\nconst isSourcingAcitivtyInsightsLoading = createSelector(\n selectFeatureState,\n state => state.activity.insight.loading\n);\n\nconst getOutreachRecencyFilters = createSelector(\n selectFeatureState,\n searchFilters.getCompanyFilters,\n getPipelineInsightsRegionSelectedValue,\n (state, companyFilters, region) => {\n const filterdata = state.filters.data;\n\n if (filterdata) {\n const redirects = filterdata.outreach_recency_redirect[region[0]];\n const mappedFilters: Dictionary<Dictionary<PreselectedFilter>> = {};\n\n if (redirects) {\n Object.keys(redirects).forEach(key => {\n const [filters] = parseFilter(redirects[key], companyFilters);\n mappedFilters[key] = filters as Dictionary<PreselectedFilter>;\n });\n\n return mappedFilters;\n }\n }\n\n return {};\n }\n);\n\nconst selectCompanyActivityData = createSelector(selectFeatureState, state => state?.company?.data);\n\nconst getCompanyActivityDataLoading = createSelector(\n selectFeatureState,\n state => state?.company?.loading\n);\nconst recentlyAccessedLists = createSelector(\n selectFeatureState,\n state => state?.company?.data?.recently_accessed_lists\n);\n\nconst newMatchSavedSearches = createSelector(\n selectFeatureState,\n state => state?.company?.data?.saved_searches_with_new_matches\n);\nconst recentlyViewedCompanies = createSelector(\n selectFeatureState,\n state => state?.company?.data?.recently_viewed_companies\n);\n\nconst assignedCompanies = createSelector(\n selectFeatureState,\n state => state?.company?.data?.my_assigned_companies\n);\n\nconst getSearchCardsBlocks = createSelector(selectFeatureState, state => {\n const companies = state.filters?.data?.action_shortcuts;\n\n return companies;\n});\nconst getReportsCardsBlocks = createSelector(selectFeatureState, state => {\n const companies = state.filters?.data?.workflow_shortcuts;\n\n return companies;\n});\nexport const selectors = {\n getPipelineInsigthsRegions,\n getPipelineInsightsLoading,\n getPipelineInsightsRegionSelectedValue,\n getPipelineData,\n getSourcingActivityInsightsDateFilter,\n getFiltersLoading,\n getActivityInsightsDates,\n getOutreachRecencyFilters,\n getSourcingActivityInsightsData,\n isSourcingAcitivtyInsightsLoading,\n getSourcingActivityInsightsRedirect,\n getCompanyActivityData: selectCompanyActivityData,\n getCompanyActivityDataLoading,\n recentlyAccessedLists,\n newMatchSavedSearches,\n recentlyViewedCompanies,\n assignedCompanies,\n getSearchCardsBlocks,\n getReportsCardsBlocks,\n};\n","import { AxiosResponse } from 'axios';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { call, put, select, take, takeLatest } from 'redux-saga/effects';\n// models\nimport { InsightsDataState } from '../interfaces';\nimport { ActivityState } from '@models/home';\nimport { FiltersState, AdminCompanyActivityResponse } from '../interfaces';\n// services\nimport { AdminService } from '@optx/services/api';\nimport NotificationService from '@optx/services/NotificationService';\n// utils\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// redux\nimport { actions } from '../actions';\nimport { getAdvancedSearchListId } from '@optx/features/grid/search/state/selectors';\nimport { selectors } from '../selectors';\nimport {\n actions as userInformationActions,\n selectors as userInformationSelectors,\n} from '@redux/user/information';\n\nexport function* fetchInsightsStatsSaga() {\n try {\n const res: AxiosResponse<InsightsDataState> = yield call(AdminService.getHomeInsightsStats);\n\n if (res.data) {\n yield put(actions.insights.fetchInsightsStatsSuccess(res.data));\n } else {\n yield put(\n actions.insights.fetchInsightsStatsFail('Failed to fetch My Pipeline & Outreach Recency!')\n );\n NotificationService.error('Failed to fetch My Pipeline & Outreach Recency!');\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch My Pipeline & Outreach Recency!');\n\n yield put(actions.insights.fetchInsightsStatsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchCompanyActivitySaga() {\n const listId: string | number | undefined = yield select(\n getAdvancedSearchListId('advancedSearch')\n );\n\n try {\n const res: AxiosResponse<AdminCompanyActivityResponse> = yield call(\n AdminService.getCompanyActivity\n );\n\n let customResponse = res.data;\n\n if (listId && typeof listId === 'number') {\n customResponse = {\n ...res.data,\n saved_searches_with_new_matches: {\n ...res.data.saved_searches_with_new_matches,\n //@ts-ignore\n data: res.data.saved_searches_with_new_matches.data.filter(\n //@ts-ignore\n item => item.list_id !== listId\n ),\n },\n };\n }\n\n if (res.data) {\n yield put(\n actions.company.fetchAdminCompanyActivitySuccess(\n customResponse as AdminCompanyActivityResponse\n )\n );\n } else {\n yield put(actions.company.fetchAdminCompanyActivityFail('Failed to fetch company activity!'));\n NotificationService.error('Failed to fetch company activity!');\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch company activity!');\n\n yield put(actions.company.fetchAdminCompanyActivityFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchFiltersSaga() {\n try {\n const res: AxiosResponse<FiltersState> = yield call(AdminService.getDataSettings);\n\n if (res.data) {\n yield put(actions.filters.fetchFiltersSuccess(res.data));\n } else {\n yield put(actions.filters.fetchFiltersFail('Failed to fetch filters!'));\n NotificationService.error('Failed to fetch filters!');\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch filters!');\n\n yield put(actions.filters.fetchFiltersFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchActivitySaga() {\n try {\n const dates: [string, string] = yield select(selectors.getSourcingActivityInsightsDateFilter);\n const payload = { ddate_lower: dates[0], ddate_upper: dates[1] };\n\n const res: AxiosResponse<ActivityState> = yield call(AdminService.getHomeActivity, payload);\n\n if (res.data) {\n yield put(actions.activity.fetchActivitySuccess(res.data));\n } else {\n yield put(\n actions.activity.fetchActivityFail('Failed to fetch My Pipeline & Outreach Recency!')\n );\n NotificationService.error('Failed to fetch My Pipeline & Outreach Recency!');\n }\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Failed to fetch My Pipeline & Outreach Recency!');\n\n yield put(actions.activity.fetchActivityFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchInitActivitySaga() {\n const userIsLoaded: boolean = yield select(userInformationSelectors.loaded);\n\n if (!userIsLoaded) {\n yield take(userInformationActions.fetchUserInformationSuccess);\n }\n\n yield put(actions.activity.fetchActivity());\n}\n\nexport function* updateFilterSaga(action: PayloadAction<{ value: [string, string] }>) {\n const { value } = action.payload;\n yield put(\n userInformationActions.updateUserSettings({\n non_analyst_activity_timeframe: value,\n })\n );\n yield put(actions.activity.fetchActivity());\n}\n\nexport function* updateInsightsRegionSaga(action: PayloadAction<string>) {\n const value = action.payload;\n\n yield put(\n userInformationActions.updateUserSettings({\n non_analyst_insights_regions: value,\n })\n );\n}\n\nexport function* saga() {\n yield takeLatest(actions.insights.fetchInsightsStats, fetchInsightsStatsSaga);\n yield takeLatest(actions.company.fetchAdminCompanyActivity, fetchCompanyActivitySaga);\n yield takeLatest(actions.filters.fetchFilters, fetchFiltersSaga);\n yield takeLatest(actions.activity.fetchActivity, fetchActivitySaga);\n yield takeLatest(actions.activity.fetchInitActivity, fetchInitActivitySaga);\n yield takeLatest(actions.filters.updateFilter, updateFilterSaga);\n yield takeLatest(actions.insights.updateInsightsRegion, updateInsightsRegionSaga);\n}\n","import { takeLatest, put, fork, take } from 'redux-saga/effects';\n// redux\nimport { actions } from '../actions';\nimport { saga as featuresSagas } from './sagas';\n\nfunction* initSaga() {\n yield put(actions.filters.fetchFilters());\n yield put(actions.insights.fetchInsightsStats());\n yield put(actions.company.fetchAdminCompanyActivity());\n yield take(actions.filters.fetchFiltersSuccess);\n yield put(actions.activity.fetchInitActivity());\n}\n\nexport function* saga() {\n yield takeLatest(actions.init, initSaga);\n yield fork(featuresSagas);\n}\n","import { PayloadAction, createReducer } from '@reduxjs/toolkit';\nimport { DefaultStateInsights } from '../interfaces';\nimport { DEFAULT_REGION } from '../constants';\nimport { actions } from '../actions';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport {\n fetchFailReducer,\n fetchReducer,\n fetchSuccessReducer,\n} from '@optx/redux/feature/fetch/reducers';\nimport { UserInformation } from '@optx/models/user';\nexport const initialState: DefaultStateInsights = {\n data: null,\n loading: false,\n error: null,\n insightsRegion: DEFAULT_REGION,\n};\n\nconst updateInsightsRegionReducer = (\n draftState: DefaultStateInsights,\n action: PayloadAction<string>\n) => {\n draftState.insightsRegion = action.payload;\n};\n\nconst fetchUserInformationSuccessReducer = (\n draftState: DefaultStateInsights,\n action: PayloadAction<UserInformation>\n) => {\n const filterValue = action.payload.settings.session_settings?.non_analyst_insights_regions;\n\n if (filterValue) {\n draftState.insightsRegion = filterValue;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.insights.fetchInsightsStats, fetchReducer)\n .addCase(actions.insights.fetchInsightsStatsSuccess, fetchSuccessReducer)\n .addCase(actions.insights.fetchInsightsStatsFail, fetchFailReducer)\n .addCase(actions.insights.updateInsightsRegion, updateInsightsRegionReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n);\n\nexport default reducer;\n","import { PayloadAction, createReducer } from '@reduxjs/toolkit';\n// models\nimport { ActivityStateType } from '../interfaces';\nimport { ActivityState } from '@optx/features/analyst-home/state/interfaces';\n// redux\nimport { actions } from '../actions';\nimport { fetchReducer, fetchFailReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\n\nexport const initialState: ActivityStateType = {\n insight: {\n data: null,\n loading: false,\n error: '',\n },\n};\n\nconst fetchActivityReducer = (draftState: ActivityStateType) => {\n fetchReducer(draftState.insight);\n};\n\nconst fetchActivitySuccessReducer = (\n draftState: ActivityStateType,\n action: PayloadAction<ActivityState>\n) => {\n fetchSuccessReducer(draftState.insight, action);\n};\n\nconst fetchActivityFailReducer = (draftState: ActivityStateType, action: PayloadAction<string>) => {\n fetchFailReducer(draftState.insight, action);\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.activity.fetchActivity, fetchActivityReducer)\n .addCase(actions.activity.fetchActivitySuccess, fetchActivitySuccessReducer)\n .addCase(actions.activity.fetchActivityFail, fetchActivityFailReducer)\n);\n\nexport default reducer;\n","import { createReducer } from '@reduxjs/toolkit';\n// models\nimport { AdminCompanyActivityResponse } from '../interfaces';\nimport { DefaultState } from '@optx/models/home';\n// redux\nimport { actions } from '../actions';\nimport { fetchReducer, fetchFailReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\n\nexport const initialState: DefaultState<AdminCompanyActivityResponse> = {\n data: null,\n loading: false,\n error: '',\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.company.fetchAdminCompanyActivity, fetchReducer)\n .addCase(actions.company.fetchAdminCompanyActivitySuccess, fetchSuccessReducer)\n .addCase(actions.company.fetchAdminCompanyActivityFail, fetchFailReducer)\n);\n\nexport default reducer;\n","import { PayloadAction, createReducer, current } from '@reduxjs/toolkit';\n// models\nimport { UserInformation } from '@optx/models/user';\nimport { FiltersState, FilterState } from '../interfaces';\n// redux\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { fetchReducer, fetchFailReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\nimport { actions } from '../actions';\n\nexport const initialState: FilterState = {\n data: null,\n value: {\n activity_insights_date: ['', ''],\n },\n loading: false,\n error: '',\n};\n\nconst updateFilterReducer = (\n draftState: FilterState,\n action: PayloadAction<{ value: [string, string] }>\n) => {\n const { value } = action.payload;\n draftState.value.activity_insights_date = value;\n};\n\nconst fetchFiltersSuccessReducer = (\n draftState: FilterState,\n action: PayloadAction<FiltersState>\n) => {\n fetchSuccessReducer(draftState, action);\n\n const activityInsightDate = action.payload.activity_insights_date?.[0];\n const persistData = current(draftState.value.activity_insights_date);\n\n if (persistData[0] === '' && activityInsightDate) {\n draftState.value.activity_insights_date = [activityInsightDate.start, activityInsightDate.end];\n }\n};\n\nconst fetchUserInformationSuccessReducer = (\n draftState: FilterState,\n action: PayloadAction<UserInformation>\n) => {\n const filterValue = action.payload.settings.session_settings?.non_analyst_activity_timeframe;\n\n if (filterValue) {\n draftState.value.activity_insights_date = filterValue;\n }\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.filters.fetchFilters, fetchReducer)\n .addCase(actions.filters.fetchFiltersSuccess, fetchFiltersSuccessReducer)\n .addCase(actions.filters.fetchFiltersFail, fetchFailReducer)\n .addCase(actions.filters.updateFilter, updateFilterReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n);\n\nexport default reducer;\n","import { combineReducers } from 'redux';\nimport { AdminHomeState } from '../interfaces';\nimport insights from './insights';\nimport activity from './activity';\nimport company from './company';\nimport filters from './filters';\n\nexport const reducer = combineReducers<AdminHomeState>({\n insights,\n activity,\n company,\n filters,\n});\n","import defaultAvatarImage from '../assets/images/users/avatar-default.png';\n\nexport { defaultAvatarImage };\n","import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { Dropdown, Menu } from 'antd';\nimport { EllipsisOutlined } from '@ant-design/icons';\nimport { useDispatch } from 'react-redux';\n// models\nimport { CompanyUserContact } from '@models/api/contacts';\nimport { Cell } from '@optx/models/table/Cell';\nimport { PlacementValues } from '@optx/models/DropdownAdd';\n// constants\nimport { CompanyPageRelationshipManagement, OPTXChromePlugin } from '@optx/constants/pendoActions';\n// utils\nimport { getEmailsFromString } from '@utils/equityTouch';\nimport { getPlacement, handleMenuVisibleChange } from '@utils/menu';\n// redux\nimport { actions } from '@redux/company/primary-contacts';\n\nconst { Item: MenuItem } = Menu;\n\nconst TableCellActions: React.FC<Cell<CompanyUserContact>> = ({ record }) => {\n const dispatch = useDispatch();\n const triggerRef = useRef<HTMLDivElement>(null);\n const [placement, setPlacement] = useState<PlacementValues>('bottomRight');\n\n const editingContact = useCallback(() => {\n dispatch(\n actions.editingPrimaryContact({\n ...record,\n emails: getEmailsFromString(record.email),\n })\n );\n }, [dispatch, record]);\n\n const handleClick = useCallback(() => {\n const chromeExtensionExists = document.getElementsByClassName('extension-tabs').length;\n\n if (chromeExtensionExists) {\n window.pendo.track(OPTXChromePlugin.companyPage.contacts_threeDotsAction_editContact);\n } else {\n window.pendo.track(CompanyPageRelationshipManagement.primaryContacts_editContact);\n }\n\n document.body.classList.remove('popover-visible');\n\n editingContact();\n }, [editingContact]);\n\n const menuItems = useMemo(\n () => [\n {\n text: 'Edit Contact',\n onClick: handleClick,\n },\n ],\n [handleClick]\n );\n\n const handleVisibleChange = (visible: boolean) => {\n setPlacement(getPlacement(triggerRef, { itemLength: menuItems.length }));\n\n handleMenuVisibleChange(visible);\n };\n\n const menu = useMemo(\n () => (\n <Menu className=\"dropdown-add\">\n {menuItems.map(item => (\n <MenuItem onClick={item.onClick}>{item.text}</MenuItem>\n ))}\n </Menu>\n ),\n [menuItems]\n );\n\n return (\n <div className=\"dropdown-block dropdown-tags empty-popover-wrapper\" ref={triggerRef}>\n <Dropdown\n overlay={menu}\n trigger={['click']}\n placement={placement}\n onVisibleChange={handleVisibleChange}\n >\n <EllipsisOutlined\n onClick={() => {\n window.pendo.track(OPTXChromePlugin.companyPage.contacts_threeDotsAction);\n }}\n />\n </Dropdown>\n </div>\n );\n};\n\nexport default TableCellActions;\n","import { Row } from 'antd';\nimport styled from 'styled-components';\n\nexport const RowWrapper = styled(Row)`\n flex-flow: row nowrap;\n\n .ant-col:first-child {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`;\n\nconst Styled = {\n RowWrapper,\n};\n\nexport default Styled;\n","import React from 'react';\nimport { Tag, Col } from 'antd';\n// models\nimport { CompanyUserContact } from '@models/api/contacts';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n// styles\nimport Styled from './TableCellName.styled';\n\nconst TableCellName = (value: string, record: CompanyUserContact) => {\n return (\n <Styled.RowWrapper justify=\"space-between\">\n <Col>\n <TruncateTooltip title={value}>{value}</TruncateTooltip>\n </Col>\n <Col>\n {/* to update when api will send a boolean instead of a string */}\n {/* @ts-ignore */}\n {record.primary_contact !== 'False' && record.primary_contact !== false && (\n <Tag color=\"blue\">Primary</Tag>\n )}\n {record.is_edited && <Tag color=\"default\">edited</Tag>}\n </Col>\n </Styled.RowWrapper>\n );\n};\n\nexport default TableCellName;\n","import React from 'react';\n// models\nimport Company from '@optx/models/Company';\nimport { Cell } from '@models/table/Cell';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\nimport { cellIsEqual } from '@components/common/table/AntTable/cells/memoize';\n\nconst TableCellList: React.FC<Cell<Company>> = ({ value }) => {\n if (value && value.length && value[0] !== '') {\n const formattedValue = value.join(', ');\n\n return (\n <TruncateTooltip title={formattedValue} placement=\"left\">\n {formattedValue}\n </TruncateTooltip>\n );\n }\n\n return <>{DEFAULT_CELL_VALUE}</>;\n};\n\nexport default React.memo(TableCellList, cellIsEqual);\n","import React, { useEffect, useState, useRef } from 'react';\nimport styled from 'styled-components';\nimport { Card, Radio, Tooltip as AntdTooltip, Tag } from 'antd';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport {\n ResponsiveContainer,\n XAxis,\n YAxis,\n Tooltip,\n TooltipProps,\n Line,\n LineChart,\n Legend,\n} from 'recharts';\nimport moment from 'moment';\n// models\nimport { ChartData, ChartIntervalKeys, ChartItem, ChartItemKeys } from '@models/charts/data';\n// constants\nimport globalConfig from '@optx/constants/config';\nimport { ISO_DATE_FORMAT, SHORT_MONTH_YEAR_DATE_FORMAT } from '@optx/constants/format/date';\nimport { CompanyPageOverviewPendo, OPTXChromePlugin } from '@optx/constants/pendoActions';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { getFirstValidDate, getChartTicks } from '@utils/charts';\n// components\nimport { ScoreTrending } from '@components/common/trending';\nimport KeyPerformanceIndicator from '@components/common/Text/KeyPerformanceIndicator';\nimport { ReactComponent as Gradients } from '@assets/svg/gradient-definitions.svg';\nimport EmptyChart from './EmptyChart';\nimport LineChartTooltip from './LineChartTooltip';\nimport CombinedChartTicks from './CombinedChartTicks';\nimport Styles from './ChartHeader.style';\n\ninterface LinearChartProps {\n data: ChartData;\n isLoading?: boolean;\n dataKey: string;\n dataSecondaryKey?: string;\n labelKey: string;\n title: string;\n kpiLabel: string;\n newKPILabel?: string;\n className?: string;\n isTrending?: boolean;\n psgDate?: string | null;\n headerValue?: number;\n newHeaderValue?: number;\n growth?: string;\n newGrowth?: string;\n isPSGCompany?: boolean;\n isExtension?: boolean;\n legend?: React.ReactElement;\n scoreType?: string;\n}\n\ninterface DotProps {\n value: number | null;\n payload: ChartItem;\n stroke: string;\n cx: number;\n cy: number;\n fill: string;\n}\n\nconst NewTag = styled(Tag)`\n margin-right: 25px;\n border-color: #a0d911;\n`;\n\nconst LinearChart: React.FC<LinearChartProps> = ({\n data,\n isLoading = false,\n dataKey,\n dataSecondaryKey,\n labelKey,\n title,\n kpiLabel,\n newKPILabel,\n isTrending,\n headerValue,\n newHeaderValue,\n growth,\n newGrowth,\n psgDate,\n isPSGCompany = false,\n isExtension = false,\n legend,\n scoreType,\n}) => {\n const [interval, setIntervalValue] = useState<'' | ChartIntervalKeys>('');\n const [maxValue, setMaxValue] = useState<string | number | undefined | null>(DEFAULT_EMPTY_VALUE);\n const [minValue, setMinValue] = useState<string | number | undefined | null>(DEFAULT_EMPTY_VALUE);\n const [growthClassName, setGrowthClassName] = useState('');\n const [newMaxValue, setNewMaxValue] = useState<string | number | undefined | null>(\n DEFAULT_EMPTY_VALUE\n );\n const [newMinValue, setNewMinValue] = useState<string | number | undefined | null>(\n DEFAULT_EMPTY_VALUE\n );\n const [newGrowthClassName, setNewGrowthClassName] = useState('');\n const [chartPoints, setChartPoints] = useState<ChartItem[]>([]);\n const [historyStartsWidth, setHistoryStartsWidth] = useState<string | undefined>();\n const [ticks, setTicks] = useState<Array<string>>([]);\n const [formatGrowth, setFormatGrowth] = useState<number | null>(null);\n const [newFormatGrowth, setNewFormatGrowth] = useState<number | null>(null);\n const [psgDotCoordinate, setPsgDotCoordinate] = useState<{ x: number; y: number }>({\n x: 0,\n y: 0,\n });\n\n const areaRef = useRef<any>();\n const areDefaultTicksSetRef = useRef<boolean>(false);\n\n let defaultKey = '3M' as ChartIntervalKeys;\n\n if (data['2Y'].data.length) {\n defaultKey = '2Y';\n } else if (data['1Y'].data.length) {\n defaultKey = '1Y';\n } else if (data['6M'].data.length) {\n defaultKey = '6M';\n }\n\n const updateGrowth = (key: ChartIntervalKeys) => {\n if (!isNaN(Number(data[key]?.growth))) {\n return setFormatGrowth(data[key]?.growth as number);\n }\n\n return setFormatGrowth(null);\n };\n\n const updateNewGrowth = (key: ChartIntervalKeys) => {\n if (!isNaN(Number(data[key]?.v3_growth))) {\n return setNewFormatGrowth(data[key]?.v3_growth as number);\n }\n\n return setNewFormatGrowth(null);\n };\n\n const handleSizeChange = (e: RadioChangeEvent) => {\n const key = e.target.value as ChartIntervalKeys;\n\n setIntervalValue(key);\n setMaxValue(data[key]?.max);\n setMinValue(data[key]?.min);\n setChartPoints((data[key]?.data || []).filter(item => item?.quarter !== ''));\n updateGrowth(key);\n\n setNewMaxValue(data[key]?.v3_max);\n setNewMinValue(data[key]?.v3_min);\n updateNewGrowth(key);\n\n if (data[key]?.growth! > 0) {\n setGrowthClassName('kpi--positive');\n } else if (data[key]?.growth! < 0) {\n setGrowthClassName('kpi--negative');\n } else {\n setGrowthClassName('');\n }\n\n if (data[key]?.v3_growth! > 0) {\n setNewGrowthClassName('kpi--positive');\n } else if (data[key]?.v3_growth! < 0) {\n setNewGrowthClassName('kpi--negative');\n } else {\n setNewGrowthClassName('');\n }\n\n setTicks(getChartTicks(data, key));\n };\n\n useEffect(() => {\n updateGrowth(interval || defaultKey);\n updateNewGrowth(interval || defaultKey);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data[defaultKey], interval, defaultKey]);\n\n useEffect(() => {\n if (data[defaultKey].data.length) {\n // calculate and save the width of \"history starts from\" element\n // it's width will be proportional to the number of empty labels compared to\n // the number of data points that have values\n if (defaultKey === '3M') {\n let emptyLabels = 0;\n\n data[defaultKey].data.forEach((item: ChartItem) => {\n if (item[dataKey as ChartItemKeys] === undefined) {\n emptyLabels++;\n }\n });\n\n if (emptyLabels) {\n setHistoryStartsWidth(`calc(${data[defaultKey].data[1]?.position!}% - 90px`);\n }\n }\n\n let points: ChartItem[] = [];\n\n if (!interval) {\n setIntervalValue(defaultKey);\n points = data[defaultKey].data;\n } else {\n points = data[interval].data;\n }\n\n setChartPoints(points.filter(item => item.quarter !== ''));\n\n if (!areDefaultTicksSetRef.current) {\n setTicks(getChartTicks(data, defaultKey));\n areDefaultTicksSetRef.current = true;\n }\n }\n\n if (defaultKey === interval) {\n setMaxValue(data[defaultKey]?.max);\n setMinValue(data[defaultKey]?.min);\n\n setNewMaxValue(data[defaultKey]?.v3_max);\n setNewMinValue(data[defaultKey]?.v3_min);\n\n if (data[defaultKey]?.growth! > 0) {\n setGrowthClassName('kpi--positive');\n } else if (Number(growth) < 0) {\n setGrowthClassName('kpi--negative');\n } else {\n setGrowthClassName('');\n }\n\n if (data[defaultKey]?.v3_growth! > 0) {\n setNewGrowthClassName('kpi--positive');\n } else if (Number(newGrowth) < 0) {\n setNewGrowthClassName('kpi--negative');\n } else {\n setNewGrowthClassName('');\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, interval]);\n\n useEffect(() => {\n if (isPSGCompany && areaRef.current) {\n const points = areaRef.current.props.points;\n\n if (points?.length > 0) {\n points.map((item: any, index: number) => {\n const psgDateMoment = moment(psgDate, ISO_DATE_FORMAT);\n const itemDateMoment = moment(item.payload.date, ISO_DATE_FORMAT);\n\n if (psgDateMoment.isSameOrBefore(itemDateMoment)) {\n if (\n psgDateMoment.isBetween(\n moment(points[index - 1]?.date, ISO_DATE_FORMAT),\n itemDateMoment,\n undefined,\n '()'\n )\n ) {\n setPsgDotCoordinate({ x: item.x - 45, y: isExtension ? -30 : -40 });\n\n return;\n } else if (index === 0 && psgDateMoment.isSameOrBefore(itemDateMoment)) {\n setPsgDotCoordinate({ x: item.x, y: isExtension ? -30 : -40 });\n\n return;\n } else if (index === points.length - 1 && psgDateMoment.isSame(itemDateMoment)) {\n setPsgDotCoordinate({ x: item.x - 16, y: isExtension ? -30 : -40 });\n\n return;\n } else if (psgDateMoment.isSame(itemDateMoment)) {\n setPsgDotCoordinate({ x: item.x - 16, y: isExtension ? -30 : -40 });\n\n return;\n }\n } else if (psgDateMoment.isSameOrAfter(itemDateMoment)) {\n setPsgDotCoordinate({ x: item.x - 16, y: isExtension ? -30 : -40 });\n\n return;\n }\n });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [chartPoints, interval]);\n\n const handleActionPendo = (value: string) => {\n const chromeExtensionExists = document.getElementsByClassName('extension-tabs').length;\n\n if (chromeExtensionExists) {\n window.pendo.track(\n OPTXChromePlugin.companyPage[\n `optxScore${value.toUpperCase()}` as keyof typeof OPTXChromePlugin.companyPage\n ]\n );\n } else {\n window.pendo.track(\n CompanyPageOverviewPendo[`optxScore${value}` as keyof typeof CompanyPageOverviewPendo]\n );\n }\n };\n\n const header = (\n <Styles.ChartHeaderWrapper>\n <Styles.ChartTitleWrapper>{title}</Styles.ChartTitleWrapper>\n <Radio.Group value={interval} onChange={handleSizeChange}>\n {Object.keys(data).map((key, index) => {\n const isDisabled = !data[key as ChartIntervalKeys].data.length;\n\n return (\n <Radio.Button\n key={index}\n value={key}\n disabled={isDisabled}\n onClick={() => handleActionPendo(key)}\n >\n {key}\n </Radio.Button>\n );\n })}\n </Radio.Group>\n </Styles.ChartHeaderWrapper>\n );\n\n const extra = (\n <div className={isTrending ? 'profile-chart-card__trending' : ''}>\n <KeyPerformanceIndicator\n label=\"High\"\n value={typeof maxValue === 'number' ? maxValue!.toString() : DEFAULT_EMPTY_VALUE}\n />\n <KeyPerformanceIndicator\n label=\"Low\"\n value={typeof minValue === 'number' ? minValue!.toString() : DEFAULT_EMPTY_VALUE}\n />\n {isTrending ? (\n <ScoreTrending\n score={headerValue}\n growth={formatGrowth}\n label={kpiLabel}\n customFontSize=\"16px\"\n isPSGCompany={isPSGCompany}\n />\n ) : (\n <KeyPerformanceIndicator\n label={kpiLabel}\n value={typeof growth === 'number' ? `${growth}%` : DEFAULT_EMPTY_VALUE}\n className={growthClassName}\n />\n )}\n </div>\n );\n\n const betaScoreExtra = (\n <div className={isTrending ? 'profile-chart-card__trending' : ''}>\n <NewTag color=\"#7CB305\">NEW</NewTag>\n <KeyPerformanceIndicator\n label=\"High\"\n value={typeof newMaxValue === 'number' ? newMaxValue!.toString() : DEFAULT_EMPTY_VALUE}\n />\n <KeyPerformanceIndicator\n label=\"Low\"\n value={typeof newMinValue === 'number' ? newMinValue!.toString() : DEFAULT_EMPTY_VALUE}\n />\n {isTrending ? (\n <ScoreTrending\n score={newHeaderValue}\n growth={newFormatGrowth}\n label={newKPILabel || 'OPTX BETA'}\n customFontSize=\"16px\"\n isPSGCompany={isPSGCompany}\n infoText={\n 'We are beta testing modifications to our OPTX score algorithm to improve accuracy. ' +\n 'Please provide feedback in the Key Info Checklist.'\n }\n isExtension={isExtension}\n />\n ) : (\n <KeyPerformanceIndicator\n label={newKPILabel || 'OPTX BETA'}\n value={typeof newGrowth === 'number' ? `${newGrowth}%` : DEFAULT_EMPTY_VALUE}\n className={newGrowthClassName}\n />\n )}\n </div>\n );\n\n const renderDot = ({ value, payload, stroke, cx, cy }: DotProps) => {\n if (!value && value !== 0) return null;\n\n return (\n <circle\n key={`dot-${JSON.stringify(payload)}-${stroke[6]}`}\n cx={cx}\n cy={cy}\n r={4}\n stroke={stroke}\n strokeWidth={1}\n fill=\"#fff\"\n />\n );\n };\n\n const renderActiveDot = ({ value, fill, cx, cy }: DotProps) => {\n if (!value && value !== 0) return null;\n\n let color = fill,\n xCoord = cx,\n yCoord = cy;\n\n return <circle cx={xCoord} cy={yCoord} r={1.5} stroke={color} strokeWidth={1} fill={color} />;\n };\n\n return (\n <Card title={header} extra={extra} className=\"profile-chart-card extra us\">\n {!isLoading && (\n <div className=\"beta-score-extra-wrapper\">\n {legend && chartPoints.length > 0 && (\n <Legend\n content={legend}\n align=\"left\"\n verticalAlign=\"top\"\n height={0}\n margin={{ top: isExtension ? 90 : 65, left: 24 }}\n />\n )}\n {dataSecondaryKey && (\n <div\n className={\n chartPoints.length > 0 && isPSGCompany && psgDate\n ? 'beta-score-extra psg'\n : 'beta-score-extra'\n }\n >\n {betaScoreExtra}\n </div>\n )}\n </div>\n )}\n <Gradients />\n {isLoading ? (\n <Styles.LoadingIconWrapper>\n <Styles.LoadingIcon />\n </Styles.LoadingIconWrapper>\n ) : (\n <div className=\"profile-chart-card__container\">\n <ResponsiveContainer>\n <LineChart data={chartPoints} margin={{ left: 24, top: 5 }}>\n <XAxis\n dataKey={labelKey}\n tickLine={false}\n stroke=\"#C2CFE0\"\n tickSize={15}\n ticks={ticks}\n interval={0}\n type=\"number\"\n tick={props => (\n <CombinedChartTicks\n startDate={chartPoints.length ? chartPoints[0].date : ''}\n endDate={chartPoints.length ? chartPoints[chartPoints.length - 1].date : ''}\n intervalKey={interval}\n {...props}\n />\n )}\n />\n <YAxis\n orientation=\"right\"\n tickCount={2}\n tickMargin={10}\n tickLine={false}\n axisLine={false}\n stroke=\"#C2CFE0\"\n type=\"number\"\n />\n <Tooltip\n wrapperStyle={{ zIndex: 1 }}\n content={(props: TooltipProps) => {\n if (!dataSecondaryKey) {\n return (\n <LineChartTooltip\n primaryKey={dataKey}\n primaryLabel={\n scoreType === 'us' ? 'OPTX Score Value:' : 'IL OPTX Score Value:'\n }\n {...props}\n />\n );\n }\n\n return (\n <LineChartTooltip\n primaryKey={dataKey}\n secondaryKey={dataSecondaryKey}\n primaryLabel={\n scoreType === 'us' ? 'OPTX Score Value:' : 'IL OPTX Score Value:'\n }\n secondaryLabel=\"OPTX Score BETA Value:\"\n {...props}\n />\n );\n }}\n cursor={false}\n />\n <Line\n type=\"monotone\"\n dataKey={dataKey}\n stroke=\"#1890FF\"\n strokeWidth=\"2px\"\n dot={renderDot}\n ref={areaRef}\n connectNulls\n activeDot={renderActiveDot}\n />\n {dataSecondaryKey && (\n <Line\n type=\"monotone\"\n dataKey={dataSecondaryKey}\n stroke=\"#219653\"\n strokeWidth=\"2px\"\n dot={renderDot}\n connectNulls\n activeDot={renderActiveDot}\n />\n )}\n </LineChart>\n </ResponsiveContainer>\n {!chartPoints.length && <EmptyChart text={isPSGCompany ? 'PSG Company' : undefined} />}\n {!isPSGCompany &&\n !!historyStartsWidth &&\n !data[Object.keys(data)[1] as ChartIntervalKeys].data.length && (\n <EmptyChart\n className=\"chart-empty-labels\"\n text={`History Starts ${moment(\n getFirstValidDate(data[defaultKey].data)?.date\n ).format(SHORT_MONTH_YEAR_DATE_FORMAT)}`}\n width={historyStartsWidth}\n />\n )}\n {chartPoints.length > 0 && isPSGCompany && psgDate && (\n <div\n style={{\n position: 'absolute',\n top: psgDotCoordinate.y,\n left: psgDotCoordinate.x,\n background: '#214d89',\n width: 32,\n borderRadius: 32,\n height: 32,\n fontFamily: 'Times New Roman',\n lineHeight: '32px',\n textAlign: 'center',\n color: 'white',\n }}\n >\n <AntdTooltip\n title={moment(psgDate, ISO_DATE_FORMAT).format(globalConfig.grid_date.DATE_FORMAT)}\n >\n PSG\n </AntdTooltip>\n </div>\n )}\n </div>\n )}\n </Card>\n );\n};\n\nexport default LinearChart;\n","import { takeLatest, call, put, select, take } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport queryString from 'query-string';\n// models\nimport {\n DashboardSuccess,\n ScheduledTouchesCountResponse,\n ScheduledTouchesResponse,\n SCHEDULED_TOUCHES_DEFAULT_SORT,\n} from './interfaces';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { Pagination } from '@optx/models/table/Pagination';\n// utils\nimport { mapSortQuery } from '@optx/utils/search';\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// services\nimport { UserService } from '@optx/services/api';\nimport NotificationService from '@optx/services/NotificationService';\n// redux\nimport {\n actions as userInformationActions,\n selectors as userInformationSelectors,\n} from '@redux/user/information';\nimport {\n getTouchType,\n getStageType,\n getSortBy,\n getSelectedTab,\n getSelectedDate,\n getPagination,\n getRankType,\n getSelectedPeriod,\n} from './selectors';\nimport {\n fetchScheduledTouchesCountSuccess,\n fetchScheduledTouchesCountFail,\n fetchScheduledTouches,\n fetchScheduledTouchesFail,\n fetchScheduledTouchesSuccess,\n fetchScheduledTouchesDashboard,\n fetchScheduledTouchesDashboardSuccess,\n fetchScheduledTouchesDashboardFail,\n changeSelectedDate,\n fetchScheduledTouchesCount,\n fetchScheduledTouchesNextPage,\n fetchScheduledTouchesNextPageSuccess,\n fetchScheduledTouchesNextPageFail,\n} from './actions';\nimport { selectors as userSelectors } from '@redux/user/information';\n\nfunction* fetchScheduledTouchesSaga() {\n const touchType: string = yield select(getTouchType);\n const sortBy: SortByRule<string>[] = yield select(getSortBy);\n const stageType: string = yield select(getStageType);\n const rankType: string = yield select(getRankType);\n const selectedTab: string = yield select(getSelectedTab);\n const selectedDate: [string | null, string | null] = yield select(getSelectedDate);\n const selectedPeriod: string = yield select(getSelectedPeriod);\n const pagination: Pagination = yield select(getPagination);\n\n const query = queryString.stringify(\n {\n tab: selectedTab !== '*' ? selectedTab : undefined,\n touch_type: touchType !== '*' ? touchType : undefined,\n stage_type: stageType !== '*' ? stageType : undefined,\n pipeline_rank: rankType !== 'All' ? Number(rankType) : undefined,\n start_date: selectedDate[0] as string,\n end_date: selectedDate[1] as string,\n selected_period: selectedPeriod,\n },\n { arrayFormat: 'comma' }\n );\n\n const sortQuery = queryString.stringify(mapSortQuery(sortBy || []), {\n arrayFormat: 'comma',\n });\n\n try {\n yield put(\n userInformationActions.updateUserSettings({\n touch_filters: query,\n touch_sorting: sortQuery,\n })\n );\n yield put(fetchScheduledTouchesCount());\n\n const res: AxiosResponse<ScheduledTouchesResponse> = yield call(\n UserService.getScheduledTouches,\n selectedTab,\n selectedDate[0] as string,\n selectedDate[1] as string,\n sortBy,\n pagination,\n touchType,\n stageType,\n rankType\n );\n\n if (res.data) {\n yield put(fetchScheduledTouchesSuccess(res.data));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch scheduled touches!');\n yield put(fetchScheduledTouchesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* fetchScheduledTouchesNextPageSaga() {\n const touchType: string = yield select(getTouchType);\n const sortBy: SortByRule<string>[] = yield select(getSortBy);\n const stageType: string = yield select(getStageType);\n const rankType: string = yield select(getRankType);\n const selectedTab: string = yield select(getSelectedTab);\n const selectedDate: [string | null, string | null] = yield select(getSelectedDate);\n const pagination: Pagination = yield select(getPagination);\n\n try {\n const res: AxiosResponse<ScheduledTouchesResponse> = yield call(\n UserService.getScheduledTouches,\n selectedTab,\n selectedDate[0] as string,\n selectedDate[1] as string,\n sortBy,\n pagination,\n touchType,\n stageType,\n rankType\n );\n\n if (res.data) {\n yield put(fetchScheduledTouchesNextPageSuccess(res.data));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch scheduled touches!');\n yield put(fetchScheduledTouchesNextPageFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* fetchScheduledTouchesDashboardSaga() {\n const defaultOptxScore: string = yield select(userSelectors.getDefaultScore);\n let sortBy: SortByRule<any>;\n if (defaultOptxScore === 'il')\n // @ts-ignore\n sortBy = SCHEDULED_TOUCHES_DEFAULT_SORT.replace('score', 'il_optx_score');\n // @ts-ignore\n if (defaultOptxScore === 'us') sortBy = SCHEDULED_TOUCHES_DEFAULT_SORT;\n\n try {\n const res: AxiosResponse<DashboardSuccess> = yield call(\n UserService.getScheduledTouchesDashboard\n );\n\n if (res.data) {\n // @ts-ignore\n yield put(fetchScheduledTouchesDashboardSuccess({ ...res.data, sortBy }));\n const userIsLoaded: boolean = yield select(userInformationSelectors.loaded);\n\n if (!userIsLoaded) {\n yield take(userInformationActions.fetchUserInformationSuccess);\n }\n\n yield call(fetchScheduledTouchesSaga);\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch scheduled touches Dashboard!');\n yield put(fetchScheduledTouchesDashboardFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* fetchScheduledTouchesCountSaga() {\n const touchType: string = yield select(getTouchType);\n const stageType: string = yield select(getStageType);\n const rankType: string = yield select(getRankType);\n const selectedDate: [string | null, string | null] = yield select(getSelectedDate);\n\n try {\n const res: AxiosResponse<ScheduledTouchesCountResponse> = yield call(\n UserService.getScheduledTouchesCount,\n selectedDate[0] as string,\n selectedDate[1] as string,\n touchType,\n stageType,\n rankType\n );\n\n if (res.data) {\n yield put(fetchScheduledTouchesCountSuccess(res.data));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch scheduled touches!');\n yield put(fetchScheduledTouchesCountFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* changeSelectedDateSaga() {\n yield call(fetchScheduledTouchesSaga);\n}\n\nexport default function* companyIndividualEditSagas() {\n yield takeLatest(fetchScheduledTouches, fetchScheduledTouchesSaga);\n yield takeLatest(fetchScheduledTouchesNextPage, fetchScheduledTouchesNextPageSaga);\n yield takeLatest(fetchScheduledTouchesCount, fetchScheduledTouchesCountSaga);\n yield takeLatest(fetchScheduledTouchesDashboard, fetchScheduledTouchesDashboardSaga);\n yield takeLatest(changeSelectedDate, changeSelectedDateSaga);\n}\n","import { CaseReducer, createReducer, PayloadAction } from '@reduxjs/toolkit';\nimport queryString from 'query-string';\n// models\nimport {\n ScheduledTouchesState,\n DashboardSuccess,\n ScheduledTouchesSortBy,\n ScheduledTouchesResponse,\n ScheduledTouchesCountResponse,\n SCHEDULED_TOUCHES_DEFAULT_SORT,\n} from './interfaces';\nimport { UserInformation } from '@optx/models/user';\nimport { DateRangeOption } from '@models/Option';\n// utils\nimport { getParametersFromURL, removeAllParametersFromURL } from '@utils/url';\nimport { parseSorting } from '@optx/utils/filters/parseSorting';\n// redux\nimport {\n changeSelectedTab,\n changeSelectedPeriod,\n changeSelectedDate,\n changeScheduledTouchesTouchType,\n changeScheduledTouchesStageType,\n fetchScheduledTouchesDashboardFail,\n fetchScheduledTouchesDashboardSuccess,\n fetchScheduledTouchesDashboard,\n fetchScheduledTouches,\n fetchScheduledTouchesFail,\n fetchScheduledTouchesSuccess,\n changeScheduledTouchesSortBy,\n fetchScheduledTouchesCount,\n fetchScheduledTouchesCountSuccess,\n fetchScheduledTouchesCountFail,\n changeScheduledTouchesRankType,\n fetchScheduledTouchesNextPage,\n fetchScheduledTouchesNextPageSuccess,\n fetchScheduledTouchesNextPageFail,\n resetScheduledTouchesFilter,\n} from './actions';\nimport { actions as userInformationActions } from '@redux/user/information';\n\nexport const initialState: ScheduledTouchesState = {\n dashboard: {\n inputDates: [],\n cards: {},\n tabs: {},\n stages: [],\n touchTypes: [],\n ranks: [],\n error: null,\n loading: false,\n fetchedAt: null,\n },\n touches: { data: null, error: null, loading: false, fetchedAt: null },\n count: { data: null, error: null, loading: false, fetchedAt: null },\n sortBy: SCHEDULED_TOUCHES_DEFAULT_SORT,\n pagination: {\n pageNumber: 1,\n pageSize: 50,\n },\n insight: {},\n insightTotal: 0,\n selectedTab: '*',\n stageType: '*',\n touchType: 'All',\n selectedPeriod: '',\n remainedTouches: 500,\n totalTouches: 500,\n selectedDateRage: [null, null],\n rankType: 'All',\n};\n\nconst fetchScheduledTouchesReducer = (draftState: ScheduledTouchesState) => {\n draftState.pagination.pageNumber = 1;\n draftState.touches.loading = true;\n draftState.touches.error = '';\n};\n\nconst fetchScheduledTouchesNextPageReducer = (draftState: ScheduledTouchesState) => {\n draftState.pagination.pageNumber += 1;\n draftState.touches.loading = true;\n draftState.touches.error = '';\n};\n\nconst fetchScheduledTouchesDashboardReducer = (draftState: ScheduledTouchesState) => {\n draftState.dashboard.loading = true;\n draftState.dashboard.error = '';\n};\n\nconst fetchScheduledTouchesCountReducer = (draftState: ScheduledTouchesState) => {\n draftState.count.loading = true;\n draftState.count.error = '';\n};\n\nconst fetchScheduledTouchesFailReducer = (\n draftState: ScheduledTouchesState,\n action: PayloadAction<string>\n) => {\n draftState.touches.loading = false;\n draftState.touches.error = action.payload;\n};\n\nconst fetchScheduledTouchesDashboardFailReducer = (\n draftState: ScheduledTouchesState,\n action: PayloadAction<string>\n) => {\n draftState.dashboard.loading = false;\n draftState.dashboard.error = action.payload;\n};\n\nconst fetchScheduledTouchesCountSuccessReducer: CaseReducer<\n ScheduledTouchesState,\n PayloadAction<ScheduledTouchesCountResponse>\n> = (draftState, action) => {\n draftState.count.fetchedAt = new Date().toISOString();\n draftState.count.loading = false;\n draftState.count.data = action.payload;\n draftState.dashboard.loading = false;\n\n // insight\n draftState.insight = action.payload.insight;\n let insightTotalTouches = Object.values(action.payload.insight).reduce(\n (acc: number, item: number) => acc + item,\n 0\n );\n insightTotalTouches += action.payload.tabs.past_due ?? 0;\n\n draftState.insightTotal = insightTotalTouches;\n};\n\nconst fetchUserInformationSuccessReducer: CaseReducer<\n ScheduledTouchesState,\n PayloadAction<UserInformation>\n> = (draftState, action) => {\n const filters = action.payload.settings.session_settings?.touch_filters;\n const sorting = action.payload.settings.session_settings?.touch_sorting;\n\n if (sorting) {\n const { sortBy } = parseSorting(sorting);\n\n draftState.sortBy = `${sortBy[0].id}.${\n sortBy[0].desc ? 'desc' : 'asc'\n }` as ScheduledTouchesSortBy;\n }\n\n if (filters) {\n const {\n touch_type: touchType,\n stage_type: stageType,\n rank_type: rankType,\n end_date: endDate,\n start_date: startDate,\n pipeline_rank: pipelineRank,\n tab,\n selected_period: selectedPeriod,\n } = queryString.parse(filters);\n\n if (touchType) {\n draftState.touchType = touchType as string;\n }\n\n if (tab) {\n draftState.selectedTab = tab as string;\n }\n\n if (stageType) {\n draftState.stageType = stageType as string;\n }\n\n if (rankType) {\n draftState.rankType = rankType as string;\n }\n\n if (pipelineRank) {\n draftState.rankType = pipelineRank as string;\n }\n\n if (startDate && endDate) {\n draftState.selectedDateRage = [startDate as string, endDate as string];\n }\n\n if (selectedPeriod && typeof selectedPeriod === 'string') {\n draftState.selectedPeriod = selectedPeriod;\n }\n }\n};\n\nconst fetchScheduledTouchesCountFailReducer = (\n draftState: ScheduledTouchesState,\n action: PayloadAction<string>\n) => {\n draftState.count.loading = false;\n draftState.count.error = action.payload;\n};\n\nconst fetchScheduledTouchesSuccessReducer: CaseReducer<\n ScheduledTouchesState,\n PayloadAction<ScheduledTouchesResponse>\n> = (draftState, action) => {\n draftState.touches.fetchedAt = new Date().toISOString();\n draftState.touches.loading = false;\n draftState.touches.data = action.payload.result;\n draftState.remainedTouches = action.payload.remained_touch_count;\n draftState.totalTouches = action.payload.count;\n};\n\nconst fetchScheduledTouchesNextPageSuccessReducer: CaseReducer<\n ScheduledTouchesState,\n PayloadAction<ScheduledTouchesResponse>\n> = (draftState, action) => {\n draftState.touches.fetchedAt = new Date().toISOString();\n draftState.touches.loading = false;\n\n if (draftState.touches.data) {\n draftState.touches.data = [...draftState.touches.data, ...action.payload.result];\n } else {\n draftState.touches.data = action.payload.result;\n }\n\n draftState.remainedTouches = action.payload.remained_touch_count;\n draftState.totalTouches = action.payload.count;\n};\n\nconst fetchScheduledTouchesDashboardSuccessReducer: CaseReducer<\n ScheduledTouchesState,\n PayloadAction<DashboardSuccess>\n> = (draftState, { payload }) => {\n const [selectedPeriod, selectedTab, touchType] = getParametersFromURL([\n 'selectedPeriod',\n 'selectedTab',\n 'touchType',\n ]);\n\n draftState.dashboard.fetchedAt = new Date().toISOString();\n draftState.dashboard.loading = false;\n draftState.dashboard.inputDates = payload.input_dates;\n draftState.dashboard.tabs = payload.tabs;\n draftState.dashboard.cards = payload.cards;\n draftState.dashboard.stages = payload.stages;\n draftState.dashboard.ranks = payload.pipeline_rank;\n draftState.dashboard.touchTypes = payload.touch_types;\n\n if (touchType) {\n draftState.touchType = touchType;\n }\n\n if (selectedTab && selectedTab in draftState.dashboard.tabs) {\n draftState.selectedTab = selectedTab;\n }\n\n // 1 - is for 'This Week' period\n let defaultDate: DateRangeOption = payload.input_dates[1];\n\n if (selectedPeriod) {\n const inputDateOption = payload.input_dates.find(\n inputDate => inputDate.label === selectedPeriod\n );\n\n if (inputDateOption) {\n defaultDate = inputDateOption;\n }\n\n draftState.selectedPeriod = defaultDate.label!;\n draftState.selectedDateRage = [defaultDate.start, defaultDate.end];\n }\n\n // this check is for case when we don't have user settings and we don't have parameters in URL\n if (!draftState.selectedPeriod) {\n draftState.selectedPeriod = defaultDate.label!;\n }\n\n // default date will be This week\n if (draftState.selectedDateRage.includes(null)) {\n draftState.selectedDateRage = [defaultDate.start, defaultDate.end];\n }\n\n draftState.sortBy = payload.sortBy as ScheduledTouchesSortBy;\n\n removeAllParametersFromURL();\n};\n\nconst resetScheduledTouchesFilterReducer = (draftState: ScheduledTouchesState) => {\n draftState.stageType = '*';\n draftState.touchType = 'All';\n draftState.rankType = 'All';\n\n // 1 - is for 'This Week' period\n const defaultDate: DateRangeOption = draftState.dashboard.inputDates[1];\n\n if (defaultDate) {\n draftState.selectedPeriod = defaultDate.label!;\n draftState.selectedDateRage = [defaultDate.start, defaultDate.end];\n }\n};\n\nconst changeSortingReducer = (\n draftState: ScheduledTouchesState,\n action: PayloadAction<ScheduledTouchesSortBy>\n) => {\n draftState.sortBy = action.payload;\n};\n\nconst changeStageTypeReducer = (\n draftState: ScheduledTouchesState,\n action: PayloadAction<string>\n) => {\n draftState.stageType = action.payload;\n};\n\nconst changeTouchTypeReducer = (\n draftState: ScheduledTouchesState,\n action: PayloadAction<string>\n) => {\n draftState.touchType = action.payload;\n};\n\nconst changeRankTypeReducer = (\n draftState: ScheduledTouchesState,\n action: PayloadAction<string>\n) => {\n draftState.rankType = action.payload;\n};\n\nconst changeSelectedDateReducer = (\n draftState: ScheduledTouchesState,\n action: PayloadAction<[string | null, string | null]>\n) => {\n draftState.selectedDateRage = action.payload;\n};\n\nconst changeSelectedPeriodReducer = (\n draftState: ScheduledTouchesState,\n action: PayloadAction<string>\n) => {\n draftState.selectedPeriod = action.payload;\n draftState.pagination.pageNumber = 1;\n};\n\nconst changeSelectedTabReducer = (\n draftState: ScheduledTouchesState,\n action: PayloadAction<string>\n) => {\n draftState.selectedTab = action.payload;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(fetchScheduledTouchesDashboard, fetchScheduledTouchesDashboardReducer)\n .addCase(resetScheduledTouchesFilter, resetScheduledTouchesFilterReducer)\n .addCase(fetchScheduledTouchesDashboardSuccess, fetchScheduledTouchesDashboardSuccessReducer)\n .addCase(fetchScheduledTouchesDashboardFail, fetchScheduledTouchesDashboardFailReducer)\n .addCase(fetchScheduledTouches, fetchScheduledTouchesReducer)\n .addCase(fetchScheduledTouchesSuccess, fetchScheduledTouchesSuccessReducer)\n .addCase(fetchScheduledTouchesFail, fetchScheduledTouchesFailReducer)\n .addCase(fetchScheduledTouchesCount, fetchScheduledTouchesCountReducer)\n .addCase(fetchScheduledTouchesCountSuccess, fetchScheduledTouchesCountSuccessReducer)\n .addCase(fetchScheduledTouchesCountFail, fetchScheduledTouchesCountFailReducer)\n .addCase(fetchScheduledTouchesNextPage, fetchScheduledTouchesNextPageReducer)\n .addCase(fetchScheduledTouchesNextPageSuccess, fetchScheduledTouchesNextPageSuccessReducer)\n .addCase(fetchScheduledTouchesNextPageFail, fetchScheduledTouchesFailReducer)\n .addCase(changeScheduledTouchesSortBy, changeSortingReducer)\n .addCase(changeScheduledTouchesTouchType, changeTouchTypeReducer)\n .addCase(changeScheduledTouchesStageType, changeStageTypeReducer)\n .addCase(changeScheduledTouchesRankType, changeRankTypeReducer)\n .addCase(changeSelectedDate, changeSelectedDateReducer)\n .addCase(changeSelectedPeriod, changeSelectedPeriodReducer)\n .addCase(changeSelectedTab, changeSelectedTabReducer)\n .addCase(userInformationActions.fetchUserInformationSuccess, fetchUserInformationSuccessReducer)\n);\n\nexport default reducer;\n","import styled from 'styled-components';\n\ninterface LegendProps {\n type: string;\n}\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n margin-top: 20px;\n`;\n\nconst LegendWrapper = styled.div<LegendProps>`\n background: ${props => (props.type === 'employee' ? '#f9f0ff' : '#fff')};\n border: ${props => (props.type === 'employee' ? '1px solid #722ed1' : '1px solid #219653')};\n width: 75px;\n height: 20px;\n padding: 0 5px;\n display: flex;\n align-items: center;\n`;\n\nconst Legend = styled.span<LegendProps>`\n border: ${props => (props.type === 'employee' ? '1px dashed #722ed1' : '3px solid #219653')};\n display: inline-block;\n width: 100%;\n box-sizing: border-box;\n`;\n\nconst LegendText = styled.div<LegendProps>`\n color: #595959;\n font-size: 16px;\n line-height: 24px;\n margin-left: 10px;\n font-weight: ${props => (props.type === 'employee' ? '400' : '600')};\n`;\n\nconst Styles = {\n Wrapper,\n LegendWrapper,\n Legend,\n LegendText,\n};\n\nexport default Styles;\n","import React from 'react';\nimport Styles from './ChartLegend.style';\n\ntype ChartLegendProps = {\n type: string;\n};\n\nconst ChartLegend: React.FC<ChartLegendProps> = ({ type }: ChartLegendProps) => {\n return (\n <Styles.Wrapper>\n <Styles.LegendWrapper type={type}>\n <Styles.Legend type={type} />\n </Styles.LegendWrapper>\n <Styles.LegendText type={type}>\n {type === 'employee' ? 'Job Openings' : 'OPTX Score BETA'}\n </Styles.LegendText>\n </Styles.Wrapper>\n );\n};\n\nexport default ChartLegend;\n","import { createAction } from '@reduxjs/toolkit';\nimport { ExtensionProfileResponse } from './interface';\nimport * as types from './types';\n\nexport const fetchExtensionCompanies = createAction(\n types.FETCH_EXTENSION_COMPANIES,\n (url: string, callback?: VoidFunction) => ({\n payload: url,\n meta: callback,\n })\n);\n\nexport const fetchExtensionCompaniesSuccess = createAction<ExtensionProfileResponse[]>(\n types.FETCH_EXTENSION_COMPANIES_SUCCESS\n);\n\nexport const fetchExtensionCompaniesFail = createAction<string>(\n types.FETCH_EXTENSION_COMPANIES_FAIL\n);\n\nexport const clearExtensionCompanies = createAction(types.CLEAR_EXTENSION_COMPANIES);\n","export const FETCH_EXTENSION_COMPANIES = 'FETCH_EXTENSION_COMPANIES';\nexport const FETCH_EXTENSION_COMPANIES_SUCCESS = 'FETCH_EXTENSION_COMPANIES_SUCCESS';\nexport const FETCH_EXTENSION_COMPANIES_FAIL = 'FETCH_EXTENSION_COMPANIES_FAIL';\n\nexport const CLEAR_EXTENSION_COMPANIES = 'CLEAR_EXTENSION_COMPANIES';\n","import { createSelector } from 'reselect';\nimport { AppState } from '@optx/redux/interfaces';\n\nconst extensionProfileState = (state: AppState) => state.extension;\n\nexport const isLoading = createSelector(extensionProfileState, state => state.loading);\nexport const isFetched = createSelector(extensionProfileState, state => !!state.fetchedAt);\n\nexport const getProfiles = createSelector(extensionProfileState, state => state.profiles);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n\n// local\nimport { fetchReducer, fetchFailReducer } from '../../feature/fetch/reducers';\nimport { ExtensionProfileResponse, ExtensionProfileState } from './interface';\nimport * as actions from './actions';\n\nconst initialState: ExtensionProfileState = {\n loading: false,\n error: '',\n profiles: [],\n fetchedAt: '',\n};\n\nconst fetchExtensionProfileSuccessReducer: CaseReducer<\n ExtensionProfileState,\n PayloadAction<ExtensionProfileResponse[]>\n> = (draftState, action) => {\n draftState.loading = false;\n draftState.fetchedAt = new Date().toISOString();\n\n draftState.profiles = action.payload;\n};\n\nconst clearExtensionProfileReducer: CaseReducer<ExtensionProfileState> = draftState => {\n draftState.profiles = [];\n draftState.fetchedAt = '';\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.fetchExtensionCompanies, fetchReducer)\n .addCase(actions.fetchExtensionCompaniesSuccess, fetchExtensionProfileSuccessReducer)\n .addCase(actions.fetchExtensionCompaniesFail, fetchFailReducer)\n .addCase(actions.clearExtensionCompanies, clearExtensionProfileReducer)\n);\n\nexport default reducer;\n","import { AxiosResponse } from 'axios';\nimport { call, takeLatest, put, all, take, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\n// models\nimport { CompanyProfile } from '@models/Company';\n// constants\nimport { TOUCHES_PER_PAGE } from '@features/long-card/company-card/constants/touches';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport { actions as employeeGrowthActions } from '@features/company/graphs/employee';\nimport { actions as scoreGrowthActions } from '@features/company/graphs/score';\nimport {\n actions as cardActions,\n selectors as cardSelectors,\n} from '@features/long-card/company-card';\nimport { actions as touchActions, selectors as touchSelectors } from '@features/company-touches';\nimport { actions as userListActions } from '@redux/user/user-list';\nimport { actions as opportunityActions } from '@redux/company/opportunity-presentation';\nimport { actions as filterActions } from '@redux/company/filters';\nimport { actions as editActions } from '@components/feature/company-individual-edit/state';\nimport * as actions from './actions';\nimport { ExtensionProfileResponse } from './interface';\n\nexport function* fetchExtensionCompaniesSaga(\n action: PayloadAction<string, any, VoidFunction | undefined>\n) {\n const { payload: hostURL, meta: callback } = action;\n\n try {\n const res: AxiosResponse<ExtensionProfileResponse[]> = yield call(\n CompanyService.getExtensionCompanies,\n hostURL\n );\n\n if (res.data) {\n yield put(actions.fetchExtensionCompaniesSuccess(res.data));\n const companyId = res.data[0].company_id;\n const touchPagination = touchSelectors.search.pagination;\n\n yield all([\n put(cardActions.fetchCompanyProfile(companyId, () => callback && callback())),\n put(editActions.fetchSelectOptions('')),\n put(filterActions.fetchCompanyFilters()),\n put(userListActions.fetchUserList(false)),\n put(touchActions.filters.fetchTouchesFilters(companyId)),\n put(\n touchActions.search.fetchTouches({\n companyId,\n pagination: { ...touchPagination, pageSize: TOUCHES_PER_PAGE, pageNumber: 1 },\n })\n ),\n put(opportunityActions.fetchOpportunityPresentation(companyId)),\n put(employeeGrowthActions.fetchEmployeeGrowth(companyId)),\n ]);\n\n yield take(cardActions.fetchCompanyProfileSuccess);\n const activeProfile: CompanyProfile = yield select(cardSelectors.getProfile);\n\n if (activeProfile)\n yield put(\n scoreGrowthActions.fetchScoreGrowth({\n company_id: activeProfile.company_id,\n company_url: activeProfile.company_url,\n })\n );\n } else {\n callback && callback();\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch company from Equity Touch!';\n yield put(actions.fetchExtensionCompaniesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* equityTouchSaga() {\n yield takeLatest(actions.fetchExtensionCompanies, fetchExtensionCompaniesSaga);\n}\n","import { combineReducers } from 'redux';\nimport { NotesState } from './interfaces';\nimport searchReducer from './search';\nimport companyNotes from './companyNotes';\nimport profileNotes from './profile';\n\nconst notesReducer = combineReducers<NotesState>({\n search: searchReducer,\n companyNotes,\n profileNotes,\n});\n\nexport default notesReducer;\n","import { fork } from 'redux-saga/effects';\n\nimport { saga as companyNotesSaga } from './companyNotes';\nimport { saga as searchNotesSaga } from './search';\nimport { saga as profileNotesSaga } from './profile';\n\nfunction* notesSaga() {\n yield fork(companyNotesSaga);\n yield fork(searchNotesSaga);\n yield fork(profileNotesSaga);\n}\n\nexport default notesSaga;\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './types';\nimport { CrossTabsLoginPayload, LoginPayload } from './interface';\n\nexport const userLogin = createAction(types.USER_LOGIN, (login?: LoginPayload, callback?: any) => ({\n payload: login,\n meta: callback,\n}));\n\nexport const userLoginCrossTabs = createAction(\n types.USER_LOGIN_CROSSTABS,\n (payload: CrossTabsLoginPayload, callback?: any) => ({\n payload,\n meta: callback,\n })\n);\n","export const USER_LOGIN = 'USER_LOGIN';\nexport const USER_LOGIN_CROSSTABS = 'USER_LOGIN_CROSSTABS';\n","import styled, { createGlobalStyle } from 'styled-components';\nimport { Col, Menu, Dropdown, Typography } from 'antd';\nimport { styledColors } from '@optx/utils/theme/colors';\n\nconst ContactSelectGlobal = createGlobalStyle`\n .left-checkbox-option {\n .ant-tag {\n margin: 0 5px;\n }\n .ant-select-item-option-content {\n order: 2;\n }\n .ant-select-item-option-state {\n order: 1;\n margin-right: 12px;\n }\n }\n`;\n\nexport const SelectWrapper = styled(Col)`\n .ant-select-selection-item {\n background: transpare;\n border: 0 none;\n }\n\n .ant-select {\n .ant-select-selection-overflow {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &-item {\n overflow: hidden;\n text-overflow: ellipsis;\n & + .ant-select-selection-overflow-item:before {\n content: ', ';\n vertical-align: top;\n }\n &.ant-select-selection-overflow-item-suffix:before {\n display: none;\n }\n }\n }\n }\n .ant-select-selection-overflow-item {\n display: inline-block;\n vertical-align: middle;\n }\n .ant-select-open\n .ant-select-selector\n .ant-select-selection-overflow-item:not(.ant-select-selection-overflow-item-suffix) {\n display: none;\n }\n\n .multiselect__control,\n .multiselect__value-container {\n height: 32px;\n min-height: 32px;\n }\n .anticon-search {\n margin-top: -3px;\n }\n\n .multi-select-field {\n .ant-select-item-option-selected:not(.ant-select-item-option-disabled) {\n background: transparent !important;\n }\n .ant-select-item-option:not(.ant-select-item-option-disabled):hover {\n background: #e6f7ff !important;\n }\n\n .select-all-option {\n padding: 5px 12px 7px;\n margin-bottom: 8px;\n border-bottom: 1px solid #d9d9d9;\n }\n }\n\n .all-selected {\n .ant-select-selection-overflow {\n text-overflow: inherit !important;\n }\n\n .ant-select-selection-overflow-item {\n line-height: 26px;\n\n .all-blue {\n color: rgb(24, 144, 255);\n }\n & + .ant-select-selection-overflow-item:not(.ant-select-selection-overflow-item-suffix) {\n opacity: 0 !important;\n }\n }\n }\n`;\nconst MenuWrapper = styled(Menu)`\n width: 400px;\n padding: 10px 20px;\n .ant-card-meta-detail {\n overflow: visible;\n }\n\n .ant-input-number-handler-wrap {\n display: none;\n }\n\n .company_owner_id--multiselect,\n .stage--multiselect {\n width: 260px;\n margin-right: 135px;\n }\n\n .ant-card-bordered {\n border: 0;\n }\n .menu-buttons-wrapper {\n padding: 10px 0;\n button {\n margin-right: 8px;\n }\n }\n .touch--multiselect-async-wrapper {\n width: 100%;\n }\n .multiselect-async-creatable-wrapper {\n width: auto;\n margin-right: 160px;\n }\n .touch--multiselect-async {\n .multiselect__menu {\n position: absolute;\n bottom: 100%;\n top: auto;\n margin: 0;\n }\n .multiselect__control,\n .multiselect__value-container {\n height: 32px;\n min-height: 32px;\n }\n .anticon-search {\n margin-top: -3px;\n }\n }\n`;\n\nconst DropdownWrapper = styled(Dropdown)`\n text-align: left;\n display: inline-block;\n background-color: #ffffff;\n border: 1px solid #d9d9d9;\n box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.0015);\n border-radius: 2px;\n margin: 0px 13px 5px 0px;\n padding: 0px 5px;\n width: 100%;\n overflow: hidden;\n &.ant-btn:focus .anticon-down,\n .anticon-down {\n position: absolute;\n right: 10px;\n top: 50%;\n transform: translateY(-50%);\n }\n`;\n\nconst TriggerWrapper = styled.div`\n color: ${styledColors.gray8};\n display: flex;\n position: relative;\n .rc-overflow {\n align-items: center;\n }\n .rc-overflow-item {\n max-width: 110px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n &:nth-last-child(2) {\n div .comma {\n display: none;\n }\n }\n }\n\n .option-label {\n margin: 0 8px 0 0;\n padding: 4px 0;\n display: inline;\n }\n\n .more-label {\n margin: 0 2px 0 0px;\n padding: 4px 8px;\n }\n`;\n\nconst SelectedLabel = styled(Typography.Text)`\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n margin-left: 5px;\n margin-right: 5px;\n .label-popover {\n color: rgba(0, 0, 0, 0.85);\n display: inline-block;\n vertical-align: top;\n }\n .visible-label {\n display: inline-block;\n vertical-align: top;\n max-width: 115px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nconst PopupTooltipContainer = styled.div`\n background: #fff;\n border: 1px solid #d9d9d9;\n padding: 4px 10px;\n min-height: 30px;\n cursor: pointer;\n`;\n\nexport default {\n ContactSelectGlobal,\n SelectWrapper,\n MenuWrapper,\n DropdownWrapper,\n TriggerWrapper,\n SelectedLabel,\n PopupTooltipContainer,\n};\n","/* eslint-disable no-irregular-whitespace */\nimport styled from 'styled-components';\nimport { ButtonProps } from 'antd/lib/button';\nimport { SubmitButton } from 'formik-antd';\nimport { Card, Col, Modal, Row, Typography } from 'antd';\nimport { ModalProps } from 'antd/lib/modal';\nimport { Link } from 'react-router-dom';\n\nexport const SubmitDealButton = styled<React.FC<ButtonProps>>(SubmitButton)`\n position: absolute !important;\n right: 0;\n top: -40px;\n`;\n\ninterface DealPresentationWrapperProps {\n $isChromeExtension?: boolean;\n}\n\nexport const ContainerButtons = styled.div`\n position: relative;\n bottom: 3.2rem;\n left: 14%;\n`;\n\nexport const FinancialsCard = styled(Card)`\n border-radius: 8px;\n margin-top: -4px;\n`;\n\nexport const DealPreparationCard = styled(Card)`\n border-radius: 8px;\n`;\n\nexport const FundingCard = styled(Card)`\n margin-right: -20px;\n border-radius: 8px;\n`;\n\nexport const CustomerKPICard = styled(Card)`\n margin-top: 19px;\n margin-right: -20px;\n border-radius: 8px;\n`;\n\nexport const TechnologyCard = styled(Card)`\n margin-top: 22px;\n margin-right: -20px;\n border-radius: 8px;\n`;\n\nexport const PropietaryInfoContainer = styled.div`\n display: grid;\n\n @media screen and (min-width: 1024px) {\n grid-template-columns: 50% 50%;\n }\n\n @media screen and (min-width: 1280px) {\n grid-template-columns: 50% 50%;\n }\n\n @media screen and (min-width: 1440px) {\n grid-template-columns: 50% 50%;\n }\n\n @media screen and (min-width: 1441px) {\n grid-template-columns: 35% 65%;\n }\n\n @media screen and(min-width:1023px) {\n grid-template-columns: 100%;\n }\n\n margin-top: 20px;\n`;\n\nexport const DealPresentationWrapper = styled.div<DealPresentationWrapperProps>`\n margin-left: 24px;\n .deal-preparation-information {\n .edit-pen {\n padding-left: 10px;\n visibility: hidden;\n }\n\n .icon-pen {\n width: 18px;\n height: 18px;\n }\n\n &__label {\n width: ${props => (props.$isChromeExtension ? '25%' : '16em')};\n\n @media screen and (min-width: 1024px) {\n width: ${props => (props.$isChromeExtension ? '25%' : '15em')};\n }\n\n padding-right: 4%;\n line-height: 22px;\n font-size: 14px;\n font-weight: 600;\n color: #90a0b7;\n }\n\n .no-edit {\n color: #374961;\n }\n\n &__edit {\n color: #1890ff;\n font-size: 14px;\n line-height: 22px;\n font-weight: 600;\n max-width: 47%;\n width: fit-content;\n\n .edit-field--container {\n display: flex;\n\n .edit-field--value {\n width: 100%;\n display: inline-block;\n white-space: nowrap;\n overflow: hidden !important;\n text-overflow: ellipsis;\n }\n }\n &:hover {\n cursor: pointer;\n .edit-pen {\n visibility: visible;\n }\n }\n }\n &__notes {\n color: #1890ff;\n font-size: 14px;\n line-height: 22px;\n font-weight: 600;\n\n .edit-field--container {\n .edit-pen {\n padding-left: 10px;\n visibility: hidden;\n }\n &:hover {\n cursor: pointer;\n .edit-pen {\n visibility: visible;\n }\n }\n }\n }\n }\n`;\n\nexport const OtherFinancialsInformationTitle = styled(Typography.Title)`\n font-size: 16px;\n font-weight: 600;\n color: #262626;\n font-style: 'normal';\n color: rgba(38, 38, 38, 1);\n line-height: 24px;\n`;\n\nexport const OtherFinancialsInformationWrapper = styled.div`\n .edit-field--container {\n .edit-pen {\n padding-left: 10px;\n visibility: hidden;\n }\n\n .icon-pen {\n width: 18px;\n height: 18px;\n }\n\n &:hover {\n cursor: pointer;\n .edit-pen {\n visibility: visible;\n }\n }\n }\n`;\n\nexport const OtherFinancialsInformationRow = styled(Row)``;\n\ninterface OtherFinancialsInformationLabelProps {\n $isChromeExtension?: boolean;\n}\n\nexport const OtherFinancialsInformationLabel = styled(Col)<OtherFinancialsInformationLabelProps>`\n padding-right: 4%;\n line-height: 22px;\n @media screen and (max-width: 1023px) {\n width: ${props => (props.$isChromeExtension ? '30%' : '44%')};\n }\n @media screen and (min-width: 1024px) {\n width: ${props => (props.$isChromeExtension ? '30%' : '44%')};\n }\n @media screen and (min-width: 1280px) {\n width: ${props => (props.$isChromeExtension ? '30%' : '36%')};\n }\n @media screen and (min-width: 1440px) {\n width: ${props => (props.$isChromeExtension ? '30%' : '34%')};\n }\n @media screen and (min-width: 1600px) {\n width: ${props => (props.$isChromeExtension ? '30%' : '32%')};\n }\n @media screen and (min-width: 1900px) {\n width: ${props => (props.$isChromeExtension ? '30%' : '30%')};\n }\n font-size: 14px;\n font-weight: 600;\n color: #90a0b7;\n`;\n\ninterface OtherFinancialsInformationValueProps {\n $isChromeExtension?: boolean;\n}\n\nexport const OtherFinancialsInformationValue = styled(Col)<OtherFinancialsInformationValueProps>`\n padding-right: 4%;\n max-width: 45%;\n margin-left: ${({ $isChromeExtension }) => (!$isChromeExtension ? '-18%' : '0')};\n line-height: 22px;\n font-size: 14px;\n font-weight: 600;\n color: #1890ff;\n`;\n\ninterface FinancialsInformationValueProps {\n $isChromeExtension?: boolean;\n}\n\nexport const FinancialsWrapper = styled.div<FinancialsInformationValueProps>`\n position: relative;\n margin-top: ${props => (props.$isChromeExtension ? '0' : '-20px')};\n\n .add-years-column {\n background-color: rgba(250, 250, 250, 1) !important;\n }\n\n .ant-table-thead > tr > th {\n background: white !important;\n }\n .add-years-button {\n font-size: 14px;\n font-weight: 500;\n }\n .edit-field--container {\n display: flex;\n width: fit-content;\n }\n\n .ant-table-thead > tr > th {\n background: white;\n }\n\n table {\n border-bottom: 1px solid #f0f0f0;\n table-layout: fixed !important; /* rewrite inline styles */\n }\n\n .ant-table-thead .ant-table-cell:not(.ant-table-cell-fix-left) {\n border-left: 1px solid #f0f0f0;\n border-top: 1px solid #f0f0f0;\n font-size: 14px;\n color: #262626;\n font-weight: 400;\n }\n\n .ant-table-cell {\n padding: 0 0 0 16px;\n }\n\n .ant-table-cell.ant-table-cell-fix-left.ant-table-cell-fix-left-last {\n padding: 0 0 0 25px;\n }\n\n .ant-table-tbody .ant-table-cell {\n border-bottom: 0px;\n font-size: 14px;\n color: #262626;\n font-weight: 600;\n\n &:not(.ant-table-cell-fix-left) {\n border-left: 1px solid #f0f0f0;\n font-weight: 400;\n padding: 5px 16px;\n }\n\n .edit-field--container {\n font-size: 14px;\n font-weight: 500;\n color: #595959;\n display: flex;\n }\n .edit-pen {\n padding-left: 10px;\n visibility: hidden;\n }\n &:hover {\n cursor: pointer;\n .edit-pen {\n visibility: visible;\n }\n }\n }\n .financial-value-row {\n font-weight: 500 !important;\n }\n .financial-value {\n display: flex;\n gap: 0 5px;\n font-weight: 400;\n font-size: 14px;\n .value {\n font-weight: 600;\n color: #1890ff;\n }\n }\n .growth {\n color: #595959;\n &.positive {\n color: #52c41a;\n }\n &.negative {\n color: #f5222d;\n }\n &.neutral {\n color: #595959;\n }\n }\n\n .ant-table-thead {\n .ant-table-cell-fix-left {\n border-top: 1px solid #f0f0f0;\n height: 45px;\n }\n .edit-pen {\n padding-left: 10px;\n visibility: hidden;\n }\n &:hover {\n cursor: pointer;\n .edit-pen {\n visibility: visible;\n }\n }\n }\n .ant-select-arrow {\n color: black;\n }\n`;\n\nexport const DropDownExportContainer = styled.div`\n min-width: 200px;\n width: 50%;\n margin-bottom: 30px;\n`;\n\nexport const DeleteFinancialYearButton = styled.span`\n color: #1890ff;\n cursor: pointer;\n`;\n\nexport const ModalWrapper = styled(Modal)<ModalProps>`\n top: 50%;\n transform: translateY(-50%);\n padding: 0;\n\n .ant-modal-header,\n .ant-modal-footer {\n border-color: #e8e8e8;\n }\n\n .ant-modal-body {\n background: #f3f6f9;\n height: 376px;\n }\n\n th.ant-table-cell {\n padding: 19px 7px;\n }\n\n .ant-table-wrapper {\n max-height: 60vh;\n overflow-y: auto;\n }\n\n .error-message {\n color: #f5222d;\n display: block;\n font-size: 0.9em;\n padding-top: 180px;\n }\n\n .error-message-right {\n padding-top: 0;\n position: absolute;\n left: 230px;\n top: 0;\n min-width: 200px;\n }\n\n .ant-select-selection-item {\n color: rgba(0, 0, 0) !important;\n font-weight: 500;\n }\n\n .ant-input {\n width: 220px;\n display: block;\n }\n`;\n\nexport const ErrorMessage = styled.div`\n color: red;\n margin-left: 12px;\n`;\n\nexport const TooltipLink = styled(Link)`\n display: block;\n color: #1890ff !important;\n margin-top: 18px;\n cursor: pointer;\n`;\n\nexport const EbitdaCol = styled(Col)`\n position: relative;\n\n .ant-dropdown .ant-dropdown-menu {\n max-height: 160px;\n overflow: auto;\n }\n`;\n","export const COMPANY_CSV_SIZE_LIMIT = 100000;\n","import React from 'react';\nimport Pagination from 'react-js-pagination';\nimport { useDispatch } from 'react-redux';\nimport {\n DoubleLeftOutlined,\n LeftOutlined,\n RightOutlined,\n DoubleRightOutlined,\n LoadingOutlined,\n} from '@ant-design/icons';\n// models\nimport { SelectedCompaniesGrids } from '@models/bulkActions';\nimport { GridKeys } from '@models/grid';\nimport { SearchStateData } from '@models/search';\n// constants\nimport { PaginationPendoActions } from '@optx/constants/pendoAction';\n// utils\nimport { trackPendoPagination } from '@optx/utils/utils';\n// redux\nimport { actions as paginationActions } from '@features/grid/pagination';\n// components\nimport { SelectedCount } from '@features/bulk-actions/selected-companies';\nimport { PaginationPerPage } from '@features/grid/pagination/components';\nimport SearchCount from '@features/grid/search-count/components/SearchCount';\n\ntype GridPaginationProps = {\n id?: string;\n pageSize: number;\n searchCountPageSize?: number;\n isFullscreen?: boolean;\n totalItemsCount: number;\n pageNumber: number;\n selectedCountType?: SelectedCompaniesGrids;\n isLoadingCount?: boolean;\n searchCountStyle?: React.CSSProperties;\n searchTitle?: string;\n listType?: {\n one: string;\n many: string;\n };\n isLoadingList?: boolean;\n selectedCard?: SearchStateData | null;\n} & (\n | {\n onPageChange: (page: number, perPage?: number) => void;\n gridKey?: never;\n }\n | {\n onPageChange?: never;\n gridKey: GridKeys;\n }\n);\n\nconst GridPagination: React.FC<GridPaginationProps> = ({\n id,\n onPageChange,\n pageSize,\n searchCountPageSize,\n totalItemsCount,\n isFullscreen,\n pageNumber,\n selectedCountType,\n isLoadingCount,\n gridKey,\n searchCountStyle,\n searchTitle,\n listType,\n isLoadingList,\n selectedCard,\n}) => {\n const dispatch = useDispatch();\n\n if (isLoadingCount) {\n return (\n <div data-virtual-scroll-substract=\"my-companies-grid\" className=\"grid-pagination\">\n <div className=\"grid-pagination--content\" style={{ justifyContent: 'center' }}>\n <LoadingOutlined style={{ color: '#4ce1b6', fontSize: '22px' }} />\n </div>\n </div>\n );\n }\n\n let handlePageChange = onPageChange;\n\n if (gridKey) {\n handlePageChange = (page: number, perPage: number = pageSize) => {\n dispatch(\n paginationActions.changePagination({\n gridKey,\n data: { pageNumber: page, pageSize: perPage },\n })\n );\n };\n }\n\n if (totalItemsCount === 0 || !handlePageChange) return null;\n\n const handlePaginationPendoAction = (value: number | PaginationPendoActions) => {\n trackPendoPagination(value, gridKey as 'myCompanies' | 'contacts');\n };\n\n return (\n <div\n id={id}\n data-virtual-scroll-substract={selectedCountType === 'myCompanies' && 'my-companies-grid'}\n className=\"grid-pagination\"\n >\n <div className=\"grid-pagination--content\">\n <div className=\"grid-pagination--per-page\">\n <PaginationPerPage\n onPageChange={handlePageChange}\n perPage={pageSize}\n pendoAction={value => handlePaginationPendoAction(value)}\n />\n {selectedCountType && <SelectedCount type={selectedCountType} />}\n\n {isFullscreen && gridKey && (\n <SearchCount\n style={{ marginLeft: '12px' }}\n isFullScreen={isFullscreen}\n gridName={gridKey}\n className=\"text-ellipsis\"\n />\n )}\n </div>\n\n <Pagination\n activePage={pageNumber}\n itemsCountPerPage={pageSize}\n totalItemsCount={totalItemsCount}\n pageRangeDisplayed={5}\n onChange={page => {\n handlePageChange && handlePageChange(page);\n handlePaginationPendoAction(page);\n }}\n itemClass=\"pagination-item\"\n innerClass=\"pagination-list\"\n linkClass=\"pagination-link\"\n firstPageText={\n <DoubleLeftOutlined\n onClick={() => handlePaginationPendoAction('BottomRibbon_DoubleArrowBack')}\n />\n }\n prevPageText={\n <LeftOutlined onClick={() => handlePaginationPendoAction('BottomRibbon_ArrowBack')} />\n }\n nextPageText={\n <RightOutlined\n onClick={() => handlePaginationPendoAction('BottomRibbon_ArrowForward')}\n />\n }\n lastPageText={\n <DoubleRightOutlined\n onClick={() => handlePaginationPendoAction('BottomRibbon_DoubleArrowForward')}\n />\n }\n />\n </div>\n </div>\n );\n};\n\nexport default GridPagination;\n","import React from 'react';\nimport classnames from 'classnames';\n// constants\nimport { CONTACTS, MY_COMPANIES_PAGE } from '@constants/pendoActions';\n// utils\n\ninterface PaginationPerPageProps {\n onPageChange: (page: number, perPage: number) => void;\n perPage: number;\n pendoAction: (value: number) => void;\n}\n\nconst perPageValues = [50, 150, 500];\n\nconst handleLinkClick = (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n event.preventDefault();\n};\n\nconst PaginationPerPage: React.FC<PaginationPerPageProps> = ({\n onPageChange,\n perPage,\n pendoAction,\n}) => {\n const createPageSizeChangeHandler = (pageSize: number, isActive: boolean) => () => {\n if (window.location.pathname === '/my-companies') {\n window.pendo.track(`${MY_COMPANIES_PAGE}_BottomRibbon_${pageSize}`);\n }\n\n if (window.location.pathname === '/contacts') {\n window.pendo.track(`${CONTACTS}_BottomRibbon_${pageSize}`);\n }\n\n if (!isActive) {\n onPageChange(1, pageSize);\n pendoAction(pageSize);\n }\n };\n\n return (\n <div className=\"per-page-container\">\n <ul className=\"pagination-list\">\n {perPageValues.map((item, index) => {\n const active = item === perPage;\n\n return (\n <li\n role=\"presentation\"\n key={index}\n className={classnames('pagination-item', { active })}\n onClick={createPageSizeChangeHandler(item, active)}\n >\n <a className=\"pagination-link\" href=\"/#\" onClick={handleLinkClick}>\n {item}\n </a>\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n\nexport default PaginationPerPage;\n","import { down } from 'styled-breakpoints';\nimport { useBreakpoint } from 'styled-breakpoints/react-styled';\n\nexport const useIsTabletOrSmaller = () => {\n return useBreakpoint(down('md'));\n};\n","import { down } from 'styled-breakpoints';\nimport { useBreakpoint } from 'styled-breakpoints/react-styled';\n\nexport const useIsLaptopOrSmaller = () => {\n return useBreakpoint(down('xl'));\n};\n","import { useCallback, useEffect } from 'react';\nimport { useFullscreen } from '@umijs/hooks';\nimport { Options } from '@umijs/hooks/es/useFullscreen';\nimport { useDispatch } from 'react-redux';\n// constants\nimport { ADVANCED_SEARCH } from '@optx/constants/pendoAction';\n// utils\nimport { createSendPendoAction, sendPendoData } from '@optx/utils/utils';\n// redux\nimport { actions as fullscreenActions } from '@redux/ui/settings/fullscreen';\n// hooks\nimport useCurrentGridName from '../useCurrentGridName';\n\ninterface UseReduxFullScreenOptions<T> extends Options<T> {\n /**\n * Current redux state for full screen.\n */\n fullscreen: boolean;\n /**\n * Redux toggle action.\n */\n toggle: VoidFunction;\n}\n\nconst useReduxFullScreen = <T extends HTMLElement = HTMLElement>({\n fullscreen,\n toggle,\n ...originalOptions\n}: UseReduxFullScreenOptions<T>) => {\n const { onExitFull, ...restOriginalOptions } = originalOptions;\n const currentGridName = useCurrentGridName();\n\n const dispatch = useDispatch();\n\n const toggleFullScreen = useCallback(\n () => dispatch(fullscreenActions.toggleFullScreen()),\n [dispatch]\n );\n\n const handleExitFull = () => {\n // full screen was done by Escape key or pressing x. We should update redux.\n if (fullscreen !== isFullscreen) {\n // Weird issue needs small timeout to update redux store properly.\n setTimeout(toggle, 0);\n }\n\n onExitFull && onExitFull();\n };\n\n const handlePendoAction = useCallback(\n (callback: () => void) => {\n createSendPendoAction(\n sendPendoData,\n currentGridName,\n `${ADVANCED_SEARCH}_TopRibbon_FullScreen`\n );\n\n callback();\n },\n [currentGridName]\n );\n\n const { ref, isFullscreen, setFull, exitFull, ...restProps } = useFullscreen<T>({\n onExitFull: handleExitFull,\n ...restOriginalOptions,\n });\n\n useEffect(() => {\n if (fullscreen) {\n toggleFullScreen();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // update fullscreen when redux store updates value\n useEffect(() => {\n if (fullscreen) {\n handlePendoAction(setFull);\n } else {\n handlePendoAction(exitFull);\n }\n }, [fullscreen, setFull, exitFull, handlePendoAction]);\n\n return {\n ref,\n isFullscreen,\n setFull,\n exitFull,\n ...restProps,\n };\n};\n\nexport default useReduxFullScreen;\n","import React from 'react';\nimport { Checkbox } from 'antd';\n// models\nimport { SelectProps } from './interface';\n\nconst CheckboxIcon: React.FC<SelectProps> = ({ isSelected }) => {\n return <Checkbox checked={isSelected} />;\n};\n\nexport default CheckboxIcon;\n","export const HTML = document.children[0] as HTMLElement;\n","import React, { useEffect } from 'react';\n\nconst useIsMount = () => {\n const isMountRef = React.useRef(true);\n\n useEffect(() => {\n isMountRef.current = false;\n }, []);\n\n return isMountRef.current;\n};\n\nexport default useIsMount;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Tooltip } from 'antd';\nimport { FilterOutlined } from '@ant-design/icons';\nimport { TooltipPlacement } from 'antd/lib/tooltip';\n// models\nimport { GridKeys } from '@optx/models/grid';\n// utils\nimport { getLocationMainGridKey } from '@optx/utils/grid';\n// redux\nimport { actions as modalActions } from '@redux/ui/modals/gridModals';\nimport { selectors as searchSelectors } from '@features/grid/search';\n\ninterface ShowFilterButtonProps {\n gridKey: GridKeys;\n placement?: TooltipPlacement;\n style?: React.CSSProperties;\n actionPendo?: string;\n}\n\nconst ShowFilterButton: React.FC<ShowFilterButtonProps> = ({\n gridKey,\n placement,\n style,\n actionPendo,\n}) => {\n const dispatch = useDispatch();\n\n const listType = useSelector(searchSelectors.getListType(getLocationMainGridKey() as GridKeys));\n const isFilterDisabled = listType === 'combined';\n const tooltipTitle = isFilterDisabled ? 'Not supported for combined searches' : 'Filter';\n\n const toggleModal = (e: React.MouseEvent<HTMLElement>) => {\n e.currentTarget.blur();\n\n if (actionPendo) {\n window.pendo.track(actionPendo);\n }\n\n dispatch(modalActions.toggleModal({ gridKey }));\n };\n\n return (\n <Tooltip title={tooltipTitle} placement={placement}>\n <Button\n style={style}\n type=\"text\"\n onClick={toggleModal}\n icon={<FilterOutlined />}\n disabled={isFilterDisabled}\n />\n </Tooltip>\n );\n};\n\nexport default React.memo(ShowFilterButton);\n","import * as yup from 'yup';\nimport { SelectOption } from '@optx/models/Option';\n\ninterface FilterModel {\n geo_range: Array<SelectOption>;\n geo_country: SelectOption;\n}\n\nconst messages = {\n required: 'Field is required!',\n number: 'Field must be a number!',\n};\n\n/**\n * Get path to the item value.\n * @param index index in list\n */\nconst getGeoRangeValuePath = (index: number) => `geo_range[${index}].value`;\n\nconst isValidNumber = (value?: string) => {\n if (!value) {\n return true;\n }\n\n const isNumber = /^\\d*$/gm.test(value);\n\n return isNumber;\n};\n\n// Zip Code is required if Range has value and viceversa.\nconst geoRangeSchema = yup\n .array<SelectOption>()\n .test('geo_range', '', function validateGeoCode(geolocationList: Array<SelectOption>) {\n const zipCode = geolocationList?.[0]?.value;\n const geoRange = geolocationList?.[1]?.value;\n\n // test if range is number\n if (!isValidNumber(geoRange)) {\n return this.createError({ message: messages.number, path: getGeoRangeValuePath(1) });\n }\n\n // test if one of them has value and the other is missing\n if (zipCode && !geoRange) {\n return this.createError({ message: messages.required, path: getGeoRangeValuePath(1) });\n }\n\n if (geoRange && !zipCode) {\n return this.createError({ message: messages.required, path: getGeoRangeValuePath(0) });\n }\n\n return true;\n });\n\nconst geoCountrySchema = yup\n .object<SelectOption>()\n .test('geo_country', '', function validateGeoCountry(geoCountry: SelectOption) {\n const geoRange = this.parent.geo_range;\n const code = geoRange?.[0]?.value;\n\n if (code && geoCountry && !geoCountry.value) {\n return this.createError({ message: messages.required, path: 'geo_country' });\n }\n\n if (geoCountry && geoCountry.value && !code) {\n return this.createError({ message: messages.required, path: getGeoRangeValuePath(0) });\n }\n\n return true;\n });\n\n// filter form validation schema\nconst validationSchema = yup.object<FilterModel>({\n geo_range: geoRangeSchema,\n geo_country: geoCountrySchema,\n});\n\nexport default validationSchema;\n","export enum TotalsCardLabels {\n this_week = 'This Week',\n this_month = 'This Month',\n all_open_touches = 'All Open',\n past_due = 'Past Due',\n Dead = 'Dead',\n Pass = 'Pass',\n add_ons = 'Add-ons',\n rank_5s = 'Rank 5s',\n new = 'New',\n positive = 'Positive',\n negative = 'Negative',\n added_to_track = 'Add to Track',\n rank_of_5 = 'Rank of 5',\n rank_of_4 = 'Rank of 4',\n active = 'Active',\n}\n\nexport enum labelNameMap {\n companies_reached = '# of Companies Reached',\n stage_change = '# of Stage Change',\n companies_added = '# of Companies Added',\n qualified_leads = '# of Qualified Lead',\n}\n","import * as yup from 'yup';\nimport { Dictionary } from 'lodash';\nimport { SaveView } from '@optx/models/search';\nimport { SaveSearchValues } from '@optx/components/common/dropdowns/DropdownSaveSearch/DropdownSaveSearch';\n\nconst getValidationSchema = (searchTitles: Dictionary<boolean>) => {\n if (searchTitles) {\n const validationSchema: yup.ObjectSchema<Omit<SaveView, 'isDefault'>> = yup.object<\n Omit<SaveView, 'isDefault'>\n >({\n title: yup\n .string()\n .required('Field is required!')\n .test('title_consists_only_of_space', 'Search name can not contain only spaces', value => {\n if (typeof value === 'string' && !value.trim()) {\n return false;\n }\n\n return true;\n })\n .test(\n 'title_ends_or_starts_with_space',\n 'Search name can not end or start with empty space',\n value => {\n if (typeof value === 'string') {\n const initialValueLength = (value as string).length;\n\n if (value.trim().length < initialValueLength) {\n return false;\n }\n }\n\n return true;\n }\n ),\n // eslint-disable-next-line func-names\n filters: yup.boolean().test('oneOfRequired', ' ', function (value) {\n return value || this.parent.sorting || this.parent.columns || this.parent.pinnedColumns;\n }),\n // eslint-disable-next-line func-names\n sorting: yup.boolean().test('oneOfRequired', ' ', function (value) {\n return value || this.parent.filters || this.parent.columns || this.parent.pinnedColumns;\n }),\n // eslint-disable-next-line func-names\n columns: yup.boolean().test('oneOfRequired', ' ', function (value) {\n return value || this.parent.filters || this.parent.sorting || this.parent.pinnedColumns;\n }),\n // eslint-disable-next-line func-names\n pinnedColumns: yup.boolean().test('oneOfRequired', ' ', function (value) {\n return value || this.parent.filters || this.parent.sorting || this.parent.columns;\n }),\n isOverwritten: yup\n .boolean()\n .test(\n 'oneOfRequired',\n 'Please check Overwrite search name and settings in order to proceed',\n function (value) {\n if (this.parent.hasSameName && !value) {\n return false;\n }\n\n return true;\n }\n )\n .test('oneOfRequired', ' ', function (value) {\n return value || this.parent.filters || this.parent.sorting || this.parent.columns;\n }),\n hasSameName: yup.boolean(),\n });\n\n return validationSchema;\n }\n\n return undefined;\n};\n\nexport default getValidationSchema;\n\nexport const saveListSchema = (searchTitles: Dictionary<boolean>) => {\n if (searchTitles) {\n const validationSchema: yup.ObjectSchema<SaveSearchValues> = yup.object<SaveSearchValues>({\n title: yup\n .string()\n .required('Field is required!')\n .test('title_consists_only_of_space', 'Search name can not contain only spaces', value => {\n if (typeof value === 'string' && !value.trim()) {\n return false;\n }\n\n return true;\n })\n .test(\n 'title_ends_or_starts_with_space',\n 'Search name can not end or start with empty space',\n value => {\n if (typeof value === 'string') {\n const initialValueLength = value.length;\n\n if (value.trim().length < initialValueLength) {\n return false;\n }\n }\n\n return true;\n }\n )\n .test({\n name: 'titleTaken',\n exclusive: true,\n params: { searchTitles },\n // eslint-disable-next-line no-template-curly-in-string\n message: '\"${value}\" search title already exists!',\n test: value => {\n if (typeof value === 'string') {\n const trimmedSearchTitles = Object.keys(searchTitles).map(title =>\n title.trim().toLowerCase()\n );\n\n return !trimmedSearchTitles.includes(value.trim().toLowerCase());\n }\n\n return true;\n },\n }),\n });\n\n return validationSchema;\n }\n\n return undefined;\n};\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from './state';\nimport { featureName } from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","/* eslint-disable react/jsx-wrap-multilines */\nimport React, { useEffect, useState, lazy, Suspense } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { isEmpty } from 'lodash';\nimport classnames from 'classnames';\nimport { Drawer, Tabs, Badge, Button, Tooltip } from 'antd';\nimport { BellOutlined, ArrowDownOutlined, ArrowUpOutlined } from '@ant-design/icons';\n// models\nimport {\n NotificationPayload,\n ParsedUpcomingTouchesNotificationData,\n} from '@optx/models/notifications';\nimport { ViewOption } from '@optx/models/search';\nimport { LoadingBlock } from '@optx/shared/view/molecules/loader';\nimport Icon from '@optx/components/common/Icon';\nimport {\n NotificationTabState,\n UpcomingTouchesNotificationTabState,\n PastDueTouchesNotificationTabState,\n} from '@features/alerts/state/interfaces';\n// constants\nimport { MenuNotifications } from '@constants/pendoActions';\n// redux\nimport { actions as alertActions } from '@features/alerts';\nimport { initialState } from '../state/reducer';\nimport { actions } from '../state';\nimport { getRoadmapUrl, getTotalCount } from '../state/selectors';\n// components\nimport FixedLoader from '@optx/components/common/loader/FixedLoader';\n// styles\nimport './style.scss';\nconst TouchesNotificationItems = lazy(() => import('./TouchesNotificationItems'));\nconst NotificationItems = lazy(() => import('./NotificationItems'));\n\ninterface RecentActvityProps {\n isOpen: boolean;\n toggleModal: VoidFunction;\n alertsInboxState: NotificationTabState;\n alertsUpcomingTouchesState: UpcomingTouchesNotificationTabState;\n alertsUpcomingTouchesData: ParsedUpcomingTouchesNotificationData | boolean;\n alertsPastDueTouchesData: ParsedUpcomingTouchesNotificationData | boolean;\n alertsPastDueTouchesState: PastDueTouchesNotificationTabState;\n alertsHistoryState: NotificationTabState;\n alertsNewList: Array<number>;\n onDismissNotification: (id: number) => void;\n onDismissUpcomingTouch: (id: number) => void;\n onDismissPastDueTouch: (id: number) => void;\n filtersLoading: boolean;\n views: ViewOption[];\n newUpcomingTouchesCount: number;\n upcomingTouchesNewList: Array<number>;\n}\n\nconst { TabPane } = Tabs;\n\nconst TABS = {\n inbox: '1',\n upcomingTouches: '2',\n pastDue: '3',\n history: '4',\n};\n\nconst getSortingOrder = (currentSorting: string) => (currentSorting === 'asc' ? 'desc' : 'asc');\n\nconst RecentActivity: React.FC<RecentActvityProps> = ({\n isOpen,\n toggleModal,\n onDismissNotification,\n onDismissUpcomingTouch,\n onDismissPastDueTouch,\n alertsInboxState,\n alertsUpcomingTouchesState,\n alertsUpcomingTouchesData,\n alertsPastDueTouchesData,\n alertsPastDueTouchesState,\n alertsHistoryState,\n alertsNewList,\n filtersLoading,\n views,\n newUpcomingTouchesCount,\n upcomingTouchesNewList,\n}) => {\n const dispatch = useDispatch();\n const roadmapUrl = useSelector(getRoadmapUrl);\n const totalCount = useSelector(getTotalCount);\n const [activeTab, setActiveTab] = useState('1');\n const [loading, setLoading] = useState(false);\n\n const modalClass = classnames('custom-modal', 'recent-activity-modal', {\n 'close-modal': !isOpen,\n });\n\n useEffect(() => {\n setLoading(false);\n }, [alertsHistoryState.data]);\n\n useEffect(() => {\n setLoading(false);\n }, [alertsUpcomingTouchesState.data]);\n\n useEffect(() => {\n setLoading(alertsUpcomingTouchesState.loading);\n }, [alertsUpcomingTouchesState.loading]);\n\n useEffect(() => {\n setLoading(false);\n }, [alertsPastDueTouchesState.data]);\n\n useEffect(() => {\n setLoading(alertsPastDueTouchesState.loading);\n }, [alertsPastDueTouchesState.loading]);\n\n useEffect(() => {\n setLoading(alertsInboxState.loading);\n }, [alertsInboxState.loading]);\n\n useEffect(() => {\n setLoading(false);\n }, [alertsInboxState.sorting]);\n\n useEffect(() => {\n setLoading(false);\n }, [alertsHistoryState.sorting]);\n\n useEffect(() => {\n setLoading(false);\n }, [alertsUpcomingTouchesState.sorting]);\n\n useEffect(() => {\n setLoading(false);\n }, [alertsPastDueTouchesState.sorting]);\n\n const handleTabChange = (nextTab: string) => {\n switch (nextTab) {\n case TABS.inbox:\n window.pendo.track(MenuNotifications.inbox);\n break;\n\n case TABS.history:\n window.pendo.track(MenuNotifications.history);\n break;\n\n case TABS.pastDue:\n window.pendo.track(MenuNotifications.upcomingTouches);\n break;\n\n case TABS.upcomingTouches:\n window.pendo.track(MenuNotifications.pastDue);\n break;\n }\n\n if (activeTab !== nextTab) {\n if (activeTab === TABS.inbox && alertsNewList.length && isOpen) {\n dispatch(alertActions.updateAlerts(alertsNewList));\n }\n\n if (activeTab === TABS.upcomingTouches && upcomingTouchesNewList.length && isOpen) {\n dispatch(alertActions.updateTouches(upcomingTouchesNewList));\n }\n\n setActiveTab(nextTab);\n\n if (nextTab === TABS.history) {\n setLoading(true);\n dispatch(actions.fetchAlertsHistory(initialState.history));\n }\n }\n };\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const pageNr = activeTab === TABS.history ? alertsHistoryState.pageNr : alertsInboxState.pageNr;\n const loaded = activeTab === TABS.history ? alertsHistoryState.loaded : alertsInboxState.loaded;\n const loading =\n activeTab === TABS.history ? alertsHistoryState.loading : alertsInboxState.loading;\n const sorting =\n activeTab === TABS.history ? alertsHistoryState.sorting : alertsInboxState.sorting;\n const history = activeTab === TABS.history;\n\n if (loaded || loading) return;\n const elm = e.currentTarget;\n\n if (Math.round(elm.scrollTop) + elm.clientHeight >= elm.scrollHeight - 1) {\n const payload: NotificationPayload = {\n history,\n pageNr,\n sorting,\n };\n dispatch(actions.loadMoreAlerts(payload));\n }\n };\n\n const handleTouchesScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const loaded = alertsPastDueTouchesState.loaded;\n\n if (loaded) return;\n const elm = e.currentTarget;\n\n if (Math.round(elm.scrollTop) + elm.clientHeight >= elm.scrollHeight - 1) {\n dispatch(actions.loadMorePastDueTouches(alertsPastDueTouchesState));\n }\n };\n\n const handleSort = () => {\n setLoading(true);\n\n switch (activeTab) {\n case TABS.inbox:\n dispatch(\n actions.sortAlerts({ sorting: getSortingOrder(alertsInboxState.sorting), history: false })\n );\n break;\n case TABS.upcomingTouches:\n dispatch(\n actions.sortUpcomingPastDueTouches({\n touchType: 'upcoming',\n sorting: getSortingOrder(alertsUpcomingTouchesState.sorting),\n })\n );\n break;\n case TABS.pastDue:\n dispatch(\n actions.sortUpcomingPastDueTouches({\n touchType: 'pastDue',\n sorting: getSortingOrder(alertsPastDueTouchesState.sorting),\n })\n );\n break;\n case TABS.history:\n dispatch(\n actions.sortAlerts({\n sorting: getSortingOrder(alertsHistoryState.sorting),\n history: true,\n })\n );\n break;\n default:\n break;\n }\n\n window.pendo.track(MenuNotifications.history_newestToOldest);\n };\n\n const handleDismissNotification = (id: number) => {\n onDismissNotification(id);\n const sorting = alertsInboxState.sorting;\n\n if (alertsInboxState.data.length <= 2) {\n setLoading(true);\n const payload: NotificationPayload = {\n history: false,\n pageNr: 0,\n sorting,\n };\n dispatch(actions.loadMoreAlerts(payload));\n }\n };\n\n const handleDismissAll = () => {\n // Determine the active tab and execute the appropriate dismiss function\n switch (activeTab) {\n case TABS.inbox:\n dispatch(alertActions.dismissAllAlerts());\n break;\n case TABS.upcomingTouches:\n dispatch(alertActions.deleteAllPastUpcomingTouches('upcoming'));\n break;\n case TABS.pastDue:\n dispatch(alertActions.deleteAllPastUpcomingTouches('pastDue'));\n break;\n\n default:\n break;\n }\n };\n\n const getCountForActiveTab = () => {\n switch (activeTab) {\n case TABS.inbox:\n return totalCount;\n case TABS.upcomingTouches:\n return (\n (typeof alertsUpcomingTouchesData === 'object' && alertsUpcomingTouchesData.count) || 0\n );\n case TABS.pastDue:\n return (\n (typeof alertsPastDueTouchesData === 'object' && alertsPastDueTouchesData.count) || 0\n );\n case TABS.history:\n return alertsHistoryState.newAlertCount;\n default:\n return 0;\n }\n };\n\n const sortNotificationsButton = () => {\n let sorting = '';\n\n switch (activeTab) {\n case TABS.inbox:\n sorting = alertsInboxState.sorting;\n break;\n case TABS.upcomingTouches:\n sorting = alertsUpcomingTouchesState.sorting;\n break;\n case TABS.pastDue:\n sorting = alertsPastDueTouchesState.sorting;\n break;\n case TABS.history:\n sorting = alertsHistoryState.sorting;\n break;\n default:\n sorting = alertsInboxState.sorting;\n break;\n }\n\n return (\n <div>\n <Button type=\"text\" onClick={handleSort} style={{ marginRight: 20 }}>\n {sorting === 'desc' ? (\n <>\n <ArrowUpOutlined style={{ color: '#1890ff' }} />\n Newest to Oldest\n </>\n ) : (\n <>\n <ArrowDownOutlined style={{ color: '#1890ff' }} />\n Oldest to Newest\n </>\n )}\n </Button>\n </div>\n );\n };\n\n return (\n <Suspense fallback={<FixedLoader loading={true} />}>\n <div className=\"recent-activity\">\n <Drawer\n visible={isOpen}\n onClose={toggleModal}\n getContainer={() => document.getElementsByClassName('right-section')[0] as HTMLElement}\n title={\n <div className=\"notification-title\">\n <span className=\"notifications-anticon-wrapper\">\n <Badge\n className=\"ant-badge--notifications\"\n count={alertsInboxState.newAlertCount + (newUpcomingTouchesCount || 0)}\n overflowCount={99}\n />\n <BellOutlined />\n </span>\n <span className=\"flex-grow-1\">Notifications</span>\n {sortNotificationsButton()}\n <Tooltip title=\"View OPTX Roadmap\">\n <Button\n icon={<Icon iconName=\"map\" className=\"map-icon\" />}\n className=\"mr-3 roadmap\"\n href={roadmapUrl}\n target=\"_blank\"\n ></Button>\n </Tooltip>\n <Button\n type=\"default\"\n onClick={handleDismissAll}\n target=\"_blank\"\n disabled={getCountForActiveTab() === 0}\n className=\"mr-5\"\n >\n {`Dismiss All (${getCountForActiveTab()})`}\n </Button>\n </div>\n }\n className={modalClass}\n width=\"650\"\n placement=\"left\"\n >\n <Tabs onTabClick={key => handleTabChange(key)} animated={false}>\n <TabPane\n key={TABS.inbox}\n className={classnames({\n active: activeTab === TABS.inbox,\n })}\n tab={`Inbox (${totalCount})`}\n >\n <div className=\"recent-activity-modal__content\" onScroll={handleScroll}>\n <LoadingBlock loading={loading} />\n {alertsInboxState.data && !isEmpty(alertsInboxState.data) && !filtersLoading && (\n <div key={TABS.inbox + 1} className=\"notification-wrapper mt-0 mb-0\">\n <div className=\"notification-body pt-2\">\n <NotificationItems\n name=\"inbox\"\n data={alertsInboxState.data}\n onDismissNotification={handleDismissNotification}\n views={views}\n />\n </div>\n </div>\n )}\n </div>\n </TabPane>\n\n <TabPane\n key={TABS.upcomingTouches}\n className={classnames({\n active: activeTab === TABS.upcomingTouches,\n })}\n tab={`Upcoming Touches (${\n (typeof alertsUpcomingTouchesData === 'object' &&\n alertsUpcomingTouchesData.count) ||\n 0\n })`}\n >\n <div className=\"recent-activity-modal__content\">\n <LoadingBlock loading={loading} />\n {typeof alertsUpcomingTouchesData === 'object' &&\n alertsUpcomingTouchesData.count !== 0 && (\n <div key={TABS.upcomingTouches + 3} className=\"notification-wrapper mt-0 mb-0\">\n <div className=\"notification-body pt-2\">\n <TouchesNotificationItems\n name=\"upcomingTouches\"\n data={alertsUpcomingTouchesData}\n onDismissTouch={onDismissUpcomingTouch}\n />\n </div>\n </div>\n )}\n </div>\n </TabPane>\n <TabPane\n key={TABS.pastDue}\n className={classnames({\n active: activeTab === TABS.pastDue,\n })}\n tab=\"Past Due\"\n >\n <div className=\"recent-activity-modal__content\" onScroll={handleTouchesScroll}>\n <LoadingBlock loading={loading} />\n {typeof alertsPastDueTouchesData === 'object' &&\n alertsPastDueTouchesData.count !== 0 && (\n <div key={TABS.pastDue + 4} className=\"notification-wrapper mt-0 mb-0\">\n <div className=\"notification-body pt-2\">\n <TouchesNotificationItems\n name=\"pastDueTouches\"\n data={alertsPastDueTouchesData}\n onDismissTouch={onDismissPastDueTouch}\n />\n </div>\n </div>\n )}\n </div>\n </TabPane>\n <TabPane\n key={TABS.history}\n className={classnames({\n active: activeTab === TABS.history,\n })}\n tab=\"Archive\"\n >\n <div className=\"recent-activity-modal__content\" onScroll={handleScroll}>\n <LoadingBlock loading={loading} />\n {alertsHistoryState.data && !isEmpty(alertsHistoryState.data) && (\n <div key={TABS.history + 2} className=\"notification-wrapper mt-0 mb-0\">\n <div className=\"notification-body pt-2\">\n <NotificationItems\n name=\"history\"\n data={alertsHistoryState.data}\n views={views}\n />\n </div>\n </div>\n )}\n </div>\n </TabPane>\n </Tabs>\n </Drawer>\n </div>\n </Suspense>\n );\n};\n\nRecentActivity.defaultProps = {\n isOpen: false,\n alertsInboxState: initialState.inbox,\n alertsHistoryState: initialState.history,\n};\n\nexport default RecentActivity;\n","var _rect, _path, _path2, _path3, _defs;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgLogoBackground(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 256,\n height: 101,\n viewBox: \"0 0 256 101\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 256,\n height: 101,\n fill: \"#000C17\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.7616 59.5312C1.68441 59.5312 -0.823629 95.0045 0.179588 101H256V0.0759547C235.434 0.0759547 162.701 -3.42144 130.598 37.0481C93.0314 84.405 49.8388 59.5312 25.7616 59.5312Z\",\n fill: \"url(#paint0_linear)\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M230.238 41.4688C254.316 41.4688 256.824 5.99549 255.82 0H0V100.924C20.5659 100.924 93.2992 104.421 125.402 63.9519C162.969 16.595 206.161 41.4688 230.238 41.4688Z\",\n fill: \"url(#paint1_linear)\",\n fillOpacity: 0.6\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.7616 77.1862C1.68441 77.1862 -0.823629 97.557 0.179588 101H256V43.0436C235.434 43.0436 162.701 41.0352 130.598 64.2752C93.0314 91.4702 49.8388 77.1862 25.7616 77.1862Z\",\n fill: \"url(#paint2_linear)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: 128,\n y1: 0,\n x2: 128,\n y2: 101,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#0D4070\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#001529\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint1_linear\",\n x1: 128,\n y1: 101,\n x2: 128,\n y2: 0,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#0D4070\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#001529\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint2_linear\",\n x1: 128,\n y1: 43,\n x2: 128,\n y2: 101,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#0D4070\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#001529\"\n })))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoBackground);\nexport default __webpack_public_path__ + \"static/media/logo-background.4540c55d.svg\";\nexport { ForwardRef as ReactComponent };","import { combineReducers } from 'redux';\n// models\nimport { GridState } from '@optx/models/grid';\n// reducers\nimport pagination from './pagination';\nimport searchCount from './search-count';\nimport view from './view';\nimport autocomplete from './autocomplete';\nimport fetchedCount from './fetched-count';\nimport filter from './filter';\nimport searchkey from './searchkey';\nimport searchType from './search-type';\nimport search from './search';\nimport viewType from './view-type';\nimport paginationLongCard from './pagination-long-card';\nimport viewTransition from './view-transition';\nimport columns from './columns';\nimport sort from './sort';\nimport histograms from './histograms';\n\nconst reducer = combineReducers<GridState>({\n pagination,\n searchCount,\n paginationLongCard,\n view,\n autocomplete,\n filter,\n searchkey,\n searchType,\n search,\n fetchedCount,\n viewType,\n viewTransition,\n columns,\n sort,\n histograms,\n});\n\nexport default reducer;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport { featureName } from './featureName';\nimport reducer from './reducer';\nimport { sagas as paginationSagas } from './pagination';\nimport { saga as searchCountSaga } from './search-count';\nimport { sagas as paginationSaga } from './pagination';\nimport { saga as viewSaga } from './view';\nimport { saga as autocompleteSaga } from './autocomplete';\nimport { sagas as filterSagas } from './filter';\nimport { saga as searchSaga } from './search';\nimport { saga as viewTypeSaga } from './view-type';\nimport { sagas as paginationLongCardSaga } from './pagination-long-card';\nimport { sagas as columnsSaga } from './columns';\nimport { saga as sortSaga } from './sort';\nimport { sagas as histogramSaga } from './histograms';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: 'pagination', saga: paginationSagas });\n useInjectSaga({ key: 'autocomplete', saga: autocompleteSaga });\n useInjectSaga({ key: 'search-count', saga: searchCountSaga });\n useInjectSaga({ key: 'pagination', saga: paginationSaga });\n useInjectSaga({ key: 'view', saga: viewSaga });\n useInjectSaga({ key: 'autocomplete', saga: autocompleteSaga });\n useInjectSaga({ key: 'filter', saga: filterSagas });\n useInjectSaga({ key: 'search', saga: searchSaga });\n useInjectSaga({ key: 'viewType', saga: viewTypeSaga });\n useInjectSaga({ key: 'paginationLongCard', saga: paginationLongCardSaga });\n useInjectSaga({ key: 'columns', saga: columnsSaga });\n useInjectSaga({ key: 'sort', saga: sortSaga });\n useInjectSaga({ key: 'histogram', saga: histogramSaga });\n};\n\nexport default useInject;\n","import { NavigationPathItem } from '@optx/models/menu/main-navigation';\nimport appRoutes from './routes';\n\nexport const NAVIGATION_SUBMENUES = {\n pipeline: 'pipeline',\n findNewCompanies: 'findNewCompanies',\n contacts: 'contacts',\n admin: 'admin',\n profile: 'profile',\n workforceManagement: 'reports',\n newOpportunities: 'newOpportunities',\n};\n\nconst navPaths: Array<NavigationPathItem> = [\n {\n type: 'submenu',\n path: NAVIGATION_SUBMENUES.pipeline,\n items: [\n {\n type: 'item',\n path: appRoutes.lists.myWatchList,\n },\n {\n type: 'item',\n path: appRoutes.lists.companySavedSearches,\n },\n {\n type: 'item',\n path: appRoutes.notes,\n },\n ],\n },\n {\n type: 'submenu',\n path: NAVIGATION_SUBMENUES.findNewCompanies,\n items: [\n {\n type: 'item',\n path: appRoutes.lists.suggestedSearches,\n },\n {\n type: 'item',\n path: appRoutes.lists.sourceScrubLists,\n },\n ],\n },\n {\n type: 'submenu',\n path: NAVIGATION_SUBMENUES.contacts,\n items: [\n {\n type: 'item',\n path: appRoutes.contacts,\n },\n {\n type: 'item',\n path: appRoutes.lists.contactSearches,\n },\n ],\n },\n {\n type: 'submenu',\n path: NAVIGATION_SUBMENUES.workforceManagement,\n items: [\n {\n type: 'item',\n path: appRoutes.reports.sourcingAnalystsLeaderboard,\n },\n ],\n },\n {\n type: 'submenu',\n path: NAVIGATION_SUBMENUES.admin,\n items: [\n {\n type: 'item',\n path: appRoutes.admin.users,\n },\n {\n type: 'item',\n path: appRoutes.reports.equityTouchIntegration,\n },\n ],\n },\n {\n type: 'submenu',\n path: NAVIGATION_SUBMENUES.profile,\n items: [\n {\n type: 'item',\n path: appRoutes.user.profile,\n },\n ],\n },\n {\n type: 'submenu',\n path: NAVIGATION_SUBMENUES.newOpportunities,\n items: [],\n },\n];\n\nexport default navPaths;\n","import React from 'react';\nimport { Menu } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport PrivateComponent, { PrivateComponentProps } from '../../PrivateComponent';\n\ninterface PrivateMenuItemProps extends MenuItemProps, PrivateComponentProps {}\n\nconst PrivateMenuItem = ({ accessFor, ...restProps }: PrivateMenuItemProps) => {\n return (\n <PrivateComponent accessFor={accessFor}>\n <Menu.Item {...restProps} />\n </PrivateComponent>\n );\n};\n\nexport default PrivateMenuItem;\n","import React from 'react';\nimport { Menu } from 'antd';\nimport { SubMenuProps } from 'antd/lib/menu/SubMenu';\nimport PrivateComponent, { PrivateComponentProps } from '../../PrivateComponent';\n\ninterface PrivateSubmenuProps extends SubMenuProps, PrivateComponentProps {}\n\nconst PrivateSubmenu: React.FC<PrivateSubmenuProps> = ({ accessFor, ...restProps }) => {\n return (\n <PrivateComponent accessFor={accessFor}>\n <Menu.SubMenu {...restProps} />\n </PrivateComponent>\n );\n};\n\nexport default PrivateSubmenu;\n","import React from 'react';\nimport { Menu, MenuProps } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport { useInjectSaga } from 'redux-injectors';\n// constants\nimport { NavigationPane } from '@optx/constants/pendoActions';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\n// redux\nimport { useDispatch, useSelector } from 'react-redux';\nimport logOutSaga from '../../../../redux/auth/authentication/saga';\nimport {\n actions as cognitoLogoutActions,\n selectors as cognitoLogoutSelectors,\n} from '../../../../redux/auth/cognitoLogout';\nimport * as authActions from '../../../../redux/auth/authentication/actions';\n// hooks\nimport { useInitialFetch } from '../../../../common/hooks/fetch';\n\n// Inject reducers/sagas\nconst useInject = () => {\n useInjectSaga({ key: 'logOut', saga: logOutSaga });\n};\n\n/**\n * Logout Menu Item.\n * @param param0\n */\nconst LogOut = ({ onClick, ...restProps }: MenuItemProps) => {\n useInject();\n const dispatch = useDispatch();\n\n // initialize cognito login URL\n const shouldFetchCognitoLogoutURL = useSelector(\n cognitoLogoutSelectors.shouldFetchCognitoLogoutURL\n );\n const fetchCognitoLogoutURL = () => dispatch(cognitoLogoutActions.fetchCognitoLogoutURL());\n useInitialFetch(shouldFetchCognitoLogoutURL, fetchCognitoLogoutURL);\n\n const logOut = () => dispatch(authActions.logOut({ isChromeExtenison: false }));\n\n const handleClick: MenuProps['onClick'] = info => {\n logOut();\n sendPendoData(`${NavigationPane.logout}`);\n onClick && onClick(info);\n };\n\n return (\n <Menu.Item onClick={handleClick} {...restProps}>\n Log Out\n </Menu.Item>\n );\n};\n\nexport default LogOut;\n","import React, { useState, useCallback, useEffect, useMemo, MouseEventHandler } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Badge } from 'antd';\nimport { BellOutlined } from '@ant-design/icons';\nimport { useLocation } from 'react-router-dom';\n// models\nimport { ParsedUpcomingTouchesNotificationData } from '@optx/models/notifications';\n// utils\nimport { parseDataByNextTime, parseDataByPastTime } from '@utils/helpers';\n// redux\nimport { selectors as filterSelectors } from '@redux/company/filters';\nimport { selectors as savedSearchSelectors } from '@redux/company/saved-searches';\nimport { selectors as alertSelectors, actions as alertActions } from '@features/alerts';\nimport { initialState } from '@features/alerts/state/reducer';\n// hooks\nimport useRecentActivityModal from '@optx/common/hooks/init/useRecentActivityModal';\n// components\nimport { RecentActivity } from '@features/alerts/components';\n\ninterface NotificationsProps {\n clickedOutsideNotifications: boolean;\n setClickedOutsideNotifications: (value: React.SetStateAction<boolean>) => void;\n}\n\nconst Notifications = ({\n clickedOutsideNotifications,\n setClickedOutsideNotifications,\n ...restProps\n}: NotificationsProps) => {\n // load filters when first opening the modal\n const dispatch = useDispatch();\n const location = useLocation();\n\n const filtersLoading = useSelector(filterSelectors.isLoading);\n const [recentActivityModal, toogleRecentActivityModal] = useRecentActivityModal();\n\n const [inboxNewAlertsCount, setInboxNewAlertsCount] = useState(0);\n\n const savedSearchLoading = useSelector(savedSearchSelectors.isLoading);\n // load Inbox Alerts\n const fetchInboxAlerts = useCallback(\n () => dispatch(alertActions.fetchAlertsInbox(initialState.inbox)),\n [dispatch]\n );\n\n // load Upcoming Touches\n const fetchUpcomingTouches = useCallback(\n () => dispatch(alertActions.fetchTouches(initialState.touches.upcoming)),\n [dispatch]\n );\n\n const views = useSelector(savedSearchSelectors.getViews).views;\n\n // alerts\n const alertsInboxState = useSelector(alertSelectors.alertsInboxState);\n const alertsHistoryState = useSelector(alertSelectors.alertsHistoryState);\n const alertsUpcomingTouchesState = useSelector(alertSelectors.alertsUpcomingTouchesState);\n const alertsPastDueTouchesState = useSelector(alertSelectors.alertsPastDueTouchesState);\n const alertsNewList = useSelector(alertSelectors.alertsNewList);\n const upcomingTouchesNewList = useSelector(alertSelectors.touchesNewList);\n const newUpcomingTouchesCount = useSelector(alertSelectors.getNewUpcomingTouches);\n\n const upcomingTouchesData: ParsedUpcomingTouchesNotificationData | boolean = useMemo(\n () =>\n alertsUpcomingTouchesState.data &&\n alertsUpcomingTouchesState.data.length !== 0 &&\n parseDataByNextTime(alertsUpcomingTouchesState.data, alertsUpcomingTouchesState.sorting),\n [alertsUpcomingTouchesState.data, alertsUpcomingTouchesState.sorting]\n );\n\n const pastDueTouchesData: ParsedUpcomingTouchesNotificationData | boolean = useMemo(\n () =>\n alertsPastDueTouchesState.data &&\n alertsPastDueTouchesState.data.length !== 0 &&\n parseDataByPastTime(alertsPastDueTouchesState.data),\n [alertsPastDueTouchesState.data]\n );\n\n const handleDismissNotification = useCallback(\n (id: number) => dispatch(alertActions.dismissAlert(id)),\n [dispatch]\n );\n\n const handleDeleteUpcomingTouch = useCallback(\n (id: number) => dispatch(alertActions.deleteUpcomingTouch(id)),\n [dispatch]\n );\n const handleDeletePastDueTouch = useCallback(\n (id: number) => dispatch(alertActions.deletePastDueTouch(id)),\n [dispatch]\n );\n\n const toggleModalHandler = () => {\n toogleRecentActivityModal();\n\n if (alertsNewList.length && recentActivityModal) {\n dispatch(alertActions.updateAlerts(alertsNewList));\n }\n\n if (upcomingTouchesNewList.length && recentActivityModal) {\n dispatch(alertActions.updateTouches(upcomingTouchesNewList));\n }\n };\n\n const handleClick: MouseEventHandler = () => {\n toggleModalHandler();\n };\n\n useEffect(() => {\n if (recentActivityModal) {\n toogleRecentActivityModal();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.pathname]);\n\n useEffect(() => {\n setInboxNewAlertsCount(alertsInboxState.newAlertCount);\n }, [alertsInboxState.newAlertCount]);\n\n useEffect(() => {\n fetchUpcomingTouches();\n fetchInboxAlerts();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (clickedOutsideNotifications && recentActivityModal) {\n toggleModalHandler();\n }\n\n setClickedOutsideNotifications(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [clickedOutsideNotifications, recentActivityModal]);\n\n return (\n <>\n <span className=\"ant-menu-title-content-inner\" onClick={handleClick} {...restProps}>\n <span className=\"notifications-anticon-wrapper\">\n <Badge\n className=\"ant-badge--notifications\"\n count={inboxNewAlertsCount + (newUpcomingTouchesCount || 0)}\n overflowCount={99}\n />\n <BellOutlined />\n </span>\n <span>Notifications</span>\n </span>\n <RecentActivity\n isOpen={recentActivityModal}\n toggleModal={toggleModalHandler}\n alertsInboxState={alertsInboxState}\n alertsUpcomingTouchesState={alertsUpcomingTouchesState}\n alertsPastDueTouchesState={alertsPastDueTouchesState}\n alertsPastDueTouchesData={pastDueTouchesData}\n alertsUpcomingTouchesData={upcomingTouchesData}\n alertsHistoryState={alertsHistoryState}\n alertsNewList={alertsNewList}\n upcomingTouchesNewList={upcomingTouchesNewList}\n newUpcomingTouchesCount={newUpcomingTouchesCount}\n onDismissNotification={handleDismissNotification}\n onDismissUpcomingTouch={handleDeleteUpcomingTouch}\n onDismissPastDueTouch={handleDeletePastDueTouch}\n filtersLoading={filtersLoading || savedSearchLoading}\n views={views}\n />\n </>\n );\n};\n\nexport default Notifications;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// redux\nimport { selectors } from '@redux/user/information';\n\nconst UserPicture = () => {\n const picture = useSelector(selectors.getPicture);\n\n return (\n <img src={picture} style={{ width: 35, height: 35 }} alt=\"user\" className=\"rounded-circle\" />\n );\n};\n\nexport default UserPicture;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Menu } from 'antd';\nimport AntIcon from '@ant-design/icons';\nimport { SubMenuProps } from 'antd/lib/menu/SubMenu';\n// redux\nimport { selectors as userInformationSelectors } from '../../../../../redux/user/information';\n// components\nimport UserPicture from './UserPicture';\n// styles\nimport './styles.scss';\n\nconst { SubMenu } = Menu;\n\nconst ProfileSubMenu: React.FC<SubMenuProps> = props => {\n const fullName = useSelector(userInformationSelectors.getFullName);\n const email = useSelector(userInformationSelectors.getEmail);\n\n return (\n <SubMenu\n className=\"profile-submenu\"\n icon={<AntIcon component={UserPicture} />}\n title={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <>\n <span className=\"profile-submenu__title text-ellipsis\">{fullName}</span>\n <span className=\"profile-submenu__email text-ellipsis\">{email}</span>\n </>\n }\n {...props}\n />\n );\n};\n\nexport default ProfileSubMenu;\n","import { createSelector } from 'reselect';\nimport { selectors as filtersSelectors } from '../../../../../redux/company/filters';\nimport { selectors as suggestedSearchesSelectors } from '../../../../../redux/company/suggested-searches';\n\nexport const isLoading = createSelector(\n filtersSelectors.isLoading,\n suggestedSearchesSelectors.isLoading,\n (loadingFilters, loadingSuggestedSearches) => loadingFilters || loadingSuggestedSearches\n);\n","import { FC } from 'react';\nimport { Menu, MenuProps } from 'antd';\nimport { LoadingOutlined } from '@ant-design/icons';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\n// constants\nimport { FIND_NEW_COMPANIES_BROWSE_BY_RECENTLY_FUNDED } from '@optx/constants/pendoActions';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport { isLoading } from './selectors';\n\ninterface SuggestedSearchProps extends MenuItemProps {\n title: string;\n label: string;\n}\n\nconst SuggestedSearch: FC<SuggestedSearchProps> = ({ title, label, onClick, ...restProps }) => {\n const dispatch = useDispatch();\n\n const loading = useSelector(isLoading) || undefined;\n\n const handleClick: MenuProps['onClick'] = info => {\n window.pendo.track(FIND_NEW_COMPANIES_BROWSE_BY_RECENTLY_FUNDED);\n\n dispatch(\n searchActions.loadSuggestedSearch({\n gridKey: 'advancedSearch',\n data: { title },\n })\n );\n\n onClick && onClick(info);\n };\n\n return (\n <Menu.Item onClick={handleClick} disabled={loading} {...restProps}>\n {loading && <LoadingOutlined style={{ color: '#4ce1b6' }} />}\n {label}\n </Menu.Item>\n );\n};\n\nexport default SuggestedSearch;\n","import React from 'react';\nimport { ReactComponent as LogoBackground } from '../../../../assets/svg/logo-background.svg';\nimport { ReactComponent as LogoIcon } from '../../../../assets/svg/icons/logo.svg';\n// styles\nimport './styles.scss';\n\nconst Logo = () => {\n return (\n <div className=\"navigation-logo\">\n <LogoBackground className=\"navigation-logo__background\" />\n <div className=\"navigation-logo__content\">\n <LogoIcon className=\"navigation-logo__icon\" />\n <span className=\"navigation-logo__text\">OPTX</span>\n </div>\n </div>\n );\n};\n\nexport default Logo;\n","import React from 'react';\nimport { DoubleLeftOutlined } from '@ant-design/icons';\n\nconst NavigationTrigger = () => {\n return (\n <>\n <DoubleLeftOutlined />\n <span>Collapse Menu</span>\n </>\n );\n};\n\nexport default NavigationTrigger;\n","import React, { useMemo, useState, useEffect } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Layout, Menu, Affix } from 'antd';\nimport AntIcon, {\n SearchOutlined,\n ContactsOutlined,\n SettingOutlined,\n BarChartOutlined,\n HomeOutlined,\n} from '@ant-design/icons';\nimport { SiderProps } from 'antd/lib/layout';\nimport { Dictionary } from 'lodash';\n// constants\nimport navigationPaths, { NAVIGATION_SUBMENUES } from '@constants/main-navigation';\nimport appRoutes from '@constants/routes';\nimport { NavigationPane, ALL_USERS } from '@optx/constants/pendoActions';\n// utils\nimport { getDefaultOpenedKeys, getOpenedKeys } from '@optx/core/layout/MainNavigation/utils';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\nimport {\n useInjectAuth,\n useInjectCompanyLists,\n useInjectMyCompanies,\n useInjectPoolingGenerator,\n useInjectSuggestedSearches,\n} from '@hooks/inject';\n// components\nimport Icon from '@components/common/Icon';\nimport AddResearchRationale from '@optx/features/add-research-rationale';\nimport { PrivateMenuItem } from '@components/common/menu/menu-items';\nimport { PrivateSubmenu } from '@components/common/menu/submenu';\nimport { LogOut, Notifications, ProfileSubMenu, SuggestedSearch } from './menu-items';\nimport NavigationLogo from './NavigationLogo';\nimport NavigationTrigger from './NavigationTrigger';\n\nconst { Sider } = Layout;\nconst { SubMenu } = Menu;\n\nconst useInject = () => {\n useInjectAuth();\n // Inject in common component for state to be available in all pages.\n // For example when slice state initialization depends on user information,\n // but if state is not injected there will be no initialization.\n useInjectCompanyLists();\n useInjectPoolingGenerator();\n useInjectMyCompanies();\n useInjectSuggestedSearches();\n};\n\nconst defaultOpenedKeysExceptions: Dictionary<boolean> = {\n [NAVIGATION_SUBMENUES.profile]: true,\n};\n\nconst defaultOpenedKeys = getDefaultOpenedKeys(navigationPaths, defaultOpenedKeysExceptions);\n\nconst MainNavigation: React.FC<SiderProps> = ({ collapsed, ...restProps }) => {\n useInject();\n\n const location = useLocation();\n\n const [openedKeys, setOpenedKeys] = useState<Array<string>>(collapsed ? [] : defaultOpenedKeys);\n const [clickedOutsideNotifications, setClickedOutsideNotifications] = useState(false);\n const selectedKeys = useMemo(() => [location.pathname], [location.pathname]);\n const { isAnalyst, isAdmin, advancedSearchPathname } = useUserRole();\n\n useEffect(() => {\n if (!collapsed) {\n // Update opened submenues when location path changes.\n const keys = getOpenedKeys(navigationPaths, location.pathname);\n\n if (keys.length && !openedKeys.includes(keys[0])) {\n const newKeys = [...openedKeys, ...keys];\n setOpenedKeys(newKeys);\n }\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.pathname, collapsed]);\n\n const handleSubmenuOpenChange = (keys: any) => {\n setOpenedKeys(keys);\n };\n\n const handleSubMenuSelect = (keys: any) => {\n if (collapsed) {\n setOpenedKeys([]);\n }\n };\n\n const handleBottomSubmenuSelect = () => {\n setClickedOutsideNotifications(true);\n };\n\n const handleNotification = () => {\n window.pendo.track(NavigationPane.notifications);\n };\n\n return (\n <Sider\n trigger={<NavigationTrigger />}\n collapsible\n width={256}\n className=\"main-navigation\"\n collapsed={collapsed}\n {...restProps}\n >\n <Link to={appRoutes.home}>\n <NavigationLogo />\n </Link>\n <Menu\n theme=\"dark\"\n selectedKeys={selectedKeys}\n openKeys={openedKeys}\n onOpenChange={handleSubmenuOpenChange}\n onSelect={handleSubMenuSelect}\n mode=\"inline\"\n className=\"main-navigation__menu-top\"\n >\n <Menu.Item\n key={1}\n style={{ paddingLeft: 0, paddingRight: 0 }}\n className=\"main-navigation__menu-custom-item\"\n onClick={handleNotification}\n >\n <Notifications\n clickedOutsideNotifications={clickedOutsideNotifications}\n setClickedOutsideNotifications={setClickedOutsideNotifications}\n />\n </Menu.Item>\n {isAnalyst && (\n <PrivateMenuItem key={appRoutes.home} accessFor=\"analyst_general\" icon={<HomeOutlined />}>\n <Link to={appRoutes.home}>Home</Link>\n </PrivateMenuItem>\n )}\n {isAdmin && (\n <PrivateMenuItem\n key={appRoutes.home}\n accessFor=\"admin_portal_link\"\n icon={<HomeOutlined />}\n >\n <Link to={appRoutes.home}>Home</Link>\n </PrivateMenuItem>\n )}\n <Menu.Item key={advancedSearchPathname} icon={<SearchOutlined />}>\n <Link\n to={advancedSearchPathname}\n onClick={() => {\n window.pendo.track(NavigationPane.advancedSearch);\n }}\n >\n Advanced Search\n </Link>\n </Menu.Item>\n <SubMenu\n key={NAVIGATION_SUBMENUES.newOpportunities}\n icon={<AntIcon component={() => <Icon iconName=\"new-opportunities\" />} />}\n title=\"New Opportunities\"\n >\n <SuggestedSearch\n title=\"US New Opportunities\"\n label=\"US Funds\"\n key=\"us-new-opportunities\"\n />\n <SuggestedSearch\n title=\"Europe Weekly Leads\"\n label=\"Europe Funds\"\n key=\"eu-new-opportunities\"\n />\n </SubMenu>\n <SubMenu\n key={NAVIGATION_SUBMENUES.pipeline}\n icon={<AntIcon component={() => <Icon iconName=\"pipeline\" />} />}\n title=\"Manage My Pipeline\"\n >\n <Menu.Item key={appRoutes.myCompanies}>\n <Link\n to={appRoutes.myCompanies}\n onClick={() => {\n window.pendo.track(NavigationPane.myCompanies);\n }}\n >\n My Companies\n </Link>\n </Menu.Item>\n <Menu.Item key={appRoutes.lists.myWatchList}>\n <Link\n to={appRoutes.lists.myWatchList}\n onClick={() => {\n window.pendo.track(NavigationPane.myWatchlist);\n }}\n >\n My Watchlist\n </Link>\n </Menu.Item>\n <Menu.Item key={appRoutes.lists.companySavedSearches}>\n <Link\n to={appRoutes.lists.companySavedSearches}\n onClick={() => {\n window.pendo.track(NavigationPane.savedCompanySearches);\n }}\n >\n Saved Company Searches\n </Link>\n </Menu.Item>\n {/* <Menu.Item key={appRoutes.notes}>\n <Link to={appRoutes.notes}>My Global Notes</Link>\n </Menu.Item> */}\n <Menu.Item key={appRoutes.scheduledTouches}>\n <Link\n to={appRoutes.scheduledTouches}\n onClick={() => {\n window.pendo.track(NavigationPane.touchManagement);\n }}\n >\n Touch Management\n </Link>\n </Menu.Item>\n </SubMenu>\n <SubMenu\n key={NAVIGATION_SUBMENUES.findNewCompanies}\n icon={<AntIcon component={() => <Icon iconName=\"business\" />} />}\n title=\"Find New Companies\"\n >\n <Menu.Item key={appRoutes.lists.suggestedSearches}>\n <Link\n to={appRoutes.lists.suggestedSearches}\n onClick={() => {\n window.pendo.track(NavigationPane.suggestedSearches);\n }}\n >\n Suggested Searches\n </Link>\n </Menu.Item>\n <Menu.Item key={appRoutes.lists.sourceScrubLists}>\n <Link\n to={appRoutes.lists.sourceScrubLists}\n onClick={() => {\n window.pendo.track(NavigationPane.sourceScrubLists);\n }}\n >\n Source Scrub Lists\n </Link>\n </Menu.Item>\n <SuggestedSearch\n title=\"Recently Funded\"\n label=\"Browse by Recently Funded\"\n key=\"recently-funded\"\n onClick={() => {\n window.pendo.track(NavigationPane.browseByRecentlyFunded);\n }}\n />\n </SubMenu>\n <SubMenu key={NAVIGATION_SUBMENUES.contacts} icon={<ContactsOutlined />} title=\"Contacts\">\n <Menu.Item key={appRoutes.contacts}>\n <Link\n onClick={() => window.pendo.track(NavigationPane.contacts)}\n to={appRoutes.contacts}\n >\n All Contacts\n </Link>\n </Menu.Item>\n <Menu.Item key={appRoutes.lists.contactSearches}>\n <Link\n onClick={() => window.pendo.track(NavigationPane.savedContactSearches)}\n to={appRoutes.lists.contactSearches}\n >\n Saved Contact Searches\n </Link>\n </Menu.Item>\n </SubMenu>\n <SubMenu\n key={NAVIGATION_SUBMENUES.workforceManagement}\n icon={<BarChartOutlined />}\n title=\"Reports\"\n >\n <Menu.Item key={appRoutes.reports.allReports}>\n <Link\n onClick={() => window.pendo.track(NavigationPane.reports)}\n to={appRoutes.reports.allReports}\n >\n All Reports\n </Link>\n </Menu.Item>\n </SubMenu>\n <PrivateSubmenu\n accessFor={['admin_portal_link']}\n key={NAVIGATION_SUBMENUES.admin}\n icon={<SettingOutlined />}\n title=\"Admin Portal\"\n >\n <PrivateMenuItem key={appRoutes.admin.users} accessFor=\"admin_portal_link\">\n <Link to={appRoutes.admin.users} onClick={() => window.pendo.track(ALL_USERS)}>\n All Users\n </Link>\n </PrivateMenuItem>\n </PrivateSubmenu>\n </Menu>\n <Affix offsetBottom={48} style={{ marginTop: 'auto' }}>\n <Menu\n theme=\"dark\"\n selectedKeys={selectedKeys}\n openKeys={openedKeys}\n onSelect={handleBottomSubmenuSelect}\n onOpenChange={handleSubmenuOpenChange}\n mode=\"inline\"\n >\n <ProfileSubMenu key={NAVIGATION_SUBMENUES.profile}>\n <PrivateMenuItem key={appRoutes.user.profile} accessFor=\"profile\">\n <Link\n to={appRoutes.user.profile}\n onClick={() => window.pendo.track(NavigationPane.myProfilePage)}\n >\n My Profile Page\n </Link>\n </PrivateMenuItem>\n <LogOut key=\"12\" onClick={() => window.pendo.track(NavigationPane.logout)} />\n </ProfileSubMenu>\n </Menu>\n </Affix>\n <AddResearchRationale />\n </Sider>\n );\n};\n\nexport default React.memo(MainNavigation);\n","import { Dictionary, each } from 'lodash';\nimport { NavigationPathItem } from '@optx/models/menu/main-navigation';\n\n/**\n * Get default submenu opened keys for menu.\n * @param items\n */\nexport const getDefaultOpenedKeys = (\n items: Array<NavigationPathItem>,\n exceptions: Dictionary<boolean> = {}\n) => {\n const defaultOpenedKeys: Array<string> = [];\n\n each(items, item => {\n if (item.type === 'submenu' && !exceptions[item.path]) {\n defaultOpenedKeys.push(item.path);\n }\n });\n\n return defaultOpenedKeys;\n};\n\n/**\n * Get submenu opened keys for menu.\n * @param items\n */\nexport const getOpenedKeys = (items: Array<NavigationPathItem>, path: string) => {\n const defaultOpenedKeys: Array<string> = [];\n\n each(items, item => {\n if (item.type === 'submenu') {\n each(item.items!, submenuItem => {\n if (submenuItem.path === path) {\n defaultOpenedKeys.push(item.path);\n }\n });\n }\n });\n\n return defaultOpenedKeys;\n};\n","import ReactGA from 'react-ga4';\nimport { useSelector } from 'react-redux';\n\n// selector\nimport { selectors as userSelectors } from '@redux/user/information';\n\n// validate if analytics has started.\nlet hasGAInitialized = false;\n\n// reusable hooks for analytics\nconst useAnalytics = () => {\n const getAnalyticsId = useSelector(userSelectors.getAnalyticsId);\n const userId = useSelector(userSelectors.getUserId);\n\n if (getAnalyticsId && userId && !hasGAInitialized) {\n ReactGA.initialize(getAnalyticsId, { gaOptions: { userId: userId } });\n\n hasGAInitialized = true;\n }\n\n return hasGAInitialized;\n};\n\nexport default useAnalytics;\n","import React, { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport ReactGA from 'react-ga4';\n\nimport { useAnalytics } from '../../../common/hooks/analytics';\n\nconst Analytics: React.FC = () => {\n const location = useLocation();\n const hasGAInitialized = useAnalytics();\n\n useEffect(() => {\n if (hasGAInitialized) {\n ReactGA.set({ page: location.pathname });\n ReactGA.send({ hitType: 'pageview', page: location.pathname });\n }\n }, [hasGAInitialized, location]);\n\n return null;\n};\n\nexport default React.memo(Analytics);\n","import React, { useEffect, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n// utils\nimport { getEnv } from '@optx/utils/env';\n// redux\nimport { selectors as userInformationSelectors } from '@redux/user/information';\n\nconst Pendo = () => {\n const email = useSelector(userInformationSelectors.getEmail);\n const fullName = useSelector(userInformationSelectors.getFullName);\n\n const currentEnv = useMemo(() => getEnv(), []);\n\n useEffect(() => {\n if (window.pendo && email && fullName) {\n window.pendo.initialize({\n visitor: {\n id: email.split('@')[0],\n email: email,\n full_name: fullName,\n },\n account: {\n id: currentEnv,\n name: currentEnv,\n },\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [email, fullName]);\n\n return null;\n};\n\nexport default React.memo(Pendo);\n","type envResponseType = 'dev-bb' | 'dev-cl' | 'local' | 'uat' | 'prod' | null;\n\n/**\n * Retrieves the environment based on the REACT_APP_API_ROOT environment variable.\n * @returns {envResponseType} The environment name ('dev-bb', 'dev-cl', 'uat', 'prod') or\n * null if REACT_APP_API_ROOT is not set.\n */\n\nexport function getEnv(): envResponseType {\n const rootDomain = window.location.origin;\n\n if (rootDomain) {\n if (rootDomain.search('dev-bb') !== -1) {\n return 'dev-bb';\n } else if (rootDomain.search('dev-cl') !== -1) {\n return 'dev-cl';\n } else if (rootDomain.search('uat') !== -1) {\n return 'uat';\n } else if (rootDomain.search('localhost') !== -1) {\n return 'local';\n } else {\n return 'prod';\n }\n }\n\n return null;\n}\n","import React from 'react';\n\ninterface ILayoutContext {\n menuCollapsed: boolean;\n}\n\nconst initialValue: ILayoutContext = {\n menuCollapsed: false,\n};\n\nexport const LayoutContext = React.createContext<ILayoutContext>(initialValue);\n","import React, { useState, useEffect, useCallback } from 'react';\nimport classnames from 'classnames';\nimport { Layout } from 'antd';\nimport { CollapseType } from 'antd/lib/layout/Sider';\nimport { useSelector, useDispatch } from 'react-redux';\n// constants\nimport { MENU_COLLAPSED } from '@optx/storage/localStorage/menuStorage';\nimport { isChrome } from '@optx/constants/os/browser';\nimport appRoutes from '@constants/routes';\n// utils\nimport { getCookie } from '@optx/redux/login/utils';\n// redux\nimport {\n actions as savedSearchActions,\n selectors as savedSearchSelectors,\n} from '@redux/company/saved-searches';\nimport {\n selectors as fullScreenSelectors,\n actions as fullScreenActions,\n} from '@redux/ui/settings/fullscreen';\nimport { actions as filterActions, selectors as filterSelectors } from '@redux/company/filters';\nimport { selectors as routerSelectors } from '@redux/router';\n// hooks\nimport {\n useFetchUserInformation,\n useFetchFavoriteLists,\n useInitFetchFavoriteLists,\n useInitFetchFavoriteListsPopup,\n} from '@optx/common/hooks/init';\nimport { useShouldFetch } from '@optx/common/hooks/fetch';\nimport { useInject as useInjectShareList } from '@features/list-share';\nimport {\n useInjectUI,\n useInjectNotes,\n useInjectUserInformation,\n useInjectFavoriteLists,\n useInjectPrimaryContacts,\n useInjectCompanyFilterSources,\n useInjectCompanyListSourcingOutReach,\n} from '@optx/common/hooks/inject';\nimport { useInject as useInjectAlerts } from '@features/alerts';\nimport { useInjectPage as useInjectCompanyList } from '@components/pages/CompanyList/useInjectPage';\nimport { useInject as useInjectBulkActions } from '@features/bulk-actions';\nimport { useIsTabletOrSmaller } from '@optx/common/hooks/responsive';\nimport { useInject as useInjectAnalystLeaderboard } from '@components/pages/AnalystsLeaderboard';\nimport { useInject as useInjectListsAndSeaches } from '@features/lists-and-searches';\nimport { useInjectProfilePage } from '@components/pages/CompanyProfile/hooks';\nimport { useInjectGrid } from '@features/grid';\nimport useUserRole from '@hooks/useUserRole';\n// storage\nimport {\n AnalystStorage,\n AdminStorage,\n PartnerStorage,\n JWTStorage,\n MenuStorage,\n} from '@optx/storage/localStorage';\nimport { checkPluginVersion } from '@optx/storage/localStorage/pluginStorage';\n// components\nimport MainNavigation from './MainNavigation';\nimport Analytics from '../../components/common/analytics';\nimport Pendo from '@optx/components/common/pendo';\nimport { LayoutContext } from './LayoutContext';\nimport AddResearchRationale from '@optx/features/add-research-rationale';\n\nconst useInject = () => {\n useInjectGrid();\n useInjectProfilePage();\n useInjectCompanyList();\n useInjectShareList();\n useInjectPrimaryContacts();\n useInjectAnalystLeaderboard();\n useInjectUI();\n useInjectBulkActions();\n useInjectNotes();\n useInjectUserInformation();\n useInjectCompanyFilterSources();\n useInjectCompanyListSourcingOutReach();\n useInjectFavoriteLists();\n useInjectListsAndSeaches();\n useInjectAlerts();\n};\n\ninterface MainLayoutProps {\n extensionLayout?: boolean;\n}\n\nconst MainLayout: React.FC<MainLayoutProps> = ({ children, extensionLayout }) => {\n const dispatch = useDispatch();\n\n useInject();\n\n useFetchUserInformation();\n useInitFetchFavoriteLists();\n useFetchFavoriteLists();\n useInitFetchFavoriteListsPopup();\n\n const shouldFetch = useSelector(filterSelectors.shouldFetchCompanyFilters);\n const shouldFetchSearches = useSelector(savedSearchSelectors.shouldInitialFetch);\n const { action } = useSelector(routerSelectors.getRouter);\n const { advancedSearchPathname } = useUserRole();\n\n // check usage in getJWT function\n const isPluginVersion2_3 = checkPluginVersion(2.3);\n\n const fetchFilters = useCallback(() => dispatch(filterActions.fetchCompanyFilters()), [dispatch]);\n\n const fetchSavedSearches = useCallback(\n () => dispatch(savedSearchActions.initializeSavedSearchesAndViews()),\n [dispatch]\n );\n\n useShouldFetch(\n shouldFetch && !extensionLayout && window.location.pathname !== advancedSearchPathname,\n fetchFilters\n );\n\n useShouldFetch(\n shouldFetchSearches && !extensionLayout && window.location.pathname !== advancedSearchPathname,\n fetchSavedSearches\n );\n\n const isTabletOrSmaller = useIsTabletOrSmaller();\n const isFullScreen = useSelector(fullScreenSelectors.isFullscreen);\n\n const menuCollapsed = localStorage.getItem(MENU_COLLAPSED);\n const [collapsed, setCollapsed] = useState(\n isTabletOrSmaller ? true : menuCollapsed !== null ? JSON.parse(menuCollapsed) : false\n );\n\n const handleCollapse = (collapsed: boolean, type: CollapseType) => {\n setCollapsed(collapsed);\n localStorage.setItem(MENU_COLLAPSED, collapsed.toString());\n };\n\n const layoutClassname = classnames('main-layout', {\n 'has-sider-collapsed': collapsed,\n 'is-fullscreen': isFullScreen,\n });\n\n const handleStorageChange = (event: StorageEvent) => {\n if (event.key === MENU_COLLAPSED && event.newValue !== null) {\n setCollapsed(JSON.parse(event.newValue));\n }\n };\n\n useEffect(() => {\n window.addEventListener('storage', handleStorageChange);\n\n return () => {\n window.removeEventListener('storage', handleStorageChange);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (action === 'POP' || action === 'REPLACE') {\n isFullScreen && dispatch(fullScreenActions.toggleFullScreen());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [action, dispatch]);\n\n useEffect(() => {\n if (!isPluginVersion2_3 && window.name === 'Cognito Login - Extension') {\n const token = JWTStorage.getJWT();\n const cookieToken = getCookie('optx_token');\n\n if (token && !cookieToken) {\n document.cookie = `optx_token=${token}; SameSite=None; Secure;`;\n }\n\n window.close();\n }\n }, [isPluginVersion2_3]);\n\n useEffect(() => {\n // On small devices navigation is only collapsed.\n if (isTabletOrSmaller) {\n setCollapsed(true);\n } else if (!isTabletOrSmaller) {\n setCollapsed(menuCollapsed !== null ? JSON.parse(menuCollapsed) : false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isTabletOrSmaller]);\n\n const handleCookieStorage = (event: { changed: any; deleted: any }) => {\n for (const change of event.changed) {\n if (change.name === 'optx_token') {\n JWTStorage.setJWT(change.value);\n }\n }\n\n for (const deletion of event.deleted) {\n if (deletion.name === 'optx_token') {\n JWTStorage.removeJWT();\n MenuStorage.removeMenuCollapsed();\n AnalystStorage.removeIsAnalyst();\n AdminStorage.removeIsAdmin();\n PartnerStorage.removeIsPartner();\n window.location.replace(appRoutes.login);\n }\n }\n };\n\n useEffect(() => {\n if (!isPluginVersion2_3 && isChrome) {\n //@ts-ignore\n window?.cookieStore?.addEventListener('change', handleCookieStorage, true);\n\n return () => {\n //@ts-ignore\n window?.cookieStore?.removeEventListener('change', handleCookieStorage, true);\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Layout className={layoutClassname}>\n <LayoutContext.Provider value={{ menuCollapsed: collapsed }}>\n <Analytics />\n <Pendo />\n\n {!isFullScreen && !extensionLayout ? (\n <MainNavigation\n defaultCollapsed={collapsed}\n collapsed={collapsed}\n onCollapse={handleCollapse}\n collapsible={!isTabletOrSmaller}\n />\n ) : !extensionLayout ? (\n <AddResearchRationale />\n ) : null}\n <Layout className={collapsed ? 'right-section menu-collapsed' : 'right-section'}>\n {children}\n </Layout>\n </LayoutContext.Provider>\n </Layout>\n );\n};\n\nexport default MainLayout;\n","import {\n useInjectContactsSavedSearches,\n useInjectContactsFilterSources,\n useInjectCompanySavedSearches,\n useInjectSuggestedSearches,\n useInjectShareList,\n useInjectUserList,\n useInjectSourceScrubLists,\n useInjectFavoriteLists,\n useInjectMyPipeline,\n useInjectContactsSearch,\n useInjectCombineSearch,\n useInjectOpportunityPresentation,\n} from '@optx/common/hooks/inject';\n\nexport const useInjectPage = () => {\n // company\n useInjectMyPipeline();\n useInjectSuggestedSearches();\n useInjectCompanySavedSearches();\n useInjectUserList();\n useInjectCombineSearch();\n useInjectOpportunityPresentation();\n\n // contacts\n useInjectContactsFilterSources();\n useInjectContactsSearch();\n useInjectContactsSavedSearches();\n\n useInjectFavoriteLists();\n useInjectShareList();\n useInjectSourceScrubLists();\n};\n","import { Layout } from 'antd';\nimport styled from 'styled-components';\nimport { up } from 'styled-breakpoints';\n\nconst { Header } = Layout;\n\nconst MainHeader = styled(Header)`\n z-index: 10;\n transition: all 0.2s ease;\n /* Gray / gray-1 */\n background: #ffffff;\n /* Gray / gray-5 */\n border: 1px solid #d9d9d9;\n padding: 0 16px;\n\n & > * {\n line-height: 1;\n }\n\n ${up('md')} {\n padding: 0 40px;\n }\n`;\n\nexport default MainHeader;\n","import React from 'react';\nimport { Layout } from 'antd';\nimport { BasicProps } from 'antd/lib/layout/layout';\nimport styled, { css } from 'styled-components';\nimport { up } from 'styled-breakpoints';\n\nconst { Content } = Layout;\n\ninterface MainContentProps extends BasicProps {\n hasFixedHeader?: boolean;\n}\n\nconst MainContent = styled(({ hasFixedHeader, ...restProps }: MainContentProps) => (\n <Content {...restProps} />\n))`\n margin-left: 16px;\n margin-right: 16px;\n\n ${up('lg')} {\n margin-left: 40px;\n margin-right: 40px;\n }\n\n ${props =>\n props.hasFixedHeader &&\n css`\n margin-top: 64px;\n `}\n`;\n\nexport default MainContent;\n","import React, { useContext } from 'react';\nimport { BasicProps } from 'antd/lib/layout/layout';\nimport { MainHeader as MainHeaderView } from '@shared/view/molecules/layout';\nimport styled, { css } from 'styled-components';\nimport { LayoutContext } from './LayoutContext';\n\ninterface MainHeaderProps extends BasicProps {\n fixed?: boolean;\n}\n\ninterface StyledMainHeaderProps extends MainHeaderProps {\n hasSider: boolean;\n hasSiderCollapsed: boolean;\n}\n\nconst fixedStyles = css`\n position: fixed;\n width: 100%;\n`;\n\nconst StyledMainHeader = styled(\n ({ fixed, hasSider, hasSiderCollapsed, ...props }: StyledMainHeaderProps) => (\n <MainHeaderView {...props} />\n )\n)`\n ${props => props.fixed && fixedStyles}\n\n ${props =>\n props.fixed &&\n props.hasSider &&\n css`\n width: calc(100% - 256px);\n `}\n\n ${props =>\n props.fixed &&\n props.hasSiderCollapsed &&\n css`\n width: calc(100% - 80px);\n `}\n`;\n\nconst MainHeader: React.FC<MainHeaderProps> = props => {\n const layout = useContext(LayoutContext);\n\n return <StyledMainHeader hasSider hasSiderCollapsed={layout.menuCollapsed} {...props} />;\n};\n\nexport default MainHeader;\n","import React, { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Menu } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid//sort/';\n\nconst gridKey = 'advancedSearch';\n\nconst ToggleSortType = ({ onClick, ...restProps }: MenuItemProps) => {\n const dispatch = useDispatch();\n const isMultiSort = useSelector(sortSelectors.isMultiSort(gridKey));\n const sorting = useSelector(sortSelectors.getSorting(gridKey));\n const multiSort = useCallback(() => {\n // Hide cancel search button when clicking on sort button\n if (!isMultiSort) {\n const tableElement = document.querySelector('.ant-table-body');\n tableElement?.scrollTo(0, 0);\n }\n\n dispatch(sortActions.changeMultiSort(!isMultiSort, gridKey, sorting));\n }, [dispatch, isMultiSort, sorting]);\n\n const resetCancelSearch = () => {\n // reset cancelSearch onBlur\n dispatch(searchActions.hideCancelSearch({ gridKey, data: false }));\n };\n\n return (\n <Menu.Item onClick={multiSort} onBlur={resetCancelSearch} {...restProps}>\n {isMultiSort ? 'Enable Single Sort' : 'Enable Multi Sort'}\n </Menu.Item>\n );\n};\n\nexport default ToggleSortType;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\n// redux\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport ToggleSortType from './ToggleSortType';\n\nconst ToggleSearchViewSort = ({ ...restProps }: MenuItemProps) => {\n const searchView = useSelector(viewTypeSelectors.searchView('advancedSearch'));\n\n return <>{searchView === 'table' && <ToggleSortType {...restProps} />}</>;\n};\n\nexport default ToggleSearchViewSort;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Menu } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\n// redux\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid//sort/';\n\nconst gridKey = 'advancedSearch';\n\nconst ClearSortButton = ({ onClick, ...restProps }: MenuItemProps) => {\n const dispatch = useDispatch();\n const sorting = useSelector(sortSelectors.getSorting(gridKey));\n\n const clearSort = () => {\n dispatch(sortActions.resetSort(gridKey));\n };\n\n if (!sorting.length) {\n return null;\n }\n\n return (\n <Menu.Item onClick={clearSort} {...restProps}>\n Clear All Sorting\n </Menu.Item>\n );\n};\n\nexport default ClearSortButton;\n","import React from 'react';\nimport { Menu } from 'antd';\n// components\nimport ToggleSearchViewSort from '@components/pages/Home/SearchGridControls/ToggleSearchViewSort';\nimport ClearSortButton from '@components/pages/Home/SearchGridControls/ClearSortButton';\nimport { ResetColumnWidthsMenu } from '@features/columns/update-columns/components';\nimport DisplayColumnToggle from './DisplayColumnToggle';\n\nconst SearchMenu = () => {\n return (\n <Menu>\n <DisplayColumnToggle key={1} />\n <ResetColumnWidthsMenu key={2} />\n <ClearSortButton key={3} />\n <ToggleSearchViewSort key={4} />\n </Menu>\n );\n};\n\nexport default SearchMenu;\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Menu } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\n// redux\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport { actions as searchActions } from '@features/grid/search';\n\nconst gridKey = 'lists';\n\nconst ToggleSortType = ({ onClick, ...restProps }: MenuItemProps) => {\n const dispatch = useDispatch();\n const isMultiSort = useSelector(sortSelectors.isMultiSort(gridKey));\n const sorting = useSelector(sortSelectors.getSorting(gridKey));\n\n const multiSort = useCallback(() => {\n if (!isMultiSort) {\n const tableElement = document.querySelector('.ant-table-body');\n tableElement?.scrollTo(0, 0);\n }\n\n dispatch(sortActions.changeMultiSort(!isMultiSort, gridKey, sorting));\n }, [dispatch, isMultiSort, sorting]);\n\n const resetCancelSearch = () => {\n // reset cancelSearch onBlur\n dispatch(\n searchActions.hideCancelSearch({\n gridKey: 'lists',\n data: false,\n })\n );\n };\n\n return (\n <Menu.Item onClick={multiSort} onBlur={resetCancelSearch} {...restProps}>\n {isMultiSort ? 'Enable Single Sort' : 'Enable Multi Sort'}\n </Menu.Item>\n );\n};\n\nexport default ToggleSortType;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport ToggleSortType from './ToggleSortType';\n\nconst ToggleSearchViewSort = ({ ...restProps }: MenuItemProps) => {\n const searchView = useSelector(viewTypeSelectors.searchView('lists'));\n\n return <>{searchView === 'table' && <ToggleSortType {...restProps} />}</>;\n};\n\nexport default ToggleSearchViewSort;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { Menu } from 'antd';\n// redux\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\n\nconst gridKey = 'lists';\n\nconst ClearSortButton = ({ onClick, ...restProps }: MenuItemProps) => {\n const dispatch = useDispatch();\n const sorting = useSelector(sortSelectors.getSorting(gridKey));\n const clearSort = () => dispatch(sortActions.resetSort(gridKey));\n\n if (!sorting.length) {\n return null;\n }\n\n return (\n <Menu.Item onClick={clearSort} {...restProps}>\n Clear All Sorting\n </Menu.Item>\n );\n};\n\nexport default ClearSortButton;\n","import React from 'react';\nimport { Menu } from 'antd';\n// components\n// eslint-disable-next-line max-len\nimport ToggleSearchViewSort from '@components/pages/UserLists/components/SearchGrid/SearchGridControls/ToggleSearchViewSort';\nimport { ResetColumnWidthsMenu } from '@features/columns/update-columns/components';\nimport ClearSortButton from '@components/pages/UserLists/components/SearchGrid/SearchGridControls/ClearSortButton';\nimport DisplayColumnToggle from './DisplayColumnToggle';\n\nconst ListsMenu = () => {\n return (\n <Menu>\n <DisplayColumnToggle key={1} />\n <ResetColumnWidthsMenu key={2} />\n <ClearSortButton key={3} />\n <ToggleSearchViewSort key={4} />\n </Menu>\n );\n};\n\nexport default ListsMenu;\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport { Menu } from 'antd';\n// constants\nimport { MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\n// redux\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\n\nconst gridKey = 'myCompanies';\n\nconst ToggleSortType = ({ onClick, ...restProps }: MenuItemProps) => {\n const dispatch = useDispatch();\n const isMultiSort = useSelector(sortSelectors.isMultiSort(gridKey));\n const sorting = useSelector(sortSelectors.getSorting(gridKey));\n const searchView = useSelector(viewTypeSelectors.searchView(gridKey));\n const defaultOptxScore = useSelector(userInformationSelectors.getDefaultScore);\n\n const multiSort = useCallback(() => {\n if (!isMultiSort) {\n const tableElement = document.querySelector('.ant-table-body');\n tableElement?.scrollTo(0, 0);\n\n sendPendoData(`${MY_COMPANIES_PENDO}_ColumnsandSourceManagement_EnableMultiSort`);\n }\n\n return dispatch(\n sortActions.changeMultiSort(!isMultiSort, gridKey, sorting, {\n optxScoreSettings: defaultOptxScore,\n })\n );\n }, [dispatch, isMultiSort, sorting, defaultOptxScore]);\n\n if (searchView === 'long-card') {\n return null;\n }\n\n return (\n <Menu.Item onClick={multiSort} {...restProps}>\n {isMultiSort ? 'Enable Single Sort' : 'Enable Multi Sort'}\n </Menu.Item>\n );\n};\n\nexport default ToggleSortType;\n","import React from 'react';\nimport { Menu, MenuProps } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport { useDispatch, useSelector } from 'react-redux';\n// constants\nimport { MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\n// redux\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\n\nexport const ClearSortingMenuItem = ({ onClick, ...restProps }: MenuItemProps) => {\n const dispatch = useDispatch();\n const sorting = useSelector(sortSelectors.getSorting('myCompanies'));\n const clearSort = () => dispatch(sortActions.resetSort('myCompanies'));\n\n if (!sorting.length) {\n return null;\n }\n\n const handleClick: MenuProps['onClick'] = info => {\n onClick && onClick(info);\n clearSort();\n\n sendPendoData(`${MY_COMPANIES_PENDO}_ColumnsandSourceManagement_ClearAllSorting`);\n };\n\n return (\n <Menu.Item onClick={handleClick} {...restProps}>\n Clear All Sorting\n </Menu.Item>\n );\n};\n","import React from 'react';\nimport { Menu } from 'antd';\n// components\nimport ToggleSortType from '@optx/components/pages/MyCompanies/SecondaryHeader/ToggleSortType';\nimport { ResetColumnWidthsMenu } from '@features/columns/update-columns/components';\nimport DisplayColumnToggle from './DisplayColumnToggle';\nimport { ClearSortingMenuItem } from './ClearSortingMenuItem';\n\nconst MyCompaniesMenu = () => {\n return (\n <Menu>\n <DisplayColumnToggle key={1} />\n <ResetColumnWidthsMenu key={2} />\n <ClearSortingMenuItem key={3} />\n <ToggleSortType key={4} />\n </Menu>\n );\n};\n\nexport default MyCompaniesMenu;\n","import React from 'react';\nimport { Menu } from 'antd';\n// components\nimport { ResetColumnWidthsMenu } from '@features/columns/update-columns/components';\n\nconst SearchMenu = () => {\n return (\n <Menu>\n <ResetColumnWidthsMenu key={1} />\n </Menu>\n );\n};\n\nexport default SearchMenu;\n","import { Menu } from 'antd';\n// components\nimport { ResetColumnWidthsMenu } from '@features/columns/update-columns/components';\n\nconst SearchMenu = () => {\n return (\n <Menu>\n <ResetColumnWidthsMenu key={2} />\n </Menu>\n );\n};\n\nexport default SearchMenu;\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Menu } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\n// constants\nimport { CONTACTS } from '@optx/constants/pendoActions';\n// redux\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\n\nconst gridKey = 'contacts';\n\nconst ToggleSortType = ({ onClick, ...restProps }: MenuItemProps) => {\n const dispatch = useDispatch();\n const sorting = useSelector(sortSelectors.getSorting(gridKey));\n\n const isMultiSort = useSelector(sortSelectors.isMultiSort(gridKey));\n const multiSort = useCallback(() => {\n dispatch(sortActions.changeMultiSort(!isMultiSort, gridKey, sorting));\n window.pendo.track(`${CONTACTS}_EnableMultisort`);\n }, [dispatch, isMultiSort, sorting]);\n\n return (\n <Menu.Item onClick={multiSort} {...restProps}>\n {isMultiSort ? 'Enable Single Sort' : 'Enable Multi Sort'}\n </Menu.Item>\n );\n};\n\nexport default ToggleSortType;\n","import { Menu } from 'antd';\n// components\nimport { ResetColumnWidthsMenu } from '@features/columns/update-columns/components';\nimport ToggleSortType from '@optx/components/pages/Contacts/SecondaryHeader/ToggleSortType';\n\nconst SearchMenu = () => {\n return (\n <Menu>\n <ResetColumnWidthsMenu key={1} />\n <ToggleSortType key={2} />\n </Menu>\n );\n};\n\nexport default SearchMenu;\n","import React, { useState, useEffect, ReactElement } from 'react';\nimport { Dropdown, Button, Tooltip } from 'antd';\nimport { SettingOutlined } from '@ant-design/icons';\nimport { useLocation } from 'react-router-dom';\n// constants\nimport appRoutes from '@constants/routes';\nimport { COLUMNS_SOURCE_MANEGEMENT_TITLE } from '@optx/constants/titles';\nimport { MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// utils\nimport { sendPendoData } from '@optx/utils/utils';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\n// components\nimport {\n GridMenu,\n ListsMenu,\n MyCompaniesMenu,\n PipelineMenu,\n ResetWidthsOnlyMenu,\n ContactsMenu,\n} from './GridMenu';\n\nconst GridDropdown = () => {\n const [overlayMenu, setOverlayMenu] = useState<ReactElement | null>(null);\n const { pathname } = useLocation();\n const { advancedSearchPathname } = useUserRole();\n\n useEffect(() => {\n if (pathname === appRoutes.myCompanies) {\n setOverlayMenu(MyCompaniesMenu);\n } else if (pathname.startsWith('/user-lists') || pathname.startsWith('/ss-lists')) {\n setOverlayMenu(ListsMenu);\n } else if (pathname.startsWith('/profile')) {\n setOverlayMenu(ResetWidthsOnlyMenu);\n } else if (pathname === advancedSearchPathname) {\n setOverlayMenu(GridMenu);\n } else if (pathname.startsWith('/contacts')) {\n setOverlayMenu(ContactsMenu);\n } else if (pathname === appRoutes.reports.pipelineReport) {\n setOverlayMenu(PipelineMenu);\n }\n }, [pathname, advancedSearchPathname]);\n\n if (!overlayMenu) return null;\n\n const clickAction = () => {\n if (pathname === appRoutes.myCompanies) {\n sendPendoData(`${MY_COMPANIES_PENDO}_ColumnsandSourceManagement`);\n }\n };\n\n return (\n <Tooltip title={COLUMNS_SOURCE_MANEGEMENT_TITLE} placement=\"topRight\">\n <Dropdown overlay={overlayMenu} trigger={['click']} placement=\"bottomRight\">\n <Button\n type=\"text\"\n icon={<SettingOutlined style={{ fontSize: 19 }} />}\n onClick={clickAction}\n />\n </Dropdown>\n </Tooltip>\n );\n};\n\nexport default React.memo(GridDropdown);\n","export const MAX_FILE_SIZE_MB = 15;\n\nexport type SUPPORTED_FILE_TYPES =\n | '.doc'\n | '.docs'\n | '.docx'\n | '.pdf'\n | '.pps'\n | '.ppsx'\n | '.ppt'\n | '.pptx'\n | '.txt'\n | '.xls'\n | '.xlsx'\n | '.zip';\n\nexport const SUPPORTED_FILE_TYPES_LIST: SUPPORTED_FILE_TYPES[] = [\n '.doc',\n '.docs',\n '.docx',\n '.pdf',\n '.pps',\n '.ppsx',\n '.ppt',\n '.pptx',\n '.txt',\n '.xls',\n '.xlsx',\n '.zip',\n];\n\nexport const getFileExtension = (fileName: string) => {\n return fileName.substring(fileName.lastIndexOf('.'));\n};\n","import { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n\n/**\n * Converts the given number of bytes to megabytes (MB).\n * If the input is not provided, returns the default empty value.\n *\n * @param bytes - The number of bytes to be converted to megabytes.\n * @returns A string representing the value in megabytes, with a precision of one decimal place and suffixed with 'MB'.\n * If the value is less than 1MB, returns '<1MB'.\n */\nexport const bytesToMB = (bytes?: number) => {\n if (!bytes) return DEFAULT_EMPTY_VALUE;\n\n const valueInMB = bytes / 1024 / 1024;\n\n if (valueInMB < 1) return '<1MB';\n\n return `${valueInMB.toFixed(1)}MB`;\n};\n","import { Progress } from 'antd';\nimport styled from 'styled-components';\n\nconst DocumentUploadItem = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: 72px;\n\n padding: 10px;\n margin-top: 30px;\n\n &.upload--progress {\n border: 1px solid #bae7ff;\n background: rgba(230, 247, 255, 0.5);\n }\n\n &.upload--success {\n border: 1px solid #d9f7be;\n background: #f6ffed;\n }\n`;\n\nconst FileIconWrapper = styled.div`\n display: flex;\n gap: 10px;\n padding: 12px;\n font-size: 24px;\n color: #1890ff;\n background: #fff;\n`;\n\nconst FileInfo = styled.div`\n display: flex;\n font-size: 12px;\n width: 40%;\n max-width: 180px;\n\n > span {\n align-self: center;\n margin-left: 10px;\n line-height: 1.15;\n }\n`;\n\nconst FileName = styled.span`\n display: inline-block;\n width: 100%;\n max-width: 130px;\n\n font-weight: bold;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n`;\n\nconst FileSize = styled.span`\n display: inline-block;\n width: 100%;\n color: #8c8c8c;\n`;\n\nconst UploadProgress = styled(Progress)`\n width: 45%;\n\n & > .ant-progress-text {\n color: #8c8c8c;\n }\n`;\n\nexport const Styled = {\n DocumentUploadItem,\n FileIconWrapper,\n FileInfo,\n FileName,\n FileSize,\n UploadProgress,\n};\n","import { useMemo } from 'react';\nimport {\n CloseOutlined,\n FileExcelOutlined,\n FilePdfOutlined,\n FilePptOutlined,\n FileTextOutlined,\n FileWordOutlined,\n FileZipOutlined,\n} from '@ant-design/icons';\n// models\nimport { UploadFile } from 'antd/lib/upload/interface';\n// utils\nimport { bytesToMB } from '../../utils';\n// constants\nimport { SUPPORTED_FILE_TYPES, getFileExtension } from '../../constants/fileUploadConstants';\n// Styles\nimport { Styled } from './DocumentUploadItem.styled';\n\nconst {\n DocumentUploadItem: StyledDocumentUploadItem,\n FileIconWrapper,\n FileInfo,\n FileName,\n FileSize,\n UploadProgress,\n} = Styled;\n\nconst FILE_ICONS: Record<SUPPORTED_FILE_TYPES, React.ReactNode> = {\n '.doc': <FileWordOutlined />,\n '.docs': <FileWordOutlined />,\n '.docx': <FileWordOutlined />,\n '.pdf': <FilePdfOutlined />,\n '.pps': <FilePptOutlined />,\n '.ppsx': <FilePptOutlined />,\n '.ppt': <FilePptOutlined />,\n '.pptx': <FilePptOutlined />,\n '.txt': <FileTextOutlined />,\n '.xls': <FileExcelOutlined />,\n '.xlsx': <FileExcelOutlined />,\n '.zip': <FileZipOutlined />,\n};\n\ntype DocumentUploadItemProps = {\n file: UploadFile;\n actions: { remove: () => void };\n};\n\nconst DocumentUploadItem: React.FC<DocumentUploadItemProps> = ({ file, actions }) => {\n const { name, status, percent, size } = file;\n\n const FileIcon: React.ReactNode = useMemo(\n () => FILE_ICONS[getFileExtension(name) as SUPPORTED_FILE_TYPES],\n [name]\n );\n\n const itemClassName =\n status === 'success' || status === 'done' ? 'upload--success' : 'upload--progress';\n\n return (\n <StyledDocumentUploadItem className={itemClassName}>\n <FileInfo>\n <FileIconWrapper>{FileIcon}</FileIconWrapper>\n <span>\n <FileName>{name}</FileName>\n <FileSize>{bytesToMB(size)}</FileSize>\n </span>\n </FileInfo>\n {status === 'uploading' && <UploadProgress strokeWidth={8} percent={percent} size=\"small\" />}\n <CloseOutlined onClick={actions.remove} />\n </StyledDocumentUploadItem>\n );\n};\n\nexport default DocumentUploadItem;\n","import styled from 'styled-components';\nimport { Upload } from 'antd';\nimport { UploadOutlined } from '@ant-design/icons';\n\nconst { Dragger } = Upload;\n\nconst UploadOutlinedIcon = styled(UploadOutlined)`\n font-size: 24px !important;\n color: #1890ff;\n background: #ffffff;\n border-radius: 50%;\n padding: 10px;\n`;\n\nconst UploadText = styled.span`\n color: #1890ff;\n`;\n\nconst DragAndDrop = styled(Dragger)`\n position: relative;\n --supported-file-types-position: -25px;\n\n margin-bottom: calc(var(--supported-file-types-position) * -1) !important;\n background: rgba(230, 247, 255, 0.5) !important;\n border-color: #bfbfbf !important;\n\n > .ant-upload {\n padding: 40px 0 !important;\n }\n\n &.ant-upload.ant-upload-drag.ant-upload-drag-hover,\n &:hover {\n border-color: #1890ff !important;\n }\n\n &.ant-upload.ant-upload-drag.ant-upload-disabled {\n background: #fafafa !important;\n border-color: #bfbfbf !important;\n\n ${UploadText}, ${UploadOutlinedIcon} {\n color: #bfbfbf;\n }\n }\n\n span.file-size {\n width: 100%;\n line-height: 1;\n text-align: left;\n font-size: 12px;\n color: #8c8c8c;\n cursor: default;\n pointer-events: none;\n position: absolute;\n left: 0;\n // The amount of space for the top line was added and 5px was added to subtract the space in between.\n bottom: calc(2 * var(--supported-file-types-position) + 5px);\n }\n`;\n\nconst DragAndDropContent = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n text-align: center;\n`;\n\nconst SupportedFileTypes = styled.span`\n position: absolute;\n left: 0;\n bottom: var(--supported-file-types-position);\n width: 100%;\n line-height: 1;\n text-align: left;\n font-size: 12px;\n color: #8c8c8c;\n cursor: default;\n pointer-events: none;\n`;\n\nexport const Styled = {\n DragAndDrop,\n DragAndDropContent,\n UploadOutlinedIcon,\n SupportedFileTypes,\n UploadText,\n};\n","import React from 'react';\nimport { UploadProps } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\n// constants\nimport {\n MAX_FILE_SIZE_MB,\n SUPPORTED_FILE_TYPES_LIST,\n getFileExtension,\n} from '../../constants/fileUploadConstants';\n// services\nimport NotificationService from '@optx/services/NotificationService';\n// redux\nimport { actions, selectors } from '@redux/ui/modals/add-document-upload-touch';\n// components\nimport DocumentUploadItem from '../DocumentUploadItem';\n\nimport { Styled } from './DocumentDragAndDrop.styled';\n\n// We do not show it in supported file extensions, but we allow it to upload. So I'm removing this.\nconst formattedFileTypes = SUPPORTED_FILE_TYPES_LIST.sort().join(', ').replace('.docs, ', '');\n\nconst DocumentDragAndDrop: React.FC = () => {\n const dispatch = useDispatch();\n const files = useSelector(selectors.fileList);\n\n const convertFile = (file: File) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n\n reader.readAsDataURL(file);\n });\n };\n\n const props: UploadProps = {\n name: 'file',\n accept: SUPPORTED_FILE_TYPES_LIST.join(),\n fileList: files,\n itemRender: (_originNode, file, _fileList, actions) => (\n <DocumentUploadItem file={file} actions={actions} />\n ),\n customRequest: options => {\n // just send success to show it as ok - upload is done on Save button click\n options.onSuccess?.(options.file);\n },\n beforeUpload: file => {\n const fileExtension = getFileExtension(file.name);\n const isFileTypeValid = (SUPPORTED_FILE_TYPES_LIST as string[]).includes(fileExtension);\n\n if (!isFileTypeValid) {\n const errorMessage = `\"${fileExtension}\" files are not supported. Supported file types: ${formattedFileTypes}`;\n NotificationService.error(errorMessage);\n\n return false;\n }\n\n const fileSizeMB = file.size / 1024 / 1024;\n\n if (fileSizeMB > MAX_FILE_SIZE_MB) {\n const errorMessage = `\"${file.name}\" exceeded max file size (${MAX_FILE_SIZE_MB}MB).`;\n NotificationService.error(errorMessage);\n\n return false;\n }\n\n return true;\n },\n onChange: ({ fileList, file }) => {\n let newFileList = [...fileList];\n\n if (!file.status || file.status === 'removed' || file.status === 'error') {\n newFileList = [...fileList.filter(f => f.uid !== file.uid)];\n }\n\n if (file.status === 'error') {\n NotificationService.error(`Failed to add file \"${file.name}\" to upload list!`);\n }\n\n // need to always update state at the end because of controlled fileList\n dispatch(actions.updateFileList(newFileList.slice()));\n\n if (file.status === 'done' && file.originFileObj) {\n convertFile(file.originFileObj).then(base64Encoding => {\n dispatch(\n actions.updateFileEncodingList({\n name: file.name,\n base64Encoding: base64Encoding as string,\n })\n );\n });\n } else if (file.status === 'removed') {\n dispatch(actions.removeFileEncoding(file.name));\n }\n },\n };\n\n return (\n <Styled.DragAndDrop {...props}>\n <Styled.DragAndDropContent>\n <Styled.UploadOutlinedIcon />\n <span>\n Drag and drop here or\n <Styled.UploadText> upload from your computer</Styled.UploadText>\n </span>\n </Styled.DragAndDropContent>\n <Styled.SupportedFileTypes>\n Supported file types: {formattedFileTypes}\n </Styled.SupportedFileTypes>\n <span className=\"file-size\">Maximum file size: {MAX_FILE_SIZE_MB}MB</span>\n </Styled.DragAndDrop>\n );\n};\n\nexport default DocumentDragAndDrop;\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Input } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\n// redux\nimport {\n selectors as documentUploadTouchSelectors,\n actions as documentUploadTouchActions,\n} from '@redux/ui/modals/add-document-upload-touch';\n// hooks\nimport { useInjectDocumentUploadModal } from '@optx/common/hooks/inject';\n// components\nimport DocumentDragAndDrop from './components/DocumentDragAndDrop';\nimport { Styled } from '../TouchInformation.styled';\n\nconst { TextArea } = Input;\n\ninterface DocumentUploadModalProps {\n isChromeExtension?: boolean;\n}\n\nconst StyledNotesLabel = styled.label`\n margin-top: 30px;\n`;\n\nconst DocumentUploadModal: React.FC<DocumentUploadModalProps> = ({ isChromeExtension = false }) => {\n useInjectDocumentUploadModal();\n const dispatch = useDispatch();\n const [notes, setNotes] = useState<string>('');\n const [isSubmitted, setSubmitted] = useState<boolean>(false);\n\n const isOpen = useSelector(documentUploadTouchSelectors.isOpen);\n const files = useSelector(documentUploadTouchSelectors.fileList);\n const getUploading = useSelector(documentUploadTouchSelectors.getUploading);\n\n const resetModal = () => {\n dispatch(documentUploadTouchActions.toggleModal());\n dispatch(documentUploadTouchActions.updateFileList([]));\n setNotes('');\n };\n\n const handleSave = () => {\n // dispatch file state action\n dispatch(documentUploadTouchActions.uploadFiles({ notes }));\n setSubmitted(prev => !prev);\n };\n\n useEffect(() => {\n if (isSubmitted && getUploading === false) {\n resetModal();\n setSubmitted(prev => !prev);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getUploading]);\n\n const handleCancel = () => {\n resetModal();\n };\n\n const handleNotesChange: React.ChangeEventHandler<HTMLTextAreaElement> = e => {\n setNotes(e.target.value);\n };\n\n return (\n <Styled.DocumentUploadModal\n visible={isOpen}\n title=\"Upload File\"\n okText={getUploading ? 'Uploading...' : 'Save'}\n okButtonProps={{ disabled: files.length === 0, loading: getUploading }}\n onOk={handleSave}\n onCancel={handleCancel}\n $isChromeExtension={isChromeExtension}\n >\n <DocumentDragAndDrop />\n <StyledNotesLabel htmlFor=\"document-upload-textarea\">\n <strong>Notes</strong> (optional)\n </StyledNotesLabel>\n <TextArea\n id=\"document-upload-textarea\"\n rows={4}\n placeholder=\"Enter notes\"\n value={notes}\n onChange={handleNotesChange}\n />\n </Styled.DocumentUploadModal>\n );\n};\n\nexport default DocumentUploadModal;\n","import React from 'react';\nimport { CompanyColumnDisplay, Column } from '@optx/models/table/Columns';\n\ninterface TableColumnFilterContextContext {\n columnDisplay: CompanyColumnDisplay<any> | null;\n setColumnDisplay: (columnDisplay: CompanyColumnDisplay<any>) => void;\n sortableColumns: Column[];\n setSortableColumns: (sortableColumns: Column[]) => void;\n pinnedColumns?: Column[];\n setPinnedColumns?: (pinnedColumns: Column[]) => void;\n}\n\nexport const TableColumnFilterContext = React.createContext<TableColumnFilterContextContext>({\n columnDisplay: null,\n setColumnDisplay: columnDisplay => {},\n sortableColumns: [],\n setSortableColumns: sortableColumns => {},\n pinnedColumns: [],\n setPinnedColumns: pinnedColumns => {},\n});\n","import styled from 'styled-components';\n\nconst ColumnHeader = styled.div`\n padding: 22px;\n display: flex;\n\n .ant-dropdown-trigger {\n flex: 1;\n }\n`;\n\nconst ColumnWrapper = styled.div`\n background: #fff;\n padding: 10px 20px 10px 12px;\n border-top: 1px solid #c2cfe0;\n position: relative;\n\n &:not(.filtered):hover {\n .handle,\n .pin {\n display: block;\n }\n }\n\n &.select-all {\n display: flex;\n justify-content: space-between;\n }\n\n .ant-btn-link {\n padding: 0;\n height: auto;\n border: 0;\n }\n\n .pin,\n .handle {\n position: absolute;\n top: 14px;\n }\n\n .pin {\n display: none;\n right: 30px;\n cursor: pointer;\n }\n\n &.filtered .pin {\n display: block;\n }\n\n .handle {\n display: none;\n right: 10px;\n cursor: grab;\n }\n`;\n\nexport default { ColumnWrapper, ColumnHeader };\n","import React, { useMemo, useContext, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Checkbox, Button } from 'antd';\nimport { PushpinOutlined } from '@ant-design/icons';\nimport { each, cloneDeep } from 'lodash';\nimport { CheckboxChangeEvent } from 'antd/lib/checkbox';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\n// models\nimport { CompanyColumnDisplay, ColumnKeys, Column } from '@optx/models/table/Columns';\n// utils\nimport { mapPinnedColumns, mapSortableColumns, restoreColumns } from '@optx/utils/columns';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\n// components\nimport Icon from '@components/common/Icon';\nimport { TableColumnFilterContext } from '@optx/components/common/table/TableColumnFilterContext';\nimport Styled from './TableColumnFilter.styled';\n\nconst selectAll = (check: boolean, columns: CompanyColumnDisplay) => {\n const columnDisplay: CompanyColumnDisplay = cloneDeep(columns);\n\n each(columnDisplay, (value, columnId) => {\n if (!value.pinned) {\n columnDisplay[columnId as ColumnKeys].visible = check;\n }\n });\n\n return columnDisplay;\n};\n\nconst reOrder = (list: any, startIndex: any, endIndex: any) => {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n result.splice(endIndex, 0, removed);\n\n return result;\n};\n\ninterface TableColumnFilterProps {\n gridView?: JSX.Element;\n handlePin?: (columnId: ColumnKeys, shouldPin: boolean) => void;\n columnData: CompanyColumnDisplay<any>;\n columnOrder: any[];\n initialColumnState: CompanyColumnDisplay<any>;\n initialColumnOrder: any[];\n}\n\nconst TableColumnFilter: React.FC<TableColumnFilterProps> = ({\n gridView,\n handlePin,\n columnData,\n columnOrder,\n initialColumnState,\n initialColumnOrder,\n}) => {\n const {\n columnDisplay,\n setColumnDisplay,\n sortableColumns,\n setSortableColumns,\n pinnedColumns,\n setPinnedColumns,\n } = useContext(TableColumnFilterContext);\n\n const defaultOptxScore = useSelector(userSelectors.getDefaultScore);\n\n const handleSelect = (e: CheckboxChangeEvent) => {\n const column = columnDisplay![e.target.name! as ColumnKeys];\n setColumnDisplay({\n ...columnDisplay,\n [column.id]: { ...column, visible: e.target.checked },\n });\n };\n\n const handleSelectAll = (e: CheckboxChangeEvent) => {\n setColumnDisplay(selectAll(e.target.checked, columnDisplay!));\n };\n\n const handleClear = () => {\n const newColumns = selectAll(false, columnDisplay!);\n setColumnDisplay(newColumns);\n };\n\n const handleRestore = (e: React.MouseEvent<HTMLButtonElement>) => {\n // focus is continue after click to button. blur() is used to remove focus\n e.currentTarget.blur();\n setColumnDisplay(restoreColumns(columnData, initialColumnState));\n setPinnedColumns &&\n setPinnedColumns(\n mapPinnedColumns(initialColumnState, initialColumnOrder, defaultOptxScore as string)\n );\n setSortableColumns(\n mapSortableColumns(initialColumnState, initialColumnOrder, defaultOptxScore as string)\n );\n };\n\n useEffect(() => {\n setColumnDisplay(columnData);\n setPinnedColumns &&\n setPinnedColumns(mapPinnedColumns(columnData, columnOrder, defaultOptxScore as string));\n setSortableColumns(mapSortableColumns(columnData, columnOrder, defaultOptxScore as string));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columnData]);\n\n const checkAll = useMemo(() => {\n let isChecked = true;\n\n each(columnDisplay, (value, columnId) => {\n if (!value.visible) {\n isChecked = false;\n\n return false;\n }\n\n return undefined;\n });\n\n return isChecked;\n }, [columnDisplay]);\n\n const onDragEnd = (result: any) => {\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n\n const newItems = reOrder(sortableColumns, result.source.index, result.destination.index);\n\n setSortableColumns(newItems as Column[]);\n };\n\n const handleIsraelScoreColumn = (columnName: string) => {\n if (~columnName.search('il_optx_score')) {\n if (defaultOptxScore !== 'il') {\n return true;\n }\n\n return false;\n }\n\n if (~columnName.search('score')) {\n if (defaultOptxScore !== 'us') {\n return true;\n }\n }\n\n return false;\n };\n\n return (\n <>\n <Styled.ColumnHeader>\n {gridView && gridView}\n <Button onClick={handleRestore}>Restore Default</Button>\n </Styled.ColumnHeader>\n <Styled.ColumnWrapper className=\"select-all\">\n <div>\n <Checkbox checked={checkAll} onChange={handleSelectAll}>\n Select All\n </Checkbox>\n </div>\n <div>\n <Button type=\"link\" onClick={handleClear}>\n CLEAR ALL\n </Button>\n </div>\n </Styled.ColumnWrapper>\n {pinnedColumns &&\n pinnedColumns.map((column, index) => {\n const pinned = column.pinned;\n\n return (\n <Styled.ColumnWrapper key={index} className={pinned ? 'filtered' : ''}>\n <Checkbox\n checked={columnDisplay![column.id].visible}\n name={column.id as string}\n onChange={handleSelect}\n disabled={pinned}\n >\n {column.name}\n </Checkbox>\n {handlePin && (\n <PushpinOutlined\n className=\"pin\"\n onClick={() => handlePin(column.id as ColumnKeys, false)}\n />\n )}\n </Styled.ColumnWrapper>\n );\n })}\n <DragDropContext onDragEnd={onDragEnd}>\n <Droppable droppableId=\"droppable\">\n {(provided, snapshot) => (\n <div {...provided.droppableProps} ref={provided.innerRef}>\n {sortableColumns.map((column: any, index: any) =>\n handleIsraelScoreColumn(column.id as string) === true ? null : (\n <Draggable key={column.id} draggableId={column.id} index={index}>\n {(provided, snapshot) => (\n <div ref={provided.innerRef} {...provided.draggableProps}>\n <Styled.ColumnWrapper key={index}>\n <Checkbox\n checked={columnDisplay![column.id as string].visible}\n name={column.id as string}\n onChange={handleSelect}\n disabled={handleIsraelScoreColumn(column.id as string)}\n >\n {column.name}\n </Checkbox>\n {handleIsraelScoreColumn(column.id as string) === true\n ? null\n : handlePin && (\n <PushpinOutlined\n className=\"pin\"\n onClick={() => handlePin(column.id, true)}\n />\n )}\n\n <div {...provided.dragHandleProps}>\n <Icon iconName=\"drag-and-drop\" className=\"handle\" />\n </div>\n </Styled.ColumnWrapper>\n </div>\n )}\n </Draggable>\n )\n )}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </>\n );\n};\n\nexport default TableColumnFilter;\n","import React from 'react';\nimport { Button } from 'antd';\n\ninterface DrawerHeaderProps {\n onApply?: VoidFunction;\n}\n\nexport const DrawerHeader: React.FC<DrawerHeaderProps> = ({ onApply }) => {\n return (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n marginRight: 100,\n }}\n >\n Show / Hide / Reorder Columns\n </div>\n <Button type=\"primary\" onClick={onApply}>\n Apply\n </Button>\n </>\n );\n};\n","import styled from 'styled-components';\nimport { Drawer as AntDrawer } from 'antd';\n\nconst Drawer = styled(AntDrawer)`\n .ant-drawer-header {\n display: flex;\n justify-content: space-between;\n }\n\n .ant-drawer-title {\n display: flex;\n }\n\n .ant-drawer-close {\n position: relative;\n padding: 0;\n line-height: 0;\n }\n\n .ant-drawer-body {\n padding: 0;\n }\n`;\n\nexport const Styled = {\n Drawer,\n};\n","import React, { useEffect, useRef, useState } from 'react';\nimport { isEqual } from 'lodash';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { Column, ColumnKeys } from '@optx/models/table/Columns';\nimport { GridKeysColumns } from '@optx/models/grid';\n// redux\nimport { selectors as viewSelectors, actions as viewActions } from '@features/grid/view';\nimport { selectors as columnSelectors, actions as columnsActions } from '@features/grid/columns';\nimport { incrementFetchedCount } from '@optx/features/grid/fetched-count/state/actions';\n// hooks\nimport { useDisplayColumnModal } from '@optx/common/hooks/init';\n// components\nimport GridView from '@optx/features/grid/view/components/GridView';\nimport TableColumnFilter from '@optx/components/common/table/TableColumnFilter';\nimport { TableColumnFilterContext } from '@optx/components/common/table/TableColumnFilterContext';\nimport { DrawerHeader } from '@optx/features/columns/DrawerHeader';\n// style\nimport { Styled } from '@components/common/table/DisplayColumnModal.styled';\n\ninterface DisplayColumnModalProps {\n gridName: GridKeysColumns;\n isChecklistResearchAnalyst?: boolean;\n}\n\nconst DisplayColumnModal: React.FC<DisplayColumnModalProps> = ({\n gridName,\n isChecklistResearchAnalyst,\n}) => {\n const dispatch = useDispatch();\n const [open, toggle] = useDisplayColumnModal();\n\n const [sortable, pinned] = useSelector(\n columnSelectors.getColumnLists(gridName, isChecklistResearchAnalyst)\n );\n const columnData = useSelector(\n columnSelectors.getColumnDisplay(gridName, isChecklistResearchAnalyst)\n );\n const initialColumnState = useSelector(\n columnSelectors.getColumnDisplayInitialState(gridName, isChecklistResearchAnalyst)\n );\n const initialColumnOrder = useSelector(\n columnSelectors.getColumnInitialOrder(gridName, isChecklistResearchAnalyst)\n );\n const columnOrder = useSelector(\n columnSelectors.getColumnOrder(gridName, isChecklistResearchAnalyst)\n );\n const activeView = useSelector(viewSelectors.getView(gridName));\n const applyView = viewActions.applyView;\n\n const [columnDisplay, setColumnDisplay] = useState(columnData);\n const [sortableColumns, setSortableColumns] = useState(sortable);\n const [pinnedColumns, setPinnedColumns] = useState(pinned);\n const sortableColumnsReference = useRef<Column[]>(sortableColumns);\n\n const handleApply = () => {\n toggle();\n\n const columnOrder = pinnedColumns\n .map(column => column.id)\n .concat(sortableColumns.map(column => column.id)) as ColumnKeys[];\n\n dispatch(\n columnsActions.saveColumns({\n gridName,\n columnDisplay,\n columnOrder,\n isChecklistResearchAnalyst: isChecklistResearchAnalyst,\n })\n );\n\n dispatch(incrementFetchedCount(gridName));\n };\n\n const handlePin = (columnId: ColumnKeys, shouldPin: boolean) => {\n const pinIndex = sortableColumns.findIndex(column => column.id === columnId);\n\n if (pinIndex !== -1 && columnDisplay) {\n setPinnedColumns([\n ...pinnedColumns,\n { ...columnDisplay[columnId], pinned: true, visible: true },\n ]);\n sortableColumns.splice(pinIndex, 1);\n\n setSortableColumns(sortableColumns);\n } else if (columnDisplay) {\n const unPinnedIndex = pinnedColumns.findIndex(column => column.id === columnId);\n pinnedColumns.splice(unPinnedIndex, 1);\n\n setPinnedColumns(pinnedColumns);\n setSortableColumns([\n { ...columnDisplay[columnId], pinned: false, visible: true },\n ...sortableColumns,\n ]);\n }\n\n if (columnDisplay) {\n setColumnDisplay({\n ...columnDisplay,\n [columnId]: { ...columnDisplay[columnId], pinned: shouldPin, visible: true },\n });\n }\n };\n\n const handleClose = () => {\n toggle();\n setColumnDisplay(columnData);\n setSortableColumns(sortable);\n setPinnedColumns(pinned);\n };\n\n useEffect(() => {\n setColumnDisplay(columnData);\n }, [columnData]);\n\n useEffect(() => {\n if (!isEqual(sortable, sortableColumnsReference.current)) {\n setSortableColumns(sortable);\n sortableColumnsReference.current = sortable;\n }\n }, [sortable]);\n\n if (columnDisplay && columnData && initialColumnState) {\n return (\n <TableColumnFilterContext.Provider\n value={{\n columnDisplay,\n setColumnDisplay,\n sortableColumns,\n setSortableColumns,\n pinnedColumns,\n setPinnedColumns,\n }}\n >\n <Styled.Drawer\n visible={open}\n onClose={handleClose}\n placement=\"right\"\n closable\n width=\"485\"\n title={<DrawerHeader onApply={handleApply} />}\n destroyOnClose\n >\n <div>\n <TableColumnFilter\n gridView={\n gridName !== 'checklistResearchInsights' ? (\n <GridView gridKey={gridName} activeView={activeView} applyView={applyView} />\n ) : undefined\n }\n handlePin={gridName !== 'checklistResearchInsights' ? handlePin : undefined}\n columnData={columnData}\n columnOrder={columnOrder}\n initialColumnState={initialColumnState}\n initialColumnOrder={initialColumnOrder}\n />\n </div>\n </Styled.Drawer>\n </TableColumnFilterContext.Provider>\n );\n }\n\n return null;\n};\n\nexport default React.memo(DisplayColumnModal);\n","import * as yup from 'yup';\n// models\nimport { Addon } from '@optx/models/Company';\n// constants\nimport { urlRegExp } from '@optx/constants/regex';\nimport { FIELD_REQUIRED_ERROR } from '@optx/constants/form';\nimport {\n LINK_URL_VALUE_ERROR_MESSAGE,\n ABBREVIATION_ERROR_MESSAGE,\n} from '@optx/constants/table/cells';\n// utils\nimport { validatePositiveNumbers } from '@optx/utils/validation';\n\nconst validationAllInfo = (stageRequiredValues: any[]) => {\n const validationSchema = yup.object({\n last_round: yup.object().nullable(),\n acquiring_company: yup\n .string()\n .nullable()\n .test('requiredConditional', FIELD_REQUIRED_ERROR, function (value) {\n return (\n this.parent.last_round?.label !== 'Acquisition' ||\n (value && !!value && this.parent.last_round?.label === 'Acquisition')\n );\n }),\n addon_bool: yup.boolean().nullable(),\n addon: yup\n .object<Addon>()\n .nullable()\n .test('requiredConditional', FIELD_REQUIRED_ERROR, function (value) {\n if (this.parent.addon_bool) {\n return Object.keys(value || {}).length > 0;\n }\n\n return true;\n }),\n stage_rationale: yup\n .string()\n .nullable()\n .test('requiredConditional', FIELD_REQUIRED_ERROR, function (value) {\n return (\n !stageRequiredValues.some(item => item === this.parent.stage) ||\n (value && !!value && stageRequiredValues.some(item => item === this.parent.stage))\n );\n }),\n banker_name: yup\n .string()\n .nullable()\n .test('requiredConditional', FIELD_REQUIRED_ERROR, function (value) {\n return (value && !!value && this.parent.banker) || !this.parent.banker;\n }),\n raw_url: yup\n .string()\n .nullable()\n .required(FIELD_REQUIRED_ERROR)\n .matches(urlRegExp, LINK_URL_VALUE_ERROR_MESSAGE),\n secondary_urls: yup\n .array()\n .of(yup.string().nullable())\n .nullable()\n .test('validSecondaryUrl', LINK_URL_VALUE_ERROR_MESSAGE, function (value) {\n if (!value || value?.length === 0 || (value?.length === 1 && !value?.[0])) {\n return true;\n }\n\n return value?.every((item: string) => {\n urlRegExp.lastIndex = 0;\n\n return urlRegExp.test(item);\n });\n })\n .test(\n 'secondaryUrlsDifferentFromPrimary',\n 'Secondary URLs must be different from the primary URL!',\n function (value) {\n // @ts-ignore\n const primaryUrl = this.from?.[0]?.value?.company_url;\n\n if (!primaryUrl) {\n return true;\n }\n\n return !value?.includes(primaryUrl);\n }\n )\n .test('uniqueSecondaryUrls', 'Secondary URLs cannot have duplicates!', function (value) {\n return !value?.some((item: string, index: number) => value.indexOf(item) !== index);\n }),\n capital_raised: yup\n .mixed()\n .nullable()\n .test('requiredConditional', ABBREVIATION_ERROR_MESSAGE, function (value) {\n return validatePositiveNumbers(value);\n }),\n last_round_amount: yup\n .mixed()\n .nullable()\n .test('requiredConditional', ABBREVIATION_ERROR_MESSAGE, function (value) {\n return validatePositiveNumbers(value);\n }),\n last_round_date: yup.string().nullable(),\n });\n\n return validationSchema;\n};\n\nexport default validationAllInfo;\n","import styled, { css } from 'styled-components';\nimport { Drawer as AntDrawer } from 'antd';\n\ninterface DrawerEditAllProps {\n $isChromeExtension?: boolean;\n}\n\nconst DrawerEditAll = styled(AntDrawer)<DrawerEditAllProps>`\n &.touch-extension {\n max-width: 640px;\n }\n\n .modal-title {\n font-size: 24px;\n }\n\n .ant-drawer-close {\n display: none;\n }\n\n .row-spacer {\n padding-top: 24px;\n padding-bottom: 24px;\n }\n\n .row-spacer-top {\n padding-top: 24px;\n }\n\n .row-spacer-bottom {\n padding-bottom: 16px;\n }\n\n &.touch-extension {\n .row-spacer {\n padding-top: 12px;\n padding-bottom: 12px;\n }\n\n .row-spacer-top {\n padding-top: 12px;\n }\n\n .row-spacer-bottom {\n padding-bottom: 12px;\n }\n\n .ant-radio-button-wrapper {\n padding: 0 10px;\n }\n }\n\n .company-intro {\n background: #ffffff;\n border-bottom: 1px solid #c2cfe0;\n padding: 14px 0;\n }\n\n .flex-nowrap {\n flex-wrap: nowrap;\n }\n\n .company-avatar--profile {\n max-width: 75px;\n max-height: 75px;\n margin-right: 15px;\n }\n\n .company-name {\n font-size: 20px;\n line-height: 1.4;\n font-weight: 600;\n color: #334d6e;\n display: block;\n padding-top: 5px;\n }\n\n .company-info {\n max-width: 500px;\n }\n\n .company-location {\n font-size: 14px;\n color: #90a0b7;\n font-weight: 700;\n svg {\n width: 14px;\n margin-right: 6px;\n vertical-align: baseline;\n }\n }\n\n .company-year-founded {\n font-size: 14px;\n color: #90a0b7;\n font-weight: 700;\n }\n\n .company-owner-name {\n padding-right: 10px;\n font-size: 14px;\n color: #90a0b7;\n font-weight: 700;\n }\n\n .media-object {\n margin: 0;\n }\n\n .ant-drawer-body {\n background: rgba(224, 231, 239, 0.2);\n padding-top: 0;\n padding-bottom: 0;\n .ant-select-selection-overflow {\n min-height: 30px;\n }\n }\n &.touch-extension .ant-drawer-body .ant-select-selection-overflow {\n min-height: 22px;\n }\n\n .company-additional-info {\n display: flex;\n gap: 12px;\n margin-left: -24px;\n margin-right: -24px;\n padding: 12px 24px 2px;\n background-color: #fff;\n border-bottom: 1px solid #c2cfe0;\n\n .add-touch-select {\n margin-bottom: 10px;\n & > div {\n height: 24px;\n min-width: initial !important;\n\n .styled-single-select__control {\n height: 24px;\n min-height: 24px;\n }\n\n .styled-single-select__single-value {\n font-weight: 600;\n font-size: 14px;\n margin-top: -2px;\n }\n }\n }\n\n .styled-single-select__value-container {\n padding: 0 0 0 4px;\n height: 21px;\n min-height: 21px;\n\n & > div:last-child {\n height: 21px;\n min-height: 21px;\n padding: 0;\n margin: 0;\n margin-top: -2px;\n }\n }\n\n .styled-single-select__control {\n span:nth-child(1) {\n margin-left: 6px;\n font-size: 14px;\n margin-top: -4px;\n }\n }\n\n .ant-select-single {\n .prefixed-selection-item__label {\n color: #1890ff;\n }\n }\n }\n\n .tabs-container {\n margin: 0 -24px;\n background: #ffffff;\n border-bottom: 1px solid #c2cfe0;\n\n .ant-tabs-nav-list {\n padding-left: 16px;\n }\n\n .ant-tabs-nav-wrap {\n ${({ $isChromeExtension }) =>\n $isChromeExtension &&\n css`\n width: 36rem;\n `}\n }\n\n .ant-tabs-tab-btn {\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 16px;\n letter-spacing: 1.25px;\n text-transform: uppercase;\n }\n\n .ant-tabs-tab {\n padding: 16px 8px;\n ${({ $isChromeExtension }) =>\n $isChromeExtension &&\n css`\n padding: 16px 0px;\n margin: 0 0 0 18px;\n `}\n }\n\n .ant-tabs-nav {\n margin: 0;\n }\n }\n\n .gridOrderTab {\n .date-range-filter {\n .remove_icon {\n margin-right: -30px;\n margin-left: 0;\n }\n }\n }\n`;\n\nconst EditAllContainer = styled.div`\n h1 {\n font-size: 16px;\n }\n\n .ant-typography {\n display: block;\n }\n\n .ant-select {\n width: 100%;\n }\n\n .ant-form-item-control-input {\n min-height: 24px;\n }\n\n .ant-select-selector {\n padding-top: 0;\n padding-bottom: 0;\n }\n`;\n\nexport const Styled = {\n EditAllContainer,\n DrawerEditAll,\n};\n","import React, { useState, useCallback, useRef, useEffect, useMemo, lazy, Suspense } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Formik, FormikProps } from 'formik';\nimport { Form } from 'formik-antd';\nimport { isEqual } from 'lodash';\n// models\nimport { EditAllInfoForm, SearchFieldLabels } from '@optx/models/api/editAllInfo';\nimport { SelectOption } from '@optx/models/Option';\nimport { TabNamesKeys } from '../state/interfaces';\n// constants\nimport { EDIT_ALL_INFO_FORM, EDIT_ALL_TABS } from '../constants/editAllCompany';\nimport { EDIT_ALL_LOCALSTORAGE_KEY_PREFIX } from '@optx/constants/autosave';\n// services\nimport NotificationService from '@optx/services/NotificationService';\n// utils\nimport validationAllInfo from '../utils/validation';\nimport { handlePendoAction } from '@optx/utils/utils';\nimport { deleteSavedValues, getSavedValues } from '@optx/storage/localStorage/autoSaveStorage';\n// redux\nimport {\n selectors as editAllDialogSelectors,\n actions as editAllDialogActions,\n} from '@optx/features/edit-all-info/state';\nimport { selectors as featuredSelectors } from '@components/feature/company-individual-edit/state/index';\nimport { selectors } from '@features/custom-global-loader';\n// hooks\nimport { useInjectEditAllCompany } from '@optx/features/edit-all-info';\n// components\nimport {\n LocalStorageAutoSave,\n FormErrorMask,\n useInjectLocalStorageAutosave,\n} from '@optx/features/local-storage-autosave';\nimport FixedLoader from '@optx/components/common/loader/FixedLoader';\nimport { Styled } from './EditAllDialog.styled';\nconst TabLoader = lazy(() => import('./TabLoader'));\nconst EditAllTabsGroup = lazy(() => import('./EditAllTabsGroup'));\nconst EditAllModalTitle = lazy(() => import('./EditAllModalTitle'));\nconst EditAllCompanyInfo = lazy(() => import('./EditAllCompanyInfo'));\nconst CompanyDrawerBanner = lazy(\n () => import('@optx/features/add-touch/components/CompanyDrawerBanner')\n);\n\ninterface EditAllDialogProps {\n isChromeExtension?: boolean;\n}\n\nconst EditAllDialog: React.FC<EditAllDialogProps> = ({ isChromeExtension }) => {\n useInjectEditAllCompany();\n useInjectLocalStorageAutosave();\n const dispatch = useDispatch();\n\n const dataLoading = useSelector(selectors.loading);\n const company = useSelector(editAllDialogSelectors.getEditAllCompany);\n const isFinancialsLoaded = useSelector(editAllDialogSelectors.isFinancialsLoaded);\n const isOpen = useSelector(editAllDialogSelectors.isOpen);\n const editAllFields = useSelector(editAllDialogSelectors.getEditAllFields);\n const proprietaryFields = useSelector(editAllDialogSelectors.getEditPropInfo);\n const eqtView = useSelector(editAllDialogSelectors.getEditEqtView);\n const gridOrder = useSelector(editAllDialogSelectors.getEditGridOrder);\n const editIdInfo = useSelector(editAllDialogSelectors.getEditIdInfo);\n const editFavoriteInfo = useSelector(editAllDialogSelectors.getEditFavoriteInfo);\n\n const initialState = useSelector(editAllDialogSelectors.getInitialEditAllState);\n const subSectorOptions = useSelector(featuredSelectors.companyIndividualEdit.subSectorOptions);\n\n const activeTabName = useSelector(editAllDialogSelectors.getActiveTabName);\n\n const stageOptions = useSelector(\n featuredSelectors.companyIndividualEdit.stageOptions\n ) as SelectOption[];\n\n const [activeEditTabIndex, setActiveEditTabIndex] = useState<number>(0);\n const [tabTitle, setTabTitle] = useState<string>(EDIT_ALL_TABS[activeEditTabIndex].title);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const showFormDataErrorMask =\n isOpen && !isFinancialsLoaded && !!subSectorOptions.length && !dataLoading;\n\n const toggle = useCallback(() => {\n if (formRef.current) {\n formRef.current.resetForm();\n }\n\n return dispatch(\n editAllDialogActions.toggleCompanyEditAllFormDialog({\n companyId: company.company_id,\n companyName: company.company_name,\n company: company,\n currentFavoriteCompanyEditableName: null,\n })\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, company]);\n\n const handleCreateCompanyEdit = () => {\n if (formRef.current) {\n formRef.current.submitForm();\n\n if (formRef.current.errors) {\n const customMessage: Partial<{ [K in keyof EditAllInfoForm]: string }> = {\n raw_url: 'Primary URL is required!',\n secondary_urls: 'Secondary URL is not valid!',\n };\n\n const errors = Object.keys(formRef.current.errors);\n errors.forEach(error => {\n let message = customMessage[error as keyof typeof customMessage];\n\n if (!message) {\n message =\n error.charAt(0).toUpperCase() +\n error.toString().replaceAll('_', ' ').slice(1) +\n ' is required!';\n }\n\n NotificationService.error(message);\n });\n }\n }\n };\n\n // Form\n const formRef = useRef<FormikProps<Partial<EditAllInfoForm>> | null>(null);\n const savedValues = getSavedValues(EDIT_ALL_LOCALSTORAGE_KEY_PREFIX, company.company_id);\n const persistedValues = savedValues ? JSON.parse(savedValues) : {};\n\n let formInitialValues = {\n ...EDIT_ALL_INFO_FORM,\n ...(initialState ? initialState : {}),\n ...(persistedValues ? persistedValues : {}),\n companyId: company.company_id?.toString() || '',\n };\n\n const handleInitialValues = () => {\n if (formRef.current?.values) {\n if (isEqual(formRef.current.values, formInitialValues)) {\n return formRef.current.values;\n }\n\n return formInitialValues;\n }\n\n return formInitialValues;\n };\n\n const handleSubmit = (values: Partial<EditAllInfoForm>) => {\n let formValues = { ...values };\n\n if (!isEqual(formInitialValues, formValues)) {\n dispatch(\n editAllDialogActions.updateCompanyEditAllInfo({\n editAllFields: formValues,\n })\n );\n\n window.pendo.track(handlePendoAction('EditCompanyInfo'));\n } else {\n // if no changes close the modal\n toggle();\n }\n };\n\n useEffect(() => {\n if (!isOpen && formRef.current?.values && !isEqual(formRef.current.values, formInitialValues)) {\n formRef.current.resetForm();\n }\n\n if (!isOpen) {\n dispatch(editAllDialogActions.setEditCompanyActiveTabName('editAllFieldsTab'));\n setActiveEditTabIndex(0);\n setTabTitle(EDIT_ALL_TABS[0].title);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const handleTabChange = (tabKey: string) => {\n setIsLoading(true);\n dispatch(editAllDialogActions.setEditCompanyActiveTabName(tabKey as TabNamesKeys));\n };\n\n useEffect(() => {\n const newTabIndex = EDIT_ALL_TABS.findIndex(tab => tab.key === activeTabName);\n setActiveEditTabIndex(newTabIndex);\n setTabTitle(EDIT_ALL_TABS[newTabIndex].title);\n // Simulate loading delay\n setTimeout(() => {\n setIsLoading(false); // Set loading state to false when content is ready\n }, 300); // Adjust the delay as needed\n }, [activeTabName]);\n\n const tabSource = (key: string) => {\n switch (key) {\n case 'editAllFieldsTab':\n return editAllFields;\n case 'eqtViewTab':\n return eqtView;\n case 'proprietaryFieldsTab':\n return proprietaryFields;\n case 'gridOrderTab':\n return gridOrder;\n case 'editIdInfoTab':\n return editIdInfo;\n case 'favoritesTab':\n return editFavoriteInfo;\n default:\n return editAllFields;\n }\n };\n\n // flatted fields for search\n const flattedFields = tabSource(activeTabName)\n .map(item => item.data)\n .flat();\n\n const handleModalCancel = () => {\n deleteSavedValues(EDIT_ALL_LOCALSTORAGE_KEY_PREFIX, company.company_id);\n toggle();\n };\n\n const title = (\n <Suspense fallback={null}>\n <EditAllModalTitle\n handleCancel={handleModalCancel}\n handleCreateCompanyEdit={handleCreateCompanyEdit}\n />\n </Suspense>\n );\n\n const stageRationaleRequiredValues = useMemo(() => {\n const requiredValues = stageOptions?.reduce((arr: any[], item) => {\n if (item.label === 'Dead' || item.label === 'Pass') {\n return [...arr, item.value];\n }\n\n return [...arr];\n }, []);\n\n return requiredValues;\n }, [stageOptions]);\n\n const fieldsLabels = useMemo(() => {\n return flattedFields.reduce((acumulator, field) => {\n if (field?.id) {\n return {\n ...acumulator,\n [field.id]: field.label,\n };\n }\n\n return acumulator;\n }, {} as SearchFieldLabels);\n }, [flattedFields]);\n\n return (\n <>\n <Styled.DrawerEditAll\n placement={isChromeExtension ? 'bottom' : 'right'}\n $isChromeExtension={isChromeExtension}\n onClose={handleModalCancel}\n visible={isOpen}\n className={isChromeExtension ? 'company-touches touch-extension' : 'company-touches'}\n height={isChromeExtension ? 'calc(100% - 60px)' : '100%'}\n width={isChromeExtension ? '640px' : '750px'}\n title={title}\n >\n <div className=\"ant-drawer-body-inner\">\n <Suspense fallback={null}>\n <CompanyDrawerBanner company={company} />\n </Suspense>\n <Suspense fallback={null}>\n <EditAllTabsGroup handleTabChange={handleTabChange} activeTab={activeTabName} />\n </Suspense>\n <Suspense fallback={<FixedLoader loading={true} />}>\n {initialState && (\n <Styled.EditAllContainer>\n <Formik\n initialValues={handleInitialValues()}\n enableReinitialize\n onSubmit={handleSubmit}\n validationSchema={validationAllInfo(stageRationaleRequiredValues)}\n validateOnMount={true}\n innerRef={instance => {\n formRef.current = instance;\n }}\n component={() => {\n return (\n <Form layout=\"vertical\" style={{ position: 'relative' }}>\n {isOpen && !formRef.current?.isSubmitting && (\n <LocalStorageAutoSave\n key=\"edit-all-info-autosave\"\n storageKeyPrefix={EDIT_ALL_LOCALSTORAGE_KEY_PREFIX}\n companyId={company.company_id}\n loadFromStorage={false}\n />\n )}\n <div>\n <TabLoader loading={isLoading} />\n {isOpen && !isLoading && isFinancialsLoaded && (\n <EditAllCompanyInfo\n companyFields={tabSource(activeTabName)}\n searchFields={flattedFields}\n searchFieldsLabels={fieldsLabels}\n title={tabTitle}\n hasSearch={EDIT_ALL_TABS[activeEditTabIndex].hasSearch}\n tabKey={activeTabName}\n className={\n isChromeExtension\n ? `${activeTabName} edit-all-prop-info--chrome-extension`\n : `${activeTabName}`\n }\n />\n )}\n </div>\n </Form>\n );\n }}\n />\n </Styled.EditAllContainer>\n )}\n </Suspense>\n </div>\n </Styled.DrawerEditAll>\n {showFormDataErrorMask && <FormErrorMask isChromeExtension={!!isChromeExtension} />}\n </>\n );\n};\n\nexport default React.memo(EditAllDialog);\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\n// models\nimport { FilterTag } from '@optx/models/tags';\nimport { SearchSave } from '@optx/models/search';\n// utils\nimport { tagsValue } from '@optx/utils/filters/mapTags';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\n// components\nimport { FilterTagValue } from '@optx/features/tags/tags';\n\ninterface FilterTagsNewDateMatchedProps {\n dateMatchedTag: FilterTag;\n selectedCombinedSearch: SearchSave;\n}\n\nconst FilterTagsNewDateMatched: React.FC<FilterTagsNewDateMatchedProps> = ({\n dateMatchedTag,\n selectedCombinedSearch,\n}) => {\n const dispatch = useDispatch();\n\n const handleFilterRemove = () => {\n // clear Date Matches and remove New Date Matched filter\n dispatch(searchActions.clearDateMatches({ list_id: Number(selectedCombinedSearch.unique_id) }));\n\n dispatch(\n searchActions.loadSavedSearch({\n gridKey: 'advancedSearch',\n data: {\n searchId: selectedCombinedSearch.unique_id,\n title: selectedCombinedSearch.title,\n listType: selectedCombinedSearch.search_info.type || '',\n },\n })\n );\n };\n\n const updatedItem = {\n ...dateMatchedTag,\n stringifiedValues: tagsValue(dateMatchedTag, 2),\n };\n\n return (\n <FilterTagValue\n item={updatedItem}\n key={updatedItem.uniqueKey}\n onClose={handleFilterRemove}\n closable={true}\n className=\"keep-space-sequence\"\n />\n );\n};\n\nexport default FilterTagsNewDateMatched;\n","import styled from 'styled-components';\n\nconst CloseTagIcon = styled.div`\n display: flex;\n align-items: center;\n margin-left: -20px;\n z-index: 100;\n margin-right: 15px;\n cursor: pointer;\n`;\n\nexport const Styled = {\n CloseTagIcon,\n};\n","import React, { useEffect, useState } from 'react';\nimport { Tag, Popover } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\n// constants\nimport { FILTER_TAGS_MAX_COUNT } from '@constants/tags';\nimport { FILTER_CARDS } from '@constants/filters';\nimport { SAVED_SEARCH_FILTER_WITH_LABEL_ONLY } from '@constants/filters';\n// components\nimport { generateMoreTags, generateTagsListPopover } from '@features/tags/tags/Tags';\n// models\nimport { GridKeys } from '@optx/models/grid';\nimport { FilterTag } from '@optx/models/tags';\nimport { SearchSave } from '@optx/models/search';\n// utils\nimport { getRouteAlias } from '@optx/utils/routes';\nimport { getLocationMainGridKey } from '@optx/utils/grid';\n// redux\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\n// hooks\nimport { useMaxDisplayedChildren } from '@optx/common/hooks/dom';\n// components\nimport FilterTagsNewDateMatched from './FilterTagsNewDateMatched';\nimport { Styled } from './FilterTags.styled';\nimport Icon from '@components/common/Icon/Icon';\n\ninterface FilterTagsProps {\n filterNames: Array<string>;\n savedSearches?: Array<number | string>;\n onClick?: VoidFunction;\n listType?: string | null;\n dateMatchedTag?: FilterTag;\n selectedCombinedSearch?: SearchSave;\n}\n\nconst FilterTags: React.FC<FilterTagsProps> = ({\n filterNames,\n onClick,\n savedSearches,\n listType = null,\n dateMatchedTag,\n selectedCombinedSearch,\n}) => {\n const dispatch = useDispatch();\n const location = getRouteAlias();\n const gridKey = getLocationMainGridKey() as GridKeys;\n const showSingleTagCloseIcon =\n listType === 'combined' && location !== 'watchList' && filterNames.length > 0;\n // send the saved searches list so that when redux store is updated tags are updated as well\n const { domRef, countHiddenChildren, hiddenChildrenIdList } = useMaxDisplayedChildren({\n updateContentDependency: savedSearches,\n listType,\n });\n const [moreTags, setMoreTags] = useState(generateMoreTags(countHiddenChildren, listType));\n const [remainingTags, setRemainingTags] = useState(\n generateTagsListPopover(filterNames, hiddenChildrenIdList, listType)\n );\n\n useEffect(() => {\n setMoreTags(generateMoreTags(countHiddenChildren, listType));\n setRemainingTags(generateTagsListPopover(filterNames, hiddenChildrenIdList, listType));\n }, [filterNames, savedSearches, hiddenChildrenIdList, countHiddenChildren, listType]);\n\n const customClearedFilter = useSelector(filterSelectors.getCustomClearedFilter(gridKey));\n\n const handleClose = () => {\n dispatch(\n searchActions.clearSearch({\n gridKey,\n data: customClearedFilter,\n })\n );\n };\n\n return (\n <div\n className=\"d-flex\"\n role=\"presentation\"\n onClick={onClick}\n style={{ width: '100%', display: 'flex' }}\n >\n {filterNames && (\n <>\n <div\n ref={domRef}\n className=\"tags-wrapper\"\n style={{\n margin: 0,\n flex: 1,\n display: location === 'watchList' ? 'inline-block' : 'flex',\n }}\n >\n {listType === 'combined' && location === 'myCompanies' && (\n <Tag className=\"et-tag-my-companies\">\n EQUITYTOUCH: <span>In</span>\n </Tag>\n )}\n {listType === 'combined' ? (\n <>\n {dateMatchedTag && selectedCombinedSearch && (\n <FilterTagsNewDateMatched\n dateMatchedTag={dateMatchedTag}\n selectedCombinedSearch={selectedCombinedSearch}\n />\n )}\n {location !== 'watchList' ? (\n <>\n {filterNames.map((nameOrOperator, index) => {\n // index of search name is always an even number\n // index of operator is always an odd number\n const isEven = index % 2 === 0;\n const style: React.CSSProperties = isEven ? {} : { color: '#4180d6' };\n\n const classes = ['single-tag'];\n if (index === 0) classes.push('first');\n if (index % 2 !== 0) classes.push('odd');\n if (index === filterNames.length - countHiddenChildren - 1)\n classes.push('last');\n\n return (\n <Tag className={classes.join(' ')} key={index} id={nameOrOperator}>\n <span style={style}>{nameOrOperator}</span>\n </Tag>\n );\n })}\n </>\n ) : (\n filterNames.map((nameOrOperator, index) => {\n const isEven = index % 2 === 0;\n const style: React.CSSProperties = isEven\n ? { textTransform: 'uppercase' }\n : { color: '#4180d6' };\n\n return (\n <Tag key={index} id={nameOrOperator} className=\"saved__filter\">\n <span style={style}>{nameOrOperator}</span>\n </Tag>\n );\n })\n )}\n </>\n ) : (\n <>\n {filterNames.map((filter, index) => {\n const [name, valuesString] = filter.split(':');\n const values = valuesString.split(',');\n let finalValuesString = values.slice(0, FILTER_TAGS_MAX_COUNT).join(', ');\n\n if (values.length > FILTER_TAGS_MAX_COUNT) {\n finalValuesString += `, ${values.length - FILTER_TAGS_MAX_COUNT} more`;\n }\n\n const isMyCompanyFilterCard =\n FILTER_CARDS.includes(name) && finalValuesString === ' ';\n\n const isQueryFilter =\n SAVED_SEARCH_FILTER_WITH_LABEL_ONLY.includes(name) && finalValuesString === ' ';\n\n return (\n <Tag\n key={index}\n id={filter.substr(0, filter.indexOf(':'))}\n className=\"saved__filter\"\n >\n <span className=\"saved__filter-name\">\n {isMyCompanyFilterCard || isQueryFilter ? `${name}` : `${name}:`}\n </span>\n <span className=\"saved__filter-value\">{finalValuesString}</span>\n </Tag>\n );\n })}\n </>\n )}\n </div>\n {showSingleTagCloseIcon && (\n <Styled.CloseTagIcon>\n <Icon iconName=\"close\" style={{ fontSize: 12 }} onClick={handleClose} />\n </Styled.CloseTagIcon>\n )}\n {moreTags && (\n <Popover overlayClassName=\"ant-popover-tags\" content={remainingTags}>\n {moreTags}\n </Popover>\n )}\n </>\n )}\n </div>\n );\n};\n\nFilterTags.defaultProps = {\n filterNames: [],\n};\n\nexport default FilterTags;\n","import { useState, useEffect } from 'react';\n\nconst useNonVirtualizedTable = () => {\n const [virtualizedActive, setVirtualizedActive] = useState<boolean>(true);\n\n useEffect(() => {\n if (process.env.REACT_APP_API_ROOT?.search('dev-optx') !== -1) {\n if (window && (window as any).innerHeight > 29999) setVirtualizedActive(false);\n else {\n setVirtualizedActive(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [window.innerHeight]);\n\n return virtualizedActive;\n};\n\nexport default useNonVirtualizedTable;\n","import { useLocation } from 'react-router-dom';\nimport queryString from 'query-string';\n\n/**\n * Custom hook to determine if the current environment is set for testing based on URL query parameters.\n *\n * This hook parses the current location's search parameters to check if the `usefor` parameter is set to 'testing'.\n * It returns a boolean indicating whether the environment is for testing or not.\n *\n * @param {boolean} [ignoreTesting=false] - Optional flag to ignore the testing parameter and always return false.\n * @returns {boolean} - Returns `true` if the `usefor` query parameter is 'testing' and `ignoreTesting`\n * is not set to true, otherwise returns `false`.\n *\n */\nconst useIsForTesting = (ignoreTesting?: boolean) => {\n const location = useLocation();\n const searchParams = queryString.parse(location.search);\n const isForTesting = searchParams.usefor && searchParams.usefor === 'testing' ? true : false;\n\n return ignoreTesting ? false : isForTesting;\n};\n\nexport default useIsForTesting;\n","export { default } from './ExternalScroll';\n","import Company from '@models/Company';\nimport { SortByRule } from '@models/table/sorting';\nimport { CompanyUserContact } from '@models/api/contacts';\n\nexport const mapSortFieldQuery = (sortField: SortByRule<CompanyUserContact | Company>) =>\n sortField.id;\n","import Company from '@models/Company';\nimport { SortByRule } from '@models/table/sorting';\nimport SORT_ORDER from '@constants/table/sortOrder';\nimport { CompanyUserContact } from '@models/api/contacts';\n\nexport const mapSortOrderQuery = (sortField: SortByRule<CompanyUserContact | Company>) =>\n sortField.desc ? SORT_ORDER.DESCENDING : SORT_ORDER.ASCENDING;\n","export { default } from './CompanyTouches';\n","import { combineReducers } from 'redux';\nimport { CompanyGraphsState } from './interfaces';\n// reducers\nimport { reducer as employeeGrowthReducer } from '../employee';\nimport { reducer as scoreGrowthReducer } from '../score';\n\nconst reducer = combineReducers<CompanyGraphsState>({\n employeeGrowth: employeeGrowthReducer,\n scoreGrowth: scoreGrowthReducer,\n});\n\nexport default reducer;\n","import { fork } from 'redux-saga/effects';\nimport { saga as employeeGrowthSaga } from '../employee';\nimport { saga as scoreGrowthSaga } from '../score';\n\nexport default function* CompanyGraphsSaga() {\n yield fork(employeeGrowthSaga);\n yield fork(scoreGrowthSaga);\n}\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport { reducer, saga } from './state';\nimport featureName from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","import styled from 'styled-components';\nimport { Form } from 'formik-antd';\n\nconst FormWrapper = styled(Form)`\n .view-checkboxes__wrapper {\n .ant-form-item {\n margin-bottom: 0;\n }\n\n .ant-form-item-explain {\n display: none;\n }\n }\n\n .view-checkboxes__default {\n text-align: right;\n\n &.is-editing {\n display: flex;\n justify-content: space-between;\n padding-top: 20px;\n }\n }\n\n .ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,\n .ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,\n .ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,\n .ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon {\n top: 1rem;\n }\n .ant-input.error {\n background-color: #fff;\n border-color: #ff4d4f;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n }\n`;\n\nconst Styles = {\n FormWrapper,\n};\n\nexport default Styles;\n","import React, { useRef, useEffect } from 'react';\nimport { ValidateStatus } from 'antd/lib/form/FormItem';\nimport { Button, Typography, Input } from 'antd';\nimport { useField } from 'formik';\nimport { Form, Checkbox } from 'formik-antd';\nimport { Dictionary, pickBy } from 'lodash';\n// models\nimport { ViewOption } from '@optx/models/search';\n// components\nimport Popconfirm from '@optx/shared/view/molecules/Popconfirm/Popconfirm';\nimport Styled from './SaveSearch.style';\n\nconst { Text } = Typography;\n\nconst handleValidateStatus = (\n errorType: boolean,\n isSearchNameExists: boolean,\n view?: ViewOption\n): ValidateStatus => {\n if ((!errorType || isSearchNameExists) && !view) {\n return 'error';\n }\n\n return 'success';\n};\n\ninterface SaveSearchFormProps {\n view: ViewOption | undefined;\n savedListTitles: Dictionary<boolean>;\n areOptionsDisabled: boolean;\n errors: {\n title?: string;\n filters?: string;\n sorting?: string;\n columns?: string;\n isOverwritten?: string;\n };\n handletoggleModal: () => void;\n handleDropdownKeyEvent: (event: React.KeyboardEvent<HTMLFormElement>) => void;\n handleDelete: () => void;\n handleSetSaveBtnDisabled: (state: boolean) => void;\n}\n\nconst SaveSearchForm: React.FC<SaveSearchFormProps> = ({\n view,\n savedListTitles,\n errors,\n areOptionsDisabled,\n handletoggleModal,\n handleDropdownKeyEvent,\n handleDelete,\n handleSetSaveBtnDisabled,\n}) => {\n const isSearchNameExists = useRef<boolean>(false);\n const isSearchNameOverwritten = useRef<boolean>(false);\n const [, , helpersIsOverwritten] = useField('isOverwritten');\n const [, , helpersHasSameName] = useField('hasSameName');\n const [title, , helpersTitle] = useField('title');\n\n const toggleModal = () => {\n handletoggleModal();\n isSearchNameExists.current = false;\n isSearchNameOverwritten.current = false;\n };\n\n const handleEqualsSavedSearchNames = (element: string) => {\n const searchTitles = pickBy(savedListTitles, (value, key) => key === element);\n\n const searchNameExistsInTitles = Object.keys(searchTitles).some(\n title => title.trim() === element.trim()\n );\n\n isSearchNameExists.current = searchNameExistsInTitles;\n isSearchNameOverwritten.current = searchNameExistsInTitles;\n helpersIsOverwritten.setValue(!searchNameExistsInTitles);\n helpersHasSameName.setValue(searchNameExistsInTitles);\n helpersTitle.setValue(element);\n };\n\n useEffect(() => {\n handleSetSaveBtnDisabled(isSearchNameExists.current);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isSearchNameExists.current]);\n\n return (\n <Styled.FormWrapper layout=\"vertical\" onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n <div className=\"ant-form-item\">\n <div className=\"ant-form-item-label\">\n {view ? (\n <Text>Saved Search Name</Text>\n ) : (\n <Text>Please give your search a unique name</Text>\n )}\n </div>\n <Input\n onChange={(element: React.ChangeEvent<HTMLInputElement>) =>\n handleEqualsSavedSearchNames(element.target.value)\n }\n value={title.value}\n className={handleValidateStatus(!errors.title, isSearchNameExists.current, view)}\n />\n {isSearchNameExists.current && !view ? (\n <Text type=\"secondary\">This name already exists</Text>\n ) : (\n <Text type=\"secondary\">unique name</Text>\n )}\n {errors.title && (\n <div className=\"ant-form-item-explain ant-form-item-explain-error\">{errors.title}</div>\n )}\n\n {isSearchNameOverwritten.current && !view && (\n <div style={{ marginTop: '1rem' }}>\n {errors.isOverwritten && (\n <div className=\"ant-form-item-explain ant-form-item-explain-error\">\n {errors.isOverwritten}\n </div>\n )}\n <Checkbox\n onChange={element => (isSearchNameExists.current = !element.target.checked)}\n name=\"isOverwritten\"\n >\n Overwrite search name and settings\n </Checkbox>\n </div>\n )}\n </div>\n\n <Text>Include the following:</Text>\n <div className=\"view-checkboxes__wrapper\">\n <Form.Item name=\"filters\">\n <Checkbox name=\"filters\" disabled={areOptionsDisabled}>\n Filters\n </Checkbox>\n </Form.Item>\n <Form.Item name=\"sorting\">\n <Checkbox name=\"sorting\" disabled={areOptionsDisabled}>\n Sort Order\n </Checkbox>\n </Form.Item>\n <Form.Item name=\"columns\">\n <Checkbox name=\"columns\" disabled={areOptionsDisabled}>\n Columns Shown\n </Checkbox>\n </Form.Item>\n <Form.Item name=\"pinnedColumns\">\n <Checkbox name=\"pinnedColumns\" disabled={areOptionsDisabled}>\n Pinned Columns\n </Checkbox>\n </Form.Item>\n {(errors.filters || errors.sorting || errors.columns) && (\n <Text type=\"danger\">Please select at least one option from above</Text>\n )}\n <div className={`view-checkboxes__default ${view ? 'is-editing' : ''}`}>\n {view && (\n <Popconfirm\n action=\"Delete\"\n title={view && view.title}\n onConfirm={() => handleDelete && handleDelete()}\n onCancel={toggleModal}\n disabled={areOptionsDisabled}\n >\n <Button disabled={areOptionsDisabled}>Delete Search</Button>\n </Popconfirm>\n )}\n <Form.Item name=\"isDefault\">\n <Checkbox name=\"isDefault\" disabled={areOptionsDisabled && view?.is_default}>\n Make My Default Search\n </Checkbox>\n </Form.Item>\n </div>\n </div>\n </Styled.FormWrapper>\n );\n};\n\nexport default React.memo(SaveSearchForm);\n","import React, { useRef, useMemo, useCallback, useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Button, Modal, Tooltip } from 'antd';\nimport { Formik, FormikProps } from 'formik';\nimport { Dictionary, pickBy } from 'lodash';\n// models\nimport { SaveView } from '@optx/models/search';\nimport { CustomUIViewIds } from '@optx/models/user';\n// constants\nimport { customUIViewIds } from '@optx/constants/table/columnDisplay/company-search';\nimport { ADVANCED_SEARCH, MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// utils\nimport { hasFilters } from '@optx/utils/search';\nimport { sendPendoData } from '@optx/utils/utils';\n// redux\nimport {\n selectors as savedSearchesSelectors,\n actions as savedSearchesActions,\n} from '@redux/company/saved-searches';\n// hooks\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\nimport { selectors as modalSelectors, actions as modalActions } from '@redux/ui/modals/save-search';\n// components\nimport Icon from '@optx/components/common/Icon';\nimport getValidationSchema from '@optx/common/validation/save-search';\nimport SaveSearchForm from './SaveSearchForm';\n\nconst initialState: SaveView = {\n title: '',\n filters: true,\n sorting: true,\n columns: true,\n pinnedColumns: true,\n isDefault: false,\n isOverwritten: false,\n hasSameName: false,\n};\n\ninterface SaveSearchProps {\n viewId?: string | number;\n showButton?: boolean;\n}\n\nconst SaveSearch: React.FC<SaveSearchProps> = ({ viewId, showButton = true }) => {\n const dispatch = useDispatch();\n const [initialFormData, setInitialFormData] = useState(initialState);\n const view = useSelector(savedSearchesSelectors.getViewData);\n const isSaveBtnDisabled = useRef<boolean>(false);\n const isSearchNameOverwritten = useRef<boolean>(false);\n const modalIsOpen = useSelector(modalSelectors.isOpen);\n const currentGridName = useCurrentGridName();\n\n const toggle = useCallback(() => dispatch(modalActions.toggleSaveSearchModal()), [dispatch]);\n\n const formRef = useRef<FormikProps<SaveView> | null>(null);\n\n const handlePendoAction = () => {\n if (currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_SaveThisView`);\n }\n\n if (currentGridName === 'My Companies') {\n sendPendoData(`${MY_COMPANIES_PENDO}_SaveThisView`);\n }\n };\n\n const toggleModal = () => {\n if (formRef.current) {\n formRef.current.resetForm();\n }\n\n toggle();\n isSaveBtnDisabled.current = false;\n isSearchNameOverwritten.current = false;\n };\n\n const isCustomUIView = useMemo(() => {\n return customUIViewIds.includes(view?.unique_id as CustomUIViewIds);\n }, [view]);\n\n const handleSubmit = (values: SaveView) => {\n // if optx view is default or no changes have been made,\n // when clicking on save button don't dispatch just close the modal\n\n if (\n view &&\n (view.unique_id === 'default' || isCustomUIView) &&\n (view.is_default || !values.isDefault)\n ) {\n toggle();\n } else if (view) {\n if (isCustomUIView) {\n dispatch(\n savedSearchesActions.modifyCustomUIView(\n view.unique_id as CustomUIViewIds,\n values.isDefault\n )\n );\n } else {\n dispatch(savedSearchesActions.modifyView({ ...values, id: view.unique_id }, view));\n }\n\n toggleModal();\n } else {\n const customValues: SaveView = {\n ...values,\n callback: () => handlePendoAction(),\n };\n dispatch(savedSearchesActions.saveView(customValues));\n toggleModal();\n }\n };\n\n const handleDelete = () => {\n dispatch(savedSearchesActions.deleteSearch({ id: view!.unique_id, viewId }));\n toggle();\n };\n\n useEffect(() => {\n // when editing, check the view's saved data and\n // update the form accordingly\n if (view) {\n const formData: Partial<SaveView> = {};\n\n if (view.unique_id !== 'default') {\n if (!hasFilters(view.search_criteria) && !view.searchKey) {\n formData.filters = false;\n }\n\n // combine search does not have filters in search_criteria\n // so we need to set it to true manually\n if (view.search_info.type === 'combined') {\n formData.filters = true;\n }\n\n if (!view.sortBy) {\n formData.sorting = false;\n }\n\n if (!view.columns) {\n formData.columns = false;\n }\n\n if (view.pinned_columns === null) {\n formData.pinnedColumns = false;\n }\n }\n\n if (view.is_default) {\n formData.isDefault = true;\n }\n\n setInitialFormData({ ...initialState, ...formData, title: view.title });\n } else {\n setInitialFormData(initialState);\n }\n }, [view]);\n\n const isDisabled = useMemo(() => {\n return view?.unique_id === 'default' || isCustomUIView;\n }, [view, isCustomUIView]);\n\n // validation\n const savedListTitles: Dictionary<boolean> = useSelector(savedSearchesSelectors.getTitles);\n // when validating in edit mode, remove current title from list, so that when\n // saving, it doesn't trigger an error by having the title seem like it's not unique\n const validationSchema = useMemo(\n () =>\n getValidationSchema(\n view ? pickBy(savedListTitles, (value, key) => key !== view.title) : savedListTitles\n ),\n [savedListTitles, view]\n );\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLFormElement>) => {\n if (event.key === 'Enter') {\n formRef.current?.submitForm();\n }\n };\n\n const setIsSaveBtnDisabled = (value: boolean) => {\n isSaveBtnDisabled.current = value;\n };\n\n return (\n <>\n {showButton && (\n <Tooltip title=\"Save This Search\" placement=\"bottom\">\n <Button type=\"text\" onClick={toggleModal} icon={<Icon iconName=\"bookmark\" />} />\n </Tooltip>\n )}\n <Formik\n initialValues={initialFormData}\n onSubmit={handleSubmit}\n enableReinitialize\n validationSchema={validationSchema}\n innerRef={instance => {\n formRef.current = instance;\n }}\n component={({ submitForm, errors }) => (\n <Modal\n title={view ? 'Manage Saved Search' : 'Save This Search'}\n visible={modalIsOpen}\n onCancel={toggleModal}\n okButtonProps={{\n onClick: submitForm,\n disabled: isSaveBtnDisabled.current && !view,\n }}\n okText=\"Save Search\"\n >\n <SaveSearchForm\n errors={errors}\n view={view}\n savedListTitles={savedListTitles}\n areOptionsDisabled={isDisabled}\n handletoggleModal={toggleModal}\n handleDropdownKeyEvent={handleDropdownKeyEvent}\n handleDelete={handleDelete}\n handleSetSaveBtnDisabled={setIsSaveBtnDisabled}\n />\n </Modal>\n )}\n />\n </>\n );\n};\n\nexport default React.memo(SaveSearch);\n","import React from 'react';\nimport { ColumnType } from 'antd/lib/table';\nimport moment from 'moment';\n// constants\nimport globalConfig from '@optx/constants/config';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport {\n YEARS_LABELS,\n generateArrCurrentColumnKey,\n generateArrPast1YearColumnKey,\n generateEbitdaCurrentColumnKey,\n generateEbitdaPast1YearColumnKey,\n generateGrowthCurrentColumnKey,\n generateGrowthPast1YearColumnKey,\n} from '@optx/constants/search';\nimport {\n DEFAULT_CELL_VALUE,\n DEFAULT_LAST_TOUCH,\n DEFAULT_NEXT_TOUCH,\n} from '@optx/constants/table/cells';\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\n// models\nimport { CompanyKeys } from '@optx/models/table/Columns';\nimport Company, {\n CompanyProfile,\n CompanySourceTag,\n URLStatus,\n ProductCategory,\n CompanyUserValuesKeys,\n Addon,\n} from '@optx/models/Company';\n// services\nimport { CompanyService, UserService } from '@optx/services/api';\n// utils\nimport { roundNumber } from '@optx/utils/number';\nimport { formatAddon } from '@optx/utils/format';\n// components\nimport {\n EditFieldMultiSelect,\n EditFieldMultiSelectAsyncProductCategory,\n EditFieldRadio,\n EditFieldCheckboxText,\n EditFieldSingleSelect,\n EditFieldText,\n EditFieldDate,\n EditFieldTextarea,\n} from '@optx/features/company/edit-fields/components';\nimport {\n TableCellListDefault,\n TableCellNumber,\n TableCellDate,\n TableCellFormatMoney,\n TableCellListDate,\n} from '@optx/components/common/table/AntTable/cells';\nimport {\n TableCellPercentageGrowth,\n TableCellStringList,\n TableCellScoreAdmin,\n TableCellOPTXScore,\n TableCellRadioAdmin,\n TableCellNewMatched,\n TableCellInvestors,\n TableCellDealTeams,\n} from '@optx/components/common/table/Companies/cells';\nimport {\n TableCellNameLink,\n TableCellCompanyURL,\n} from '@optx/components/common/table/Companies/styled-cells';\nimport TableCellEditFinancialField from '../cells/TableCellEditFinancialField';\nimport TableCellDefaultRender from '../../AntTable/cells/TableCellDefault';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\ninterface CompanyColumnType extends ColumnType<CompanyProfile> {\n dataIndex: CompanyKeys;\n}\n\nconst handleUnownedValue = (value: string | null, fieldName: string) => {\n if (['Sector', 'Sub-Sector'].includes(fieldName) && value === 'None') {\n return DEFAULT_EMPTY_VALUE;\n }\n\n if (fieldName === 'Fund' && !value) {\n return DEFAULT_EMPTY_VALUE;\n }\n\n return value;\n};\n\n/**\n * This columns will only use for automation testing.\n */\nexport const columns: Array<CompanyColumnType> = [\n {\n dataIndex: 'company_url',\n title: '',\n className: 'company_url',\n render: (value: string | null, record: Company) => (\n <TableCellCompanyURL value={value} record={record} />\n ),\n width: 60,\n fixed: 'left',\n align: 'center',\n },\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n className: 'company_name',\n sorter: true,\n render: (value: string, record: CompanyProfile) => (\n <TableCellNameLink value={value} record={record} />\n ),\n width: 240,\n fixed: 'left',\n ellipsis: true,\n },\n {\n dataIndex: 'score',\n title: 'OPTX Score',\n className: 'score',\n sorter: true,\n width: 150,\n render: (value: number, record: Company) => (\n <TableCellScoreAdmin record={record}>\n <TableCellOPTXScore company={record} />\n </TableCellScoreAdmin>\n ),\n fixed: 'left',\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'score_v3',\n title: 'OPTX Score BETA',\n className: 'score_v3',\n sorter: true,\n width: 150,\n render: (value: number, record: Company) => (\n <TableCellScoreAdmin record={record} isNewScore>\n <TableCellOPTXScore company={record} isNewScore />\n </TableCellScoreAdmin>\n ),\n fixed: 'left',\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'il_optx_score',\n title: 'IL OPTX Score',\n className: 'il_optx_score',\n sorter: true,\n width: 150,\n render: (value: number, record: Company) => (\n <TableCellScoreAdmin record={record}>\n <TableCellOPTXScore company={record} />\n </TableCellScoreAdmin>\n ),\n fixed: 'left',\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'parentcompany',\n className: 'parentcompany',\n title: 'Parent Company',\n sorter: true,\n render: (value: string) => <div>{value}</div>,\n width: 240,\n fixed: false,\n ellipsis: true,\n },\n {\n dataIndex: 'is_in_et',\n title: 'In Equity Touch',\n className: 'is_in_et',\n sorter: true,\n render: (value: boolean) => (value ? 'Yes' : 'No'),\n width: 85,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'company_description',\n title: 'Description',\n className: 'company_description',\n sorter: false,\n render: (value: string) => <div>{value}</div>,\n width: 520,\n ellipsis: true,\n },\n {\n dataIndex: 'year_founded',\n title: 'Year Founded',\n className: 'year_founded',\n sorter: true,\n width: 90,\n align: 'left',\n ellipsis: true,\n render: (value: string, record: Company) => (\n <div>{record.year_founded === 'None' ? DEFAULT_CELL_VALUE : record.year_founded}</div>\n ),\n },\n {\n dataIndex: 'is_software',\n title: 'Software',\n className: 'is_software',\n sorter: true,\n width: 85,\n render: (value: boolean | null) => (\n <div>\n {value?.toString() === 'true' ? 'Yes' : value?.toString() === 'false' ? 'No' : 'Unknown'}\n </div>\n ),\n },\n {\n dataIndex: 'is_interesting',\n title: 'PSG Fit',\n className: 'is_interesting',\n sorter: true,\n render: (value: boolean | null, record: Company, index: number) => (\n <TableCellRadioAdmin\n value={value}\n record={record}\n fieldName=\"PSG Fit\"\n service={UserService.updateFitEvaluation}\n successMessage=\"Company PSG fit updated successfully!\"\n errorMessage=\"Failed to update value!\"\n destroyOnHide={true}\n isFromGrid\n />\n ),\n width: 110,\n align: 'center',\n ellipsis: true,\n },\n {\n dataIndex: 'diversity',\n title: 'Diversity Spotlight',\n className: 'diversity',\n sorter: true,\n render: TableCellStringList,\n width: 200,\n ellipsis: true,\n },\n {\n dataIndex: 'addon_bool',\n title: 'Show Add-Ons',\n className: 'addon_bool',\n sorter: true,\n render: (value: boolean) => (value ? 'Yes' : 'No'),\n width: 150,\n ellipsis: true,\n },\n {\n dataIndex: 'addon',\n title: 'Add-On for a Specific Company',\n className: 'addon',\n sorter: true,\n render: (value: Addon | null) => formatAddon(value),\n width: 200,\n ellipsis: true,\n },\n {\n dataIndex: 'date_presented',\n title: 'Date Presented',\n className: 'date_presented',\n sorter: true,\n render: (value: string | null) => (\n <div>{value?.length === 0 ? DEFAULT_EMPTY_VALUE : value}</div>\n ),\n width: 200,\n ellipsis: true,\n },\n {\n dataIndex: 'company_owner',\n title: 'Company Owner',\n className: 'company_owner',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Company Owner')\n );\n },\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'psg_attendees',\n title: 'PSG Attendees',\n className: 'psg_attendees',\n sorter: true,\n render: (value: string[], record: Company) => (\n <TableCellListDefault value={value} record={record} />\n ),\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'senior_advisor_thesis',\n title: 'Senior Advisor Thesis',\n className: 'senior_advisor_thesis',\n sorter: true,\n render: (value: string | null) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Senior Advisor Thesis')\n );\n },\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'lead_source',\n title: 'Lead Source',\n className: 'lead_source',\n sorter: true,\n render: (value: string | null) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Lead Source')\n );\n },\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'pipeline_rank',\n title: 'Pipeline Rank',\n className: 'pipeline_rank',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Pipeline Rank')\n );\n },\n width: 85,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'stage',\n title: 'Stage',\n className: 'stage',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Stage')\n );\n },\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'fund',\n title: 'Fund',\n className: 'fund',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Fund')\n );\n },\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'num_employees',\n title: 'Number of Employees',\n className: 'num_employees',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldText\n value={value}\n record={record}\n isFromGrid\n service={CompanyService.updateCompanyData}\n fieldName=\"Number of Employees\"\n />\n ),\n width: 140,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'emp_growth_percent',\n title: 'Employee Growth Percentage Y/Y',\n className: 'emp_growth_percent',\n sorter: true,\n render: (value: number | string, record: Company) =>\n value !== null && value !== '-' ? (\n <TableCellPercentageGrowth value={value} record={record} />\n ) : (\n DEFAULT_EMPTY_VALUE\n ),\n width: 150,\n align: 'right',\n ellipsis: true,\n },\n\n {\n dataIndex: 'job_openings',\n title: 'Job Openings',\n className: 'job_openings',\n sorter: true,\n width: 90,\n align: 'right',\n render: (value: string | null) => <div>{value}</div>,\n ellipsis: true,\n },\n {\n dataIndex: 'job_openings_percent',\n title: 'Job Openings %',\n className: 'job_openings_percent',\n sorter: true,\n render: (value: string, record: Company) => (\n <TableCellPercentageGrowth value={value} record={record} />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'sw_website_rank',\n title: 'WW Website Rank',\n className: 'sw_website_rank',\n sorter: true,\n render: (value: string, record: Company) => <TableCellNumber value={value} record={record} />,\n width: 140,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'sw_website_rank_per_country',\n title: 'US Website Rank',\n className: 'sw_website_rank_per_country',\n sorter: true,\n render: (value: string, record: Company) => <TableCellNumber value={value} record={record} />,\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'opportunity_type',\n title: 'Opportunity Type',\n className: 'opportunity_type',\n sorter: true,\n width: 110,\n ellipsis: true,\n render: (value: string | null, record: Company) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Opportunity Type')\n );\n },\n },\n {\n dataIndex: 'company_type',\n title: 'Company Type',\n className: 'company_type',\n sorter: true,\n width: 110,\n ellipsis: true,\n render: (value: string | null, record: Company) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Company Type')\n );\n },\n },\n {\n dataIndex: 'sector',\n title: 'Sector',\n className: 'sector',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Sector')\n );\n },\n width: 100,\n ellipsis: true,\n },\n {\n dataIndex: 'sub_sector',\n title: 'Sub-sector',\n className: 'sub_sector',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Sub-sector')\n );\n },\n width: 100,\n ellipsis: true,\n },\n {\n dataIndex: 'product_category',\n title: 'Product Category',\n className: 'product_category',\n sorter: true,\n render: (value: ProductCategory[], company: Company) => (\n <EditFieldMultiSelectAsyncProductCategory\n fieldName=\"Product Category\"\n value={value}\n record={company}\n service={CompanyService.updateCompanyData}\n fieldKey=\"product_category\"\n asyncSearchEndpoint=\"/search/company_product_category\"\n successMessage=\"Product category updated successfully!\"\n isFromGrid\n />\n ),\n width: 250,\n ellipsis: true,\n },\n\n {\n dataIndex: 'sub_vertical',\n title: 'Sub Vertical',\n className: 'sub_vertical',\n sorter: true,\n render: TableCellStringList,\n width: 250,\n ellipsis: true,\n },\n {\n dataIndex: 'raise_date',\n title: 'Last Funding Date',\n className: 'raise_date',\n sorter: true,\n render: (value: string, record: CompanyProfile) => (\n <EditFieldDate\n value={value}\n fieldKey=\"raise_date\"\n fieldName=\"Last Funding Date\"\n service={UserService.updateCompanyUserValues}\n isFromGrid\n record={record}\n format={globalConfig.grid_date.DATE_FORMAT}\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'last_round',\n title: 'Last Round',\n className: 'last_round',\n sorter: true,\n render: TableCellDefaultRender,\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'last_raised_amount',\n title: 'Last Raised Amount',\n className: 'last_raised_amount',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <EditFieldText\n value={value}\n record={record}\n isFromGrid\n service={UserService.updateCompanyUserValues}\n fieldName=\"Last Raised Amount\"\n />\n ),\n width: 130,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'active_investors',\n title: 'Active Investors',\n className: 'active_investors',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <TableCellInvestors value={value} record={record} />\n ),\n width: 200,\n ellipsis: true,\n },\n {\n dataIndex: 'capital_raised',\n title: 'Total Raised',\n className: 'capital_raised',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <EditFieldText\n value={value}\n record={record}\n isFromGrid\n service={UserService.updateCompanyUserValues}\n fieldName=\"Capital Raised\"\n />\n ),\n width: 210,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'last_rev_update_amount',\n title: 'Revenue',\n className: 'last_rev_update_amount',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"revenue_list\"\n fieldName=\"Revenue\"\n filterName=\"last_rev_update_amount\"\n extraKeys={['last_rev_update_amount', 'last_rev_update_year']}\n service={UserService.updateCompanyUserValues}\n isFromGrid={true}\n />\n ),\n width: 130,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'last_gross_margin',\n title: 'GM %',\n className: 'last_gross_margin',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"gross_margin_list\"\n fieldName=\"GM %\"\n filterName=\"last_gross_margin\"\n service={CompanyService.addOpportunityPresentation}\n isFromGrid={true}\n />\n ),\n width: 100,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'last_rev_growth',\n title: 'Growth %',\n className: 'last_rev_growth',\n sorter: true,\n width: 100,\n align: 'left',\n ellipsis: true,\n render: (value: number | string, record: Company, index: number) =>\n value !== null && value !== undefined && value !== DEFAULT_EMPTY_VALUE ? (\n <TableCellPercentageGrowth value={value} record={record} />\n ) : (\n DEFAULT_EMPTY_VALUE\n ),\n },\n {\n dataIndex: generateGrowthPast1YearColumnKey,\n title: `${YEARS_LABELS['past 1 year']} Growth %`,\n className: generateGrowthPast1YearColumnKey,\n sorter: true,\n width: 100,\n align: 'left',\n ellipsis: true,\n render: (value: number | string | undefined, record: Company, index: number) =>\n value !== null && value !== undefined && value !== DEFAULT_EMPTY_VALUE ? (\n <TableCellPercentageGrowth value={value} record={record} />\n ) : (\n DEFAULT_EMPTY_VALUE\n ),\n },\n {\n dataIndex: generateGrowthCurrentColumnKey,\n title: `${YEARS_LABELS.current} Growth %`,\n className: generateGrowthCurrentColumnKey,\n sorter: true,\n width: 100,\n align: 'left',\n ellipsis: true,\n render: (value: number | string | undefined, record: Company, index: number) =>\n value !== null && value !== undefined && value !== DEFAULT_EMPTY_VALUE ? (\n <TableCellPercentageGrowth value={value} record={record} />\n ) : (\n DEFAULT_EMPTY_VALUE\n ),\n },\n {\n dataIndex: 'last_arr_value',\n title: 'ARR',\n className: 'last_arr_value',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"annual_recurring_revenue\"\n fieldName=\"ARR\"\n filterName=\"last_arr_value\"\n service={CompanyService.addOpportunityPresentation}\n isFromGrid={true}\n />\n ),\n width: 100,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: generateArrPast1YearColumnKey,\n title: `${YEARS_LABELS['past 1 year']} ARR`,\n className: generateArrPast1YearColumnKey,\n align: 'right',\n width: 150,\n sorter: true,\n render: (value: number | string | undefined, record: Company) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"annual_recurring_revenue\"\n fieldName=\"ARR\"\n filterName=\"last_arr_value\"\n service={CompanyService.addOpportunityPresentation}\n isFromGrid={true}\n customFinancialYear={Number(YEARS_LABELS['past 1 year'])}\n />\n ),\n },\n {\n dataIndex: generateArrCurrentColumnKey,\n title: `${YEARS_LABELS.current} ARR`,\n className: generateArrCurrentColumnKey,\n align: 'right',\n width: 150,\n sorter: true,\n render: (value: number | string | undefined, record: Company) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"annual_recurring_revenue\"\n fieldName=\"ARR\"\n filterName=\"last_arr_value\"\n service={CompanyService.addOpportunityPresentation}\n isFromGrid={true}\n customFinancialYear={Number(YEARS_LABELS.current)}\n />\n ),\n },\n {\n dataIndex: 'ebitda_amount',\n title: 'EBITDA',\n className: 'ebitda_amount',\n sorter: true,\n render: (value: number, record: CompanyProfile) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"ebitda_list\"\n fieldName=\"EBITDA\"\n filterName=\"ebitda_numeric\"\n extraKeys={['ebitda_amount', 'ebitda_year']}\n service={UserService.updateCompanyUserValues}\n isFromGrid={true}\n />\n ),\n width: 100,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: generateEbitdaPast1YearColumnKey,\n title: `${YEARS_LABELS['past 1 year']} EBITDA`,\n className: generateEbitdaPast1YearColumnKey,\n align: 'right',\n width: 150,\n sorter: true,\n render: (value: number | string | undefined, record: Company) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"ebitda_list\"\n fieldName=\"EBITDA\"\n filterName=\"ebitda_numeric\"\n extraKeys={['ebitda_amount', 'ebitda_year']}\n service={UserService.updateCompanyUserValues}\n isFromGrid={true}\n customFinancialYear={Number(YEARS_LABELS['past 1 year'])}\n />\n ),\n },\n {\n dataIndex: generateEbitdaCurrentColumnKey,\n title: `${YEARS_LABELS.current} EBITDA`,\n className: generateEbitdaCurrentColumnKey,\n align: 'right',\n width: 150,\n sorter: true,\n render: (value: number | string | undefined, record: Company) => (\n <TableCellEditFinancialField\n company={record}\n fieldKey=\"ebitda_list\"\n fieldName=\"EBITDA\"\n filterName=\"ebitda_numeric\"\n extraKeys={['ebitda_amount', 'ebitda_year']}\n service={UserService.updateCompanyUserValues}\n isFromGrid={true}\n customFinancialYear={Number(YEARS_LABELS.current)}\n />\n ),\n },\n {\n dataIndex: 'last_ebitda_margin',\n title: 'EBITDA Margin',\n className: 'last_ebitda_margin',\n sorter: true,\n render: (value: string, record: Company, index: number) =>\n value !== null && value !== undefined && value !== DEFAULT_EMPTY_VALUE ? (\n <TableCellPercentageGrowth value={value} record={record} />\n ) : (\n DEFAULT_EMPTY_VALUE\n ),\n width: 120,\n },\n {\n dataIndex: 'revenue_model',\n title: 'Revenue Model',\n className: 'revenue_model',\n sorter: true,\n render: (value: number, company: CompanyProfile) => (\n <EditFieldMultiSelect\n fieldName=\"Revenue Model\"\n record={company}\n isFromGrid={true}\n successMessage=\"Revenue Model updated successfully!\"\n errorMessage=\"Revenue Model update failed, Server error!\"\n value={company.revenue_model}\n destroyOnHide={true}\n />\n ),\n width: 130,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'cashflow',\n title: 'Cashflow',\n className: 'cashflow',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return (\n <EditFieldSingleSelect\n isFromGrid\n value={value || DEFAULT_EMPTY_VALUE}\n record={record}\n fieldName=\"Cashflow\"\n successMessage=\"Cashflow updated successfully!\"\n errorMessage=\"Cashflow update failed, Server error!\"\n fieldKey={'cashflow' as CompanyUserValuesKeys}\n />\n );\n },\n width: 160,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'deal_type',\n title: 'Deal Type',\n className: 'deal_type',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldSingleSelect\n isFromGrid\n value={value || DEFAULT_EMPTY_VALUE}\n record={record}\n fieldName=\"Deal Type\"\n successMessage=\"Deal Type updated successfully!\"\n errorMessage=\"Deal Type update failed, Server error!\"\n service={CompanyService.addOpportunityPresentation}\n fieldKey={'deal_type' as CompanyUserValuesKeys}\n />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'banker_name',\n title: 'Banker',\n className: 'banker_name',\n sorter: true,\n render: (value: number, company: CompanyProfile) => (\n <EditFieldCheckboxText\n companyId={company.company_id}\n checkboxKey=\"banker\"\n textInputKey=\"banker_name\"\n checkValue={(company.banker as boolean) ?? null}\n textValue={company.banker_name ?? undefined}\n />\n ),\n width: 130,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'asking_amount',\n title: 'Equity Check (Ask Amount)',\n className: 'asking_amount',\n sorter: true,\n render: (value: number, record: Company, index: number) => (\n <EditFieldText record={record} value={value} isFromGrid fieldName=\"Asking Amount\" />\n ),\n\n width: 200,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'customer_type',\n title: 'Customer Type',\n className: 'customer_type',\n sorter: true,\n render: (value: string[], record: CompanyProfile) => (\n <EditFieldMultiSelect\n record={record}\n fieldName=\"Customer Type\"\n isFromGrid={true}\n successMessage=\"Customer Type updated successfully!\"\n errorMessage=\"Customer Type update failed, Server error!\"\n value={value}\n destroyOnHide={true}\n fieldRationaleValue={\n // temporary added to the condition checking on 'undefined' value\n // while api will make migration and bring this field to the Company object\n record.customer_other_rationale === undefined ? '' : record.customer_other_rationale\n }\n />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'sales_and_marketing',\n title: 'Sales & Marketing',\n className: 'sales_and_marketing',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldSingleSelect\n isFromGrid\n value={value || DEFAULT_EMPTY_VALUE}\n record={record}\n fieldName=\"Sales and Marketing\"\n successMessage=\"Sales and Marketing updated successfully!\"\n errorMessage=\"Sales and Marketing update failed, Server error!\"\n fieldKey=\"sales_and_marketing\"\n />\n ),\n width: 190,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'sales_cycle',\n title: 'Sales Cycle',\n className: 'sales_cycle',\n sorter: true,\n render: (value: number, company: CompanyProfile) => (\n <EditFieldMultiSelect\n fieldName=\"Sales Cycle\"\n record={company}\n isFromGrid={true}\n successMessage=\"Sales Cycle updated successfully!\"\n errorMessage=\"Sales Cycle update failed, Server error!\"\n value={company.sales_cycle}\n destroyOnHide={true}\n />\n ),\n width: 130,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'delivery_model',\n title: 'Delivery Model',\n className: 'delivery_model',\n sorter: true,\n render: (value: number, company: CompanyProfile) => (\n <EditFieldMultiSelect\n fieldName=\"Delivery Model\"\n record={company}\n isFromGrid={true}\n successMessage=\"Delivery Model updated successfully!\"\n errorMessage=\"Delivery Model update failed, Server error!\"\n value={company.delivery_model}\n destroyOnHide={true}\n />\n ),\n width: 130,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'cloud_provider',\n title: 'Cloud Provider',\n className: 'cloud_provider',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return (\n <EditFieldSingleSelect\n isFromGrid\n value={record.cloud_provider || DEFAULT_EMPTY_VALUE}\n record={record}\n fieldName=\"Cloud Provider\"\n successMessage=\"Cloud Provider updated successfully!\"\n errorMessage=\"Cloud Provider update failed, Server error!\"\n fieldKey={'cloud_provider' as CompanyUserValuesKeys}\n />\n );\n },\n width: 100,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'architecture',\n title: 'Architecture',\n className: 'architecture',\n sorter: true,\n render: (value: number, company: CompanyProfile) => (\n <EditFieldMultiSelect\n fieldName=\"Architecture\"\n record={company}\n isFromGrid={true}\n successMessage=\"Architecture updated successfully!\"\n errorMessage=\"Architecture update failed, Server error!\"\n value={company.architecture}\n destroyOnHide={true}\n />\n ),\n width: 130,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'last_valuation',\n title: 'Valuation',\n className: 'last_valuation',\n sorter: true,\n render: (value: number, record: Company) => (\n <TableCellFormatMoney\n value={value}\n record={record}\n formatValue={val => roundNumber(val, `$${NUMBER_FORMAT}`).toUpperCase()}\n />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'last_touch_date',\n title: 'Last Touch',\n className: 'last_touch_date',\n sorter: true,\n render: (value: string, record: Company) => (\n <TableCellDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={\n value !== DEFAULT_LAST_TOUCH && value !== DEFAULT_NEXT_TOUCH ? undefined : value\n }\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'next_touch_date',\n title: 'Scheduled Touch',\n className: 'next_touch_date',\n sorter: true,\n render: (value: string | string[], record: Company, index: number) => (\n <TableCellListDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={typeof value === 'string' ? value : undefined}\n />\n ),\n width: 220,\n ellipsis: true,\n },\n {\n dataIndex: 'next_touch_initiator_name',\n title: 'Scheduled Touch Initiated By',\n className: 'next_touch_initiator_name',\n sorter: true,\n width: 240,\n render: (value: Array<string>, record: Company, index: number) => (\n <TableCellListDefault value={value} record={record} />\n ),\n ellipsis: true,\n },\n {\n dataIndex: 'last_touch_initiator_name',\n title: 'Last Touch Initiated By',\n className: 'last_touch_initiator_name',\n sorter: true,\n width: 160,\n render: (value: string | null) => <div>{value}</div>,\n ellipsis: true,\n },\n {\n dataIndex: 'current_ceo',\n title: 'CEO',\n className: 'current_ceo',\n sorter: true,\n render: TableCellDefaultRender,\n width: 90,\n ellipsis: true,\n },\n {\n dataIndex: 'ceo_approval',\n title: 'CEO Approval',\n className: 'ceo_approval',\n sorter: true,\n width: 90,\n align: 'right',\n render: (value: string | null) => <div>{value}</div>,\n ellipsis: true,\n },\n {\n dataIndex: 'g2_rating',\n title: 'G2Crowd Rating',\n className: 'g2_rating',\n sorter: true,\n width: 90,\n align: 'right',\n render: (value: string | null) => <div>{value}</div>,\n ellipsis: true,\n },\n {\n dataIndex: 'g2_review_count',\n title: 'G2Crowd Reviews',\n className: 'g2_review_count',\n sorter: true,\n width: 90,\n align: 'right',\n render: (value: string | null) => <div>{value}</div>,\n ellipsis: true,\n },\n {\n dataIndex: 'ct_rating',\n title: 'Capterra Rating',\n className: 'ct_rating',\n sorter: true,\n width: 90,\n align: 'right',\n render: (value: string | null) => <div>{value}</div>,\n ellipsis: true,\n },\n {\n dataIndex: 'ct_review_count',\n title: 'Capterra Reviews',\n className: 'ct_review_count',\n sorter: true,\n width: 90,\n align: 'right',\n render: (value: string | null) => <div>{value}</div>,\n ellipsis: true,\n },\n {\n dataIndex: 'size_multiple',\n title: 'Size Multiple',\n className: 'size_multiple',\n sorter: true,\n render: (value: number | null | string, record: Company) => (\n <TableCellNumber value={value} record={record} />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'cb_rank',\n title: 'Crunchbase Rank',\n className: 'cb_rank',\n sorter: true,\n render: (value: number | null, record: Company) => (\n <TableCellNumber value={value} record={record} />\n ),\n width: 110,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'city',\n title: 'Town/City',\n className: 'city',\n sorter: true,\n render: TableCellDefaultRender,\n width: 100,\n ellipsis: true,\n },\n {\n dataIndex: 'state',\n title: 'State/Province',\n className: 'state',\n sorter: true,\n render: TableCellDefaultRender,\n width: 130,\n ellipsis: true,\n },\n {\n dataIndex: 'country',\n title: 'Country',\n className: 'country',\n sorter: true,\n render: TableCellDefaultRender,\n width: 100,\n ellipsis: true,\n },\n {\n dataIndex: 'source_tag',\n title: 'Source',\n ellipsis: false,\n className: 'source_tag',\n sorter: true,\n render: (value: Array<CompanySourceTag>, record: Company) => (\n <TableCellListDefault value={value} record={record} shouldBeInUpperCase />\n ),\n width: 180,\n },\n {\n dataIndex: 'linkedin',\n title: 'Linkedin Profile',\n className: 'linkedin',\n sorter: true,\n render: (value: string, record: Company) => (\n <EditFieldText\n value={value}\n record={record}\n isFromGrid\n service={CompanyService.updateLinkedinURL}\n fieldName=\"Linkedin Profile\"\n entityType=\"company\"\n isURL\n />\n ),\n width: 90,\n ellipsis: true,\n },\n {\n dataIndex: 'is_in_business',\n title: 'In Business',\n className: 'is_in_business',\n sorter: true,\n render: (value, record, index) => (\n <EditFieldRadio\n value={value}\n record={record}\n fieldName=\"In Business\"\n service={UserService.addCompanyInBusinessEvaluation}\n successMessage=\"Company in business state updated successfully!\"\n errorMessage=\"Failed to update company in business state!\"\n isFromGrid\n />\n ),\n width: 90,\n ellipsis: true,\n },\n {\n dataIndex: 'active',\n title: 'Active on Pipeline',\n className: 'active',\n sorter: true,\n render: (value, record, index) => (\n <EditFieldRadio\n value={value}\n record={record}\n service={UserService.updateCompanyUserValues}\n fieldName=\"Active on Pipeline\"\n successMessage=\"Company active state updated successfully!\"\n errorMessage=\"Failed to update company active state!\"\n isFromGrid\n />\n ),\n width: 90,\n ellipsis: true,\n },\n {\n dataIndex: 'url_status',\n title: 'Website',\n className: 'url_status',\n sorter: true,\n render: (value: URLStatus | null, record: Company) => (\n <EditFieldRadio\n value={value}\n record={record}\n fieldName=\"Website Status\"\n service={UserService.updateCompanyUserValues}\n successMessage=\"Company website status updated successfully!\"\n errorMessage=\"Failed to update value!\"\n isFromGrid\n isFromHistory\n />\n ),\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'next_steps',\n title: 'Next Steps',\n className: 'next_steps',\n sorter: true,\n render: (value: string | null, record: Company) => {\n return value ? (\n <div>{value === 'None' ? DEFAULT_EMPTY_VALUE : value}</div>\n ) : (\n handleUnownedValue(value, 'Next Steps')\n );\n },\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'created_on_optx',\n title: 'Date Created',\n className: 'created_on_optx',\n sorter: true,\n render: (value: string, record: Company) => (\n <TableCellDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={!value || value === DEFAULT_CELL_VALUE ? DEFAULT_CELL_VALUE : undefined}\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'transaction_notes',\n title: 'Commentary',\n className: 'transaction_notes',\n sorter: false,\n render: (value: string, record: CompanyProfile) => (\n <EditFieldTextarea\n value={value}\n record={record}\n fieldName=\"Commentary\"\n isFromGrid\n service={CompanyService.addOpportunityPresentation}\n successMessage=\"Company commentary updated successfully!\"\n errorMessage=\"Company commentary update failed, Server error!\"\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'date_matched',\n title: 'Date Matched',\n className: 'date_matched',\n sorter: true,\n render: (value: string, record: CompanyProfile, index: number) => (\n <TableCellNewMatched\n value={value}\n record={record}\n index={index}\n isNewMatched={record.is_new_matched}\n format={globalConfig.short_date.DATE_FORMAT}\n />\n ),\n width: 240,\n },\n {\n dataIndex: 'deal_team',\n title: 'Deal Team',\n className: 'deal_team',\n sorter: true,\n render: (value: number[] | null) => <TableCellDealTeams value={value} fieldType=\"Deal Team\" />,\n width: 150,\n ellipsis: true,\n },\n {\n dataIndex: 'senior_deal_team_lead',\n title: 'Senior Deal Team Lead',\n className: 'senior_deal_team_lead',\n sorter: true,\n render: (value: string) => (\n <TableCellDealTeams value={value} fieldType=\"Senior Deal Team Lead\" />\n ),\n width: 150,\n ellipsis: true,\n },\n {\n dataIndex: 'prev_stage',\n className: 'prev_stage',\n title: 'Previous Stage',\n sorter: true,\n render: TableCellDefaultRender,\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'is_ai_ml',\n title: 'AI / ML',\n className: 'is_ai_ml',\n sorter: true,\n render: (value: boolean | null, record: Company, index: number) => (\n <EditFieldRadio\n value={value}\n record={record}\n fieldName=\"AI / ML\"\n service={UserService.updateAiMl}\n successMessage=\"Company AI / ML updated successfully!\"\n errorMessage=\"Failed to update value!\"\n isFromGrid\n />\n ),\n width: 110,\n align: 'center',\n ellipsis: true,\n },\n {\n dataIndex: 'checklist_reviewed_by',\n title: 'Reviewer',\n className: 'checklist_reviewed_by',\n sorter: true,\n render: TableCellDefaultRender,\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'checklist_reviewed_date',\n title: 'Date Reviewed',\n className: 'checklist_reviewed_date',\n sorter: true,\n render: (value: string) => (\n <TruncateTooltip\n title={moment(value, ISO_DATE_FORMAT).format(globalConfig.grid_date.DATE_FORMAT)}\n >\n {moment(value, ISO_DATE_FORMAT).format(globalConfig.grid_date.DATE_FORMAT)}\n </TruncateTooltip>\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'last_viewed',\n title: 'Last Viewed',\n className: 'last_viewed',\n sorter: true,\n render: (value: string, record: Company) => (\n <TableCellDate\n value={value}\n format={globalConfig.grid_date.DATE_FORMAT}\n record={record}\n defaultValue={!value || value === DEFAULT_CELL_VALUE ? DEFAULT_CELL_VALUE : undefined}\n />\n ),\n width: 120,\n ellipsis: true,\n },\n];\n\nexport default columns;\n","import React, { useMemo } from 'react';\n// models\nimport Company from '@models/Company';\nimport { SourceScrubList } from '@optx/models/SourceScrubList';\nimport { Analyst } from '@features/checklist-research-insights/models/analyst';\n// constants\nimport defaultColumnsFast from '@components/common/table/Companies/columns/virtual-column-config-fast-load';\n\ninterface TestingGridTableProps {\n companies: Company[] | SourceScrubList[] | Analyst[];\n columns: any[];\n maxHeight?: string;\n}\n\nconst updateFinalColumns = (columns: any[], defaultColumnsFast: any[]) => {\n const columnsSet = new Set(columns.map(col => col.dataIndex));\n const finalColumns = defaultColumnsFast.filter(col => columnsSet.has(col.dataIndex));\n\n return finalColumns;\n};\n\nconst TestingGridTable: React.FC<TestingGridTableProps> = ({\n companies,\n columns,\n maxHeight = 'calc(100vh - 270px)',\n}) => {\n const mergedColumns = useMemo(() => {\n return updateFinalColumns(columns, defaultColumnsFast);\n }, [columns]);\n\n if (columns.length === 0 || companies.length === 0) return null;\n\n return (\n <div\n style={{\n overflow: 'auto',\n maxWidth: '100%',\n maxHeight: maxHeight,\n background: '#fff',\n marginBottom: '60px',\n }}\n >\n <table>\n <thead className=\"ant-table-thead\">\n <tr className=\"ant-table-cell\">\n {mergedColumns.map((col, index) => {\n return (\n <th\n key={index}\n style={{\n padding: '15px',\n maxWidth: col.width + 'px',\n width: col.width + 'px',\n background: 'rgb(250, 250, 250)',\n }}\n >\n {col.title}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"ant-table-tbody\">\n {companies.map((row: any, index: number) => {\n return (\n <tr className=\"ant-table-row\" key={index}>\n {mergedColumns.map((col, index) => {\n return (\n <td\n key={`td-${index}`}\n className={`ant-table-cell ${col.className}`}\n style={{\n padding: '15px',\n maxWidth: col.width + 'px',\n width: col.width + 'px',\n minHeight: '220px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {col?.render && col?.dataIndex\n ? col.render(row[col.dataIndex], row, index)\n : ''}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n};\n\nexport default TestingGridTable;\n","import React from 'react';\nimport { FieldProps } from 'formik';\nimport { ValueType } from 'react-select';\nimport { MultiSelect, MultiSelectProps } from '@shared/view/molecules/Select';\nimport { SelectOption } from '@optx/models/Option';\n// hooks\nimport useLocalMultiSelect from '@optx/common/hooks/select/useLocalMultiSelect';\n\ninterface FormikMultiSelectCustomProps {\n customOnChange?: (value: Array<ValueType<SelectOption<string | number>>>) => void;\n isContactForm?: boolean;\n}\n\ntype FormikMultiSelectProps = FieldProps &\n FormikMultiSelectCustomProps &\n // @ts-ignore ignore for now to temporary fix more complex issue with number values.\n MultiSelectProps<SelectOption<string | number>>;\n\nconst FormikMultiSelect = ({\n form,\n field,\n customOnChange,\n meta,\n isContactForm,\n ...restProps\n}: FormikMultiSelectProps) => {\n const { setFieldValue } = form;\n const { name, value } = field;\n\n const handleChange = (value: ValueType<SelectOption<string | number>>) => {\n setFieldValue(name, value);\n customOnChange && customOnChange(value as Array<ValueType<SelectOption<string | number>>>);\n };\n\n const { localValue, onBlur, onChange } = useLocalMultiSelect(value, handleChange);\n\n return (\n // @ts-ignore\n <MultiSelect\n {...restProps}\n name={name}\n onChange={onChange}\n value={localValue}\n onBlur={onBlur}\n />\n );\n};\n\nexport default FormikMultiSelect;\n","import { useState, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Dictionary } from 'lodash';\n// Models\nimport { CompanyWatchList } from '@optx/models/WatchList';\nimport Company from '@optx/models/Company';\nimport { FavoritesCompaniesEditableNames } from '@optx/features/edit-all-info/state/interfaces';\n// utils\nimport { handlePendoAction } from '@optx/utils/utils';\n// redux\nimport { actions as modalActions } from '@redux/ui/modals/company-notes';\nimport { actions as modalTouchesActions } from '@redux/ui/modals/company-touches';\nimport { actions as modalActionsAddResearch } from '@optx/features/add-research-rationale/state';\nimport { actions as notesActions } from '@redux/company/notes/companyNotes';\nimport { selectors as listSelectors } from '@redux/lists/details';\nimport { actions as companyReviewActions } from '@features/company-review/state/index';\nimport {\n selectors as favoriteListsSelectors,\n actions as favoriteListsActions,\n} from '@redux/favorite-lists/lists-popup';\nimport { actions as companyListsActions } from '@redux/favorite-lists/company-lists';\nimport { actions as companyEditAllActions } from '@optx/features/edit-all-info/state';\n\n// get the company ID from the URL because the one from redux is read as -1 at first\nconst companyID = parseInt(window.location.pathname.replace('/profile/', ''));\nconst isFromGrid = isNaN(companyID);\n\nexport const useDropdownAdd = (\n companyId: number,\n companyName: string,\n company: Company,\n index?: number,\n noteId?: number\n) => {\n // redux\n const dispatch = useDispatch();\n const toggleCompanyNotesModal = useCallback(() => {\n document.body.classList.remove('popover-visible');\n dispatch(\n modalActions.toggleCompanyNotesDialog({\n companyId,\n companyName,\n })\n );\n }, [dispatch, companyId, companyName]);\n\n const toggleCompanyTouchesModal = useCallback(\n (callback?: () => void) => {\n document.body.classList.remove('popover-visible');\n dispatch(\n modalTouchesActions.toggleCompanyTouchesDialog({\n companyId,\n companyName,\n company,\n isFromGrid,\n callback,\n })\n );\n },\n [dispatch, companyId, company, companyName]\n );\n\n const toggleEditAllModal = useCallback(() => {\n document.body.classList.remove('popover-visible');\n dispatch(\n companyEditAllActions.toggleCompanyEditAllFormDialog({\n companyId,\n companyName,\n company,\n })\n );\n }, [dispatch, companyId, company, companyName]);\n\n const toggleFavoriteCompanyEditableField = (\n fieldName: FavoritesCompaniesEditableNames,\n value?: number | null\n ) => {\n dispatch(\n companyEditAllActions.updateFavoriteCompanyEditInfo({\n fieldName,\n value,\n })\n );\n toggleEditAllModal();\n };\n\n const toggleCompanyEditFavoritesTab = useCallback(() => {\n document.body.classList.remove('popover-visible');\n dispatch(\n companyEditAllActions.toggleCompanyEditAllFormDialog({\n companyId,\n companyName,\n company,\n })\n );\n dispatch(companyEditAllActions.setEditCompanyActiveTabName('favoritesTab'));\n }, [company, companyId, companyName, dispatch]);\n\n const toggleAddResearchRationale = useCallback(\n (callback?: () => void) => {\n document.body.classList.remove('popover-visible');\n dispatch(modalActionsAddResearch.toggleAddResearchRationale({ companyId, callback }));\n },\n [dispatch, companyId]\n );\n\n const filterListId = useSelector(listSelectors.getFilterListId);\n const favoritesLists: Dictionary<CompanyWatchList> = useSelector(\n favoriteListsSelectors.getAllWatchlists\n );\n\n // local state\n // dropdowns\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const [openDropdownSelectList, setOpenDropdownSelectList] = useState(false);\n const [openRationalePopover, setRationalePopover] = useState(false);\n\n const [openEditNotePopover, setOpenEditNotePopover] = useState(false);\n\n const toggle = () => {\n setDropdownOpen(prevState => !prevState);\n };\n\n const toggleEditNote = () => {\n setOpenEditNotePopover(prevState => !prevState);\n\n if (openEditNotePopover) {\n document.body.classList.remove('popover-visible');\n }\n };\n\n const toggleRationale = () => {\n setRationalePopover(prevState => !prevState);\n\n if (openRationalePopover) {\n document.body.classList.remove('popover-visible');\n }\n };\n\n const toggleSelectList = () => {\n // update List\n dispatch(favoriteListsActions.fetchFavoriteListsPopup());\n\n dispatch(companyListsActions.fetchListsExcludingCompany(companyId));\n setOpenDropdownSelectList(prevState => !prevState);\n\n if (openDropdownSelectList) {\n document.body.classList.remove('popover-visible');\n }\n };\n\n const deleteFromWatchList = useCallback(\n (filterListId, companyId) => {\n document.body.classList.remove('popover-visible');\n dispatch(\n favoriteListsActions.deleteCompanyFromListPopup({\n list_id: filterListId,\n company_id: companyId,\n })\n );\n },\n [dispatch]\n );\n\n const removeNote = useCallback(() => {\n if (noteId) {\n dispatch(notesActions.deleteCompanyNote({ companyId, noteId }));\n document.body.classList.remove('popover-visible');\n }\n }, [companyId, dispatch, noteId]);\n\n const companyReview = () => {\n dispatch(\n companyReviewActions.addCompanyReview({\n companyId,\n })\n );\n window.pendo.track(handlePendoAction('MarkAsReviewed'));\n };\n\n return {\n filterListId,\n favoritesLists,\n toggle,\n toggleSelectList,\n dropdownOpen,\n openDropdownSelectList,\n toggleCompanyNotesModal,\n toggleCompanyTouchesModal,\n toggleAddResearchRationale,\n openEditNotePopover,\n toggleEditNote,\n openRationalePopover,\n toggleRationale,\n deleteFromWatchList,\n removeNote,\n companyReview,\n toggleEditAllModal,\n toggleCompanyEditFavoritesTab,\n toggleFavoriteCompanyEditableField,\n };\n};\n","/**\n * Scrolls the table to the left when sorting, addressing the issue in Firefox.\n *\n * @param {React.RefObject<HTMLDivElement>} tableRef - Reference to the HTML div element containing the table.\n * @returns {void}\n */\n\nconst scrollTableOnSorting = (tableRef: React.RefObject<HTMLDivElement>) => {\n if (tableRef.current) {\n // scroll table to the left when sorting, issue for firefox\n const header = tableRef.current.querySelector('.ant-table-header');\n const body = tableRef.current.querySelector('.ant-table-body');\n if (header) header.scrollLeft = 0;\n if (body) body.scrollLeft = 0;\n }\n};\n\nexport default scrollTableOnSorting;\n","import { MAX_SELECT_ALL_COMPANIES } from '@optx/config/bulkConfig';\n\n/**\n * Disables the \"Select All\" checkbox in a table when certain conditions are met.\n *\n * This function is used to prevent users from selecting more companies than allowed\n * by disabling the \"Select All\" checkbox in the table header. The checkbox is disabled\n * based on the current selected rows, page size, and the number of companies already selected.\n *\n * @param selectedRows - The current number of selectedRows.\n * @param pageSize - The number of items displayed per page.\n * @param selectedCompaniesCount - The total number of companies that have been selected.\n *\n */\n\nexport function disableSelectAllCheckbox(\n selectedRows: number,\n pageSize: number,\n selectedCompaniesCount: number\n): void {\n const selectAllCheckbox = document.querySelector(\n '.ant-table-thead .ant-checkbox input[type=\"checkbox\"]'\n );\n\n const numberOfRowsAvailableForSelection = MAX_SELECT_ALL_COMPANIES - selectedCompaniesCount;\n const numberOfRowsToBeSelected = pageSize - selectedRows;\n\n if (selectAllCheckbox instanceof HTMLInputElement) {\n if (!selectAllCheckbox?.checked) {\n if (numberOfRowsToBeSelected === numberOfRowsAvailableForSelection) {\n selectAllCheckbox.disabled = false;\n }\n\n if (numberOfRowsToBeSelected > numberOfRowsAvailableForSelection) {\n selectAllCheckbox.disabled = true;\n }\n } else {\n selectAllCheckbox.disabled = false;\n }\n }\n}\n","import { RefObject, useEffect } from 'react';\nimport { SortByRule } from '@optx/models/table/sorting';\n\n/**\n * Custom hook for setting numbers for column sorting priority\n *\n * @param tableWrapperRef A reference to the HTMLDivElement containing the table.\n * @param sorting An array of SortByRule objects representing the sorting rules.\n * @param isMultiSort A boolean indicating whether multi-sorting is enabled.\n * @param isLoading A boolean indicating whether the table is in a loading state.\n */\n\nconst useMultiSortNumbers = (\n tableWrapperRef: RefObject<HTMLDivElement>,\n sorting: SortByRule<any>[],\n isMultiSort: boolean,\n isLoading?: boolean\n) => {\n useEffect(() => {\n if (tableWrapperRef.current) {\n const header = tableWrapperRef.current.querySelector('.ant-table-header');\n\n if (header) {\n const allCells = header.querySelectorAll('th');\n allCells.forEach(cell => {\n // eslint-disable-next-line no-param-reassign\n delete cell.dataset.order;\n });\n\n sorting.forEach((sortRule, index) => {\n const sortingCell = header.querySelector(`th.${sortRule.id}`) as HTMLElement;\n\n if (sortingCell && isMultiSort) {\n sortingCell.dataset.order = (index + 1).toString();\n }\n\n return null;\n });\n }\n }\n }, [isMultiSort, sorting, tableWrapperRef, isLoading]);\n};\n\nexport default useMultiSortNumbers;\n","import { useEffect } from 'react';\n\n/**\n * Custom hook to manage the \"select all\" state based on selected row keys and page size.\n * @param selectedRowKeys - Array of selected row keys.\n * @param actualPageSize - The actual page size to compare against.\n * @param setShowSelectAll - Function to set the \"select all\" state.\n */\nconst useSelectAll = (\n selectedRowKeys: React.ReactText[],\n actualPageSize: number,\n setShowSelectAll: React.Dispatch<React.SetStateAction<boolean>>\n) => {\n useEffect(() => {\n if (selectedRowKeys.length === actualPageSize) {\n setShowSelectAll(true);\n } else {\n setShowSelectAll(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedRowKeys, actualPageSize]);\n};\n\nexport default useSelectAll;\n","import React, { useEffect, useRef } from 'react';\nimport { debounce } from 'lodash';\nimport classNames from 'classnames';\n// constants\nimport { MENU_COLLAPSED } from '@optx/storage/localStorage/menuStorage';\n// styles\nimport './styles.scss';\n\ninterface ExternalScrollProps {\n refElement: React.RefObject<HTMLDivElement>;\n contentWidth?: number | null;\n isVirtualGrid?: boolean;\n}\n\nconst ExternalScroll: React.FC<ExternalScrollProps> = ({\n refElement,\n contentWidth,\n isVirtualGrid,\n}) => {\n const scrollWrapper = useRef<HTMLDivElement>(null);\n const isMenuCollapsed = localStorage.getItem(MENU_COLLAPSED);\n const normalizedIsMenuCollapsed = isMenuCollapsed !== null ? JSON.parse(isMenuCollapsed) : false;\n\n /**\n * Move the external scroll or the grid/refElement according\n */\n const handleScroll = (isScroll: boolean) => {\n const scrollCurrent = scrollWrapper.current;\n const gridCurrent = isVirtualGrid ? refElement.current : refElement.current?.children[0];\n\n if (scrollCurrent && gridCurrent && scrollCurrent.scrollLeft !== gridCurrent.scrollLeft) {\n if (isScroll) {\n const scrollLeftMax = gridCurrent.scrollWidth - gridCurrent.clientWidth;\n const { scrollLeft } = scrollCurrent;\n\n let addedSize = 0; // fix for last column not showing up properly\n if (scrollLeftMax - 1 === scrollLeft) addedSize = 1; // chrome and other browsers\n else if (scrollLeftMax - 18 === scrollLeft) addedSize = 18; // firefox\n\n gridCurrent.scrollTo({ left: scrollLeft + addedSize });\n } else {\n scrollCurrent.scrollTo({ left: gridCurrent.scrollLeft });\n }\n }\n };\n\n /**\n * When the external scroll moves\n */\n const handleScrollElement = () => {\n handleScroll(true);\n };\n\n /**\n * When the grid/refElement moves\n */\n const handleGridElement = () => {\n handleScroll(false);\n };\n\n /**\n * If there is change in the content width, this updates the scroll width to match it.\n */\n useEffect(() => {\n if (scrollWrapper.current) {\n const scrollElementDiv = scrollWrapper.current.children[0];\n (scrollElementDiv as HTMLElement).style.width = `${contentWidth}px`;\n }\n\n const gridCurrent = isVirtualGrid ? refElement.current : refElement.current?.children[0];\n const scrollCurrent = scrollWrapper.current;\n\n // move scroll to the previous position once content width changed\n if (scrollCurrent && gridCurrent && scrollCurrent.scrollLeft !== gridCurrent.scrollLeft) {\n scrollCurrent.scrollTo({ left: gridCurrent.scrollLeft });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [contentWidth]);\n\n /**\n * Define the scroll event for the elements\n */\n useEffect(() => {\n if (refElement.current && scrollWrapper.current) {\n const gridCurrent = refElement.current;\n const scrollCurrent = scrollWrapper.current;\n\n const scrollElementDiv = scrollCurrent.children[0];\n\n const refElementContent = document.querySelector(`.${gridCurrent.className} table`);\n\n if (refElementContent) {\n const offsetWidth = (refElementContent as HTMLElement).offsetWidth;\n\n // set the external scroll size to be the same as the grid content\n (scrollElementDiv as HTMLElement).style.width = `${\n // for some reason scroll width in virtual grid needs to be a bit bigger to be able to scoll entire content.\n // isVirtualGrid ? offsetWidth + 19 : offsetWidth\n // tested above and saw no difference in scrolling behaviour. Let it commented for now.\n isVirtualGrid && offsetWidth\n }px`;\n }\n\n (scrollCurrent as GlobalEventHandlers).onscroll = debounce(handleScrollElement, 2);\n (gridCurrent as unknown as GlobalEventHandlers).onscroll = debounce(handleGridElement, 10);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refElement.current]);\n\n const customClassName = classNames(\n 'external-scroll-wrapper',\n normalizedIsMenuCollapsed && 'external-scroll-menu-collapsed'\n );\n\n return (\n <div className={customClassName} ref={scrollWrapper}>\n <div className=\"external-scroll\" />\n </div>\n );\n};\n\nexport default ExternalScroll;\n","import React, { ReactNode, ReactText } from 'react';\nimport { Tooltip } from 'antd';\n// constants\nimport { MAX_SELECT_ALL_COMPANIES } from '@optx/config/bulkConfig';\n\ninterface RenderCellProps {\n companyId: number;\n originNode: ReactNode;\n selectedRowKeys: ReactText[];\n selectedCompaniesCount: number;\n}\n\nconst RenderCell: React.FC<RenderCellProps> = ({\n companyId,\n originNode,\n selectedRowKeys,\n selectedCompaniesCount,\n}) => {\n const isDisabled =\n selectedCompaniesCount >= MAX_SELECT_ALL_COMPANIES && !selectedRowKeys.includes(companyId);\n\n return (\n <>\n {isDisabled ? (\n <Tooltip title={`Only a maximum of ${MAX_SELECT_ALL_COMPANIES} companies can be selected.`}>\n {originNode}\n </Tooltip>\n ) : (\n originNode\n )}\n </>\n );\n};\n\nexport default RenderCell;\n","import { SearchSaveResponse } from '@optx/models/search';\n\n/**\n * Maps tags to names and operators based on the provided parentIds, allSearches, and operators.\n *\n * @param parentIds - An array of numbers representing the parent IDs.\n * @param allSearches - An array of SearchSaveResponse objects containing all searches.\n * @param operators - An array of strings representing operators.\n * @returns An array of strings containing the mapped names and operators.\n */\nexport const mapTagsToNamesAndOperators = (\n parentIds: number[] | undefined,\n allSearches: SearchSaveResponse[],\n operators: string[] | undefined\n): string[] => {\n const parentSearches = parentIds?.map(\n id => allSearches.find(search => search.unique_id === id)?.title\n );\n\n if (!parentSearches || !operators) {\n return [];\n }\n\n return parentSearches.flatMap((parentSearch, i) => {\n if (operators[i] !== undefined) {\n return [parentSearch, operators[i]] as string[];\n } else {\n return [parentSearch] as string[];\n }\n });\n};\n","import { Menu, MenuProps } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport { useDispatch, useSelector } from 'react-redux';\n// redux\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\n\ninterface ClearAllSortingMenuItemProps extends MenuItemProps {\n gridName: 'advancedSearch' | 'myCompanies' | 'lists' | 'outreachDetails';\n}\n\nconst ClearAllSortingMenuItem = ({\n onClick,\n gridName,\n ...restProps\n}: ClearAllSortingMenuItemProps) => {\n const dispatch = useDispatch();\n const sorting = useSelector(sortSelectors.getSorting(gridName));\n\n const clearSort = () => dispatch(sortActions.resetSort(gridName));\n\n if (!sorting.length) {\n return null;\n }\n\n const handleClick: MenuProps['onClick'] = info => {\n onClick && onClick(info);\n clearSort();\n };\n\n return (\n <Menu.Item onClick={handleClick} {...restProps}>\n Clear All Sorting\n </Menu.Item>\n );\n};\n\nexport default ClearAllSortingMenuItem;\n","import { useCallback } from 'react';\nimport { Menu, MenuProps } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport { useDispatch, useSelector } from 'react-redux';\n// redux\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as searchViewSelectors } from '@features/grid/view-type';\n\ninterface ToggleSortTypeMenuItemProps extends MenuItemProps {\n gridName: 'advancedSearch' | 'myCompanies' | 'lists' | 'outreachDetails';\n}\n\nconst ToggleSortTypeMenuItem = ({\n onClick,\n gridName,\n ...restProps\n}: ToggleSortTypeMenuItemProps) => {\n const dispatch = useDispatch();\n const isMultiSort = useSelector(sortSelectors.isMultiSort(gridName));\n const sorting = useSelector(sortSelectors.getSorting(gridName));\n const searchView = useSelector(searchViewSelectors.searchView(gridName));\n const toggleSortType = useCallback(\n () => dispatch(sortActions.changeMultiSort(!isMultiSort, gridName, sorting)),\n [dispatch, gridName, isMultiSort, sorting]\n );\n\n const handleClick: MenuProps['onClick'] = info => {\n onClick && onClick(info);\n toggleSortType();\n };\n\n if (searchView === 'long-card') return null;\n\n return (\n <Menu.Item onClick={handleClick} {...restProps}>\n {isMultiSort ? 'Enable Single Sort' : 'Enable Multi Sort'}\n </Menu.Item>\n );\n};\n\nexport default ToggleSortTypeMenuItem;\n","import React from 'react';\nimport { MoreOutlined } from '@ant-design/icons';\nimport { Dropdown, Menu, Button } from 'antd';\nimport './style.scss';\n\ninterface DropdownDotRemoveProps {\n id: number;\n label?: string;\n handleDeleteItem: (noteId: number) => void;\n handleEditItem?: () => void;\n}\n\nconst DropdownDotRemove: React.FC<DropdownDotRemoveProps> = ({\n id,\n label,\n handleDeleteItem,\n handleEditItem,\n}) => {\n const dropddownMenu = (\n <Menu>\n <Menu.Item key=\"delete-menu\">\n <Button type=\"text\" onClick={() => handleDeleteItem(id)}>\n {label || 'Delete'}\n </Button>\n </Menu.Item>\n {handleEditItem && (\n <Menu.Item key=\"edit-menu\">\n <Button type=\"text\" onClick={() => handleEditItem()}>\n {label || 'Edit'}\n </Button>\n </Menu.Item>\n )}\n </Menu>\n );\n\n return (\n <div className=\"dropdown-dot-remove\">\n <Dropdown trigger={['click']} overlay={dropddownMenu}>\n <Button icon={<MoreOutlined />} />\n </Dropdown>\n </div>\n );\n};\n\nexport default DropdownDotRemove;\n","import React, { useState, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Input, Button } from 'antd';\nimport moment from 'moment';\n// constants\nimport globalConfig from '@optx/constants/config';\nimport { MAX_CHAR_LENGTH } from '@constants/notes';\n// models\nimport { CompanyNotification } from '@optx/models/Company';\n// redux\nimport { actions as searchNotesActions } from '@redux/company/notes/search';\nimport { selectors as userSelectors } from '@redux/user/information';\n// components\nimport avatarImg from '../../assets/images/users/avatar-default.png';\nimport DropdownDotRemove from '../common/DropdownDotRemove';\n\ninterface CardNotificationProps {\n note: CompanyNotification;\n onDeleteCompanyNote: (noteId: number) => void;\n}\n\nconst CardNotification: React.FC<CardNotificationProps> = ({ note, onDeleteCompanyNote }) => {\n const dispatch = useDispatch();\n\n const [value, setValue] = useState(note?.note_text);\n const [isEditing, setIsEditing] = useState(false);\n\n const userName = useSelector(userSelectors.getUserName);\n\n const updateNote = useCallback(\n (text: string) => dispatch(searchNotesActions.updateNote(note, text)),\n [dispatch, note]\n );\n\n const handleEdit = () => {\n setIsEditing(true);\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(event.currentTarget.value);\n };\n\n const handleCancel = () => {\n setIsEditing(false);\n setValue(note?.note_text);\n };\n\n const handleSave = () => {\n setIsEditing(false);\n updateNote(value);\n };\n\n if (!note) {\n return null;\n }\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n handleSave();\n }\n };\n\n return (\n <div className=\"card-notification\">\n <div className=\"card-notification__user\">\n <div className=\"card-notification__avatar\">\n <img src={avatarImg} alt=\"avatar\" />\n </div>\n <div className=\"card-notification__info\">\n <div className=\"card-notification__name\">{userName}</div>\n <div className=\"card-notification__time\">\n {moment(note.note_created_date).format(globalConfig.grid_date.DATE_FORMAT)}\n </div>\n </div>\n <DropdownDotRemove\n id={note.note_unique_id}\n handleDeleteItem={onDeleteCompanyNote}\n handleEditItem={handleEdit}\n />\n </div>\n\n {isEditing ? (\n <>\n <Input.TextArea\n name=\"note_text\"\n placeholder=\"Add your note here\"\n value={value}\n onChange={handleChange}\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n maxLength={MAX_CHAR_LENGTH}\n />\n <div className=\"profile-notes__edit-buttons\">\n <Button className=\"profile-notes__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button type=\"primary\" onClick={handleSave}>\n Save note\n </Button>\n </div>\n </>\n ) : (\n <div className=\"card-notification__message\">{note.note_text}</div>\n )}\n </div>\n );\n};\n\nexport default CardNotification;\n","import React, { useState, useCallback, ChangeEvent } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { size } from 'lodash';\nimport { Drawer, Button, Input } from 'antd';\n// styles\nimport './style.scss';\n// models\nimport { CompanyNotification } from '@optx/models/Company';\nimport { AppState } from '@optx/redux/interfaces';\n// constants\nimport { MAX_CHAR_LENGTH } from '@constants/notes';\n// redux\nimport { selectors, actions } from '@redux/company/notes/companyNotes';\nimport {\n selectors as modalSelectors,\n actions as modalActions,\n} from '@redux/ui/modals/company-notes';\n// hooks\nimport useShouldFetch from '@optx/common/hooks/fetch/useShouldFetch';\nimport { useInjectUI, useInjectFavoriteLists } from '@optx/common/hooks/inject';\n// components\nimport { LoadingBlock } from '@optx/shared/view/molecules/loader';\nimport iconCompany from '../../assets/images/company_ico@2x.png';\nimport CardNotification from './CardNotification';\n\nconst CompanyNotes: React.FC = () => {\n useInjectUI();\n useInjectFavoriteLists();\n const { company_id: companyId, company_name: companyName } = useSelector(\n modalSelectors.getCompanyInfo\n );\n\n const dispatch = useDispatch();\n const fetchNotes = useCallback(\n () => dispatch(actions.fetchCompanyNotes(companyId)),\n [dispatch, companyId]\n );\n const onCreateCompanyNote = useCallback(\n (noteText: string) =>\n dispatch(actions.addCompanyNote({ companyId, title: companyName, noteText })),\n [dispatch, companyId, companyName]\n );\n const onDeleteCompanyNote = useCallback(\n (noteId: number) => dispatch(actions.deleteCompanyNote({ companyId, noteId })),\n [dispatch, companyId]\n );\n const toggle = useCallback(() => {\n setNoteTextState('');\n\n return dispatch(\n modalActions.toggleCompanyNotesDialog({\n companyId,\n companyName,\n })\n );\n }, [dispatch, companyId, companyName]);\n\n const isOpen = useSelector(modalSelectors.isOpen);\n const shouldFetchNotes = useSelector<AppState, boolean>(state =>\n selectors.shouldFetch(state, companyId)\n );\n const isLoading = useSelector(selectors.isLoading);\n const errorNotifications = useSelector(selectors.getCompanyNotesError);\n const notifications = useSelector<AppState, Array<CompanyNotification>>(state =>\n selectors.getCompanyNotes(state, companyId)\n );\n\n useShouldFetch(shouldFetchNotes, fetchNotes);\n // local state\n const [noteText, setNoteTextState] = useState('');\n\n const onChangeText = (event: ChangeEvent<HTMLTextAreaElement>) => {\n setNoteTextState(event.target.value);\n };\n\n const handleCreateCompanyNote = () => {\n if (noteText) {\n onCreateCompanyNote(noteText);\n }\n\n if (!isLoading) {\n setNoteTextState('');\n }\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n handleCreateCompanyNote();\n }\n };\n\n return (\n <>\n <LoadingBlock loading={isLoading} />\n <Drawer\n title=\"Notes\"\n placement=\"right\"\n onClose={toggle}\n visible={isOpen}\n className=\"company-notes\"\n >\n <div className=\"company-buttons\">\n <Button className=\"btn-cancel\" onClick={toggle}>\n CANCEL\n </Button>{' '}\n <Button\n type=\"primary\"\n className=\"btn-send\"\n disabled={!noteText || !!errorNotifications}\n onClick={handleCreateCompanyNote}\n >\n SAVE\n </Button>\n </div>\n <div className=\"company-info\">\n <div className=\"company-logo\">\n <img\n style={{ width: 48, height: 48 }}\n src={iconCompany}\n alt=\"icon company\"\n className=\"\"\n />\n </div>\n <div className=\"company-name\">{companyName}</div>\n </div>\n <div className=\"company-notification\">\n {!errorNotifications ? (\n notifications.map(note => (\n <CardNotification\n key={note.note_unique_id}\n note={note}\n onDeleteCompanyNote={onDeleteCompanyNote}\n />\n ))\n ) : (\n <div className=\"message-error\">{errorNotifications}</div>\n )}\n </div>\n <div className=\"company-box-reply\">\n <div className=\"company-box-reply__title\">\n <span className=\"count-word\">\n {size(noteText)}\n /240\n </span>\n </div>\n <Input.TextArea\n name=\"note_text\"\n value={noteText}\n id=\"exampleText\"\n placeholder=\"Im typing a note/comment here\"\n onChange={onChangeText}\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n maxLength={MAX_CHAR_LENGTH}\n />\n </div>\n </Drawer>\n </>\n );\n};\n\nexport default React.memo(CompanyNotes);\n","import { createAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\n// types\nimport * as types from './actionTypes';\n\nexport const setGeoRange = createAction(\n types.SEARCH_GEO_RANGE,\n (geoRangeZipCode: string, geoRangeCountry: string) => ({\n payload: {\n code: geoRangeZipCode,\n country_name: geoRangeCountry,\n },\n })\n);\n\nexport const setGeoRangeSuccess = createAction<Dictionary<string>>(types.SEARCH_GEO_RANGE_SUCCESS);\n\nexport const setGeoRangeFail = createAction<string>(types.SEARCH_GEO_RANGE_FAIL);\n","export const SEARCH_GEO_RANGE = 'SEARCH_GEO_RANGE';\nexport const SEARCH_GEO_RANGE_SUCCESS = 'SEARCH_GEO_RANGE_SUCCESS';\nexport const SEARCH_GEO_RANGE_FAIL = 'SEARCH_GEO_RANGE_FAIL';\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, put, takeLatest } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { Dictionary, values } from 'lodash';\n// models\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// interfaces\nimport { GeoRangePayload } from './interfaces';\n// redux\nimport { setGeoRange, setGeoRangeSuccess, setGeoRangeFail } from './actions';\n// services\nimport { SearchService } from '../../services/api';\nimport NotificationService from '../../services/NotificationService';\n\n// Validate georange.\nexport function* setGeoRangeSaga(\n action: PayloadAction<GeoRangePayload, any, SuccessErrorCallback>\n) {\n const { payload } = action;\n\n try {\n const res: AxiosResponse<Dictionary<string>> = yield call(\n SearchService.getGeoRangeOptions,\n payload\n );\n\n if (res.data) {\n yield put(setGeoRangeSuccess(res.data));\n } else {\n const errorMessage = 'Failed to set Geo Range!';\n yield put(setGeoRangeFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = `Failed to set Geo Range! - ${values(e.response.data.errors).join(' ')}`;\n yield put(setGeoRangeFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* GeoRangeSaga() {\n yield takeLatest(setGeoRange.type, setGeoRangeSaga);\n}\n","import styled from 'styled-components';\n\nexport const SelectAllContainer = styled.div`\n height: 50px;\n width: 100%;\n background-color: #001529;\n color: white;\n text-align: center;\n display: flex;\n justify-content: center;\n align-items: center;\n\n span:nth-of-type(2) {\n margin-left: 10px;\n color: #1890fe;\n cursor: pointer;\n }\n`;\n\nexport const BottomBarContainer = styled.div`\n height: 16px;\n width: 100%;\n background-color: #1890ff;\n`;\n","import { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport numeral from 'numeral';\n// models\nimport { GridKeys } from '@optx/models/grid';\nimport { SelectedCompaniesGrids } from '@optx/models/bulkActions';\n// constants\nimport { MAX_SELECT_ALL_COMPANIES } from '@optx/config/bulkConfig';\n// services\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { mapGridKeyToName } from '@optx/utils/grid';\nimport { getRouteAlias } from '@optx/utils/routes';\n// redux\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { actions as searchActions } from '@features/grid/search';\nimport { actions as selectedCompaniesActions } from '@features/bulk-actions/selected-companies';\nimport { selectors as listsSelectors } from '@optx/common/selectors/lists';\nimport { selectors as profileSelectors } from '@redux/company/profile';\nimport selectedCompanies from '@features/bulk-actions/state/selectors/selectedCompanies';\nimport { selectors as searchSelectors } from '@features/grid/search';\n// components\nimport { SelectAllContainer, BottomBarContainer } from './SelectAll.styled';\n\ntype SelectAllBannerProps = {\n showSelectAll?: boolean;\n gridKey: GridKeys;\n selectedRowKeys: number;\n totalNumber: number;\n handleDeselect: () => void;\n};\n\nconst SelectAllBanner: React.FC<SelectAllBannerProps> = ({\n showSelectAll,\n gridKey,\n selectedRowKeys,\n totalNumber,\n handleDeselect,\n}) => {\n const dispatch = useDispatch();\n const loading = useSelector(searchSelectors.isLoading(gridKey));\n const [selected, setSelected] = useState<boolean>(false);\n const { pageSize } = useSelector(paginationSelectors.getPagination(gridKey));\n const listName = useSelector(listsSelectors.getSelectedListName);\n const companyId = useSelector(profileSelectors.getCompanyId);\n const location = getRouteAlias();\n const displayName = ['sourceScrubLists', 'watchlist', 'userLists'].includes(location ?? '')\n ? listName\n : mapGridKeyToName(gridKey);\n const selectedCompaniesCount = useSelector(\n selectedCompanies.getSelectedCompanies(gridKey as SelectedCompaniesGrids)\n ).length;\n const numberOfCompanies = numeral(totalNumber).format('0,0');\n const isVisible = showSelectAll && totalNumber > pageSize && !loading;\n const selectedCompaniesMessage =\n totalNumber > MAX_SELECT_ALL_COMPANIES\n ? `First ${selectedCompaniesCount} `\n : `All ${selectedCompaniesCount} `;\n const searchKey = useSelector(searchSelectors.getSearchKey(gridKey));\n\n useEffect(() => {\n if (\n selectedCompaniesCount === totalNumber ||\n selectedCompaniesCount >= MAX_SELECT_ALL_COMPANIES\n ) {\n setSelected(true);\n } else {\n setSelected(false);\n }\n\n //eslint-disable-next-line react-hooks/exhaustive-deps\n }, [showSelectAll]);\n\n if (!isVisible) {\n return null;\n }\n\n const toggleSelect = () => {\n dispatch(\n selectedCompaniesActions.deselectCompanyIds({\n gridName: gridKey as SelectedCompaniesGrids,\n })\n );\n\n if (selected) {\n handleDeselect();\n } else {\n dispatch(\n searchActions.searchCompanies({\n gridKey,\n data: {\n perMultiplePages: 1,\n perPage:\n totalNumber > MAX_SELECT_ALL_COMPANIES ? MAX_SELECT_ALL_COMPANIES : totalNumber,\n searchKey,\n shouldResetPageNumber: true,\n companyId,\n },\n })\n );\n NotificationService.warn(\n 'You are going to process companies which are selected on multiple pages.'\n );\n dispatch(\n paginationActions.changePaginationSuccess({\n gridKey,\n data: { pageNumber: 1, pageSize },\n })\n );\n }\n\n setSelected(prev => !prev);\n };\n\n return (\n <>\n <SelectAllContainer>\n {selected ? (\n <>\n <span>\n {selectedCompaniesMessage}companies in {displayName} are selected.\n </span>\n <span onClick={toggleSelect}>Clear selection</span>\n </>\n ) : (\n <>\n <span>{`All ${selectedRowKeys} companies on this page are selected`}.</span>\n <span onClick={toggleSelect}>\n {totalNumber >= MAX_SELECT_ALL_COMPANIES\n ? `Select first ${MAX_SELECT_ALL_COMPANIES} companies from ${numberOfCompanies} in ${displayName}`\n : `Select all ${numberOfCompanies} companies in ${displayName}`}\n </span>\n </>\n )}\n </SelectAllContainer>\n <BottomBarContainer />\n </>\n );\n};\n\nexport default SelectAllBanner;\n","import styled from 'styled-components';\nimport { Dropdown, Typography, Menu as AntMenu } from 'antd';\nimport { styledColors } from '@optx/utils/theme/colors';\n\nconst DropdownWrapper = styled(Dropdown)`\n text-align: left;\n display: inline-block;\n margin: 0px 12px 5px 0px;\n`;\n\nconst TriggerWrapper = styled.div`\n color: ${styledColors.gray8};\n`;\n\nconst SelectedLabel = styled(Typography.Text)`\n color: ${styledColors.blue6};\n font-weight: 500;\n margin-left: 5px;\n margin-right: 5px;\n .label-popover {\n color: ${styledColors.blue6};\n }\n`;\n\nconst Menu = styled(AntMenu)`\n .ant-dropdown-menu-item-group-title {\n color: #90a0b7;\n font-size: 10px;\n }\n`;\n\nexport default {\n DropdownWrapper,\n TriggerWrapper,\n SelectedLabel,\n Menu,\n};\n","import React, { useState, useEffect } from 'react';\nimport { Button, Menu } from 'antd';\nimport { MenuProps } from 'antd/lib/menu';\nimport { useSelector } from 'react-redux';\nimport { useDispatch } from 'react-redux';\nimport { useRouteMatch } from 'react-router-dom';\n// models\nimport { GridKeys } from '@optx/models/grid';\nimport { ProfileRouteMatch } from '@optx/models/routes';\n// constants\nimport { searchTypeOptions } from '@features/grid/search-type/state/constants';\n// redux\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\nimport { actions as searchTypeActions } from '@features/grid/search-type';\nimport { actions as userInformationActions } from '@redux/user/information';\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as filterSelectors } from '@features/grid/filter';\nimport { selectors as searchKeySelectors } from '@features/grid/searchkey';\nimport { actions as filterCardsActions } from '@optx/redux/my-companies/filters-cards';\nimport { selectors as companyOutreachFilterSelectors } from '@redux/company-outreach/filters';\n// components\nimport Styled from './SearchTypeMenu.styled';\nimport { DownOutlined } from '@ant-design/icons';\n\ntype SearchTypeKeyForUserSettings =\n | 'search_type'\n | 'my_companies_search_type'\n | 'lists_search_type'\n | 'sourcing_outreach_detail_search_type';\n\ninterface SearchTypeMenuProps extends MenuProps {\n gridKey: GridKeys;\n}\n\nconst SearchTypeMenu: React.FC<SearchTypeMenuProps> = ({ gridKey }) => {\n const selectedSearchType = useSelector(searchTypeSelectors.getSearchType(gridKey));\n\n const [selectedOption, setSelectedOption] = useState(selectedSearchType);\n const [isVisible, setIsVisible] = useState(false);\n const dispatch = useDispatch();\n\n const searchKey = useSelector(searchKeySelectors.getSearchKey(gridKey));\n const filters = useSelector(filterSelectors.getFilter(gridKey));\n const outreachDetailsfilters = useSelector(companyOutreachFilterSelectors.getFilter);\n\n const {\n params: { id },\n } = useRouteMatch<ProfileRouteMatch>();\n\n const handleMenuClick = (e: any) => {\n const option = e.key;\n setSelectedOption(option);\n setIsVisible(false);\n dispatch(searchTypeActions.setSearchType({ gridKey, data: option }));\n\n let key: SearchTypeKeyForUserSettings | null = null;\n\n switch (gridKey) {\n case 'advancedSearch':\n key = 'search_type';\n break;\n case 'myCompanies':\n key = 'my_companies_search_type';\n break;\n case 'lists':\n key = 'lists_search_type';\n break;\n case 'outreachDetails':\n key = 'sourcing_outreach_detail_search_type';\n break;\n }\n\n if (selectedSearchType !== option) {\n if (gridKey === 'myCompanies' && searchKey) {\n const { company_name_or_url, query, ...restOfFilters } = filters;\n dispatch(\n filterCardsActions.fetchMyCompaniesCards({\n searchKey,\n searchType: option,\n filter: restOfFilters,\n shouldResetPageNumber: true,\n })\n );\n } else if (\n gridKey === 'outreachDetails' &&\n (outreachDetailsfilters.query || outreachDetailsfilters.company_name_or_url || searchKey)\n ) {\n const { query, company_name_or_url, ...restOfFilters } = outreachDetailsfilters;\n dispatch(\n searchActions.searchCompanies({\n gridKey,\n data: {\n searchKey: searchKey as string,\n filter: restOfFilters,\n shouldResetPageNumber: true,\n },\n })\n );\n } else if (\n gridKey !== 'myCompanies' &&\n gridKey !== 'outreachDetails' &&\n (filters?.query || filters?.company_name_or_url || searchKey)\n ) {\n const { query, company_name_or_url, ...restOfFilters } = filters;\n\n dispatch(\n searchActions.searchCompanies({\n gridKey,\n data: {\n searchKey: searchKey as string,\n filter: restOfFilters,\n ...(gridKey === 'addons' ? { companyId: Number(id) } : {}),\n shouldResetPageNumber: true,\n },\n })\n );\n }\n\n if (key) {\n dispatch(\n userInformationActions.updateUserSettings({\n [key]: option as string,\n })\n );\n }\n }\n };\n\n const handleVisibleChange = (visible: boolean) => {\n setIsVisible(visible);\n };\n\n useEffect(() => {\n if (selectedSearchType !== selectedOption) {\n setSelectedOption(selectedSearchType);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedSearchType]);\n\n const menu = (\n <Styled.Menu onClick={handleMenuClick}>\n <Menu.ItemGroup key=\"searchType\" title=\"SELECT SEARCH TYPE\">\n <Menu.Item key={searchTypeOptions.defaultSearchType}>\n {searchTypeOptions.defaultSearchType}\n </Menu.Item>\n <Menu.Item key={searchTypeOptions.companyNameOrUrl}>\n {searchTypeOptions.companyNameOrUrl}\n </Menu.Item>\n </Menu.ItemGroup>\n </Styled.Menu>\n );\n\n return (\n <Styled.DropdownWrapper\n visible={isVisible}\n onVisibleChange={handleVisibleChange}\n overlay={menu}\n trigger={['click']}\n placement=\"bottomLeft\"\n >\n <Button>\n <Styled.TriggerWrapper>\n Search: <Styled.SelectedLabel>{selectedOption}</Styled.SelectedLabel>\n <DownOutlined />\n </Styled.TriggerWrapper>\n </Button>\n </Styled.DropdownWrapper>\n );\n};\n\nexport default SearchTypeMenu;\n","import React from 'react';\n// constants\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n// components\nimport { InlineEdit } from '@shared/view/molecules/edit/InlineEdit';\nimport { RouterLink, OpenInNewTabIcon } from '@shared/view/organims/Table/columns';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\ninterface CompanyNameRenderProps {\n name: string;\n companyId: string | number;\n}\n\nconst stopEventPropagation = (event: React.MouseEvent) => {\n event.stopPropagation();\n};\n\nexport const CompanyNameRender: React.FC<CompanyNameRenderProps> = ({ name, companyId }) => (\n <InlineEdit\n action={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <RouterLink onClick={stopEventPropagation} to={`/profile/${companyId}`} target=\"_blank\">\n <OpenInNewTabIcon iconName=\"open-in-new\" />\n </RouterLink>\n }\n >\n <TruncateTooltip title={name || DEFAULT_CELL_VALUE} placement=\"topLeft\">\n <RouterLink onClick={stopEventPropagation} to={`/profile/${companyId}`}>\n {name || DEFAULT_CELL_VALUE}\n </RouterLink>\n </TruncateTooltip>\n </InlineEdit>\n);\n","/**\n * @description The storage item name\n * @type {string}\n */\nconst DISPLAY = 'extension_display';\n\n/**\n * @description get item from localStorage\n * @return {boolean}\n */\nconst isDisplay = () => localStorage.getItem(DISPLAY);\n\n/**\n * @description Set value to localStorage\n * @param {string} value item value\n */\nconst toggleDisplay = (value: boolean) => {\n localStorage.setItem(DISPLAY, value.toString());\n};\n\nexport default {\n isDisplay,\n toggleDisplay,\n};\n","import React from 'react';\nimport { GlobalOutlined } from '@ant-design/icons';\nimport styled from 'styled-components';\nimport { Cell } from '@optx/models/table/Cell';\n\nconst CompanyLink = styled.a`\n display: flex;\n justify-content: center;\n color: #c2cfe0;\n font-size: 22px;\n line-height: 1;\n\n > svg {\n width: auto;\n height: auto;\n }\n`;\n\ninterface TableCellURLProps {\n url: string | null;\n}\n\nconst TableCellURL: React.FC<Cell<TableCellURLProps>> = ({ record: { url } }) => {\n if (!url?.includes('.')) {\n return null;\n }\n\n return (\n <>\n {url && (\n <CompanyLink href={url} title={url} target=\"_blank\" rel=\"noopener noreferrer\">\n <GlobalOutlined className=\"icon-globe\" />\n </CompanyLink>\n )}\n </>\n );\n};\n\nexport default TableCellURL;\n","export const LIST_OF_FUTURE_DATE_FIELDS = [\n 'Date Presented',\n 'Expected Close Date',\n 'IC Status Date',\n];\n","import React from 'react';\nimport AsyncCreatable from 'react-select/async-creatable';\nimport { KeyboardEventHandler, OptionsType, ValueType } from 'react-select';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// components\nimport { DropdownIndicator, ClearIndicator } from './components';\n// styles\nimport './style.scss';\n\ninterface AsyncCreatableSelectProps {\n value: SelectOption<string>;\n options: OptionsType<SelectOption<string>>;\n controlShouldRenderValue: boolean;\n closeMenuOnSelect: boolean;\n disableValueRemove: boolean;\n autoFocus?: boolean;\n loadOptions: (\n inputValue: string,\n callback: SuccessErrorCallback\n ) => Promise<SelectOption[]> | void;\n onChange: (value: ValueType<SelectOption<string>>) => void;\n onMenuClose: () => void;\n onKeyDown?: KeyboardEventHandler | undefined;\n tabIndex: number;\n}\n\nconst AsyncCreatableSelect: React.FC<AsyncCreatableSelectProps> = ({\n value,\n options,\n controlShouldRenderValue,\n closeMenuOnSelect,\n autoFocus,\n loadOptions,\n onChange,\n onMenuClose,\n onKeyDown,\n tabIndex,\n}) => {\n const showClearIcon = value && value.value !== '';\n\n return (\n <AsyncCreatable\n value={value}\n options={options}\n controlShouldRenderValue={controlShouldRenderValue}\n closeMenuOnSelect={closeMenuOnSelect}\n autoFocus={autoFocus}\n loadOptions={loadOptions}\n onChange={onChange}\n isClearable={showClearIcon}\n onMenuClose={onMenuClose}\n onKeyDown={onKeyDown}\n onSelectResetsInput={false}\n blurInputOnSelect={false}\n bodyDisplay={false}\n isMulti={false}\n placeholder=\"search\"\n className=\"async-create-select\"\n classNamePrefix=\"async-create-select\"\n tabIndex={tabIndex + ''}\n components={{ DropdownIndicator, ClearIndicator }}\n />\n );\n};\n\nexport default AsyncCreatableSelect;\n","import { AppState } from '@optx/redux/interfaces';\nimport { createSelector } from 'reselect';\n\nconst getCompanyEditAllState = (state: AppState) => state.companyEditAllForm;\n\nexport const shouldInitialFetch = createSelector(\n getCompanyEditAllState,\n state => state.shouldInitialFetch\n);\n\nexport const isOpen = createSelector(getCompanyEditAllState, state => state.open);\n\nexport const getEditAllCompany = createSelector(getCompanyEditAllState, state => state.company);\n\nexport const getActiveTabName = createSelector(\n getCompanyEditAllState,\n state => state.activeTabName\n);\n\nexport const getCurrentFavoriteCompanyEditableName = createSelector(\n getCompanyEditAllState,\n state => state.currentFavoriteCompanyEditableName\n);\n\nexport const getLastRevenueUpdateAmountYear = createSelector(\n getCompanyEditAllState,\n state => state.lastRevenueUpdateAmountYear\n);\n\nexport const getEditAllFields = createSelector(getCompanyEditAllState, state => state.allFields);\nexport const getEditPropInfo = createSelector(getCompanyEditAllState, state => state.propInfo);\nexport const getEditEqtView = createSelector(getCompanyEditAllState, state => state.eqtView);\nexport const getEditGridOrder = createSelector(getCompanyEditAllState, state => state.gridOrder);\nexport const getEditIdInfo = createSelector(getCompanyEditAllState, state => state.idInfo);\nexport const getEditFavoriteInfo = createSelector(getCompanyEditAllState, state => state.favorites);\n\nexport const getEditAllTabs = createSelector(getCompanyEditAllState, state => {\n return [\n ...state.idInfo,\n ...state.propInfo,\n ...state.eqtView,\n ...state.gridOrder,\n ...state.favorites,\n ...state.allFields,\n ];\n});\n\nexport const isFinancialsLoaded = createSelector(\n getCompanyEditAllState,\n state => state.isFinancialsLoaded\n);\nexport const getInitialEditAllState = createSelector(\n getCompanyEditAllState,\n state => state.initialState\n);\n\nexport const getDisableSaveBtnFor = createSelector(\n getCompanyEditAllState,\n state => state.disableSaveBtnFor\n);\n\nexport const getFinancialYearsChangeLog = createSelector(\n getCompanyEditAllState,\n state => state.financialYearsChangeLog\n);\n","import * as lib from './lib';\n\nexport { lib };\n","import { createSelector } from 'reselect';\nimport { selectors as histogramSelectors } from '@optx/features/grid/histograms';\nimport { selectors as companyFiltersSelectors } from '@redux/company/filters';\nimport { selectors as saveSearchSelectors } from '@redux/company/saved-searches';\nimport { selectors as userListSelectors } from '@redux/user/user-list';\nimport { selectors as equityTouchSelectors } from '@redux/company/equity-touch';\nimport { selectors as listDetailsSelectors } from '@redux/lists/details';\nimport { selectors as searchCountSelectors } from '@features/grid/search-count';\nimport { isLoading as searchIsLoading } from '@features/grid/search/state/selectorsReusable';\nimport { getSortingLoading as sortIsLoading } from '@features/grid/sort/state/selectors';\n\nconst gridKey = 'lists';\n\nexport const isLoading = (isSourceScrub: boolean) =>\n createSelector(\n companyFiltersSelectors.isLoading,\n saveSearchSelectors.isLoading,\n userListSelectors.isShareLoading,\n equityTouchSelectors.isLoading,\n histogramSelectors.loading(gridKey),\n searchIsLoading(gridKey),\n listDetailsSelectors.isLoading,\n searchCountSelectors.getSearchCountLoading(gridKey),\n sortIsLoading(gridKey),\n (\n loadingFilters,\n savingSearch,\n userManagement,\n equityTouch,\n loadingHistograms,\n listsSearchSelectors,\n listDetailsSelectors,\n searchCountSelectors,\n loadingSort\n ) =>\n loadingFilters ||\n savingSearch ||\n userManagement ||\n equityTouch ||\n loadingHistograms ||\n listsSearchSelectors ||\n listDetailsSelectors ||\n searchCountSelectors ||\n loadingSort\n );\n\nexport const listIsLoading = createSelector(\n companyFiltersSelectors.isLoading,\n saveSearchSelectors.isLoading,\n userListSelectors.isShareLoading,\n equityTouchSelectors.isLoading,\n histogramSelectors.loading(gridKey),\n searchIsLoading(gridKey),\n listDetailsSelectors.isLoading,\n (\n loadingFilters,\n savingSearch,\n userManagement,\n equityTouch,\n loadingHistograms,\n listsSearchSelectors,\n listDetailsSelectors\n ) =>\n loadingFilters ||\n savingSearch ||\n userManagement ||\n equityTouch ||\n loadingHistograms ||\n listsSearchSelectors ||\n listDetailsSelectors\n);\n\nexport const saveSearchLoading = createSelector(\n saveSearchSelectors.isLoading,\n searchIsLoading(gridKey),\n (savingSearch, searchSelectors) => savingSearch || searchSelectors\n);\n","import { Button, Tooltip } from 'antd';\nimport AntIcon from '@ant-design/icons';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport { ButtonProps } from 'antd/lib/button';\nimport styled from 'styled-components';\n// models\nimport { GridKeys } from '@optx/models/grid';\n// utils\nimport { getLocationMainGridKey } from '@optx/utils/grid';\n// redux\nimport { selectors as searchSelectors } from '@features/grid/search';\n// components\nimport Icon from '../../Icon';\n\ninterface ToggleButtonProps extends ButtonProps {\n hide: boolean;\n}\n\nconst StyledIcon = styled(Icon)`\n font-size: 18px;\n color: #afbdd1;\n`;\n\ninterface StyledButtonProps extends ButtonProps {\n $hide: boolean;\n}\n\nconst StyledButton = styled(Button)<StyledButtonProps>`\n transform: ${props => (props.$hide ? 'rotate(180deg)' : 'none')};\n`;\n\nconst ArrowIcon = () => <StyledIcon iconName=\"arrow-down-end\" />;\n\nconst ToggleButton = ({ hide, title, ...restProps }: ToggleButtonProps) => {\n const listType = useSelector(searchSelectors.getListType(getLocationMainGridKey() as GridKeys));\n const isFilterDisabled = listType === 'combined';\n const tooltipTitle = isFilterDisabled ? 'Not supported for combined searches' : title;\n\n return (\n <Tooltip title={tooltipTitle}>\n <StyledButton\n disabled={isFilterDisabled}\n type=\"text\"\n icon={<AntIcon component={ArrowIcon} />}\n $hide={hide}\n {...restProps}\n />\n </Tooltip>\n );\n};\n\nexport default ToggleButton;\n","import { useState, useLayoutEffect } from 'react';\n\nconst useTableLayoutHeight = (\n tableWrapperRef: HTMLDivElement | null,\n paginationId: string,\n windowSize: number | undefined,\n tableHeader: number | undefined,\n mainHeaderHeight: number | undefined,\n extraDependentValues: any[]\n) => {\n const [tableScroll, setTableScroll] = useState<number>(0);\n\n const extraDep = [\n tableWrapperRef,\n paginationId,\n windowSize,\n tableHeader,\n mainHeaderHeight,\n extraDependentValues,\n ];\n /**\n * Recompute height each time the height of the window changes or wrapper height changes.\n */\n useLayoutEffect(() => {\n /**\n * Temporary fix (setTimeout) for scroll setup. Initially on page load the grid header has a bigger height and\n * if you click on a company and afterwards come back to home will compute scroll based on first\n * header height and the grid height will be smaller.\n */\n setTimeout(() => {\n if (tableWrapperRef) {\n const tableHeaderHeight =\n tableWrapperRef?.querySelector('.ant-table-header')?.getBoundingClientRect().height || 0;\n\n // When grid is initializing the header height will get throwgh a few height changes with bigger heights\n // before is actually initialized.\n if (tableHeaderHeight) {\n const tableDOMRect = tableWrapperRef.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n const paginationHeight =\n document.querySelector(`#${paginationId}`)?.getBoundingClientRect().height || 0;\n const bottomSpace = tableDOMRect.bottom - windowHeight + paginationHeight + 2;\n setTableScroll(\n bottomSpace < 0\n ? Math.abs(bottomSpace) + tableDOMRect.height - tableHeaderHeight\n : tableDOMRect.height - tableHeaderHeight - bottomSpace\n );\n }\n }\n }, 0);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, extraDep);\n\n return { tableScroll };\n};\n\nexport default useTableLayoutHeight;\n","export const CHECKLIST_RESEARCH_INSIGHTS = 'Checklist Research Insights';\nexport const SOURCING_OUTREACH_SUMMARY_REPORT_DETAILS =\n 'Sourcing Outreach Summary - Report Details';\nexport const PIPELINE_REPORTS = 'Pipeline Reports';\nexport const EQUITY_TOUCH_INTEGRATION = 'Equity Touch Integration';\n","import React, { useEffect } from 'react';\nimport { message, Typography } from 'antd';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\n// constants\nimport appRoutes from '@constants/routes';\n\nconst { Link } = Typography;\n\nconst ViewWrapper = styled.span`\n .ant-typography {\n color: #1890ff;\n }\n`;\n\nconst SavedViewMessage: React.FC = ({ children }) => <ViewWrapper>{children}</ViewWrapper>;\n\nconst useSaveViewMessage = (isVisible: boolean, toggleModalFilters: VoidFunction) => {\n const history = useHistory();\n\n const handleClick = () => {\n message.destroy();\n history.push(appRoutes.lists.companySavedSearches);\n toggleModalFilters();\n };\n\n useEffect(() => {\n if (isVisible) {\n message.info({\n content: (\n <SavedViewMessage>\n A Custom Default Filter has been implemented. <Link onClick={handleClick}>Go Here</Link>{' '}\n to change it\n </SavedViewMessage>\n ),\n duration: 0,\n style: {\n marginTop: '140px',\n },\n });\n } else {\n message.destroy();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isVisible]);\n};\n\nexport default useSaveViewMessage;\n","import React, { useState, useEffect } from 'react';\nimport { Dropdown, Button, Input, Menu } from 'antd';\nimport './style.scss';\nimport NotificationService from '@optx/services/NotificationService';\n\ninterface DropdownInputProps {\n onToggle: VoidFunction;\n isOpen: boolean;\n title: string;\n name: string;\n isRight: boolean;\n onInputChange?: (value: string) => void;\n onRenameList: (value: string) => void;\n}\n\nconst DropdownInput: React.FC<DropdownInputProps> = ({\n onToggle,\n isOpen,\n title,\n name,\n isRight,\n onInputChange,\n onRenameList,\n}) => {\n const [input, setInput] = useState(title);\n\n const handleToggle = () => {\n setInput('');\n onToggle();\n };\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setInput(event.target.value);\n\n if (onInputChange) {\n onInputChange(event.target.value);\n }\n };\n\n const handleRenameList = () => {\n if (input.trim().length === 0) {\n setInput('');\n NotificationService.warn('Enter valid name');\n } else if (input.length > 0) {\n onRenameList(input.trim());\n handleToggle();\n }\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLUListElement>) => {\n if (event.key === 'Enter') {\n handleRenameList();\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n setInput(title);\n }\n }, [isOpen, title]);\n\n const menu = (\n <Menu onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n <div className=\"menu-header\">\n <span>{name}</span>\n </div>\n <Menu.Item key={1} className=\"menu-item menu-input\">\n <Input\n type=\"text\"\n name=\"input\"\n value={input}\n placeholder=\"input\"\n autoFocus\n onChange={handleInputChange}\n />\n </Menu.Item>\n <div className=\"menu-footer\">\n <Button type=\"primary\" disabled={!input} onClick={handleRenameList}>\n {name}\n </Button>\n </div>\n </Menu>\n );\n\n return (\n <Dropdown\n overlayClassName=\"dropdown-input\"\n visible={isOpen}\n onVisibleChange={handleToggle}\n overlay={menu}\n trigger={['click']}\n placement=\"topRight\"\n >\n <div />\n </Dropdown>\n );\n};\n\nDropdownInput.defaultProps = {\n isOpen: false,\n title: '',\n name: '',\n isRight: false,\n onRenameList: () => {},\n onInputChange: () => {},\n};\n\nexport default DropdownInput;\n","import React, { useState, useEffect } from 'react';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport { useDispatch } from 'react-redux';\nimport { Menu, MenuProps, Modal, Button, Typography } from 'antd';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { ShareList } from '@optx/redux/user/share/interfaces';\nimport { ListType } from '@models/WatchList';\nimport { UserList } from '@optx/redux/user/user-list/interfaces';\n// constants\nimport { SAVED_COMPANY_SEARCHES } from '@optx/constants/pendoActions';\n// redux\nimport * as actionsShare from '@redux/user/share/actions';\n// components\nimport { MultiSelect } from '@shared/view/molecules/Select';\n\ninterface ShareListItemProps extends MenuItemProps {\n listId: number | string;\n listType?: string;\n options?: Array<UserList>;\n sharedWith?: Array<number>;\n}\n\n/**\n * Returns the corresponding ListType based on the provided readableListType.\n * @param readableListType - The readable list type to be converted to ListType.\n * @returns The corresponding ListType based on the provided readableListType.\n */\nconst getListType = (readableListType?: string): ListType => {\n switch (readableListType) {\n case 'list':\n return 'watchlist';\n case 'combined':\n return 'combined';\n default:\n return 'saved_search';\n }\n};\n\n/**\n * Share List Menu Item.\n */\nconst ShareListItem: React.FC<ShareListItemProps> = ({\n listId,\n listType,\n options,\n sharedWith,\n onClick,\n children,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n\n const [showModal, setShowModal] = useState(false);\n const [initialUsersSelected, setInitialUsersSelected] = useState<Array<UserList>>([]);\n const [usersSelected, setUsersSelected] = useState<Array<SelectOption>>([]);\n\n useEffect(() => {\n if (sharedWith && options) {\n const selectedUsers: UserList[] = options?.filter(\n option => sharedWith.includes(option.value) && option\n );\n\n setInitialUsersSelected(selectedUsers);\n }\n }, [sharedWith, options]);\n\n const handleChange = (value: any) => {\n setUsersSelected(value);\n };\n\n const handleShare = () => {\n if (usersSelected!.length) {\n const userIds = [] as Array<string>;\n usersSelected!.forEach(user => {\n userIds.push(user!.value as string);\n });\n\n const shareData = {\n share_with: userIds,\n list_id: listId,\n list_type: getListType(listType),\n } as ShareList;\n\n setShowModal(false);\n dispatch(actionsShare.shareListAction(shareData));\n window.pendo.track(`${SAVED_COMPANY_SEARCHES}_SharewithAnotherUser`);\n setUsersSelected([]);\n }\n };\n\n const handleCancel = () => {\n setShowModal(false);\n setUsersSelected([]);\n };\n\n const handleClick: MenuProps['onClick'] = info => {\n setShowModal(true);\n onClick && onClick(info);\n };\n\n return (\n <>\n <Menu.Item onClick={handleClick} {...restProps}>\n {children}\n </Menu.Item>\n <Modal\n visible={showModal}\n title={`Which user would you like to share the ${listType || 'search'} with?`}\n centered\n onCancel={handleCancel}\n footer={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <>\n <Button onClick={handleCancel}>Cancel</Button>\n <Button onClick={handleShare} disabled={!usersSelected.length} type=\"primary\">\n Share {listType}\n </Button>\n </>\n }\n >\n {listType === 'combined' && (\n <Typography.Text style={{ paddingBottom: '5px', display: 'block' }}>\n For combined search child searches are shared too\n </Typography.Text>\n )}\n <MultiSelect\n options={options as unknown as Array<SelectOption>}\n value={usersSelected}\n onChange={handleChange}\n previousSelectedOptions={initialUsersSelected}\n previousSelectedOptionsListTitle=\"Already shared with:\"\n selectedOptionsListTitle=\"Share with:\"\n />\n </Modal>\n </>\n );\n};\n\nShareListItem.defaultProps = {\n options: [],\n};\n\nexport default ShareListItem;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Menu } from 'antd';\n// constants\nimport { SAVED_COMPANY_SEARCHES } from '@optx/constants/pendoActions';\n// redux\nimport {\n selectors as searchesSelectors,\n actions as savedSearchesActions,\n} from '@redux/company/saved-searches';\n\ninterface MakeDefaultFilterProps {\n id: number | string;\n}\n\nconst MakeDefaultFilter: React.FC<MakeDefaultFilterProps> = ({ id, ...restProps }) => {\n const dispatch = useDispatch();\n const defaultSearchId = useSelector(searchesSelectors.getDefaultSearchId);\n\n const handleClick = () => {\n if (defaultSearchId === id) {\n // send undefined to unset the current default filter\n dispatch(savedSearchesActions.makeFiltersDefault(id, undefined));\n } else {\n // send true to set a new default search\n dispatch(savedSearchesActions.makeFiltersDefault(id, true));\n }\n\n window.pendo.track(`${SAVED_COMPANY_SEARCHES}_MakeDefaultFilter`);\n };\n\n return (\n <Menu.Item {...restProps} onClick={handleClick}>\n {defaultSearchId === id ? 'Remove' : 'Make'} Default Filter\n </Menu.Item>\n );\n};\n\nexport default MakeDefaultFilter;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Button, Menu, MenuItemProps, MenuProps, Modal, Typography } from 'antd';\nimport { OptionsType } from 'react-select';\nimport { useDispatch } from 'react-redux';\nimport { debounce } from 'lodash';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { UpdateListAssociation } from '@optx/models/WatchList';\n// constants\nimport { COMPANY_NAME_ENDPOINT } from '@constants/asyncEndpoints';\nimport { SEARCH_MINIMUM_CHAR_COUNT } from '@optx/constants/search';\n// redux\nimport { actions } from '@optx/redux/favorite-lists/lists';\n// hooks\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\n// components\nimport { AsyncSingleSelect } from '@optx/shared/view/molecules/Select';\n\ninterface AddListAssociationMenuItemProps extends MenuItemProps {\n listId: number | string;\n companyName: string | undefined;\n}\n\ninterface CompanyOption {\n label: string;\n value: string | null;\n}\n\nconst AddListAssociationMenuItem: React.FC<AddListAssociationMenuItemProps> = ({\n onClick,\n listId,\n companyName,\n ...restProps\n}) => {\n const isEdit = !!companyName;\n const initialCompany = useMemo(\n () => ({\n label: companyName || '',\n value: companyName || '',\n }),\n [companyName]\n );\n\n const [showModal, setShowModal] = useState(false);\n const [selectedCompany, setSelectedCompany] = useState<CompanyOption | null>(initialCompany);\n const [fetchedOptions, setFetchedOptions] = useState<OptionsType<SelectOption>>();\n\n const dispatch = useDispatch();\n const { loadOptions } = useAsyncSearch({ endpoint: COMPANY_NAME_ENDPOINT });\n\n const handleSave = () => {\n setShowModal(false);\n\n if (selectedCompany && selectedCompany?.value) {\n const payload: UpdateListAssociation = { listId, addonCompany: selectedCompany?.value };\n dispatch(actions.updateFavoriteListAssociation(payload));\n }\n };\n\n const handleCancel = () => {\n setShowModal(false);\n setSelectedCompany(initialCompany);\n };\n\n const handleClick: MenuProps['onClick'] = info => {\n setShowModal(true);\n onClick && onClick(info);\n };\n\n const getLoadOptionsDelay = debounce((query: string, callback: SuccessErrorCallback) => {\n if (query.length >= SEARCH_MINIMUM_CHAR_COUNT) {\n loadOptions(query, options => {\n options.unshift();\n const callbackResult = callback(options);\n\n // set current filter to a cached variable.\n setFetchedOptions(options);\n\n return callbackResult;\n });\n }\n }, 300);\n\n const handleMenuClose = () => {\n setFetchedOptions([]);\n };\n\n useEffect(() => {\n if (!companyName && companyName !== initialCompany.value) {\n setSelectedCompany(initialCompany);\n }\n }, [companyName, initialCompany]);\n\n return (\n <>\n <Menu.Item onClick={handleClick} {...restProps}>\n {isEdit ? 'Edit List Association (Add-ons)' : 'Associate List with a Company (Add-ons)'}\n </Menu.Item>\n <Modal\n visible={showModal}\n title=\"Associate Add-ons with Company?\"\n centered\n onCancel={handleCancel}\n footer={\n <>\n <Button onClick={handleCancel}>Cancel</Button>\n <Button type=\"primary\" onClick={handleSave}>\n Save\n </Button>\n </>\n }\n >\n <Typography.Text>Add-on For</Typography.Text>\n <AsyncSingleSelect\n className=\"addon--multiselect-async\"\n value={selectedCompany as SelectOption<string>}\n onChange={e => setSelectedCompany(e as SelectOption<string>)}\n loadOptions={getLoadOptionsDelay}\n defaultOptions={fetchedOptions}\n controlShouldRenderValue\n closeMenuOnSelect\n blurInputOnSelect={false}\n onSelectResetsInput={false}\n onMenuClose={handleMenuClose}\n loadingMessage={({ inputValue }) =>\n inputValue.length > 2 ? 'Loading...' : 'Begin typing'\n }\n />\n </Modal>\n </>\n );\n};\n\nexport default AddListAssociationMenuItem;\n","import React from 'react';\nimport { Menu, MenuItemProps } from 'antd';\nimport { useDispatch } from 'react-redux';\n// models\nimport { UpdateListAssociation } from '@optx/models/WatchList';\n// components\nimport Popconfirm from '@optx/shared/view/molecules/Popconfirm/Popconfirm';\n// redux\nimport { actions } from '@optx/redux/favorite-lists/lists';\n\ninterface RemoveListAssociationMenuItemProps extends MenuItemProps {\n listId: number | string;\n}\n\nconst RemoveListAssociationMenuItem: React.FC<RemoveListAssociationMenuItemProps> = ({\n listId,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n\n const handleConfirm = () => {\n const payload: UpdateListAssociation = { listId, addonCompany: 'blank' };\n dispatch(actions.updateFavoriteListAssociation(payload));\n };\n\n return (\n <Popconfirm title=\"List Association\" onConfirm={() => handleConfirm()} action=\"Remove\">\n {/* prevent dropdown from closing when clicking on this menu item */}\n <Menu.Item {...restProps} onClick={e => e.domEvent.stopPropagation()}>\n Remove List Association (Add-ons)\n </Menu.Item>\n </Popconfirm>\n );\n};\n\nexport default RemoveListAssociationMenuItem;\n","import * as Yup from 'yup';\n// models\nimport { SearchItem } from '@optx/features/combine-search/state/interfaces';\n\nexport const validationSchema = (existingNames: string[]) =>\n Yup.object().shape({\n searchName: Yup.string()\n .required('Search name is required!')\n .test('unique-search-name', 'Search name already exists', function (value) {\n return !existingNames.includes(value);\n }),\n first_search_id: Yup.string().required('Please select a search to combine'),\n searchFieldsList: Yup.array().of(\n Yup.object().shape({\n search_id: Yup.string()\n .required('Please select a search to combine')\n .test('is-unique', 'Duplicate search selected', function (value) {\n // @ts-ignore\n // get access to all form values\n const schema = this.options.from[1].value;\n\n const allSearchIds = schema.searchFieldsList.map((item: SearchItem) => {\n return item.search_id;\n });\n allSearchIds.push(schema.first_search_id);\n\n // check if we have current select value more than once in the array\n // that means we have duplicate in the form and \"false\" will trigger validation\n return !(allSearchIds.filter((id: number) => id === Number(value)).length > 1);\n }),\n })\n ),\n });\n\nexport default validationSchema;\n","import React, { useState, useRef, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { FieldArray, Formik, FormikProps, FormikValues } from 'formik';\nimport { Form, Input, Radio, Select } from 'formik-antd';\nimport {\n Menu,\n MenuProps,\n Modal,\n Button,\n Typography,\n Space,\n Input as InputRef,\n Tooltip,\n} from 'antd';\nimport { PlusOutlined } from '@ant-design/icons';\n//constants\nimport { INITIAL_NUMBER_OF_SEARCHES, OPERATOR_VALUES } from '@optx/constants/combineSearch';\n// utils\nimport {\n createSelectOptions,\n getOrdinalNumber,\n createCombineSearchData,\n} from '@optx/utils/combineSearch';\nimport { filterOption } from '@optx/utils/select/select';\n// redux\nimport { selectors as searchesSelectors } from '@redux/company/saved-searches';\nimport * as actions from '@optx/features/combine-search/state/actions';\nimport { selectors as savedSearchesSelectors } from '@redux/company/saved-searches';\n// validation\nimport { validationSchema } from '@optx/common/validation/combine-search';\n\nconst { Option } = Select;\n\ninterface CombineSearchItemProps {\n listId: number | string;\n listType?: string;\n hasFilters?: boolean;\n children?: React.ReactNode;\n}\n\nconst CombineSearchMenuItem: React.FC<CombineSearchItemProps> = ({\n listId,\n listType,\n hasFilters,\n children,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n const inputRef = useRef<InputRef>(null);\n const formRef = useRef<FormikProps<FormikValues> | null>(null);\n const form = formRef.current;\n const initialSavedSearches = useSelector(searchesSelectors.getSavedSearches);\n const options = createSelectOptions(initialSavedSearches);\n const savedSearchesNames: string[] = Object.keys(useSelector(savedSearchesSelectors.getTitles));\n const isDisabled = listType === 'combined' ? false : !hasFilters;\n\n const [showModal, setShowModal] = useState<boolean>(false);\n const [numberOfSearchFields, setNumberOfSearchFields] = useState<number>(2);\n\n const initialValues = {\n searchName: '',\n first_search_id: listId,\n searchFieldsList: [{ operator: 'Or', search_id: '' }],\n };\n\n useEffect(() => {\n if (showModal && inputRef.current) {\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n }\n }, [showModal]);\n\n const handleClick: MenuProps['onClick'] = () => {\n setShowModal(true);\n };\n\n const handleClose = () => {\n setShowModal(false);\n setNumberOfSearchFields(INITIAL_NUMBER_OF_SEARCHES);\n form?.resetForm();\n form?.setErrors({});\n };\n\n const handleSubmit = (values: any) => {\n const data = createCombineSearchData(values);\n dispatch(actions.combineSearch(data));\n handleClose();\n };\n\n return (\n <>\n <Menu.Item\n {...restProps}\n disabled={isDisabled}\n onClick={handleClick}\n key=\"search-no-filter-menu\"\n >\n {hasFilters ? (\n children\n ) : (\n <Tooltip title=\"Search doesn't have filters\" placement=\"left\">\n {children}\n </Tooltip>\n )}\n </Menu.Item>\n <Modal\n visible={showModal}\n title={'Which saved searches would you like to combine?'}\n centered\n onCancel={handleClose}\n footer={\n <>\n <Button onClick={handleClose}>Cancel</Button>\n <Button type=\"primary\" onClick={() => form?.submitForm()}>\n Save\n </Button>\n </>\n }\n >\n <Formik\n initialValues={initialValues}\n onSubmit={handleSubmit}\n validationSchema={validationSchema(savedSearchesNames)}\n innerRef={formRef}\n >\n <Form layout=\"vertical\">\n <Form.Item label=\"Give this new, combined search a name\" name=\"searchName\">\n <Input name=\"searchName\" ref={inputRef} />\n </Form.Item>\n <Form.Item label={'Select the 1st save search to combine'} name=\"first_search_id\">\n <Select\n name=\"first_search_id\"\n placeholder=\"Search\"\n showSearch\n filterOption={filterOption}\n >\n {options.map((option, index) => (\n <Option key={index} value={option.value}>\n {option.label}\n </Option>\n ))}\n </Select>\n </Form.Item>\n <FieldArray\n name=\"searchFieldsList\"\n render={arrayHelpers => {\n return (\n <>\n {(arrayHelpers.form.values.searchFieldsList as any[]).map((fields, index) => (\n <React.Fragment key={index}>\n <Form.Item\n label=\"Select the desired operator\"\n name={`searchFieldsList.${index}.operator`}\n >\n <Radio.Group\n name={`searchFieldsList.${index}.operator`}\n options={OPERATOR_VALUES}\n optionType=\"button\"\n buttonStyle=\"solid\"\n />\n </Form.Item>\n <Form.Item\n label={`Select the ${getOrdinalNumber(index + 2)} save search to combine`}\n name={`searchFieldsList.${index}.search_id`}\n >\n <Select\n name={`searchFieldsList.${index}.search_id`}\n placeholder=\"Search\"\n showSearch\n filterOption={filterOption}\n onChange={() =>\n form?.setFieldTouched(\n `searchFieldsList.${index}.search_id`,\n true,\n false\n )\n }\n >\n {options.map((option, index) => (\n <Option key={index} value={option.value}>\n {option.label}\n </Option>\n ))}\n </Select>\n </Form.Item>\n </React.Fragment>\n ))}\n <Button\n style={{ padding: '4px 6px 4px 6px' }}\n icon={<PlusOutlined style={{ color: '#1890FF' }} />}\n onClick={() => {\n arrayHelpers.push({ operator: 'Or', search_id: '' });\n setNumberOfSearchFields(prev => prev + 1);\n }}\n disabled={options.length === numberOfSearchFields}\n >\n Add Another Search\n </Button>\n </>\n );\n }}\n />\n <Space direction=\"vertical\" style={{ display: 'block', marginTop: '24px' }}>\n <Typography.Text strong>Please Note:</Typography.Text>\n <Typography.Text>Each search will still be independently operational</Typography.Text>\n </Space>\n </Form>\n </Formik>\n </Modal>\n </>\n );\n};\n\nexport default CombineSearchMenuItem;\n","import React from 'react';\nimport { Menu, Popconfirm } from 'antd';\n// constants\nimport { MY_WATCHLIST } from '@optx/constants/pendoActions';\n\ninterface DownloadMenuItemProps {\n onConfirm?: (includeDescription?: boolean) => void;\n}\n\nconst DownloadMenuItem: React.FC<DownloadMenuItemProps> = ({ onConfirm, ...restProps }) => {\n return (\n <Popconfirm\n title=\"Include the description?\"\n onConfirm={() => onConfirm && onConfirm(true)}\n onCancel={() => onConfirm && onConfirm()}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n {/* prevent dropdown from closing when clicking on this menu item */}\n <Menu.Item\n {...restProps}\n onClick={e => {\n e.domEvent.stopPropagation();\n\n if (window.location.pathname === '/lists') {\n window.pendo.track(`${MY_WATCHLIST}_MyWatchlists_ThreeDots_DownloadList`);\n }\n }}\n >\n Download list\n </Menu.Item>\n </Popconfirm>\n );\n};\n\nexport default DownloadMenuItem;\n","import React from 'react';\nimport { Menu } from 'antd';\nimport Popconfirm from '@optx/shared/view/molecules/Popconfirm/Popconfirm';\n// constants\nimport { SAVED_COMPANY_SEARCHES } from '@optx/constants/pendoActions';\n\ninterface ActionleteMenuItemProps {\n onConfirm?: () => void;\n onCancel?: () => void;\n type?: string;\n title: string;\n action: 'Delete' | 'Remove';\n}\n\nconst ActionMenuItem: React.FC<ActionleteMenuItemProps> = ({\n onConfirm,\n onCancel,\n title,\n action,\n ...restProps\n}) => (\n <Popconfirm\n title={title}\n onConfirm={() => onConfirm && onConfirm()}\n onCancel={() => onCancel && onCancel()}\n action={action}\n >\n {/* prevent dropdown from closing when clicking on this menu item */}\n <Menu.Item\n {...restProps}\n onClick={e => {\n e.domEvent.stopPropagation();\n\n if (action === 'Delete') {\n window.pendo.track(`${SAVED_COMPANY_SEARCHES}_Delete`);\n }\n }}\n >\n {action}\n </Menu.Item>\n </Popconfirm>\n);\n\nexport default ActionMenuItem;\n","import styled from 'styled-components';\nimport { Menu } from 'antd';\n\nconst MenuList = styled(Menu)`\n .ant-dropdown-menu-item[aria-disabled='false'] {\n cursor: pointer;\n }\n`;\n\nexport default {\n MenuList,\n};\n","import React from 'react';\nimport { Menu } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\n// models\nimport { ListAccessRights } from '@optx/models/WatchList';\nimport { UserList } from '@optx/redux/user/user-list/interfaces';\nimport { CustomUIViewIds } from '@optx/models/user';\n// constants\nimport ROUTES from '@optx/constants/routes';\nimport { FAVORITE_LIST_ID } from '@optx/constants/lists';\nimport { customUIViewIds } from '@optx/constants/table/columnDisplay/company-search';\nimport { SAVED_COMPANY_SEARCHES } from '@optx/constants/pendoActions';\n// redux\nimport { selectors as userSelectors } from '@redux/user/information';\n// components\nimport { ShareWatchListMenuItem } from '@features/list-share';\nimport {\n ShareListMenuItem,\n MakeDefaultFilter,\n AddListAssociationMenuItem,\n RemoveListAssociationMenuItem,\n CombineSearchMenuItem,\n} from './menu-items';\nimport DownloadMenuItem from './menu-items/DownloadMenuItem';\nimport ActionMenuItem from './menu-items/ActionMenuItem';\nimport Styled from './ListActionsMenu.styled';\n\ninterface ListActionsMenuProps {\n type?: string;\n listId: number | string;\n title: string;\n userListShare?: Array<UserList>;\n sharedWith?: Array<number>;\n toggleInput: VoidFunction;\n handleDeleteList: (listId: number | string) => void;\n handleRemoveList?: (listId: number | string) => void;\n onDownloadList?: (listId: string, fileName: string, includeDescription?: boolean) => void;\n onConfirm?: (includeDescription?: boolean) => void;\n onCancel?: () => void;\n onVisible?: () => void;\n accessRights: ListAccessRights;\n isContacts?: boolean;\n ownerName?: string;\n listAssociation?: string;\n isOwner?: boolean;\n hasFilters?: boolean;\n}\n\nconst ListActionsMenu: React.FC<ListActionsMenuProps> = ({\n type,\n listId,\n title,\n userListShare,\n toggleInput,\n handleDeleteList,\n handleRemoveList,\n onDownloadList,\n onConfirm,\n onCancel,\n accessRights,\n isContacts,\n sharedWith,\n ownerName,\n onVisible,\n listAssociation,\n isOwner,\n hasFilters,\n ...restProps\n}) => {\n const location = useLocation();\n\n const userFullName = useSelector(userSelectors.getFullName);\n const isShareable =\n (accessRights === ListAccessRights.Edit || accessRights === ListAccessRights.ShareOnly) &&\n userListShare;\n\n const showCombineSearchesMenuItem = location.pathname === '/lists/company-searches';\n\n const showRemove = () => {\n if (window.location.pathname !== ROUTES.lists.myWatchList) return false;\n\n if (\n ownerName?.toLocaleLowerCase() === 'optx' ||\n ownerName?.toLocaleLowerCase() === 'equity touch'\n ) {\n return false;\n }\n\n if (userFullName === ownerName) return false;\n\n return true;\n };\n\n const handleClick = () => {\n onVisible && onVisible();\n };\n\n const showDelete = () => {\n if (accessRights !== ListAccessRights.Edit) return false;\n\n if (\n ownerName?.toLocaleLowerCase() === 'optx' ||\n ownerName?.toLocaleLowerCase() === 'equity touch'\n ) {\n return false;\n }\n\n return true;\n };\n\n const showListAssociation = () => {\n if (window.location.pathname !== ROUTES.lists.myWatchList) return false;\n\n if (accessRights !== ListAccessRights.Edit) return false;\n\n if (\n ownerName?.toLocaleLowerCase() === 'optx' ||\n ownerName?.toLocaleLowerCase() === 'equity touch'\n ) {\n return false;\n }\n\n if (listId === FAVORITE_LIST_ID) return false;\n\n return true;\n };\n\n return (\n <Styled.MenuList {...restProps} onClick={handleClick}>\n {showDelete() && (\n <Menu.Item\n key=\"0\"\n onClick={() => {\n toggleInput();\n window.pendo.track(`${SAVED_COMPANY_SEARCHES}_Rename`);\n }}\n >\n Rename\n </Menu.Item>\n )}\n\n {showCombineSearchesMenuItem && !customUIViewIds.includes(listId as CustomUIViewIds) && (\n <CombineSearchMenuItem key=\"1\" listId={listId} listType={type} hasFilters={hasFilters}>\n Combine Search\n </CombineSearchMenuItem>\n )}\n\n {showDelete() && (\n <ActionMenuItem\n key=\"2\"\n action=\"Delete\"\n title={title}\n onConfirm={() => handleDeleteList(listId)}\n onCancel={() => onCancel && onCancel()}\n />\n )}\n\n {showRemove() && (\n <ActionMenuItem\n key=\"3\"\n action=\"Remove\"\n title={title}\n onConfirm={() => handleRemoveList && handleRemoveList(listId)}\n onCancel={() => onCancel && onCancel()}\n />\n )}\n\n {isShareable && (\n <>\n {type === 'list' ? (\n <ShareWatchListMenuItem key=\"4\" listId={listId} listType=\"watchlist\">\n Share with another user\n </ShareWatchListMenuItem>\n ) : (\n <ShareListMenuItem\n key=\"4\"\n listId={listId}\n listType={type}\n options={userListShare}\n sharedWith={sharedWith}\n >\n Share with another user\n </ShareListMenuItem>\n )}\n </>\n )}\n\n {isShareable && isOwner && type === 'list' && (\n <ShareWatchListMenuItem key=\"5\" listId={listId} listType=\"watchlist\">\n Make List Public\n </ShareWatchListMenuItem>\n )}\n\n {onDownloadList && <DownloadMenuItem key=\"6\" onConfirm={onConfirm} />}\n {type !== 'list' && !isContacts && <MakeDefaultFilter key=\"7\" id={listId} />}\n {showListAssociation() && (\n <div key=\"88\">\n <AddListAssociationMenuItem key=\"8\" listId={listId} companyName={listAssociation} />\n {listAssociation && <RemoveListAssociationMenuItem key=\"9\" listId={listId} />}\n </div>\n )}\n </Styled.MenuList>\n );\n};\n\nexport default ListActionsMenu;\n","/* eslint-disable react/jsx-wrap-multilines */\n\nimport React, { useState } from 'react';\nimport { Dropdown } from 'antd';\nimport { EllipsisOutlined } from '@ant-design/icons';\n// models\nimport { UserList } from '@optx/redux/user/user-list/interfaces';\nimport { ListAccessRights } from '@optx/models/WatchList';\n// constants\nimport { FAVORITE_LIST_ID } from '@constants/lists';\nimport {\n FindNewCompaniesSourceScrubLists,\n MY_WATCHLIST_ACTIONS,\n SAVED_COMPANY_SEARCHES,\n SS_LIST_ACTIONS,\n} from '@optx/constants/pendoActions';\n// components\nimport DropdownInput from '../../../../common/DropdownInput';\nimport { useToggle } from '../../../../../common/hooks/modal';\nimport ListActionsMenu from './ListActionsMenu';\n\ninterface ListActionsProps {\n isRight: boolean;\n type?: string;\n title: string;\n listId: number | string;\n userListShare?: Array<UserList>;\n sharedWith?: Array<number>;\n handleDeleteList: (listId: number | string) => void;\n handleRenameList: (title: string, listId: number | string) => void;\n handleRemoveList?: (listId: number | string) => void;\n handleGetInput?: (title: string) => void;\n onDownloadList?: (listId: string, fileName: string, includeDescription?: boolean) => void;\n accessRights: ListAccessRights;\n isContacts?: boolean;\n ownerName?: string;\n listAssociation?: string | undefined;\n isOwner?: boolean;\n hasFilters?: boolean;\n}\n\nconst ListActions: React.FC<ListActionsProps> = ({\n isRight,\n type,\n title,\n listId,\n userListShare,\n sharedWith,\n handleDeleteList,\n handleRemoveList,\n handleRenameList,\n handleGetInput,\n onDownloadList,\n accessRights,\n isContacts,\n ownerName,\n listAssociation,\n isOwner,\n hasFilters,\n}) => {\n const [dropdownInput, toggleInput] = useToggle(false);\n const [visible, setVisible] = useState(false);\n\n const renameList = (title: string) => {\n handleRenameList(title, listId);\n };\n\n const handleConfirm = (includeDescription = false) => {\n onDownloadList &&\n onDownloadList(\n title === 'Favorites' ? FAVORITE_LIST_ID : listId.toString(),\n title,\n includeDescription\n );\n setVisible(false);\n };\n\n const handleVisible = () => {\n if (window.location.pathname === '/lists/company-searches') {\n window.pendo.track(SAVED_COMPANY_SEARCHES);\n }\n\n if (window.location.pathname === '/lists') {\n window.pendo.track(MY_WATCHLIST_ACTIONS);\n }\n\n if (window.location.pathname === '/lists/source-scrub-lists') {\n window.pendo.track(SS_LIST_ACTIONS);\n }\n\n if (onDownloadList) {\n window.pendo.track(FindNewCompaniesSourceScrubLists.source_scrub_lists_action);\n }\n\n setVisible(!visible);\n };\n\n const handleCancel = () => {\n setVisible(false);\n };\n\n return (\n <div className=\"dropdown-btn dropdown-dot dropdown-dot-list\">\n <Dropdown\n overlay={\n <ListActionsMenu\n type={type}\n listId={listId}\n title={title}\n onVisible={() => setVisible(false)}\n userListShare={userListShare}\n sharedWith={sharedWith}\n toggleInput={toggleInput}\n handleDeleteList={listId => {\n setVisible(false);\n handleDeleteList(listId);\n }}\n handleRemoveList={listId => {\n setVisible(false);\n handleRemoveList && handleRemoveList(listId);\n }}\n onDownloadList={onDownloadList}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n accessRights={accessRights}\n isContacts={isContacts}\n ownerName={ownerName}\n listAssociation={listAssociation}\n isOwner={isOwner}\n hasFilters={hasFilters}\n />\n }\n getPopupContainer={() => document.body}\n trigger={['click']}\n placement=\"bottomRight\"\n visible={visible}\n onVisibleChange={handleVisible}\n >\n <EllipsisOutlined className=\"dropdown-dot__icon\" />\n </Dropdown>\n <DropdownInput\n title={title}\n name={`Rename ${type}`}\n isRight={isRight}\n isOpen={dropdownInput}\n onToggle={toggleInput}\n onRenameList={renameList}\n onInputChange={handleGetInput}\n />\n </div>\n );\n};\n\nListActions.defaultProps = {\n isRight: false,\n type: '',\n title: '',\n listId: 0,\n handleDeleteList: () => {},\n handleRenameList: () => {},\n handleGetInput: () => {},\n};\n\nexport default ListActions;\n","import { Typography } from 'antd';\nimport styled from 'styled-components';\n\nconst { Text } = Typography;\n\nconst Label = styled(Text)`\n font-size: 12px;\n font-weight: 600;\n display: block;\n`;\n\nconst Value = styled(Text)`\n font-size: 14px;\n font-weight: 600;\n color: #1890ff;\n display: block;\n margin-bottom: 5px;\n`;\n\nconst Styles = {\n Label,\n Value,\n};\n\nexport default Styles;\n","import React from 'react';\nimport { Col, Row, Typography } from 'antd';\n// models\nimport { CompanyProfile } from '@optx/models/Company';\n// constants\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { abbreviateValue, roundNumber } from '@optx/utils/number';\nimport { formatDate, formatMoney } from '@optx/utils/format';\n// components\nimport CompanySourceDescriptions from '@optx/components/pages/CompanyProfile/ProfileBanner/CompanySourceDescriptions';\nimport CompanyTagsCollapsable from '@optx/features/tags/overflow-tags/CompanyTagsCollapsable';\nimport { ListTagsCollapsable } from '@optx/features/tags/overflow-tags';\n\n// styles\nimport Styles from './OPTXInsights.styles';\n\nconst { Text } = Typography;\n\ninterface OPTXInsightsProps {\n companyProfile: CompanyProfile;\n}\n\nconst OPTXInsights: React.FC<OPTXInsightsProps> = ({ companyProfile }) => {\n const companyProfileWatchLists =\n companyProfile.et_watchlists && companyProfile.regular_watchlists\n ? [...companyProfile.et_watchlists, ...companyProfile.regular_watchlists]\n : companyProfile.et_watchlists\n ? companyProfile.et_watchlists\n : companyProfile.regular_watchlists;\n\n return (\n <>\n <Row justify=\"space-between\" gutter={[0, 16]}>\n <Col>\n <Styles.Value>\n {roundNumber(companyProfile.capital_raised, `$${NUMBER_FORMAT}`).toUpperCase() ||\n DEFAULT_EMPTY_VALUE}\n </Styles.Value>\n <Styles.Label>TOTAL RAISED</Styles.Label>\n </Col>\n <Col>\n <Styles.Value>\n {formatDate(companyProfile.raise_date) || DEFAULT_EMPTY_VALUE}\n </Styles.Value>\n <Styles.Label>LAST FUNDING DATE</Styles.Label>\n </Col>\n <Col>\n <Styles.Value>{abbreviateValue(companyProfile.num_employees)}</Styles.Value>\n <Styles.Label>TOTAL # OF EMPLOYEES</Styles.Label>\n </Col>\n <Col>\n <Styles.Value>\n {companyProfile.emp_growth_percent !== null\n ? companyProfile.emp_growth_percent\n : DEFAULT_EMPTY_VALUE}\n </Styles.Value>\n <Styles.Label>Y/Y EMPLOYEE GROWTH %</Styles.Label>\n </Col>\n <Col>\n <Styles.Value>\n {companyProfile.sw_website_rank_per_country || DEFAULT_EMPTY_VALUE}\n </Styles.Value>\n <Styles.Label>US WEBSITE RANK</Styles.Label>\n </Col>\n </Row>\n <Row gutter={[0, 4]}>\n <CompanyTagsCollapsable company={companyProfile} />\n {companyProfileWatchLists && <ListTagsCollapsable tags={companyProfileWatchLists} />}\n </Row>\n <Row gutter={[16, 16]}>\n <Col span={5}>\n <Text type=\"secondary\" strong>\n Company Owner\n </Text>\n </Col>\n <Col>\n <Text strong>{companyProfile.company_owner || DEFAULT_EMPTY_VALUE}</Text>\n </Col>\n </Row>\n <Row gutter={[16, 16]}>\n <Col span={5}>\n <Text type=\"secondary\" strong>\n CEO\n </Text>\n </Col>\n <Col>\n <Text strong>{companyProfile.current_ceo || DEFAULT_EMPTY_VALUE}</Text>\n </Col>\n </Row>\n <Row gutter={[16, 16]}>\n <Col span={5}>\n <Text type=\"secondary\" strong>\n Stage\n </Text>\n </Col>\n <Col>\n <Text strong>{companyProfile.stage || DEFAULT_EMPTY_VALUE}</Text>\n </Col>\n </Row>\n <Row gutter={[16, 16]}>\n <Col span={5}>\n <Text type=\"secondary\" strong>\n Revenue\n </Text>\n </Col>\n <Col>\n <Text strong>\n {formatMoney(companyProfile.last_rev_update_amount) || DEFAULT_EMPTY_VALUE}\n </Text>\n </Col>\n </Row>\n <Row gutter={[16, 16]}>\n <Col span={5}>\n <Text type=\"secondary\" strong>\n Crunchbase Rank\n </Text>\n </Col>\n <Col span={5}>\n <Text strong>{companyProfile.cb_rank || DEFAULT_EMPTY_VALUE}</Text>\n </Col>\n </Row>\n <Row gutter={[0, 16]}>\n <CompanySourceDescriptions company={companyProfile} />\n </Row>\n </>\n );\n};\n\nexport default OPTXInsights;\n","import { createSelector } from 'reselect';\nimport { selectors } from '@features/company-touches';\nimport { selectors as profileSearchSelectors } from '@features/long-card/company-card';\n\nexport const pannelLoading = createSelector(\n profileSearchSelectors.isLoading,\n selectors.search.isLoading,\n (loadingProfile, loadingTouches) => loadingProfile || loadingTouches\n);\n","import DropdownAdd from '@optx/components/DropdownAdd';\nimport { Col, Button, Typography } from 'antd';\nimport styled, { css } from 'styled-components';\n\nconst { Text } = Typography;\n\nconst CompanyNameWrapper = styled(Col)`\n display: flex;\n justify-content: center;\n flex-direction: column;\n`;\n\nconst CompanyLocation = styled(Text)`\n svg {\n width: 14px;\n margin-right: 6px;\n }\n position: relative;\n`;\n\nconst CompanyName = styled.p`\n margin: 0;\n font-size: 20px;\n font-weight: bold;\n`;\n\nconst Icons = styled(Col)`\n display: flex;\n align-items: flex-start;\n justify-content: flex-end;\n margin-top: 15px;\n svg {\n font-size: 22px;\n }\n`;\n\nconst WebsiteIcon = styled.a`\n margin-right: 20px;\n color: #334d6e;\n\n &:hover {\n color: #1890ff;\n }\n\n &.not-active {\n color: red;\n }\n`;\n\nconst StyledDropDown = styled(DropdownAdd)`\n svg {\n color: rgb(175, 189, 209);\n font-size: 30px;\n transition: color 0.3s;\n\n &:hover {\n color: #1890ff;\n }\n }\n\n &.ant-dropdown-open {\n svg {\n color: #1890ff;\n }\n }\n`;\n\nconst Wrapper = styled(Col)`\n display: flex;\n margin: 30px 0;\n align-items: 'center';\n`;\n\nconst ArrowButton = styled(Button)`\n color: rgb(24, 144, 255);\n &:hover {\n color: rgb(24, 144, 255);\n }\n\n ${props =>\n props.disabled &&\n css`\n .ant-icon {\n color: 'rgb(175, 189, 209)';\n }\n `}\n`;\n\nconst ButtonWrapper = styled.div`\n display: flex;\n`;\n\nexport const CardHeaderStyles = {\n CompanyNameWrapper,\n CompanyName,\n Icons,\n WebsiteIcon,\n Wrapper,\n ArrowButton,\n ButtonWrapper,\n CompanyLocation,\n StyledDropDown,\n};\n\nexport default CardHeaderStyles;\n","import React, { useEffect, useState } from 'react';\nimport { Row } from 'antd';\nimport { useDispatch } from 'react-redux';\nimport { GlobalOutlined, LeftOutlined, RightOutlined } from '@ant-design/icons';\n// models\nimport Company from '@models/Company';\n// redux\nimport { actions as viewTypeActions } from '@features/grid/view-type';\n// components\nimport Icon from '@components/common/Icon';\nimport { IconCompany, IconLocation } from '@components/icons';\n// hooks\nimport useReferrerProfileLink from '@hooks/useReferrerLink';\nimport useLoadCompanyData from '../../hooks/useLoadCompanyData';\n// styles\nimport Styles from '@features/company/long-card/LongCardView.styled';\nimport CardHeaderStyles from './CardPannelHeader.styles';\n\ninterface CardPannelHeaderProps {\n companies: Array<Company>;\n selectedCompany: Company;\n}\n\nconst CardPannelHeader: React.FC<CardPannelHeaderProps> = ({ companies, selectedCompany }) => {\n const dispatch = useDispatch();\n const {\n company_id: companyId,\n company_name: name,\n location,\n logo_url: logoUrl,\n raw_url: website,\n url_status: urlStatus,\n } = selectedCompany;\n\n const logo = logoUrl !== '-' ? logoUrl : null;\n let currentCompanyIndex = companies.findIndex(company => company.company_id === companyId);\n\n const { referrerUrl } = useReferrerProfileLink(companyId);\n\n const [disableLeftArrow, setDisableLeftArrow] = useState(true);\n const [disableRightArrow, setDisableRightArrow] = useState(false);\n\n const { loadCompanyData } = useLoadCompanyData();\n\n const changePrevCompany = () => {\n // This action is used to know when a company card is selected using arrows\n // This is useful for scrolling into view of that company card\n dispatch(viewTypeActions.changedCompanyCard({ gridKey: 'advancedSearch', data: true }));\n\n if (currentCompanyIndex > 0) {\n currentCompanyIndex--;\n }\n\n if (currentCompanyIndex >= 0) {\n const { company_id: currentCompanyId, company_url: currentCompanyUrl } =\n companies[currentCompanyIndex];\n\n loadCompanyData(currentCompanyId, currentCompanyUrl);\n }\n };\n\n const changeNextCompany = () => {\n dispatch(viewTypeActions.changedCompanyCard({ gridKey: 'advancedSearch', data: true }));\n\n if (currentCompanyIndex < companies.length - 1) {\n currentCompanyIndex++;\n }\n\n if (currentCompanyIndex <= companies.length - 1) {\n const { company_id: currentCompanyId, company_url: currentCompanyUrl } =\n companies[currentCompanyIndex];\n\n loadCompanyData(currentCompanyId, currentCompanyUrl);\n }\n };\n\n useEffect(() => {\n if (currentCompanyIndex > 0) {\n setDisableLeftArrow(false);\n }\n\n if (companies.length === 1 || currentCompanyIndex >= companies.length - 1) {\n setDisableRightArrow(true);\n }\n }, [setDisableLeftArrow, setDisableRightArrow, currentCompanyIndex, companies.length]);\n\n return (\n <Row gutter={[16, 0]}>\n <CardHeaderStyles.Wrapper span={17}>\n <Styles.CenteredColumn span={6}>\n <Styles.ImageWrapper>\n {!logo ? <IconCompany /> : <img src={logo || undefined} alt={name} />}\n </Styles.ImageWrapper>\n </Styles.CenteredColumn>\n <CardHeaderStyles.CompanyNameWrapper span={18}>\n <CardHeaderStyles.CompanyName>\n {name}\n <Styles.CompanyProfileLink to={referrerUrl} target=\"_blank\">\n <Icon iconName=\"open-in-new\" />\n </Styles.CompanyProfileLink>\n </CardHeaderStyles.CompanyName>\n <CardHeaderStyles.CompanyLocation type=\"secondary\">\n <IconLocation />\n {location}\n </CardHeaderStyles.CompanyLocation>\n </CardHeaderStyles.CompanyNameWrapper>\n </CardHeaderStyles.Wrapper>\n <CardHeaderStyles.Icons span={7}>\n <Row align=\"middle\">\n {website && (\n <CardHeaderStyles.WebsiteIcon\n href={website}\n title={website}\n className={urlStatus === 'active' ? undefined : 'not-active'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <GlobalOutlined />\n </CardHeaderStyles.WebsiteIcon>\n )}\n\n <CardHeaderStyles.StyledDropDown record={companies[currentCompanyIndex]} />\n\n <CardHeaderStyles.ButtonWrapper>\n <CardHeaderStyles.ArrowButton\n disabled={disableLeftArrow}\n onClick={changePrevCompany}\n type=\"text\"\n >\n <LeftOutlined />\n </CardHeaderStyles.ArrowButton>\n\n <CardHeaderStyles.ArrowButton\n disabled={disableRightArrow}\n onClick={changeNextCompany}\n type=\"text\"\n >\n <RightOutlined />\n </CardHeaderStyles.ArrowButton>\n </CardHeaderStyles.ButtonWrapper>\n </Row>\n </CardHeaderStyles.Icons>\n </Row>\n );\n};\n\nexport default CardPannelHeader;\n","import React, { useEffect, useCallback } from 'react';\nimport { Col, Row } from 'antd';\nimport { useSelector, useDispatch } from 'react-redux';\n// models\nimport { CompanyProfile, ScoreGrowth } from '@optx/models/Company';\n// redux\nimport { selectors as fundingSelectors } from '@redux/company/funding-rounds';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport graphSelectors from '@features/company/graphs/state/selectors';\nimport { actions as scoreGrowthActions } from '@features/company/graphs/score';\n// components\nimport LinearCombinedChart from '@optx/components/feature/charts/LinearCombinedChart';\nimport BarChartIntervals from '@optx/components/feature/charts/BarChartIntervals';\nimport LinearChart from '@optx/components/feature/charts/LinearChart';\nimport ChartLegend from '@optx/components/feature/charts/ChartLegend';\n\ninterface CardPannelGraphsProps {\n companyProfile: CompanyProfile;\n}\n\nconst CardPannelGraphs: React.FC<CardPannelGraphsProps> = ({ companyProfile }) => {\n const employeeGraphData = useSelector(graphSelectors.employee.getEmployeeGrowthData);\n const isEmployeeGraphLoading = useSelector(graphSelectors.employee.isLoading);\n const scoreGraphData = useSelector(graphSelectors.score.getScoreGrowthData);\n const isScoreGraphLoading = useSelector(graphSelectors.score.isLoading);\n const defaultOptxScore = useSelector(userSelectors.getDefaultScore);\n const getPSGDate = useSelector(graphSelectors.score.getPSGDate);\n\n const fundingGraphData = useSelector(fundingSelectors.getFundingRoundsGraph);\n const isFundingGraphLoading = useSelector(fundingSelectors.isLoading);\n const roundsTotal = useSelector(fundingSelectors.getNumberOfRounds);\n const totalRaised = useSelector(fundingSelectors.getTotalRaised);\n const totalInvestors = useSelector(fundingSelectors.getTotalInvestors);\n\n const dispatch = useDispatch();\n\n const getScoreGrowth = useCallback(\n (payload: ScoreGrowth) => dispatch(scoreGrowthActions.fetchScoreGrowth(payload)),\n [dispatch]\n );\n\n const extraFunding = [\n {\n label: 'Total # of rounds',\n value: roundsTotal.toString(),\n },\n {\n label: 'Total # of investors',\n value: totalInvestors ? totalInvestors.toString() : '0',\n },\n {\n label: 'Total raised',\n value: totalRaised.toString(),\n format: true,\n },\n ];\n\n useEffect(() => {\n getScoreGrowth({\n company_id: companyProfile.company_id,\n company_url: companyProfile.company_url,\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [companyProfile.score, companyProfile.il_optx_score]);\n\n return (\n <>\n <Row>\n <Col style={{ width: '100%' }}>\n {defaultOptxScore === 'il' ? (\n <LinearChart\n data={scoreGraphData}\n isLoading={isScoreGraphLoading}\n dataKey=\"score_value\"\n labelKey=\"position\"\n title=\"IL OPTX Score\"\n kpiLabel=\"IL OPTX Score\"\n headerValue={companyProfile.il_optx_score}\n isTrending\n className=\"profile-chart score-chart\"\n isPSGCompany={companyProfile.is_psg_company}\n psgDate={getPSGDate}\n />\n ) : (\n <LinearChart\n data={scoreGraphData}\n isLoading={isScoreGraphLoading}\n dataKey=\"score_value\"\n dataSecondaryKey=\"score_v3_value\"\n labelKey=\"position\"\n title=\"OPTX Score\"\n kpiLabel=\"OPTX Score\"\n newKPILabel=\"OPTX Beta\"\n headerValue={companyProfile.score}\n newHeaderValue={companyProfile.score_v3}\n isTrending\n className=\"profile-chart score-chart\"\n scoreType=\"us\"\n isPSGCompany={companyProfile.is_psg_company}\n psgDate={getPSGDate}\n legend={<ChartLegend type=\"score\" />}\n />\n )}\n </Col>\n </Row>\n <Row>\n <Col style={{ width: '100%' }}>\n <LinearCombinedChart\n data={employeeGraphData}\n isLoading={isEmployeeGraphLoading}\n dataKey=\"count_emp\"\n dataSecondaryKey=\"count_job\"\n labelKey=\"position\"\n title=\"Employee Count\"\n kpiLabel=\"%Growth\"\n className=\"profile-chart employee-chart\"\n legend={<ChartLegend type=\"employee\" />}\n />\n </Col>\n </Row>\n <Row>\n <Col style={{ width: '100%' }}>\n <BarChartIntervals\n data={fundingGraphData}\n isLoading={isFundingGraphLoading}\n label=\"x_axis\"\n title=\"Funding Rounds\"\n dataKey=\"total_investment\"\n extra={extraFunding}\n emptyText=\"BootStrapped\"\n className=\"profile-chart funding-chart\"\n />\n </Col>\n </Row>\n </>\n );\n};\n\nexport default CardPannelGraphs;\n","import { Card } from 'antd';\nimport styled from 'styled-components';\nimport { CardProps } from 'antd/lib/card';\nimport ROUTES from '@optx/constants/routes';\n\nconst CardPannelWrapper = styled<\n React.FC<CardProps & { $location?: string; $topOffset?: string | number }>\n>(Card)`\n overflow-y: scroll;\n max-height: ${props =>\n `calc(100vh - ${\n props.$location === ROUTES.myCompanies\n ? 203\n : props.$location?.includes('/all-reports')\n ? 297\n : props.$topOffset\n }px)`};\n position: sticky;\n top: ${props =>\n props.$location === ROUTES.myCompanies\n ? '203px'\n : props.$location?.includes('/all-reports')\n ? '297px'\n : `${props.$topOffset}px`};\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n /* WebKit */\n width: 0;\n height: 0;\n }\n\n @media only screen and (max-width: 1780px) {\n .profile-chart-card {\n .ant-card-head-wrapper {\n display: block;\n }\n\n .ant-card-extra {\n float: none;\n justify-content: flex-start;\n padding-bottom: 16px;\n }\n\n .ant-card-head-title {\n padding-bottom: 0;\n }\n }\n\n .ant-timeline.ant-timeline-label .timeline-item--touch-future .ant-timeline-item-label {\n padding: 0 23px 0 0;\n }\n }\n\n @media (min-width: 1200px) and (max-width: 1780px) {\n .profile-chart-card.us {\n .beta-score-extra-wrapper {\n position: relative;\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n\n .recharts-legend-wrapper {\n position: static !important;\n\n & > div {\n margin-top: 0;\n margin-bottom: 20px;\n }\n }\n }\n\n .beta-score-extra {\n margin-left: 0;\n position: relative;\n padding-left: 30px;\n\n .score-trending__growth-score {\n color: #7cb305;\n }\n }\n\n .ant-tag {\n margin-right: 10px;\n position: absolute;\n left: -22px;\n }\n }\n\n .profile-chart-card.combined {\n .recharts-legend-wrapper {\n position: static !important;\n display: flex;\n justify-content: flex-end;\n\n & > div {\n margin-top: 0;\n }\n }\n }\n }\n\n @media (min-width: 1400px) {\n .profile-chart-card.us {\n .ant-tag {\n margin-right: 25px;\n position: static;\n left: auto;\n }\n }\n }\n\n .funding-chart {\n .recharts-tooltip-wrapper {\n top: auto !important;\n bottom: 0;\n }\n }\n`;\n\nexport const Styled = {\n CardPannelWrapper,\n};\n","import React from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { Tabs } from 'antd';\nimport { useSelector } from 'react-redux';\n// models\nimport Company, { CompanyProfile } from '@models/Company';\n// redux\nimport { selectors, TouchesTimeline } from '@features/company-touches';\nimport { selectors as cardSelectors } from '@features/long-card/company-card';\nimport { OPTXInsights } from '@features/optx-insights';\nimport NewsFeed from '@components/pages/CompanyProfile/ProfileTabs/NewsFeed';\nimport { selectors as pannelSelectors } from '../state';\n// components\nimport CardPannelHeader from './CardPannelHeader';\nimport CardPannelGraphs from './CardPannelGraphs';\nimport useHeaderHeight from '../utils/useHeaderHeight';\nimport { Styled } from './CardPannel.styled';\n\nconst { TabPane } = Tabs;\n\nconst TABS = {\n history: '1',\n insights: '2',\n news: '3',\n};\n\ninterface CardPannelProps {\n companies: Array<Company>;\n}\n\nconst CardPannel: React.FC<CardPannelProps> = ({ companies }) => {\n const isLoading = useSelector(pannelSelectors.pannelLoading);\n const selectedCompany = useSelector(cardSelectors.getProfile);\n const headerHeight = useHeaderHeight(64);\n\n const location = useLocation();\n\n // has touches\n const totalTouches = useSelector(selectors.search.total);\n\n return (\n <Styled.CardPannelWrapper\n loading={isLoading}\n $location={location.pathname}\n $topOffset={headerHeight}\n >\n {selectedCompany && (\n <>\n <CardPannelHeader companies={companies} selectedCompany={selectedCompany} />\n\n <Tabs\n animated={false}\n defaultActiveKey={totalTouches === 0 ? TABS.insights : TABS.history}\n >\n <TabPane tab=\"OPTX INSIGHTS\" key={TABS.insights} style={{ width: '100%' }}>\n <OPTXInsights companyProfile={selectedCompany as CompanyProfile} />\n <CardPannelGraphs companyProfile={selectedCompany as CompanyProfile} />\n </TabPane>\n <TabPane tab=\"TOUCH HISTORY\" key={TABS.history} style={{ width: '100%' }}>\n <TouchesTimeline company={selectedCompany} />\n </TabPane>\n <TabPane tab=\"NEWS FEED\" key={TABS.news} style={{ width: '100%' }}>\n <NewsFeed company={selectedCompany} />\n </TabPane>\n </Tabs>\n </>\n )}\n </Styled.CardPannelWrapper>\n );\n};\n\nexport default CardPannel;\n","import React from 'react';\nimport classNames from 'classnames';\n// styles\nimport './styles.scss';\n// components\nimport { IconCompany } from '../../../icons';\n\ninterface CompanyAvatarProps\n extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {\n logoUrl: string | null;\n companyName: string;\n}\n\nconst CompanyAvatar: React.FC<CompanyAvatarProps> = ({\n companyName,\n logoUrl,\n className,\n ...restProps\n}) => {\n return (\n <div className={classNames('company-avatar', className)} {...restProps}>\n {logoUrl ? <img src={logoUrl} alt={companyName} crossOrigin=\"anonymous\" /> : <IconCompany />}\n </div>\n );\n};\n\nexport default React.memo(CompanyAvatar);\n","import React, { useRef, useState } from 'react';\nimport AsyncCreatable from 'react-select/async-creatable';\nimport { ActionMeta, InputActionMeta, ValueType } from 'react-select';\nimport { MenuPlacement } from 'react-select/src/types';\n// models\nimport { SelectOption } from '@optx/models/Option';\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// hooks\nimport { useToggle } from '@optx/common/hooks/modal';\nimport useAsyncSearch from '@optx/common/hooks/select/useAsyncSearch';\n\ninterface CreateOtherOptionsProps {\n onInputChange: (option: SelectOption) => void;\n apiEndpoint: string;\n isDisabled?: boolean;\n setMenuMaxHeight?: number;\n menuPlacement?: MenuPlacement;\n}\n\nconst CreateOtherOptions: React.FC<CreateOtherOptionsProps> = ({\n onInputChange,\n apiEndpoint,\n isDisabled,\n setMenuMaxHeight,\n menuPlacement,\n}) => {\n const [showAddButton, toggleShowAddButton] = useToggle(false);\n const [inputValue, setInputValue] = useState<SelectOption | null>(null);\n\n const onChange = (\n option: ValueType<SelectOption<string>>,\n actionMeta: ActionMeta<SelectOption<string | number>>\n ) => {\n switch (actionMeta.action) {\n // @ts-ignore\n case 'select-option':\n onInputChange(option as SelectOption);\n setInputValue(option as SelectOption);\n break;\n\n case 'create-option': {\n onInputChange(option as SelectOption);\n setInputValue(option as SelectOption);\n\n toggleShowAddButton();\n break;\n }\n\n default:\n break;\n }\n };\n\n const { loadOptions } = useAsyncSearch({\n endpoint: apiEndpoint,\n });\n\n const selectRef = useRef<AsyncCreatable<SelectOption> | null>(null);\n\n const handleMenuClose = () => {\n if (!showAddButton) {\n toggleShowAddButton();\n }\n\n setInputValue(null);\n };\n\n const handleInputChange = (newValue: string, { action }: InputActionMeta) => {\n switch (action) {\n case 'input-change': {\n // This prevents a bug where the query is called without the last letter of previous query\n // eg: If user writes 'auto', query is 'auto'. If the second time user writes 'auto', query will be 'aut'.\n // This seems to fix above problem;\n loadOptionsAfterInputChange(newValue, () => {});\n break;\n }\n\n default:\n break;\n }\n };\n\n const loadOptionsAfterInputChange = (query: string, callback: SuccessErrorCallback) => {\n loadOptions(query, options => {\n const callbackResult = callback(options);\n\n return callbackResult;\n });\n };\n\n return (\n <AsyncCreatable\n isDisabled={!!isDisabled}\n value={inputValue}\n loadOptions={loadOptionsAfterInputChange}\n className=\"other_select-async\"\n onChange={onChange}\n onInputChange={handleInputChange}\n controlShouldRenderValue\n selectRef={selectRef}\n onMenuClose={handleMenuClose}\n closeMenuOnSelect\n bodyDisplay={false}\n disableValueRemove\n maxMenuHeight={setMenuMaxHeight ? setMenuMaxHeight : undefined}\n menuPlacement={menuPlacement}\n />\n );\n};\n\nexport default CreateOtherOptions;\n","export default \"data:image/jpeg;base64,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\"","import { createAction } from '@reduxjs/toolkit';\nimport { SourcingOutreachResponse } from '../../models/api';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { types } from '../types';\n\nexport const fetchSourcingOutreach = createAction<SortByRule<any>[] | undefined>(\n types.search.fetch.REQUEST\n);\nexport const fetchSourcingOutreachSuccess = createAction<SourcingOutreachResponse>(\n types.search.fetch.SUCCESS\n);\nexport const fetchSourcingOutreachFail = createAction<string>(types.search.fetch.FAILURE);\n","export const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;\nexport const isChrome = navigator.userAgent.indexOf('Chrome') !== -1;\n","import React, { ChangeEvent, useEffect, useRef, useState } from 'react';\nimport { Button, Input } from 'antd';\nimport { useDispatch } from 'react-redux';\n// models\nimport { FieldPropertyInfoType } from '@optx/models/Financial';\n// constants\nimport { ABBREVIATION_ERROR_MESSAGE, message } from '@optx/constants/table/cells';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\nimport { regexAbbreviation } from '@constants/regex';\n// utils\nimport { validateFloatAbbreviation } from '@optx/utils/validation';\nimport { parseNumberFromAbbreviation, roundNumber } from '@optx/utils/number';\nimport { roundingPresentationValues } from '@optx/utils/dealPresentation';\nimport { checkSaveButton } from '@optx/utils/proprietaryInfo';\n// hooks\nimport { useHistoryTab } from '@optx/common/hooks/history';\n// redux\nimport { actions } from '@redux/company/opportunity-presentation';\n// components\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\ninterface EditFieldNumberProps {\n companyId: number;\n fieldKey: string;\n fieldPropietaryInfoType: FieldPropertyInfoType;\n initialValue: number | null;\n isFromAuditField?: boolean;\n actionPendo?: string;\n}\n\nconst EditFieldNumber: React.FC<EditFieldNumberProps> = ({\n companyId,\n fieldKey,\n initialValue,\n fieldPropietaryInfoType,\n isFromAuditField,\n actionPendo,\n}) => {\n const title = `Edit \"${\n fieldKey === 'Asking Amount' ? 'Equity Check (Ask Amount)' : fieldKey\n }\" value`;\n const formatedValue = initialValue ? initialValue.toString() : initialValue;\n const dispatch = useDispatch();\n const { updateHistoryFields } = useHistoryTab();\n\n const [fieldValue, setFieldValue] = useState<string | null>(initialValue?.toString() ?? null);\n const inputValue = useRef<string | null>(initialValue?.toString() ?? null);\n const [closePopup, setClosePopup] = useState<boolean>(false);\n\n const selectedValue = fieldValue ? parseFloat(fieldValue) : 0;\n\n useEffect(() => {\n setFieldValue(initialValue?.toString() ?? null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialValue]);\n\n const handleChangeInput = (event: ChangeEvent<HTMLInputElement>) => {\n const { value } = event.target;\n\n inputValue.current = value;\n setFieldValue(value);\n };\n\n const handleCancel = () => {\n resetValue();\n setClosePopup(true);\n };\n\n const resetValue = () => {\n setFieldValue(initialValue?.toString() ?? null);\n inputValue.current = initialValue?.toString() ?? null;\n };\n\n const handleSubmit = () => {\n let value;\n\n if (!validateFloatAbbreviation(fieldValue as string)) {\n return message().error(ABBREVIATION_ERROR_MESSAGE);\n }\n\n if (fieldValue === null || fieldValue === '' || fieldValue === DEFAULT_EMPTY_VALUE) {\n value = null;\n setFieldValue(null);\n } else {\n const isFieldValueAbbreviated =\n typeof fieldValue === 'string' && regexAbbreviation.test(fieldValue);\n\n value = roundingPresentationValues(\n isFieldValueAbbreviated\n ? (parseNumberFromAbbreviation(fieldValue as string) as number)\n : parseFloat(fieldValue!.toString()) * 1000000\n );\n }\n\n const key = fieldKey?.replaceAll(' ', '_').toLowerCase();\n const payload = {\n company_id: companyId,\n [fieldPropietaryInfoType]: {\n [key as string]: value ? parseNumberFromAbbreviation(value.toString()) : null,\n },\n };\n dispatch(actions.updateOpportunityPresentation(payload));\n\n updateHistoryFields({\n afterValue: value ? parseNumberFromAbbreviation(value.toString()) : null,\n beforeValue: parseNumberFromAbbreviation(((initialValue as number) * 1000000).toString()),\n fieldChanged: fieldKey,\n });\n\n setClosePopup(true);\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n handleSubmit();\n }\n };\n\n const content = (\n <div style={{ width: '300px' }} onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n <Input\n autoFocus\n value={['0', 0, null].includes(fieldValue) ? undefined : (fieldValue?.toString() as string)}\n onChange={handleChangeInput}\n placeholder={fieldKey === 'Asking Amount' ? 'in millions of dollars' : title}\n style={{ width: '100%' }}\n />\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSubmit}\n disabled={checkSaveButton(selectedValue, initialValue)}\n >\n Save\n </Button>\n </div>\n </div>\n );\n\n if (isFromAuditField) {\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n onVisibilityChange={resetValue}\n setClosePopup={setClosePopup}\n hidePenIcon\n destroyOnHide\n getPopupContainer={triggerNode => triggerNode.parentNode as HTMLElement}\n >\n Edit Field\n </EditPopover>\n );\n }\n\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n onVisibilityChange={resetValue}\n setClosePopup={setClosePopup}\n destroyOnHide\n hidePenIcon={false}\n actionPendo={actionPendo}\n getPopupContainer={triggerNode => triggerNode.parentNode as HTMLElement}\n >\n <TruncateTooltip title={initialValue}>\n <span>\n {formatedValue !== null || Number(formatedValue) !== 0\n ? roundNumber(\n parseFloat(((formatedValue as number) * 1000000).toString()),\n NUMBER_FORMAT\n )\n : 0}\n </span>\n </TruncateTooltip>\n </EditPopover>\n );\n};\n\nexport default EditFieldNumber;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Select } from 'antd';\nimport { OptionTypeBase } from 'react-select';\nimport { useDispatch } from 'react-redux';\n// models\nimport { FieldPropertyInfoType } from '@optx/models/Financial';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { filterOption } from '@optx/utils/select/select';\n// hooks\nimport { useHistoryTab } from '@optx/common/hooks/history';\n// redux\nimport { actions } from '@redux/company/opportunity-presentation';\n// components\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\ninterface EditFieldSingleSelectProps {\n companyId: number;\n hidePenIcon?: boolean;\n fieldKey: string;\n options?: OptionTypeBase[];\n fieldPropietaryInfoType: FieldPropertyInfoType;\n initialValue: string;\n isFromAuditField?: boolean;\n actionPendo?: string;\n}\n\nconst EditFieldSingleSelect: React.FC<EditFieldSingleSelectProps> = ({\n companyId,\n fieldKey,\n initialValue,\n fieldPropietaryInfoType,\n options,\n hidePenIcon = false,\n isFromAuditField,\n actionPendo,\n}) => {\n const dispatch = useDispatch();\n const { updateHistoryFields } = useHistoryTab();\n\n const title = `Edit \"${fieldKey}\" value`;\n const [selectedValue, setSelectedValue] = useState<string>(initialValue as string);\n const [closePopup, setClosePopup] = useState<boolean>(false);\n\n const afterValue = useRef<string>();\n\n const onChange = (label: string) => {\n const key = fieldKey?.replaceAll(' ', '_').toLowerCase();\n\n if (selectedValue !== label) {\n setSelectedValue(label);\n afterValue.current = label;\n }\n\n const payload = {\n company_id: companyId,\n [fieldPropietaryInfoType]: {\n [key as string]: label,\n },\n };\n\n dispatch(actions.updateOpportunityPresentation(payload));\n\n updateHistoryFields({\n afterValue: label,\n beforeValue: initialValue,\n fieldChanged: fieldKey,\n });\n setClosePopup(true);\n };\n\n useEffect(() => {\n if (afterValue.current) {\n setSelectedValue(afterValue.current);\n }\n }, []);\n\n useEffect(() => {\n setSelectedValue(initialValue as string);\n }, [initialValue]);\n\n const content = (\n <Select\n autoFocus\n defaultOpen\n placeholder=\"select an option\"\n filterOption={filterOption}\n onChange={onChange}\n defaultValue={selectedValue}\n dropdownMatchSelectWidth={250}\n style={{ width: 250 }}\n showSearch\n >\n {options?.map((dealType: OptionTypeBase) => (\n <Select.Option key={dealType.value} value={dealType.value}>\n <TruncateTooltip title={dealType.label}>{dealType.label}</TruncateTooltip>\n </Select.Option>\n ))}\n </Select>\n );\n\n if (isFromAuditField) {\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n hidePenIcon\n destroyOnHide\n getPopupContainer={triggerNode => triggerNode.parentNode as HTMLElement}\n >\n Edit Field\n </EditPopover>\n );\n }\n\n return (\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n hidePenIcon={hidePenIcon}\n actionPendo={actionPendo}\n destroyOnHide\n getPopupContainer={triggerNode => triggerNode.parentNode as HTMLElement}\n >\n <TruncateTooltip\n title={\n ['None', '', undefined, null].includes(initialValue) ? DEFAULT_EMPTY_VALUE : initialValue\n }\n >\n <span>\n {['None', '', undefined, null].includes(initialValue)\n ? DEFAULT_EMPTY_VALUE\n : initialValue}\n </span>\n </TruncateTooltip>\n </EditPopover>\n );\n};\n\nexport default React.memo(EditFieldSingleSelect);\n","export { default } from './SearchGridControls';\nexport { default as TrendingControls } from './TrendingControls';\n","import { createSelector } from 'reselect';\n// constants\nimport { DEFAULT_SORTING_USER_SETTINGS } from '@optx/constants/filters';\n// redux\nimport { selectors as companyFiltersSelectors } from '@redux/company/filters';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport { selectors as filterSelectors } from '@features/grid/filter';\nimport { selectors as userSelectors } from '@redux/user/information';\n\nconst gridKey = 'myCompanies';\n\nexport const isLoading = createSelector(\n companyFiltersSelectors.isLoading,\n searchSelectors.isLoading(gridKey),\n sortSelectors.getSortingLoading(gridKey),\n (loadingFilters, loadingMyCompaniesSearch, loadingMyCompaniesSort) =>\n loadingFilters || loadingMyCompaniesSearch || loadingMyCompaniesSort\n);\n\nexport const shouldFetchMyCompanies = createSelector(\n userInformationSelectors.getSessionSettings,\n companyFiltersSelectors.filtersLoaded,\n userSelectors.loaded,\n searchSelectors.fetched(gridKey),\n filterSelectors.getFiltersLoaded(gridKey),\n userSelectors.getDefaultViewId,\n (\n persistFilters,\n loadedFilters,\n loadedUser,\n loadedMyCompanies,\n loadedMyCompaniesFilters,\n defaultViewId\n ) => {\n if (\n !defaultViewId &&\n ((!persistFilters.my_companies_filters && !persistFilters.my_companies_sorting) ||\n (persistFilters.my_companies_filters === '' &&\n persistFilters.my_companies_sorting === DEFAULT_SORTING_USER_SETTINGS))\n ) {\n return loadedUser && !loadedMyCompanies;\n }\n\n return loadedUser && loadedFilters && loadedMyCompaniesFilters && !loadedMyCompanies;\n }\n);\n","import React, { useEffect, useState } from 'react';\nimport { Card, Radio } from 'antd';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport {\n ResponsiveContainer,\n XAxis,\n YAxis,\n Tooltip,\n CartesianGrid,\n Line,\n Legend,\n TooltipProps,\n LineChart,\n} from 'recharts';\nimport moment from 'moment';\nimport numeral from 'numeral';\n// models\nimport { ChartData, ChartIntervalKeys, ChartItem, ChartItemKeys } from '@optx/models/charts/data';\n// constants\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\nimport { SHORT_MONTH_YEAR_DATE_FORMAT } from '@optx/constants/format/date';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { CompanyPageOverviewPendo, OPTXChromePlugin } from '@optx/constants/pendoActions';\n// utils\nimport { getFirstValidDate, getChartTicks } from '../../../utils/charts';\n// components\nimport KeyPerformanceIndicator from '../../common/Text/KeyPerformanceIndicator';\nimport EmptyChart from './EmptyChart';\nimport LineChartTooltip from './LineChartTooltip';\nimport CombinedChartTicks from './CombinedChartTicks';\nimport { ReactComponent as Gradients } from '../../../assets/svg/gradient-definitions.svg';\nimport Styles from './ChartHeader.style';\n\ninterface LinearCombinedChartProps {\n data: ChartData;\n isLoading?: boolean;\n dataKey: string;\n dataSecondaryKey?: string;\n labelKey: string;\n title: string;\n kpiLabel: string;\n className?: string;\n legend?: React.ReactElement;\n isExtension?: boolean;\n}\n\nconst LinearCombinedChart: React.FC<LinearCombinedChartProps> = ({\n data,\n isLoading = false,\n dataKey,\n dataSecondaryKey,\n labelKey,\n title,\n kpiLabel,\n className,\n legend,\n isExtension = false,\n}) => {\n let defaultKey = '3M' as ChartIntervalKeys;\n\n if (data['2Y'].data.length) {\n defaultKey = '2Y';\n } else if (data['1Y'].data.length) {\n defaultKey = '1Y';\n } else if (data['6M'].data.length) {\n defaultKey = '6M';\n }\n\n const [interval, setIntervalValue] = useState<'' | ChartIntervalKeys>('');\n const [maxValue, setMaxValue] = useState<string | number | undefined | null>(DEFAULT_EMPTY_VALUE);\n const [minValue, setMinValue] = useState<string | number | undefined | null>(DEFAULT_EMPTY_VALUE);\n const [growth, setGrowth] = useState<string | number | undefined | null>(DEFAULT_EMPTY_VALUE);\n const [growthClassName, setGrowthClassName] = useState('');\n const [chartPoints, setChartPoints] = useState<ChartItem[]>([]);\n const [historyStartsWidth, setHistoryStartsWidth] = useState<string | undefined>();\n const [ticks, setTicks] = useState<Array<string>>([]);\n\n const handleSizeChange = (e: RadioChangeEvent) => {\n const key = e.target.value as ChartIntervalKeys;\n setIntervalValue(key);\n setMaxValue(data[key]?.max);\n setMinValue(data[key]?.min);\n setGrowth(data[key]?.growth);\n setChartPoints(data[key]?.data || []);\n\n if (data[key]?.growth! > 0) {\n setGrowthClassName('kpi--positive');\n } else if (data[key]?.growth! < 0) {\n setGrowthClassName('kpi--negative');\n } else {\n setGrowthClassName('');\n }\n\n setTicks(getChartTicks(data, key));\n };\n\n const handleClassName = (key: ChartIntervalKeys) => {\n if (data[key]?.growth! > 0) {\n setGrowthClassName('kpi--positive');\n } else if (data[key]?.growth! < 0) {\n setGrowthClassName('kpi--negative');\n } else {\n setGrowthClassName('');\n }\n };\n\n useEffect(() => {\n if (data[defaultKey].data.length) {\n // calculate and save the width of \"history starts from\" element\n // it's width will be proportional to the number of empty labels compared to\n // the number of data points that have values\n if (defaultKey === '3M') {\n let emptyLabels = 0;\n\n data[defaultKey].data.forEach((item: ChartItem) => {\n if (item[dataKey as ChartItemKeys] === undefined) {\n emptyLabels++;\n }\n });\n\n if (emptyLabels) {\n setHistoryStartsWidth(`calc(${data[defaultKey].data[1].position!}% - 90px`);\n }\n }\n\n if (!interval) {\n setIntervalValue(defaultKey);\n setChartPoints(data[defaultKey].data);\n } else {\n setChartPoints(data[interval].data);\n }\n\n setTicks(getChartTicks(data, defaultKey));\n }\n\n setMaxValue(data[defaultKey]?.max);\n setMinValue(data[defaultKey]?.min);\n\n if (interval) {\n setGrowth(data[interval]?.growth);\n handleClassName(interval);\n } else {\n setGrowth(data[defaultKey]?.growth);\n handleClassName(defaultKey);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n const handleActionPendo = (value: string) => {\n const chromeExtensionExists = document.getElementsByClassName('extension-tabs').length;\n\n if (chromeExtensionExists) {\n window.pendo.track(\n OPTXChromePlugin.companyPage[\n `employeeCount${value.toUpperCase()}` as keyof typeof OPTXChromePlugin.companyPage\n ]\n );\n } else {\n window.pendo.track(\n CompanyPageOverviewPendo[`employeeCount${value}` as keyof typeof CompanyPageOverviewPendo]\n );\n }\n };\n\n const header = (\n <Styles.ChartHeaderWrapper>\n <Styles.ChartTitleWrapper>{title}</Styles.ChartTitleWrapper>\n <Radio.Group value={interval} onChange={handleSizeChange}>\n {Object.keys(data).map((key, index) => {\n const isDisabled = !data[key as ChartIntervalKeys].data.length;\n\n return (\n <Radio.Button\n key={index}\n value={key}\n disabled={isDisabled}\n onClick={() => handleActionPendo(key)}\n >\n {key}\n </Radio.Button>\n );\n })}\n </Radio.Group>\n </Styles.ChartHeaderWrapper>\n );\n\n const extra = (\n <div>\n <KeyPerformanceIndicator\n label=\"High\"\n value={typeof maxValue === 'number' ? maxValue!.toString() : DEFAULT_EMPTY_VALUE}\n />\n <KeyPerformanceIndicator\n label=\"Low\"\n value={typeof minValue === 'number' ? minValue!.toString() : DEFAULT_EMPTY_VALUE}\n />\n <KeyPerformanceIndicator\n label={kpiLabel}\n value={typeof growth === 'number' ? `${growth}%` : DEFAULT_EMPTY_VALUE}\n className={growthClassName}\n />\n </div>\n );\n\n return (\n <Card title={header} extra={extra} className=\"profile-chart-card extra combined\">\n <Gradients />\n {isLoading ? (\n <Styles.LoadingIconWrapper>\n <Styles.LoadingIcon />\n </Styles.LoadingIconWrapper>\n ) : (\n <div\n className={`profile-chart-card__container ${legend ? 'has-legend' : ''}`}\n style={{ height: '180px' }}\n >\n <ResponsiveContainer>\n <LineChart data={chartPoints} margin={{ left: 24, top: 5 }}>\n {!chartPoints.length && (\n <CartesianGrid\n vertical={false}\n horizontal={false}\n fill=\"url(#chartEmptyGradient)\"\n />\n )}\n\n <XAxis\n dataKey={labelKey}\n tickLine={false}\n stroke=\"#C2CFE0\"\n tickSize={15}\n ticks={ticks}\n interval={0}\n type=\"number\"\n tick={props => (\n <CombinedChartTicks\n startDate={chartPoints.length ? chartPoints[0].date : ''}\n endDate={chartPoints.length ? chartPoints[chartPoints.length - 1].date : ''}\n intervalKey={interval}\n {...props}\n />\n )}\n />\n <YAxis\n orientation=\"right\"\n tickCount={2}\n tickMargin={10}\n tickLine={false}\n axisLine={false}\n stroke=\"#C2CFE0\"\n type=\"number\"\n tickFormatter={(value: string | number | undefined) => {\n return numeral(value).format(NUMBER_FORMAT);\n }}\n />\n <Tooltip\n wrapperStyle={{ zIndex: 1 }}\n content={(props: TooltipProps) => (\n <LineChartTooltip\n primaryKey={dataKey}\n secondaryKey={dataSecondaryKey}\n primaryLabel=\"Employee Count:\"\n secondaryLabel=\"Job Openings:\"\n {...props}\n />\n )}\n cursor={false}\n />\n\n <Line\n type=\"monotone\"\n dataKey={dataKey}\n stroke=\"#1890FF\"\n strokeWidth=\"2px\"\n dot={{\n fill: chartPoints.length > 20 ? 'transparent' : '#fff',\n strokeWidth: chartPoints.length > 20 ? 0 : 1,\n r: 4,\n }}\n connectNulls\n />\n {dataSecondaryKey && (\n <Line\n type=\"monotone\"\n dataKey={dataSecondaryKey}\n stroke=\"#722ED1\"\n strokeDasharray=\"3 5\"\n strokeWidth=\"2px\"\n dot={{\n strokeDasharray: '0',\n fill: chartPoints.length > 20 ? 'transparent' : '#fff',\n strokeWidth: chartPoints.length > 20 ? 0 : 1,\n r: 4,\n }}\n connectNulls\n />\n )}\n {!isLoading && legend && chartPoints.length > 0 && (\n <Legend content={legend} align=\"right\" verticalAlign=\"bottom\" height={0} />\n )}\n </LineChart>\n </ResponsiveContainer>\n {!chartPoints.length && <EmptyChart />}\n {!!historyStartsWidth && !data[Object.keys(data)[1] as ChartIntervalKeys].data.length && (\n <EmptyChart\n className=\"chart-empty-labels\"\n text={`History Starts ${moment(getFirstValidDate(data[defaultKey].data)?.date).format(\n SHORT_MONTH_YEAR_DATE_FORMAT\n )}`}\n width={historyStartsWidth}\n />\n )}\n </div>\n )}\n </Card>\n );\n};\n\nexport default LinearCombinedChart;\n","import { useEffect } from 'react';\nimport { useHistory } from 'react-router';\n\n/**\n * Custom hook that navigates to a company's profile page when the company name is clicked in a table.\n *\n * This hook attaches a click event listener to the table body of an Ant Design table. When a cell\n * containing a company name is clicked, the user is navigated to the corresponding company's profile page.\n * The behavior of the navigation depends on the type of grid specified.\n *\n * @param {'advancedSearch' | 'myCompanies' | 'outreach'} gridType - The type of grid in which the table is displayed.\n * - 'advancedSearch': For advanced search results.\n * - 'myCompanies': For the user's companies list.\n * - 'outreach': For outreach-related companies.\n *\n * @example\n * // Usage in a functional component\n * const MyComponent = () => {\n * useNavigateOnCompanyNameClick('myCompanies');\n * return <TableComponent />;\n * };\n *\n * @returns {void} This hook does not return any value.\n */\nconst useNavigateOnCompanyNameClick = (gridType: 'advancedSearch' | 'myCompanies' | 'outreach') => {\n const history = useHistory();\n useEffect(() => {\n const tableBody = document.querySelector('.ant-table-tbody');\n\n if (tableBody && gridType) {\n const handleClick = (event: Event) => {\n const target = event.target as HTMLTableDataCellElement;\n\n const isCompanyNameCell =\n (target.classList.contains('ant-table-cell') &&\n target.classList.contains('company_name')) ||\n (gridType === 'outreach' && target.classList.contains('ant-table-cell-content'));\n\n if (isCompanyNameCell && !target.classList.contains('ant-table-selection-column')) {\n const id =\n (target.parentElement as HTMLTableRowElement).getAttribute('data-row-key') ||\n target.parentElement?.parentElement?.getAttribute('data-row-key');\n\n if (id) {\n history.push(`/profile/${id}`);\n }\n }\n };\n\n tableBody.addEventListener('click', handleClick, false);\n\n return () => {\n tableBody.removeEventListener('click', handleClick, false);\n };\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n};\n\nexport default useNavigateOnCompanyNameClick;\n","import styled from 'styled-components';\n\nconst StyledSelect = styled.div`\n .ant-radio-button-wrapper {\n background: #074681;\n border: 1px solid transparent;\n color: #ffffff;\n }\n .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {\n color: #ffffff;\n background: #1890ff;\n border: 1px solid #1890ff;\n }\n .ant-radio-button-wrapper:not(:first-child):before {\n display: none;\n }\n`;\n\nconst Styled = {\n StyledSelect,\n};\n\nexport default Styled;\n","export const featureName = 'company-social-media';\n","import { utils as requestUtils } from '@features/request';\nimport { featureName } from '../../featureName';\n\nexport const fetchWWWebsiteRank = requestUtils.createActionTypes(\n featureName,\n 'FETCH_WW_WEBSITE_RANK'\n);\nexport const fetchUSWebsiteRank = requestUtils.createActionTypes(\n featureName,\n 'FETCH_US_WEBSITE_RANK'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { WebsiteRankPayload } from '@optx/models/company/SocialMedia';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport * as types from './types';\n\n// FETCH WORLD WIDE RANK\nexport const fetchWWWebsiteRank = createAction<WebsiteRankPayload>(\n types.fetchWWWebsiteRank.REQUEST\n);\n\nexport const fetchWWWebsiteRankSuccess = createAction<SocialMediaChartData>(\n types.fetchWWWebsiteRank.SUCCESS\n);\n\nexport const fetchWWWebsiteRankFail = createAction<string>(types.fetchWWWebsiteRank.FAILURE);\n\n// FETCH US ONLY RANK\nexport const fetchUSWebsiteRank = createAction<WebsiteRankPayload>(\n types.fetchUSWebsiteRank.REQUEST\n);\nexport const fetchUSWebsiteRankSuccess = createAction<SocialMediaChartData>(\n types.fetchUSWebsiteRank.SUCCESS\n);\nexport const fetchUSWebsiteRankFail = createAction<string>(types.fetchUSWebsiteRank.FAILURE);\n","import { createSelector } from 'reselect';\nimport { SocialMediaState } from '../interfaces';\nimport { featureName } from '../../featureName';\n\nconst getSocialMediaState = (state: Record<typeof featureName, SocialMediaState>) =>\n state[featureName];\n\nexport const getUSOnlyData = createSelector(\n getSocialMediaState,\n state => state.websiteRankData.data.us\n);\nexport const getData = createSelector(\n getSocialMediaState,\n state => state.websiteRankData.data.nonUs\n);\nexport const loading = createSelector(getSocialMediaState, state => state.websiteRankData.loading);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\n// constants\nimport { INITIAL_STATE_CHART } from '@constants/charts';\n// utils\nimport { parseReversedValues } from '@utils/charts';\n// redux\nimport { fetchFailReducer, fetchReducer } from '@redux/feature/fetch/reducers';\nimport { SocialMediaChartData } from '@models/charts/data';\nimport { LOCATION_CHANGE } from 'connected-react-router';\nimport * as actions from './actions';\nimport { SocialMediaWebsiteRankState } from '../interfaces';\n\nconst initialState: SocialMediaWebsiteRankState = {\n data: {\n nonUs: INITIAL_STATE_CHART as SocialMediaChartData,\n us: INITIAL_STATE_CHART as SocialMediaChartData,\n },\n loading: false,\n error: '',\n};\n\nconst fetchUSWebsiteRankSuccessReducer: CaseReducer<\n SocialMediaWebsiteRankState,\n PayloadAction<any>\n> = (draftState, action) => {\n draftState.data.us = parseReversedValues(action.payload);\n draftState.loading = false;\n};\n\nconst fetchWWWebsiteRankSuccessReducer: CaseReducer<\n SocialMediaWebsiteRankState,\n PayloadAction<any>\n> = (draftState, action) => {\n draftState.data.nonUs = parseReversedValues(action.payload);\n draftState.loading = false;\n};\n\nconst clearStateReducer: CaseReducer<SocialMediaWebsiteRankState> = (draftState, action) => {\n if (!action.payload.location.pathname.includes('profile')) {\n draftState.data.us = INITIAL_STATE_CHART as SocialMediaChartData;\n draftState.data.nonUs = INITIAL_STATE_CHART as SocialMediaChartData;\n }\n};\n\nexport const reducer = createReducer<SocialMediaWebsiteRankState>(initialState, builder =>\n builder\n .addCase(actions.fetchWWWebsiteRank, fetchReducer)\n .addCase(actions.fetchWWWebsiteRankSuccess, fetchWWWebsiteRankSuccessReducer)\n .addCase(actions.fetchWWWebsiteRankFail, fetchFailReducer)\n .addCase(actions.fetchUSWebsiteRank, fetchReducer)\n .addCase(actions.fetchUSWebsiteRankSuccess, fetchUSWebsiteRankSuccessReducer)\n .addCase(actions.fetchUSWebsiteRankFail, fetchFailReducer)\n .addCase(LOCATION_CHANGE, clearStateReducer)\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport { WebsiteRankPayload } from '@optx/models/company/SocialMedia';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// constants\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\n// redux\nimport * as actions from './actions';\n\nexport function* fetchWWWebsiteRankSaga(action: PayloadAction<WebsiteRankPayload, any, boolean>) {\n try {\n const res: AxiosResponse<SocialMediaChartData> = yield call(\n CompanyService.getCompanySocialMediaWebsiteRank,\n {\n companyId: action.payload.companyId,\n usOnly: false,\n }\n );\n const chartData = res.data;\n\n if (chartData) {\n yield put(actions.fetchWWWebsiteRankSuccess(chartData));\n } else {\n yield put(actions.fetchWWWebsiteRankSuccess(INITIAL_STATE_CHART as SocialMediaChartData));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch WW Website Rank data');\n yield put(actions.fetchWWWebsiteRankFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport function* fetchUSWebsiteRankSaga(action: PayloadAction<WebsiteRankPayload, any, boolean>) {\n try {\n const res: AxiosResponse<SocialMediaChartData> = yield call(\n CompanyService.getCompanySocialMediaWebsiteRank,\n {\n companyId: action.payload.companyId,\n usOnly: true,\n }\n );\n const chartData = res.data;\n\n if (chartData) {\n yield put(actions.fetchUSWebsiteRankSuccess(chartData));\n } else {\n yield put(actions.fetchUSWebsiteRankSuccess(INITIAL_STATE_CHART as SocialMediaChartData));\n }\n } catch (e: any) {\n // need to change message\n const errorMessage = getErrorMessage(e, 'Failed to fetch US Website Rank data');\n yield put(actions.fetchUSWebsiteRankFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* websiteRankSaga() {\n yield takeLatest(actions.fetchWWWebsiteRank, fetchWWWebsiteRankSaga);\n yield takeLatest(actions.fetchUSWebsiteRank, fetchUSWebsiteRankSaga);\n}\n","import { utils as requestUtils } from '@features/request';\nimport { featureName } from '../../featureName';\n\nexport const fetchG2Data = requestUtils.createActionTypes(featureName, 'FETCH_G2_DATA');\n","import { createAction } from '@reduxjs/toolkit';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport * as types from './types';\n\n// fetch company touches actions\nexport const fetchG2Data = createAction<number>(types.fetchG2Data.REQUEST);\nexport const fetchG2DataSuccess = createAction<SocialMediaChartData>(types.fetchG2Data.SUCCESS);\n\nexport const fetchG2DataFail = createAction<string>(types.fetchG2Data.FAILURE);\n","import { createSelector } from 'reselect';\nimport { SocialMediaState } from '../interfaces';\nimport { featureName } from '../../featureName';\n\nconst getSocialMediaState = (state: Record<typeof featureName, SocialMediaState>) =>\n state[featureName];\n\nexport const getData = createSelector(getSocialMediaState, state => state.g2Data.data);\nexport const loading = createSelector(getSocialMediaState, state => state.g2Data.loading);\n","import { createReducer, CaseReducer } from '@reduxjs/toolkit';\n// constants\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\n// redux\nimport { fetchFailReducer, fetchReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport { LOCATION_CHANGE } from 'connected-react-router';\nimport * as actions from './actions';\nimport { SocialMediaGraphState } from '../interfaces';\n\nconst initialState: SocialMediaGraphState = {\n data: INITIAL_STATE_CHART as SocialMediaChartData,\n loading: false,\n error: '',\n};\n\nconst clearStateReducer: CaseReducer<SocialMediaGraphState> = (draftState, action) => {\n if (!action.payload.location.pathname.includes('profile')) {\n draftState.data = INITIAL_STATE_CHART as SocialMediaChartData;\n }\n};\n\nexport const reducer = createReducer<SocialMediaGraphState>(initialState, builder =>\n builder\n .addCase(actions.fetchG2Data, fetchReducer)\n .addCase(actions.fetchG2DataSuccess, fetchSuccessReducer)\n .addCase(actions.fetchG2DataFail, fetchFailReducer)\n .addCase(LOCATION_CHANGE, clearStateReducer)\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { SocialMediaChartData } from '@optx/models/charts/data';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\nimport * as actions from './actions';\n\nexport function* G2DataSaga(action: PayloadAction<number, any, boolean>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<SocialMediaChartData> = yield call(\n CompanyService.getCompanySocialMediaG2,\n companyId\n );\n const chartData = res.data;\n\n if (chartData) {\n yield put(actions.fetchG2DataSuccess(chartData));\n } else {\n yield put(actions.fetchG2DataSuccess(INITIAL_STATE_CHART as SocialMediaChartData));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch G2 Crowd data');\n yield put(actions.fetchG2DataFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* g2DataSaga() {\n yield takeLatest(actions.fetchG2Data, G2DataSaga);\n}\n","import { utils as requestUtils } from '@features/request';\nimport { featureName } from '../../featureName';\n\nexport const fetchGlassDoorData = requestUtils.createActionTypes(\n featureName,\n 'FETCH_GLASSDOOR_DATA'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { GlassDoorChartData } from '@optx/models/charts/data';\nimport * as types from './types';\n\n// fetch company touches actions\nexport const fetchGlassDoorData = createAction<number>(types.fetchGlassDoorData.REQUEST);\nexport const fetchGlassDoorDataSuccess = createAction<GlassDoorChartData>(\n types.fetchGlassDoorData.SUCCESS\n);\n\nexport const fetchGlassDoorDataFail = createAction<string>(types.fetchGlassDoorData.FAILURE);\n","import { createSelector } from 'reselect';\nimport { SocialMediaState } from '../interfaces';\nimport { featureName } from '../../featureName';\n\nconst getSocialMediaState = (state: Record<typeof featureName, SocialMediaState>) =>\n state[featureName];\n\nexport const getData = createSelector(getSocialMediaState, state => state.glassDoorData.data);\nexport const loading = createSelector(getSocialMediaState, state => state.glassDoorData.loading);\n","import { createReducer, CaseReducer } from '@reduxjs/toolkit';\n// constants\nimport { INITIAL_GlASS_DOOR_CHART } from '@optx/constants/charts';\n// redux\nimport { fetchFailReducer, fetchReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\nimport { LOCATION_CHANGE } from 'connected-react-router';\nimport * as actions from './actions';\nimport { GlassDoorGraphState } from './interface';\n\nconst initialState: GlassDoorGraphState = {\n data: INITIAL_GlASS_DOOR_CHART,\n loading: false,\n error: '',\n};\n\nconst clearStateReducer: CaseReducer<GlassDoorGraphState> = (draftState, action) => {\n if (!action.payload.location.pathname.includes('profile')) {\n draftState.data = INITIAL_GlASS_DOOR_CHART;\n }\n};\n\nexport const reducer = createReducer<GlassDoorGraphState>(initialState, builder =>\n builder\n .addCase(actions.fetchGlassDoorData, fetchReducer)\n .addCase(actions.fetchGlassDoorDataSuccess, fetchSuccessReducer)\n .addCase(actions.fetchGlassDoorDataFail, fetchFailReducer)\n .addCase(LOCATION_CHANGE, clearStateReducer)\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { INITIAL_GlASS_DOOR_CHART } from '@optx/constants/charts';\nimport { GlassDoorChartData } from '@optx/models/charts/data';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport * as actions from './actions';\n\nexport function* fetchGlassDoorSaga(action: PayloadAction<number, any, boolean>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<GlassDoorChartData> = yield call(\n CompanyService.getCompanySocialMediaGlassdoor,\n companyId\n );\n const chartData = res.data;\n\n if (chartData) {\n yield put(actions.fetchGlassDoorDataSuccess(chartData));\n } else {\n yield put(actions.fetchGlassDoorDataSuccess(INITIAL_GlASS_DOOR_CHART));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch GlassDoor data');\n yield put(actions.fetchGlassDoorDataFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* glassDoorSaga() {\n yield takeLatest(actions.fetchGlassDoorData, fetchGlassDoorSaga);\n}\n","import { utils as requestUtils } from '@features/request';\nimport { featureName } from '../../featureName';\n\nexport const fetchLinkedinData = requestUtils.createActionTypes(featureName, 'FETCH_LINKEDIN_DATA');\n","import { createAction } from '@reduxjs/toolkit';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport * as types from './types';\n\n// fetch company touches actions\nexport const fetchLinkedinData = createAction<number>(types.fetchLinkedinData.REQUEST);\nexport const fetchLinkedinDataSuccess = createAction<SocialMediaChartData>(\n types.fetchLinkedinData.SUCCESS\n);\n\nexport const fetchLinkedinDataFail = createAction<string>(types.fetchLinkedinData.FAILURE);\n","import { createSelector } from 'reselect';\nimport { SocialMediaState } from '../interfaces';\nimport { featureName } from '../../featureName';\n\nconst getSocialMediaState = (state: Record<typeof featureName, SocialMediaState>) =>\n state[featureName];\n\nexport const getData = createSelector(getSocialMediaState, state => state.linkedinData.data);\nexport const loading = createSelector(getSocialMediaState, state => state.linkedinData.loading);\n","import { createReducer, CaseReducer } from '@reduxjs/toolkit';\n// constants\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\n// redux\nimport { fetchFailReducer, fetchReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport { LOCATION_CHANGE } from 'connected-react-router';\nimport * as actions from './actions';\nimport { SocialMediaGraphState } from '../interfaces';\n\nconst initialState: SocialMediaGraphState = {\n data: INITIAL_STATE_CHART as SocialMediaChartData,\n loading: false,\n error: '',\n};\n\nconst clearStateReducer: CaseReducer<SocialMediaGraphState> = (draftState, action) => {\n if (!action.payload.location.pathname.includes('profile')) {\n draftState.data = INITIAL_STATE_CHART as SocialMediaChartData;\n }\n};\n\nexport const reducer = createReducer<SocialMediaGraphState>(initialState, builder =>\n builder\n .addCase(actions.fetchLinkedinData, fetchReducer)\n .addCase(actions.fetchLinkedinDataSuccess, fetchSuccessReducer)\n .addCase(actions.fetchLinkedinDataFail, fetchFailReducer)\n .addCase(LOCATION_CHANGE, clearStateReducer)\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { SocialMediaChartData } from '@optx/models/charts/data';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\nimport * as actions from './actions';\n\nexport function* fetchLinkedinDataaga(action: PayloadAction<number, any, boolean>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<SocialMediaChartData> = yield call(\n CompanyService.getCompanySocialMediaLinkedin,\n companyId\n );\n const chartData = res.data;\n\n if (chartData) {\n yield put(actions.fetchLinkedinDataSuccess(chartData));\n } else {\n yield put(actions.fetchLinkedinDataSuccess(INITIAL_STATE_CHART as SocialMediaChartData));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch Linkedin Data');\n yield put(actions.fetchLinkedinDataFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* linkedinDataSaga() {\n yield takeLatest(actions.fetchLinkedinData, fetchLinkedinDataaga);\n}\n","import { utils as requestUtils } from '@features/request';\nimport { featureName } from '../../featureName';\n\nexport const fetchCrunchbaseData = requestUtils.createActionTypes(\n featureName,\n 'FETCH_CRUNCHBASE_DATA'\n);\n","import { createAction } from '@reduxjs/toolkit';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport * as types from './types';\n\n// fetch company touches actions\nexport const fetchCrunchbaseData = createAction<number>(types.fetchCrunchbaseData.REQUEST);\nexport const fetchCrunchbaseDataSuccess = createAction<SocialMediaChartData>(\n types.fetchCrunchbaseData.SUCCESS\n);\n\nexport const fetchCrunchbaseDataFail = createAction<string>(types.fetchCrunchbaseData.FAILURE);\n","import { createSelector } from 'reselect';\nimport { SocialMediaState } from '../interfaces';\nimport { featureName } from '../../featureName';\n\nconst getSocialMediaState = (state: Record<typeof featureName, SocialMediaState>) =>\n state[featureName];\n\nexport const getData = createSelector(getSocialMediaState, state => state.crunchbaseData.data);\nexport const loading = createSelector(getSocialMediaState, state => state.crunchbaseData.loading);\n","import { createReducer, CaseReducer } from '@reduxjs/toolkit';\n// constants\nimport { INITIAL_STATE_CHART } from '@constants/charts';\n// utils\nimport { parseReversedValues } from '@utils/charts';\n// redux\nimport { fetchFailReducer, fetchReducer } from '@redux/feature/fetch/reducers';\nimport { SocialMediaChartData } from '@models/charts/data';\nimport { LOCATION_CHANGE } from 'connected-react-router';\nimport * as actions from './actions';\nimport { SocialMediaGraphState } from '../interfaces';\n\nconst initialState: SocialMediaGraphState = {\n data: INITIAL_STATE_CHART as SocialMediaChartData,\n loading: false,\n error: '',\n};\n\nconst fetchCrunchbaseDataSuccessReducer: CaseReducer<SocialMediaGraphState> = (\n draftState,\n action\n) => {\n draftState.data = parseReversedValues(action.payload);\n draftState.loading = false;\n};\n\nconst clearStateReducer: CaseReducer<SocialMediaGraphState> = (draftState, action) => {\n if (!action.payload.location.pathname.includes('profile')) {\n draftState.data = INITIAL_STATE_CHART as SocialMediaChartData;\n }\n};\n\nexport const reducer = createReducer<SocialMediaGraphState>(initialState, builder =>\n builder\n .addCase(actions.fetchCrunchbaseData, fetchReducer)\n .addCase(actions.fetchCrunchbaseDataSuccess, fetchCrunchbaseDataSuccessReducer)\n .addCase(actions.fetchCrunchbaseDataFail, fetchFailReducer)\n .addCase(LOCATION_CHANGE, clearStateReducer)\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { SocialMediaChartData } from '@optx/models/charts/data';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\nimport * as actions from './actions';\n\nexport function* fetchCrunchbaseDataSaga(action: PayloadAction<number, any, boolean>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<SocialMediaChartData> = yield call(\n CompanyService.getCompanySocialMediaCrunchbase,\n companyId\n );\n const chartData = res.data;\n\n if (chartData) {\n yield put(actions.fetchCrunchbaseDataSuccess(chartData));\n } else {\n yield put(actions.fetchCrunchbaseDataSuccess(INITIAL_STATE_CHART as SocialMediaChartData));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch Crunchbase data');\n yield put(actions.fetchCrunchbaseDataFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* crunchbaseDataSaga() {\n yield takeLatest(actions.fetchCrunchbaseData, fetchCrunchbaseDataSaga);\n}\n","import { utils as requestUtils } from '@features/request';\nimport { featureName } from '../../featureName';\n\nexport const fetchTwitterData = requestUtils.createActionTypes(featureName, 'FETCH_TWITTER_DATA');\n","import { createAction } from '@reduxjs/toolkit';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport * as types from './types';\n\n// fetch company touches actions\nexport const fetchTwitterData = createAction<number>(types.fetchTwitterData.REQUEST);\nexport const fetchTwitterDataSuccess = createAction<SocialMediaChartData>(\n types.fetchTwitterData.SUCCESS\n);\n\nexport const fetchTwitterDataFail = createAction<string>(types.fetchTwitterData.FAILURE);\n","import { createSelector } from 'reselect';\nimport { SocialMediaState } from '../interfaces';\nimport { featureName } from '../../featureName';\n\nconst getSocialMediaState = (state: Record<typeof featureName, SocialMediaState>) =>\n state[featureName];\n\nexport const getData = createSelector(getSocialMediaState, state => state.twitterData.data);\nexport const loading = createSelector(getSocialMediaState, state => state.twitterData.loading);\n","import { createReducer, CaseReducer } from '@reduxjs/toolkit';\n// constants\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\n// redux\nimport { fetchFailReducer, fetchReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport { LOCATION_CHANGE } from 'connected-react-router';\nimport ROUTES from '@optx/constants/routes';\nimport * as actions from './actions';\nimport { SocialMediaGraphState } from '../interfaces';\n\nconst initialState: SocialMediaGraphState = {\n data: INITIAL_STATE_CHART as SocialMediaChartData,\n loading: false,\n error: '',\n};\n\nconst clearStateReducer: CaseReducer<SocialMediaGraphState> = (draftState, action) => {\n if (action.payload.location.pathname.includes(ROUTES.profile)) {\n draftState.data = INITIAL_STATE_CHART as SocialMediaChartData;\n }\n};\n\nexport const reducer = createReducer<SocialMediaGraphState>(initialState, builder =>\n builder\n .addCase(actions.fetchTwitterData, fetchReducer)\n .addCase(actions.fetchTwitterDataSuccess, fetchSuccessReducer)\n .addCase(actions.fetchTwitterDataFail, fetchFailReducer)\n .addCase(LOCATION_CHANGE, clearStateReducer)\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { SocialMediaChartData } from '@optx/models/charts/data';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\nimport * as actions from './actions';\n\nexport function* fetchTwitterDataSaga(action: PayloadAction<number, any, boolean>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<SocialMediaChartData> = yield call(\n CompanyService.getCompanySocialMediaTwitter,\n companyId\n );\n const chartData = res.data;\n\n if (chartData) {\n yield put(actions.fetchTwitterDataSuccess(chartData));\n } else {\n yield put(actions.fetchTwitterDataSuccess(INITIAL_STATE_CHART as SocialMediaChartData));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch Twitter data');\n yield put(actions.fetchTwitterDataFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* twitterDataSaga() {\n yield takeLatest(actions.fetchTwitterData, fetchTwitterDataSaga);\n}\n","import { utils as requestUtils } from '@features/request';\nimport { featureName } from '../../featureName';\n\nexport const fetchFacebookData = requestUtils.createActionTypes(featureName, 'FETCH_FACEBOOK_DATA');\n","import { createAction } from '@reduxjs/toolkit';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport * as types from './types';\n\n// fetch company touches actions\nexport const fetchFacebookData = createAction<number>(types.fetchFacebookData.REQUEST);\nexport const fetchFacebookDataSuccess = createAction<SocialMediaChartData>(\n types.fetchFacebookData.SUCCESS\n);\n\nexport const fetchFacebookDataFail = createAction<string>(types.fetchFacebookData.FAILURE);\n","import { createSelector } from 'reselect';\nimport { SocialMediaState } from '../interfaces';\nimport { featureName } from '../../featureName';\n\nconst getSocialMediaState = (state: Record<typeof featureName, SocialMediaState>) =>\n state[featureName];\n\nexport const getData = createSelector(getSocialMediaState, state => state.facebookData.data);\nexport const loading = createSelector(getSocialMediaState, state => state.facebookData.loading);\n","import { createReducer, CaseReducer } from '@reduxjs/toolkit';\n// constants\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\n// redux\nimport { fetchFailReducer, fetchReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport { LOCATION_CHANGE } from 'connected-react-router';\nimport * as actions from './actions';\nimport { SocialMediaGraphState } from '../interfaces';\n\nconst initialState: SocialMediaGraphState = {\n data: INITIAL_STATE_CHART as SocialMediaChartData,\n loading: false,\n error: '',\n};\n\nconst clearStateReducer: CaseReducer<SocialMediaGraphState> = (draftState, action) => {\n if (!action.payload.location.pathname.includes('profile')) {\n draftState.data = INITIAL_STATE_CHART as SocialMediaChartData;\n }\n};\n\nexport const reducer = createReducer<SocialMediaGraphState>(initialState, builder =>\n builder\n .addCase(actions.fetchFacebookData, fetchReducer)\n .addCase(actions.fetchFacebookDataSuccess, fetchSuccessReducer)\n .addCase(actions.fetchFacebookDataFail, fetchFailReducer)\n .addCase(LOCATION_CHANGE, clearStateReducer)\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { SocialMediaChartData } from '@optx/models/charts/data';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\nimport * as actions from './actions';\n\nexport function* fetchFacebookDataSaga(action: PayloadAction<number, any, boolean>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<SocialMediaChartData> = yield call(\n CompanyService.getCompanySocialMediaFacebook,\n companyId\n );\n const chartData = res.data;\n\n if (chartData) {\n yield put(actions.fetchFacebookDataSuccess(chartData));\n } else {\n yield put(actions.fetchFacebookDataSuccess(INITIAL_STATE_CHART as SocialMediaChartData));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch Facebook data');\n yield put(actions.fetchFacebookDataFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* fetchDataSaga() {\n yield takeLatest(actions.fetchFacebookData, fetchFacebookDataSaga);\n}\n","import { utils as requestUtils } from '@features/request';\nimport { featureName } from '../../featureName';\n\nexport const fetchCapterraData = requestUtils.createActionTypes(featureName, 'FETCH_CAPTERRA_DATA');\n","import { createAction } from '@reduxjs/toolkit';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport * as types from './types';\n\n// fetch company touches actions\nexport const fetchCapterraData = createAction<number>(types.fetchCapterraData.REQUEST);\nexport const fetchCapterraDataSuccess = createAction<SocialMediaChartData>(\n types.fetchCapterraData.SUCCESS\n);\n\nexport const fetchCapterraDataFail = createAction<string>(types.fetchCapterraData.FAILURE);\n","import { createSelector } from 'reselect';\nimport { SocialMediaState } from '../interfaces';\nimport { featureName } from '../../featureName';\n\nconst getSocialMediaState = (state: Record<typeof featureName, SocialMediaState>) =>\n state[featureName];\n\nexport const getData = createSelector(getSocialMediaState, state => state.capterraData.data);\nexport const loading = createSelector(getSocialMediaState, state => state.capterraData.loading);\n","import { createReducer, CaseReducer } from '@reduxjs/toolkit';\n// constants\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\n// redux\nimport { fetchFailReducer, fetchReducer, fetchSuccessReducer } from '@redux/feature/fetch/reducers';\nimport { SocialMediaChartData } from '@optx/models/charts/data';\nimport { LOCATION_CHANGE } from 'connected-react-router';\nimport * as actions from './actions';\nimport { SocialMediaGraphState } from '../interfaces';\n\nconst initialState: SocialMediaGraphState = {\n data: INITIAL_STATE_CHART as SocialMediaChartData,\n loading: false,\n error: '',\n};\n\nconst clearStateReducer: CaseReducer<SocialMediaGraphState> = (draftState, action) => {\n if (!action.payload.location.pathname.includes('profile')) {\n draftState.data = INITIAL_STATE_CHART as SocialMediaChartData;\n }\n};\n\nexport const reducer = createReducer<SocialMediaGraphState>(initialState, builder =>\n builder\n .addCase(actions.fetchCapterraData, fetchReducer)\n .addCase(actions.fetchCapterraDataSuccess, fetchSuccessReducer)\n .addCase(actions.fetchCapterraDataFail, fetchFailReducer)\n .addCase(LOCATION_CHANGE, clearStateReducer)\n);\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { AxiosResponse } from 'axios';\n// models\nimport { SocialMediaChartData } from '@optx/models/charts/data';\n// services\nimport { CompanyService } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// utils\nimport { getErrorMessage } from '@utils/api/errors';\n// redux\nimport { INITIAL_STATE_CHART } from '@optx/constants/charts';\nimport * as actions from './actions';\n\nexport function* fetchCapterraDataSaga(action: PayloadAction<number, any, boolean>) {\n const companyId = action.payload;\n\n try {\n const res: AxiosResponse<SocialMediaChartData> = yield call(\n CompanyService.getCompanySocialMediaCapterra,\n companyId\n );\n const chartData = res.data;\n\n if (chartData) {\n yield put(actions.fetchCapterraDataSuccess(chartData));\n } else {\n yield put(actions.fetchCapterraDataSuccess(INITIAL_STATE_CHART as SocialMediaChartData));\n }\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Failed to fetch Capterra data');\n yield put(actions.fetchCapterraDataFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* CapterraDataSaga() {\n yield takeLatest(actions.fetchCapterraData, fetchCapterraDataSaga);\n}\n","import { combineReducers } from 'redux';\n// reducers\nimport { reducer as websiteRankReducer } from './website-rank';\nimport { reducer as g2DataReducer } from './g2';\nimport { reducer as glassDoorDataReducer } from './glassdoor';\nimport { reducer as linkedinDataReducer } from './linkedin';\nimport { reducer as crunchbaseDataReducer } from './crunchbase';\nimport { reducer as twitterDataReducer } from './twitter';\nimport { reducer as facebookDataReducer } from './facebook';\nimport { reducer as capterraDataReducer } from './capterra';\n\nimport { SocialMediaState } from './interfaces';\n\nconst reducer = combineReducers<SocialMediaState>({\n websiteRankData: websiteRankReducer,\n g2Data: g2DataReducer,\n glassDoorData: glassDoorDataReducer,\n linkedinData: linkedinDataReducer,\n crunchbaseData: crunchbaseDataReducer,\n twitterData: twitterDataReducer,\n facebookData: facebookDataReducer,\n capterraData: capterraDataReducer,\n});\n\nexport default reducer;\n","import { fork } from 'redux-saga/effects';\nimport { saga as websiteRankSaga } from './website-rank';\nimport { saga as g2DataSaga } from './g2';\nimport { saga as glassDoorSaga } from './glassdoor';\nimport { saga as linkedinDataSaga } from './linkedin';\nimport { saga as crunchbaseDataSaga } from './crunchbase';\nimport { saga as twitterDataSaga } from './twitter';\nimport { saga as facebookDataSaga } from './facebook';\nimport { saga as capterraDataSaga } from './capterra';\n\nexport default function* CompanyGraphsSaga() {\n yield fork(websiteRankSaga);\n yield fork(g2DataSaga);\n yield fork(glassDoorSaga);\n yield fork(linkedinDataSaga);\n yield fork(crunchbaseDataSaga);\n yield fork(twitterDataSaga);\n yield fork(facebookDataSaga);\n yield fork(capterraDataSaga);\n}\n","import { createSelector } from 'reselect';\nimport { selectors as websiteRankSelectors } from './website-rank';\nimport { selectors as capterraSelectors } from './capterra';\nimport { selectors as crunchbaseSelectors } from './crunchbase';\nimport { selectors as facebookSelectors } from './facebook';\nimport { selectors as g2Selectors } from './g2';\nimport { selectors as glassdoorSelectors } from './glassdoor';\nimport { selectors as linkedinSelectors } from './linkedin';\nimport { selectors as twitterSelectors } from './twitter';\n\nexport const socialMediaLoading = createSelector(\n websiteRankSelectors.loading,\n capterraSelectors.loading,\n crunchbaseSelectors.loading,\n facebookSelectors.loading,\n g2Selectors.loading,\n glassdoorSelectors.loading,\n linkedinSelectors.loading,\n twitterSelectors.loading,\n (\n websiteRankLoading,\n capterraLoading,\n crunchbaseLoading,\n facebookLoading,\n g2Loading,\n glassdoorLoading,\n linkedinLoading,\n twitterLoading\n ) =>\n websiteRankLoading ||\n capterraLoading ||\n crunchbaseLoading ||\n facebookLoading ||\n g2Loading ||\n glassdoorLoading ||\n linkedinLoading ||\n twitterLoading\n);\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport { reducer, saga } from './state';\nimport { featureName } from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","import React from 'react';\nimport moment from 'moment';\nimport { TooltipProps } from 'recharts';\n\ninterface LineChartTooltipProps extends TooltipProps {\n primaryKey: string;\n secondaryKey?: string;\n primaryLabel: string;\n secondaryLabel?: string;\n}\n\nconst LineChartTooltip: React.FC<LineChartTooltipProps> = ({\n primaryKey,\n secondaryKey,\n primaryLabel,\n secondaryLabel,\n payload,\n}) => {\n if (!payload || !payload!.length) {\n return null;\n }\n\n const data = payload![0].payload;\n\n return (\n <div className=\"profile-chart-card__tooltip\">\n <div>{moment(data.date).format('MMM DD YYYY')}</div>\n {data[primaryKey] !== null && (\n <div>\n {primaryLabel} {data[primaryKey]}\n </div>\n )}\n {secondaryKey && data[secondaryKey] !== undefined && (\n <div>\n {secondaryLabel} {data[secondaryKey]}\n </div>\n )}\n </div>\n );\n};\n\nexport default LineChartTooltip;\n","import styled from 'styled-components';\nimport { Col, Card } from 'antd';\nimport { Text } from 'recharts';\n\nconst LineChartWrapper = styled(Card)`\n height: 100%;\n\n &.has_overflow {\n svg {\n overflow: visible;\n }\n }\n\n .area-charts {\n .recharts-surface {\n overflow: visible;\n }\n }\n`;\n\nconst ChartHeaderColumn = styled(Col)`\n display: flex;\n flex-direction: column;\n @media (max-width: 1700px) {\n margin-left: 35px;\n }\n\n span {\n color: #90a0b7;\n }\n\n .value {\n font-size: 14px;\n font-weight: 600;\n }\n\n .label {\n font-size: 12px;\n text-transform: uppercase;\n }\n`;\n\nconst ChartHeaderLogoColumn = styled(Col)`\n display: flex;\n align-items: center;\n .chart-icon {\n font-size: 30px;\n margin-right: 10px;\n &:not(.website-rank) {\n path {\n fill: #0050b3;\n }\n }\n }\n`;\nconst ChartLabel = styled(Text)`\n font-size: 16px;\n font-weight: 600;\n padding: 15px 0;\n`;\n\nconst RatingLabel = styled.p`\n margin-bottom: 0;\n font-size: 15px;\n font-weight: 600;\n color: #1890ff;\n`;\n\nexport const Styles = {\n LineChartWrapper,\n ChartHeaderColumn,\n ChartHeaderLogoColumn,\n ChartLabel,\n RatingLabel,\n};\n","/* eslint-disable no-nested-ternary */\nimport React from 'react';\nimport { Row, Col, Rate, Typography } from 'antd';\nimport numeral from 'numeral';\nimport { Styles } from './LineChart.style';\n\ninterface ChartHeaderProps {\n stars?: number;\n icon: React.ReactNode;\n title: string;\n headerValue: number;\n headerLabel: string;\n headerValueExtra?: number;\n headerLabelExtra?: string;\n}\n\nconst ChartHeader: React.FC<ChartHeaderProps> = ({\n stars,\n icon,\n title,\n headerValue,\n headerLabel,\n headerLabelExtra,\n headerValueExtra,\n}) => {\n return (\n <Row>\n <Styles.ChartHeaderLogoColumn span={10}>\n <Typography.Title level={4}>\n {icon} {title}\n </Typography.Title>\n </Styles.ChartHeaderLogoColumn>\n <Col span={14}>\n <Row justify=\"end\">\n {stars ? (\n <Col span={10}>\n <Styles.RatingLabel>{stars} / 5 Overall Stars</Styles.RatingLabel>\n <Rate disabled allowHalf value={stars} />\n </Col>\n ) : (\n ''\n )}\n <Styles.ChartHeaderColumn span={8}>\n <span className=\"value\">\n {' '}\n {typeof headerValue === 'number' ? numeral(headerValue).format('0,0') : 'N/A'}\n </span>\n <span className=\"label\">{headerLabel}</span>\n </Styles.ChartHeaderColumn>\n {headerValueExtra && (\n <Styles.ChartHeaderColumn span={8}>\n <span className=\"value\">{numeral(headerValueExtra).format('0,0')}</span>\n <span className=\"label\">{headerLabelExtra} </span>\n </Styles.ChartHeaderColumn>\n )}\n </Row>\n </Col>\n </Row>\n );\n};\n\nexport default ChartHeader;\n","import React from 'react';\nimport { ChartTicks } from '@optx/models/charts/data';\n\nconst ReversedTicks: React.FC<ChartTicks> = ({ x, height, payload: { value } }) => {\n return (\n <text x={x} y={value === 1 ? 10 : height + 20} dy={7} fill=\"#C2CFE0\">\n {value}\n </text>\n );\n};\n\nexport default ReversedTicks;\n","/* eslint-disable react/jsx-wrap-multilines */\nimport React from 'react';\n\nimport {\n Area,\n ResponsiveContainer,\n XAxis,\n YAxis,\n AreaChart,\n AxisDomain,\n Tooltip,\n TooltipProps,\n ReferenceLine,\n Label,\n} from 'recharts';\nimport moment from 'moment';\nimport classnames from 'classnames';\n// models\nimport { SocialMediaChartInterval } from '@optx/models/charts/data';\n// components\nimport EmptyChart from '@optx/components/feature/charts/EmptyChart';\nimport LineChartTooltip from './LineChartTooltip';\nimport { Styles } from './LineChart.style';\nimport ChartHeader from './ChartHeader';\nimport ReversedTicks from './ReversedTicks';\n\ninterface LineChartProps {\n data: SocialMediaChartInterval;\n dataKey: string;\n labelKey?: string;\n labelKeyAlt?: string;\n checkLabelValue?: string;\n headerValue: number;\n headerValueExtra?: number;\n headerLabel: string;\n headerLabelExtra?: string;\n title: string;\n icon: React.ReactNode;\n kpiLabel: string;\n chartInterval: string;\n range?: [AxisDomain, AxisDomain];\n chartLabel?: string;\n className?: string;\n isReversed?: boolean;\n ticks?: number[];\n referenceLineData?: number | string;\n}\n\nconst LineChart: React.FC<LineChartProps> = ({\n data,\n dataKey,\n labelKey,\n icon,\n title,\n headerValue,\n headerLabel,\n headerLabelExtra,\n headerValueExtra,\n chartLabel,\n range,\n isReversed,\n referenceLineData,\n ticks,\n}) => {\n return (\n <Styles.LineChartWrapper\n className={classnames('profile-chart-card extra', {\n has_overflow: referenceLineData !== undefined,\n })}\n title={\n <ChartHeader\n icon={icon}\n title={title}\n headerValue={headerValue}\n headerLabel={headerLabel}\n headerValueExtra={headerValueExtra}\n headerLabelExtra={headerLabelExtra}\n />\n }\n >\n {Object.keys(data.data).length ? <Styles.ChartLabel>{chartLabel}</Styles.ChartLabel> : ''}\n <div className=\"profile-chart-card__container\">\n {!Object.keys(data.data).length && (\n <EmptyChart className=\"chart-empty-labels\" text=\"No History\" />\n )}\n <ResponsiveContainer className={'area-charts'}>\n <AreaChart data={data.data} margin={{ left: 24, top: 25 }}>\n <defs>\n <linearGradient id=\"blueGradient\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor=\"#C2E6F8\" stopOpacity=\"1\" />\n <stop offset=\"95%\" stopColor=\"#e6f7ff\" stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n <XAxis\n dataKey={labelKey}\n tickLine={false}\n stroke=\"#C2CFE0\"\n tickSize={15}\n tickFormatter={val => (labelKey === 'date' ? moment(val).format('MMM YY') : val)}\n />\n <YAxis\n orientation=\"right\"\n tickCount={2}\n tickMargin={0.5}\n tickLine={false}\n axisLine={false}\n stroke=\"#C2CFE0\"\n type=\"number\"\n domain={range}\n ticks={ticks}\n tick={isReversed ? props => <ReversedTicks {...props} /> : true}\n />\n <Tooltip\n content={(props: TooltipProps) => (\n <LineChartTooltip\n primaryKey={isReversed ? 'value' : dataKey}\n primaryLabel=\"Score Value:\"\n {...props}\n />\n )}\n cursor={false}\n allowEscapeViewBox={{ x: false, y: true }}\n />\n {referenceLineData && (\n <ReferenceLine isFront strokeWidth={1} x={referenceLineData} stroke=\"gray\">\n <Label value=\"SimilarWeb\" position=\"insideTopLeft\" fill=\"#C2CFE0\" />\n <Label value=\"Alexa\" position=\"insideTopRight\" fill=\"#C2CFE0\" />\n </ReferenceLine>\n )}\n <Area\n type=\"monotone\"\n dataKey={dataKey}\n stroke=\"#1890FF\"\n strokeWidth=\"2px\"\n fillOpacity={1}\n fill=\"url(#blueGradient)\"\n dot={{ fill: '#fff', strokeWidth: 1, r: 4 }}\n />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n </Styles.LineChartWrapper>\n );\n};\n\nexport default LineChart;\n","/* eslint-disable no-nested-ternary */\nimport React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useMount } from '@umijs/hooks';\nimport { ChartIntervalKeys, QuartersChart, SocialMediaChartItem } from '@optx/models/charts/data';\nimport Icon from '@components/common/Icon';\nimport LineChart from '../LineChart';\nimport { selectors as localSelectors, actions as localActions } from '../../state/website-rank';\n\ninterface WWWebsiteRankProps {\n companyId: number;\n chartInterval: ChartIntervalKeys;\n}\n\nconst WWWebsiteRankChart: React.FC<WWWebsiteRankProps> = ({ companyId, chartInterval }) => {\n const dispatch = useDispatch();\n // eslint-disable-next-line prefer-const\n let quarters: QuartersChart = {};\n\n useMount(() => {\n dispatch(localActions.fetchWWWebsiteRank({ companyId, usOnly: false }));\n });\n\n const chartData = useSelector(localSelectors.getData);\n\n const activeChartData = chartData[chartInterval];\n\n const outputDuplicateQuarters = activeChartData.data?.map((item: SocialMediaChartItem) => {\n if (!quarters[item.quarter]) {\n quarters[item.quarter] = true;\n\n return item;\n }\n\n return { ...item, quarter: '' };\n });\n\n const newActiveChartDataWithUniqueQuarters = {\n ...activeChartData,\n data: outputDuplicateQuarters,\n };\n\n const isAlexaDataPresented = activeChartData.data.some(item => item.source_db === 'ax');\n\n const referenceLineData = isAlexaDataPresented\n ? chartInterval === '3M' || chartInterval === '6M'\n ? activeChartData.data.filter(item => item.source_db === 'sw')[0]?.date\n : activeChartData.data.length !== 1\n ? activeChartData.data.findIndex(item => item.source_db === 'sw')\n : activeChartData.data.filter(item => item.source_db === 'sw')[0]?.quarter\n : undefined;\n\n const title = 'WW Website Rank ';\n\n return (\n <LineChart\n icon={<Icon iconName=\"website-rank-blue\" className=\"chart-icon website-rank\" />}\n dataKey=\"reversedValue\"\n labelKey={chartInterval === '3M' || chartInterval === '6M' ? 'date' : 'quarter'}\n kpiLabel=\"Date\"\n labelKeyAlt=\"date\"\n title={title}\n referenceLineData={referenceLineData}\n chartInterval={chartInterval}\n data={newActiveChartDataWithUniqueQuarters}\n headerValue={activeChartData.best_rank as number}\n headerLabel=\"best rank\"\n headerValueExtra={activeChartData.current_rank as number}\n headerLabelExtra=\"current rank\"\n chartLabel=\"Rank over time\"\n isReversed\n range={[\n 1,\n `dataMax + ${\n referenceLineData !== undefined &&\n typeof activeChartData?.lowest_rank === 'number' &&\n activeChartData.lowest_rank / 2\n }`,\n ]}\n ticks={[1, activeChartData.lowest_rank as number]}\n />\n );\n};\n\nexport default React.memo(WWWebsiteRankChart);\n","import styled from 'styled-components';\nimport { Card } from 'antd';\n\nconst DoubleChartWrapper = styled(Card)`\n height: 100%;\n .profile-chart-card {\n &__no-data {\n background: rgb(240, 240, 240);\n background: linear-gradient(0deg, rgba(255, 255, 255, 1) 0%, rgba(240, 240, 240, 1) 100%);\n }\n\n &__container {\n position: relative;\n width: calc(100% + 35px);\n\n transform: translateX(-50px);\n height: 135px;\n\n &.has-legend {\n .chart-empty-labels {\n height: calc(100% - 80px);\n }\n }\n }\n\n .ant-card-head-title {\n font-size: 20px;\n }\n\n .ant-card-extra {\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n }\n\n .recharts-wrapper {\n font-size: 10px;\n }\n\n .recharts-yAxis {\n font-size: 12px;\n }\n\n .recharts-xAxis {\n text-transform: uppercase;\n }\n\n .kpi__value {\n line-height: 1.6em;\n }\n\n // styling for empty state\n &__empty {\n position: absolute;\n top: 0;\n left: 24px;\n transform: translateX(58px);\n width: calc(100% - 65px);\n height: calc(100% - 35px);\n display: flex;\n align-items: center;\n justify-content: center;\n\n .gray-rectangle-button {\n cursor: default;\n }\n }\n\n .chart-empty-labels {\n background: linear-gradient(180deg, #f0f0f0 -11.27%, rgba(196, 196, 196, 0) 100%);\n height: calc(100% - 35px);\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 0;\n border-right: 1px solid $blue-6;\n }\n\n // tooltip\n &__tooltip {\n height: 100%;\n padding: 5px 8px;\n font-size: 12px;\n background: $gray-9;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.15);\n border-radius: 2px;\n color: #fff;\n }\n }\n\n @include media-breakpoint-down(md) {\n .profile-chart-card {\n .kpi {\n margin-left: 10px;\n }\n\n .kpi__label {\n max-width: 50px;\n line-height: normal;\n }\n }\n }\n`;\n\nexport const Styles = {\n DoubleChartWrapper,\n};\n","/* eslint-disable react/jsx-wrap-multilines */\nimport React from 'react';\nimport {\n Area,\n ResponsiveContainer,\n XAxis,\n YAxis,\n AxisDomain,\n Tooltip,\n TooltipProps,\n Line,\n ComposedChart,\n Label,\n} from 'recharts';\nimport moment from 'moment';\n// models\nimport { SocialMediaChartInterval } from '@optx/models/charts/data';\n// utils\n// components\nimport EmptyChart from '@optx/components/feature/charts/EmptyChart';\nimport LineChartTooltip from './LineChartTooltip';\nimport { Styles as ChartStyles } from './LineChart.style';\nimport { Styles } from './DoubleLineChart.styled';\nimport ChartHeader from './ChartHeader';\n\ninterface DoubleLineChartProps {\n data: SocialMediaChartInterval;\n dataKey: string;\n secondaryDataKey: string;\n labelKey?: string;\n labelKeyAlt?: string;\n checkLabelValue?: string;\n headerValue: number;\n headerValueExtra?: number;\n headerLabel: string;\n headerLabelExtra?: string;\n title: string;\n icon: React.ReactNode;\n kpiLabel: string;\n chartInterval: string;\n stars: number;\n range?: [AxisDomain, AxisDomain];\n chartLabel?: string;\n className?: string;\n}\n\nconst DoubleLineChart: React.FC<DoubleLineChartProps> = ({\n data,\n dataKey,\n secondaryDataKey,\n labelKey,\n labelKeyAlt,\n icon,\n title,\n headerValue,\n headerLabel,\n headerLabelExtra,\n headerValueExtra,\n chartLabel,\n range,\n stars,\n}) => {\n return (\n <Styles.DoubleChartWrapper\n className=\"profile-chart-card extra\"\n title={\n <ChartHeader\n stars={stars}\n icon={icon}\n title={title}\n headerValue={headerValue}\n headerLabel={headerLabel}\n headerValueExtra={headerValueExtra}\n headerLabelExtra={headerLabelExtra}\n />\n }\n >\n {Object.keys(data.data).length ? (\n <ChartStyles.ChartLabel>{chartLabel}</ChartStyles.ChartLabel>\n ) : (\n ''\n )}\n <div className=\"profile-chart-card__container\">\n {!Object.keys(data.data).length && (\n <EmptyChart className=\"chart-empty-labels\" text=\"No History\" width=\"calc(100% - 141px)\" />\n )}\n <ResponsiveContainer>\n <ComposedChart data={data.data} margin={{ left: 24, top: 25 }}>\n <defs>\n <linearGradient id=\"blueGradient\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor=\"#C2E6F8\" stopOpacity=\"1\" />\n <stop offset=\"95%\" stopColor=\"#e6f7ff\" stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n <XAxis\n dataKey={labelKey}\n tickLine={false}\n stroke=\"#C2CFE0\"\n tickSize={15}\n tickFormatter={val => (labelKey === 'date' ? moment(val).format('MMM YY') : val)}\n />\n <YAxis\n orientation=\"right\"\n tickCount={2}\n tickMargin={5}\n tickLine={false}\n axisLine\n stroke=\"#C2CFE0\"\n type=\"number\"\n >\n {Object.keys(data.data).length && (\n <Label\n value=\"# OF REVIEWERS\"\n color=\"#188fffa7\"\n position=\"outside\"\n angle={-90}\n className=\"axis-label\"\n // x-axis position\n dx={25}\n />\n )}\n </YAxis>\n\n {Object.keys(data.data).length && (\n <YAxis\n dataKey={secondaryDataKey}\n yAxisId=\"rating\"\n axisLine\n stroke=\"#C2CFE0\"\n tickLine={false}\n orientation=\"left\"\n tickCount={2}\n tickMargin={10}\n type=\"number\"\n >\n <Label\n value=\"RATING\"\n color=\"#722ed1b7\"\n position=\"outside\"\n angle={-90}\n className=\"axis-label\"\n dx={-10}\n />\n </YAxis>\n )}\n <Tooltip\n content={(props: TooltipProps) => (\n <LineChartTooltip\n primaryKey={dataKey}\n primaryLabel=\"Score Value:\"\n secondaryKey={secondaryDataKey}\n secondaryLabel=\"Rating\"\n {...props}\n />\n )}\n cursor={false}\n />\n\n <Area\n type=\"monotone\"\n dataKey={dataKey}\n stroke=\"#1890FF\"\n strokeWidth=\"2px\"\n fillOpacity={1}\n fill=\"url(#blueGradient)\"\n dot={{ fill: '#fff', strokeWidth: 1, r: 4 }}\n />\n <Line\n yAxisId=\"rating\"\n type=\"monotone\"\n dataKey={secondaryDataKey}\n stroke=\"#722ED1\"\n strokeDasharray=\"3 5\"\n strokeWidth=\"2px\"\n dot={{ strokeDasharray: '0', strokeWidth: 1, r: 4 }}\n connectNulls\n />\n </ComposedChart>\n </ResponsiveContainer>\n </div>\n </Styles.DoubleChartWrapper>\n );\n};\n\nexport default DoubleLineChart;\n","import React from 'react';\nimport { ChartIntervalKeys } from '@optx/models/charts/data';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useMount } from '@umijs/hooks';\nimport Icon from '@optx/components/common/Icon';\nimport { selectors as localSelectors, actions as localActions } from '../../state/g2';\nimport DoubleLineChart from '../DoubleLineChart';\n\ninterface SocialMediaProps {\n companyId: number;\n chartInterval: ChartIntervalKeys;\n}\n\nconst G2Chart: React.FC<SocialMediaProps> = ({ companyId, chartInterval }) => {\n const dispatch = useDispatch();\n useMount(() => dispatch(localActions.fetchG2Data(companyId)));\n\n const chartData = useSelector(localSelectors.getData);\n const activeChartData = chartData[chartInterval];\n\n return (\n <DoubleLineChart\n stars={activeChartData.overall_stars as number}\n icon={<Icon iconName=\"g2crowd\" className=\"chart-icon\" />}\n dataKey=\"value\"\n labelKey={chartInterval === '3M' || chartInterval === '6M' ? 'date' : 'quarter'}\n kpiLabel=\"Date\"\n labelKeyAlt=\"Rating\"\n secondaryDataKey=\"secondary_value\"\n data={activeChartData}\n headerValue={activeChartData.num_of_reviews as number}\n headerLabel=\"# of Reviews\"\n chartLabel=\"Rating & Number of Reviewers over time\"\n title=\"G2 Rank\"\n chartInterval={chartInterval}\n />\n );\n};\n\nexport default React.memo(G2Chart);\n","import styled from 'styled-components';\nimport { Card, Row } from 'antd';\n\nconst GlassDoorChartWrapper = styled(Card)`\n .charts-progress {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-around;\n\n .ant-progress {\n margin-right: 10px;\n .ant-progress-text {\n color: #1890ff;\n font-weight: 600;\n }\n }\n }\n\n .chart-stats {\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n\n .value {\n display: block;\n font-size: 16px;\n font-weight: 600;\n color: #1890ff;\n }\n\n .label {\n font-size: 12px;\n font-weight: 600;\n color: #595959;\n text-transform: uppercase;\n }\n }\n`;\n\nconst ChartRow = styled(Row)`\n min-height: 135px;\n position: relative;\n\n // styling for empty state\n &__empty {\n position: absolute;\n top: 0;\n left: 24px;\n width: calc(100% - 65px);\n height: calc(100% - 30px);\n display: flex;\n align-items: center;\n justify-content: center;\n\n .gray-rectangle-button {\n cursor: default;\n }\n }\n\n .chart-empty-labels {\n background: linear-gradient(180deg, #f0f0f0 -11.27%, rgba(196, 196, 196, 0) 100%);\n height: calc(100% - 35px);\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 0;\n border-right: 1px solid #1890ff;\n }\n`;\n\nexport const Styles = {\n GlassDoorChartWrapper,\n ChartRow,\n};\n","import React from 'react';\nimport { Progress, Col } from 'antd';\nimport Icon from '@components/common/Icon';\nimport EmptyChart from '@optx/components/feature/charts/EmptyChart';\nimport { ChartIntervalKeys } from '@optx/models/charts/data';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useMount } from '@umijs/hooks';\nimport ChartHeader from '../ChartHeader';\nimport { Styles } from './GlassDoorChart.style';\nimport { actions as localActions, selectors as localSelectors } from '../../state/glassdoor';\n\ninterface SocialMediaProps {\n companyId: number;\n chartInterval: ChartIntervalKeys;\n}\n\nconst removeDecimals = (value: number) => {\n return Math.trunc(value);\n};\n\nconst GlassDoorChart: React.FC<SocialMediaProps> = ({ companyId, chartInterval }) => {\n const dispatch = useDispatch();\n\n useMount(() => dispatch(localActions.fetchGlassDoorData(companyId)));\n\n const data = useSelector(localSelectors.getData);\n const chartData = data[chartInterval];\n\n return (\n <Styles.GlassDoorChartWrapper\n // Added as inline-style because it doesn't work with styled components. Do not know why.\n style={{ height: '100%' }}\n title={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <ChartHeader\n icon={<Icon iconName=\"glassdoor\" className=\"chart-icon\" />}\n title=\"Glassdoor\"\n headerLabel=\"# of reviews\"\n headerValue={Number(chartData?.number_of_reviews)}\n stars={chartData?.overall_stars}\n />\n }\n >\n <Styles.ChartRow>\n {!chartData || !Object.keys(chartData).length ? (\n <EmptyChart className=\"chart-empty-labels\" text=\"No History\" />\n ) : (\n <>\n <Col span={16} className=\"charts-progress\">\n <Progress\n type=\"circle\"\n percent={removeDecimals(chartData.percent_recommend_friend)}\n strokeColor=\"#188fff76\"\n trailColor=\"#188fff76\"\n width={110}\n success={{ strokeColor: '#188fff76' }}\n format={percent => `${percent}%`}\n />\n\n <Progress\n type=\"circle\"\n percent={removeDecimals(chartData.percent_recommend_ceo)}\n strokeColor=\"#188fff76\"\n trailColor=\"#188fff76\"\n width={110}\n success={{ strokeColor: '#188fff76' }}\n format={percent => `${percent}%`}\n />\n <Progress\n type=\"circle\"\n percent={removeDecimals(chartData.positive_outlook_percent)}\n strokeColor=\"#188fff76\"\n trailColor=\"#188fff76\"\n width={110}\n success={{ strokeColor: '#188fff76' }}\n format={percent => `${percent}%`}\n />\n </Col>\n <Col span={8} className=\"chart-stats\">\n <Col>\n <span className=\"value\">{removeDecimals(chartData.percent_recommend_friend)}%</span>\n <span className=\"label\">Recommended to a friend</span>\n </Col>\n <Col>\n <span className=\"value\">{removeDecimals(chartData.percent_recommend_ceo)}%</span>\n <span className=\"label\">CEO Approval</span>\n </Col>\n <Col>\n <span className=\"value\">{removeDecimals(chartData.positive_outlook_percent)}%</span>\n <span className=\"label\">Positive Business Outlook</span>\n </Col>\n </Col>\n </>\n )}\n </Styles.ChartRow>\n </Styles.GlassDoorChartWrapper>\n );\n};\n\nexport default React.memo(GlassDoorChart);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { ChartIntervalKeys } from '@optx/models/charts/data';\nimport Icon from '@components/common/Icon';\nimport LineChart from '../LineChart';\nimport { selectors as localSelectors } from '../../state/linkedin';\n\ninterface SocialMediaProps {\n companyId: number;\n chartInterval: ChartIntervalKeys;\n}\n\nconst LinkedinChart: React.FC<SocialMediaProps> = ({ companyId, chartInterval }) => {\n const chartData = useSelector(localSelectors.getData);\n const activeChartData = chartData[chartInterval];\n\n return (\n <LineChart\n icon={<Icon iconName=\"linkedin\" className=\"chart-icon\" />}\n dataKey=\"value\"\n labelKey={chartInterval === '3M' || chartInterval === '6M' ? 'date' : 'quarter'}\n kpiLabel=\"Date\"\n labelKeyAlt=\"date\"\n title=\"LinkedIn\"\n chartInterval={chartInterval}\n data={activeChartData}\n headerValue={activeChartData.total_followers as number}\n headerLabel=\"total followers\"\n chartLabel=\"Followers over time\"\n />\n );\n};\n\nexport default React.memo(LinkedinChart);\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useMount } from '@umijs/hooks';\nimport { ChartIntervalKeys } from '@optx/models/charts/data';\nimport Icon from '@components/common/Icon';\nimport LineChart from '../LineChart';\nimport { selectors as localSelectors, actions as localActions } from '../../state/crunchbase';\n\ninterface SocialMediaProps {\n companyId: number;\n chartInterval: ChartIntervalKeys;\n}\n\nconst CrunchbaseChart: React.FC<SocialMediaProps> = ({ companyId, chartInterval }) => {\n const dispatch = useDispatch();\n\n useMount(() => dispatch(localActions.fetchCrunchbaseData(companyId)));\n\n const chartData = useSelector(localSelectors.getData);\n\n const activeChartData = chartData[chartInterval];\n\n return (\n <LineChart\n icon={<Icon iconName=\"crunchbase\" className=\"chart-icon\" />}\n dataKey=\"reversedValue\"\n labelKey={chartInterval === '3M' || chartInterval === '6M' ? 'date' : 'quarter'}\n kpiLabel=\"Date\"\n labelKeyAlt=\"date\"\n title=\"Crunchbase\"\n chartInterval={chartInterval}\n data={activeChartData}\n headerValue={activeChartData.current_rank as number}\n headerLabel=\"current rank\"\n chartLabel=\"Rank over time\"\n isReversed\n range={[1, 'dataMax']}\n ticks={[1, activeChartData.lowest_rank as number]}\n />\n );\n};\n\nexport default React.memo(CrunchbaseChart);\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useMount } from '@umijs/hooks';\nimport { ChartIntervalKeys } from '@optx/models/charts/data';\nimport Icon from '@components/common/Icon';\nimport LineChart from '../LineChart';\nimport { selectors as localSelectors, actions as localActions } from '../../state/twitter';\n\ninterface SocialMediaProps {\n companyId: number;\n chartInterval: ChartIntervalKeys;\n}\n\nconst TwitterChart: React.FC<SocialMediaProps> = ({ companyId, chartInterval }) => {\n const dispatch = useDispatch();\n\n useMount(() => dispatch(localActions.fetchTwitterData(companyId)));\n\n const chartData = useSelector(localSelectors.getData);\n\n const activeChartData = chartData[chartInterval];\n\n return (\n <LineChart\n icon={<Icon iconName=\"twitter\" className=\"chart-icon\" />}\n dataKey=\"value\"\n labelKey={chartInterval === '3M' || chartInterval === '6M' ? 'date' : 'quarter'}\n kpiLabel=\"Date\"\n labelKeyAlt=\"date\"\n title=\"Twitter\"\n chartInterval={chartInterval}\n data={activeChartData}\n headerValue={activeChartData.total_followers as number}\n headerLabel=\"total followers\"\n chartLabel=\"Followers over time\"\n />\n );\n};\n\nexport default React.memo(TwitterChart);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { ChartIntervalKeys } from '@optx/models/charts/data';\nimport Icon from '@components/common/Icon';\nimport LineChart from '../LineChart';\nimport { selectors as localSelectors } from '../../state/facebook';\n\ninterface SocialMediaProps {\n companyId: number;\n chartInterval: ChartIntervalKeys;\n}\n\nconst FacebookChart: React.FC<SocialMediaProps> = ({ companyId, chartInterval }) => {\n const chartData = useSelector(localSelectors.getData);\n const activeChartData = chartData[chartInterval];\n\n return (\n <LineChart\n icon={<Icon iconName=\"facebook\" className=\"chart-icon\" />}\n dataKey=\"value\"\n labelKey={chartInterval === '3M' || chartInterval === '6M' ? 'date' : 'quarter'}\n kpiLabel=\"Date\"\n labelKeyAlt=\"date\"\n title=\"Facebook\"\n chartInterval={chartInterval}\n data={activeChartData}\n headerValue={activeChartData.total_followers as number}\n headerLabel=\"total likes\"\n chartLabel=\"Likes over time\"\n />\n );\n};\n\nexport default React.memo(FacebookChart);\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useMount } from '@umijs/hooks';\nimport { ChartIntervalKeys } from '@optx/models/charts/data';\nimport Icon from '@components/common/Icon';\nimport { selectors as localSelectors, actions as localActions } from '../../state/capterra';\nimport DoubleLineChart from '../DoubleLineChart';\n\ninterface SocialMediaProps {\n companyId: number;\n chartInterval: ChartIntervalKeys;\n}\n\nconst CapterraChart: React.FC<SocialMediaProps> = ({ companyId, chartInterval }) => {\n const dispatch = useDispatch();\n\n useMount(() => dispatch(localActions.fetchCapterraData(companyId)));\n\n const chartData = useSelector(localSelectors.getData);\n\n const activeChartData = chartData[chartInterval];\n\n return (\n <DoubleLineChart\n icon={<Icon iconName=\"capterra\" className=\"chart-icon\" />}\n dataKey=\"value\"\n secondaryDataKey=\"secondary_value\"\n stars={activeChartData.overall_stars as number}\n labelKey={chartInterval === '3M' || chartInterval === '6M' ? 'date' : 'quarter'}\n kpiLabel=\"Date\"\n labelKeyAlt=\"Rating\"\n title=\"Capterra\"\n chartInterval={chartInterval}\n data={activeChartData}\n headerValue={activeChartData.num_of_reviews as number}\n headerLabel=\"# of reviews\"\n chartLabel=\"Rating & Number of Reviewers over time\"\n />\n );\n};\n\nexport default React.memo(CapterraChart);\n","/* eslint-disable no-nested-ternary */\nimport React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useMount } from '@umijs/hooks';\nimport { ChartIntervalKeys, SocialMediaChartItem } from '@optx/models/charts/data';\nimport Icon from '@components/common/Icon';\nimport LineChart from '../LineChart';\nimport { selectors as localSelectors, actions as localActions } from '../../state/website-rank';\n\ninterface USWebsiteRankChartProps {\n companyId: number;\n chartInterval: ChartIntervalKeys;\n}\n\nconst USWebsiteRankChart: React.FC<USWebsiteRankChartProps> = ({ companyId, chartInterval }) => {\n const dispatch = useDispatch();\n // eslint-disable-next-line prefer-const\n let quarters: { [key: string]: boolean } = {};\n\n useMount(() => {\n dispatch(localActions.fetchUSWebsiteRank({ companyId, usOnly: true }));\n });\n\n const chartData = useSelector(localSelectors.getUSOnlyData);\n\n const activeChartData = chartData[chartInterval];\n\n const outputDuplicateQuarters = activeChartData.data?.map((item: SocialMediaChartItem) => {\n if (!quarters[item.quarter]) {\n quarters[item.quarter] = true;\n\n return item;\n }\n\n return { ...item, quarter: '' };\n });\n\n const newActiveChartDataWithUniqueQuarters = {\n ...activeChartData,\n data: outputDuplicateQuarters,\n };\n\n const isAlexaDataPresented = activeChartData.data.some(item => item.source_db === 'ax');\n\n const referenceLineData = isAlexaDataPresented\n ? chartInterval === '3M' || chartInterval === '6M'\n ? activeChartData.data.filter(item => item.source_db === 'sw')[0]?.date\n : activeChartData.data.length !== 1\n ? activeChartData.data.findIndex(item => item.source_db === 'sw')\n : activeChartData.data.filter(item => item.source_db === 'sw')[0]?.quarter\n : undefined;\n\n const title = 'US Website Rank ';\n\n return (\n <LineChart\n icon={<Icon iconName=\"website-rank-blue\" className=\"chart-icon website-rank\" />}\n dataKey=\"reversedValue\"\n labelKey={chartInterval === '3M' || chartInterval === '6M' ? 'date' : 'quarter'}\n kpiLabel=\"Date\"\n labelKeyAlt=\"date\"\n title={title}\n referenceLineData={referenceLineData}\n chartInterval={chartInterval}\n data={newActiveChartDataWithUniqueQuarters}\n headerValue={activeChartData.best_rank as number}\n headerLabel=\"best rank\"\n headerValueExtra={activeChartData.current_rank as number}\n headerLabelExtra=\"current rank\"\n chartLabel=\"Rank over time\"\n isReversed\n range={[\n 1,\n `dataMax + ${\n referenceLineData !== undefined &&\n typeof activeChartData?.lowest_rank === 'number' &&\n activeChartData.lowest_rank / 2\n }`,\n ]}\n ticks={[1, activeChartData.lowest_rank as number]}\n />\n );\n};\n\nexport default React.memo(USWebsiteRankChart);\n","import React, { useState } from 'react';\nimport { Card, Row, Col, Radio } from 'antd';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useMount } from '@umijs/hooks';\nimport { Gutter } from 'antd/lib/grid/row';\nimport { CHART_KEYS } from '@constants/charts';\nimport { ChartIntervalKeys } from '@optx/models/charts/data';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport WWWebsiteRankChart from './website-rank';\nimport G2Chart from './g2';\nimport GlassDoorChart from './glassdoor';\nimport LinkedinChart from './linkedin';\nimport CrunchbaseChart from './crunchbase';\nimport TwitterChart from './twitter';\nimport FacebookChart from './facebook';\nimport CapterraChart from './capterra';\nimport USWebsiteRankChart from './website-rank/USWebsiteRankChart';\nimport {\n selectors as localLinkedinSelectors,\n actions as localLinkedinActions,\n} from '../state/linkedin';\nimport {\n selectors as localFacebookSelectors,\n actions as localFacebookActions,\n} from '../state/facebook';\n\ninterface SocialMediaProps {\n companyId: number;\n}\n\nconst gridGutter: Gutter | [Gutter, Gutter] = [\n { xs: 24, sm: 24, xl: 40 },\n { xs: 24, sm: 24, xl: 40 },\n];\n\nconst SocialMedia: React.FC<SocialMediaProps> = ({ companyId }) => {\n const [chartInterval, setChartInterval] = useState<ChartIntervalKeys>('2Y');\n const dispatch = useDispatch();\n\n const chartDataLinkedin = useSelector(localLinkedinSelectors.getData);\n const activeChartDataLinkedin = chartDataLinkedin[chartInterval].data;\n\n const chartDataFacebook = useSelector(localFacebookSelectors.getData);\n const activeChartDatFacebook = chartDataFacebook[chartInterval].data;\n\n useMount(() => dispatch(localLinkedinActions.fetchLinkedinData(companyId)));\n useMount(() => dispatch(localFacebookActions.fetchFacebookData(companyId)));\n\n const changeInterval = (e: RadioChangeEvent) => {\n window.pendo.track(`CompanyPage_SocialMedia_${e.target.value}`);\n setChartInterval(e.target.value);\n };\n\n const header = (\n <Radio.Group value={chartInterval}>\n {CHART_KEYS.map((key, index) => (\n <Radio.Button value={key} key={index} onChange={changeInterval}>\n {key}\n </Radio.Button>\n ))}\n </Radio.Group>\n );\n\n return (\n <Card title={header}>\n <Row gutter={gridGutter} className=\"social-media-cards\">\n <Col span={24} xl={12}>\n <USWebsiteRankChart companyId={companyId} chartInterval={chartInterval} />\n </Col>\n <Col span={24} xl={12}>\n <WWWebsiteRankChart companyId={companyId} chartInterval={chartInterval} />\n </Col>\n <Col span={24} xl={12}>\n <GlassDoorChart companyId={companyId} chartInterval={chartInterval} />\n </Col>\n <Col span={24} xl={12}>\n <G2Chart companyId={companyId} chartInterval={chartInterval} />\n </Col>\n <Col span={24} xl={12}>\n <CrunchbaseChart companyId={companyId} chartInterval={chartInterval} />\n </Col>\n <Col span={24} xl={12}>\n <CapterraChart companyId={companyId} chartInterval={chartInterval} />\n </Col>\n {activeChartDataLinkedin.length !== 0 && (\n <Col span={24} xl={12}>\n <LinkedinChart companyId={companyId} chartInterval={chartInterval} />\n </Col>\n )}\n <Col span={24} xl={12}>\n <TwitterChart companyId={companyId} chartInterval={chartInterval} />\n </Col>\n\n {activeChartDatFacebook.length !== 0 && (\n <Col span={24} xl={12}>\n <FacebookChart companyId={companyId} chartInterval={chartInterval} />\n </Col>\n )}\n </Row>\n </Card>\n );\n};\n\nexport default SocialMedia;\n","import React from 'react';\nimport { Input } from 'antd';\n\ninterface AddWatchListProps {\n title: string;\n onTitleChange: (newTitle: string) => void;\n handleDropdownKeyEvent: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n}\n\nconst AddWatchList: React.FC<AddWatchListProps> = ({\n title,\n onTitleChange,\n handleDropdownKeyEvent,\n}) => {\n const handleTitleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onTitleChange(event.target.value);\n };\n\n return (\n <div className=\"menu-create\" onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n <Input\n type=\"text\"\n name=\"title\"\n value={title || ''}\n placeholder=\"Watchlist Name\"\n onChange={handleTitleChange}\n />\n </div>\n );\n};\n\nexport default AddWatchList;\n","import React from 'react';\nimport { Tooltip, Tag as AntDTag, Typography } from 'antd';\nimport styled from 'styled-components';\n// models\nimport { CompanyWatchList } from '@optx/models/WatchList';\n\nconst Tag = styled(AntDTag)`\n cursor: pointer;\n`;\n\nconst NameWrapper = styled.div`\n max-width: 400px;\n display: flex;\n`;\n\nconst TableCellName = (value: string, record: CompanyWatchList) => {\n const { extra_options: extraOptions, is_public: isPublic } = record;\n const isETGroup = extraOptions && typeof extraOptions.et_group_id === 'number';\n\n return (\n <NameWrapper>\n <Tooltip title={value}>\n <Typography.Text ellipsis>{value}</Typography.Text>\n </Tooltip>\n {isETGroup && (\n <span>\n \n <Tag color=\"gold\">ET</Tag>\n </span>\n )}\n {isPublic && (\n <span>\n \n <Tag color=\"gold\">Public</Tag>\n </span>\n )}\n </NameWrapper>\n );\n};\n\nexport default TableCellName;\n","import { ColumnsType } from 'antd/lib/table';\nimport { CompanyWatchList } from '@optx/models/WatchList';\nimport TableCellName from './cols/TableCellName';\n\nconst columns: ColumnsType<CompanyWatchList> = [\n {\n title: 'Name',\n dataIndex: 'title',\n render: TableCellName,\n },\n {\n title: 'Owner',\n dataIndex: 'owner_name',\n width: 170,\n },\n];\n\nexport default columns;\n","import React, { Dispatch, SetStateAction, useRef } from 'react';\nimport { Dictionary } from 'lodash';\nimport { Input, Button, Table } from 'antd';\nimport { useSelector } from 'react-redux';\n// models\nimport { CompanyWatchList } from '@optx/models/WatchList';\n// redux\nimport { selectors as watchListsSelectors } from '@redux/favorite-lists/lists-popup';\nimport { useIsChromePlugin } from '@optx/common/hooks/useIsChromePlugin';\n// components\nimport SearchInput from '@optx/components/common/form/input/SearchInput';\nimport columns from './WatchListOptionsColumn';\n\ninterface MenuListProps {\n options: Dictionary<CompanyWatchList>;\n selectedOptions: Dictionary<boolean>;\n disabledOptions?: Dictionary<boolean>;\n showCreateList?: VoidFunction;\n onChange: (\n listId?: string[],\n item?: CompanyWatchList,\n isEmpty?: boolean,\n companyActiveWatchlist?: Dictionary<boolean>\n ) => void;\n searchValue: string;\n setSearchValue: Dispatch<SetStateAction<string>>;\n isOpen: boolean;\n handleDropdownKeyEvent: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n}\n\nconst MenuList: React.FC<MenuListProps> = ({\n options,\n selectedOptions,\n disabledOptions = {},\n onChange,\n showCreateList,\n searchValue,\n setSearchValue,\n isOpen,\n handleDropdownKeyEvent,\n}) => {\n const companyWatchListsIds = useSelector(watchListsSelectors.getAllListIds);\n const selectedValues = { ...selectedOptions, ...disabledOptions };\n\n const newDataList: CompanyWatchList[] = [];\n companyWatchListsIds.forEach(itemId => {\n // @ts-ignore\n newDataList.push({ ...options[itemId], id: options[itemId]?.unique_id.toString() });\n });\n const data = newDataList.filter(item => item.title !== 'Portfolio Platform Companies');\n\n const { isChromePlugin } = useIsChromePlugin();\n\n const inputRef = useRef<Input | null>(null);\n\n const [selectedRowKeys, setSelectedRowKeys] = React.useState<React.Key[]>(\n Object.keys(selectedValues)\n );\n const [filteredData, setFilteredData] = React.useState<CompanyWatchList[]>(data);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchValue(event.target.value);\n setFilteredData(\n data.filter(item => item.title.toLowerCase().includes(event.target.value.toLowerCase()))\n );\n };\n\n const onSelectChange = (newSelectedRowKeys: React.Key[], selectedRow: CompanyWatchList[]) => {\n if (selectedRow.length === 0) onChange(undefined, undefined, true);\n setSelectedRowKeys(newSelectedRowKeys);\n selectedRow.forEach(item => {\n onChange(newSelectedRowKeys as string[], item, false, disabledOptions);\n });\n };\n\n const rowSelection = {\n onChange: onSelectChange,\n selectedRowKeys,\n getCheckboxProps: (record: CompanyWatchList) => ({\n disabled: disabledOptions[record.unique_id.toString()] || record.share_permission === 1,\n }),\n };\n\n React.useEffect(() => {\n if (!isOpen) {\n setFilteredData(data);\n setSelectedRowKeys(Object.keys(selectedValues));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n return (\n <div onKeyDown={handleDropdownKeyEvent} tabIndex={0}>\n <SearchInput\n ref={inputRef}\n onChange={handleChange}\n value={searchValue}\n placeholder=\"Search lists\"\n />\n <Button\n className=\"btn-create\"\n style={{ left: isChromePlugin ? '2rem' : '12.8rem' }}\n onClick={showCreateList}\n >\n + NEW\n </Button>\n <Table\n style={{ height: 295, overflowY: 'auto', width: '100%' }}\n rowSelection={rowSelection}\n columns={columns}\n rowKey={list => list.unique_id.toString()}\n dataSource={filteredData}\n pagination={false}\n />\n </div>\n );\n};\n\nexport default MenuList;\n","import React, { Dispatch, SetStateAction } from 'react';\nimport { Dictionary } from 'lodash';\nimport { useSelector } from 'react-redux';\n// models\nimport { AppState } from '@optx/redux/interfaces';\nimport { CompanyWatchList } from '@optx/models/WatchList';\nimport { WatchListAction } from './interfaces';\n// redux\nimport { selectors as companyListsSelectors } from '../../../redux/favorite-lists/company-lists';\n// components\nimport AddWatchList from './AddWatchList';\nimport WatchListOptions from './WatchListOptions';\n\ninterface PopoverContentProps {\n companyId: number;\n action: WatchListAction;\n selectedOptions: Dictionary<boolean>;\n title: string;\n companyWatchLists: Dictionary<CompanyWatchList>;\n handleSelectChange: (\n listId?: string[],\n item?: CompanyWatchList,\n isEmpty?: boolean,\n companyActiveWatchlist?: Dictionary<boolean>\n ) => void;\n handleTitleChange: (newTitle: string) => void;\n showCreateList?: VoidFunction;\n searchValue: string;\n setSearchValue: Dispatch<SetStateAction<string>>;\n isOpen: boolean;\n handleDropdownKeyEvent: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n}\n\nconst PopoverContent: React.FC<PopoverContentProps> = ({\n action,\n selectedOptions,\n title,\n companyWatchLists,\n handleSelectChange,\n handleTitleChange,\n companyId,\n showCreateList,\n searchValue,\n setSearchValue,\n isOpen,\n handleDropdownKeyEvent,\n}) => {\n // const { listsIncludingCompany } = useInitWatchListsIncludingCompany(companyId);\n const listsIncludingCompany = useSelector((state: AppState) =>\n companyListsSelectors.getCompanyLists(state, companyId)\n );\n\n return (\n <>\n {action === 'Add to' ? (\n <WatchListOptions\n options={companyWatchLists}\n selectedOptions={selectedOptions}\n disabledOptions={listsIncludingCompany}\n onChange={handleSelectChange}\n showCreateList={showCreateList}\n searchValue={searchValue}\n setSearchValue={setSearchValue}\n isOpen={isOpen}\n handleDropdownKeyEvent={handleDropdownKeyEvent}\n />\n ) : (\n <AddWatchList\n title={title}\n onTitleChange={handleTitleChange}\n handleDropdownKeyEvent={handleDropdownKeyEvent}\n />\n )}\n </>\n );\n};\n\nexport default PopoverContent;\n","/* eslint-disable no-irregular-whitespace */\nimport { Modal as M } from 'antd';\nimport { ModalProps } from 'antd/lib/modal';\nimport styled from 'styled-components';\n\ninterface ModalWrapperProps extends ModalProps {\n isExtension?: boolean;\n}\nconst Modal = styled(M)<ModalWrapperProps>`\n width: ${({ isExtension }) => (isExtension ? '590px' : '724px')} !important;\n transform: ${({ isExtension }) => (isExtension ? 'translateX(-250px)' : 'inherit')} !important;\n`;\n\nconst Styles = {\n Modal,\n};\n\nexport default Styles;\n","import styled from 'styled-components';\n\nconst SortWrapperStyled = styled.div`\n display: inline-block;\n font-weight: 400;\n font-size: 14px;\n text-align: left;\n border-radius: 2px;\n margin: 0px 13px 5px 15px;\n .watch-list__sorting {\n min-width: 250px;\n }\n`;\nexport default SortWrapperStyled;\n","import React, { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { ValueType } from 'react-select';\n// models\nimport { FAVORITE_LIST_SELECT_OPTIONS } from '@constants/lists';\nimport { SelectOption } from '@optx/models/Option';\n// redux\nimport {\n selectors as watchListsSelectors,\n actions as watchListsActions,\n} from '@redux/favorite-lists/lists-popup';\n// components\nimport { SingleSelect } from '@shared/view/molecules/Select';\nimport SortWrapperStyled from './SortSelectLists.styles';\n\nconst SortSelectLists = () => {\n const dispatch = useDispatch();\n const sortActive = useSelector(watchListsSelectors.getSortSelect);\n const defaultValue = [\n {\n value: sortActive.value,\n label: sortActive.label,\n },\n ];\n\n const handleSorting = useCallback(\n (selectedValue: ValueType<SelectOption>) => {\n dispatch(\n watchListsActions.sortFavoriteListsPopup({\n sorting: (selectedValue as SelectOption).value,\n })\n );\n },\n [dispatch]\n );\n\n return (\n <SortWrapperStyled className=\"watch-list__sort\">\n <SingleSelect\n className=\"watch-list__sorting\"\n dropdownClassName=\"watch-list__sorting-dropdown\"\n bordered={false}\n valuePrefix=\"Sort by:\"\n value={defaultValue}\n SearchIcon={false}\n options={FAVORITE_LIST_SELECT_OPTIONS}\n onChange={handleSorting}\n />\n </SortWrapperStyled>\n );\n};\n\nexport default SortSelectLists;\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Dictionary, some } from 'lodash';\nimport { PopoverProps } from 'antd/lib/popover';\n// models\nimport { CompanyWatchList } from '@optx/models/WatchList';\nimport { LoadingIcon } from '@optx/shared/view/molecules/loader';\nimport { WatchListAction } from './interfaces';\n// utils\nimport NotificationService from '../../../services/NotificationService';\nimport { handlePendoAction } from '@optx/utils/utils';\n// redux\nimport {\n selectors as favoriteListsSelectors,\n actions as favoriteListsActions,\n} from '../../../redux/favorite-lists/lists-popup';\nimport { selectors as companyListsSelectors } from '../../../redux/favorite-lists/company-lists';\n// components\nimport PopoverContent from './PopoverContent';\nimport Styles from './AddCompanyToListPopover.styles';\nimport SortSelectLists from './SortSelectLists';\n\nconst message = 'There is already a list with this name, please choose a different title !';\ninterface AddCompanyToListPopoverProps extends PopoverProps {\n companyId: number;\n isOpen: boolean;\n toggle: () => void;\n callback?: () => void;\n /**\n * close popover automatically after saving company to list.\n */\n autoClose?: boolean;\n isExtension?: boolean;\n}\n\nconst AddCompanyToListPopover: React.FC<AddCompanyToListPopoverProps> = ({\n companyId,\n isOpen,\n toggle,\n autoClose,\n callback,\n isExtension = false,\n}) => {\n // redux\n const companyWatchLists: Dictionary<CompanyWatchList> = useSelector(\n favoriteListsSelectors.getAllWatchlists\n );\n\n const loading: boolean = useSelector(companyListsSelectors.isLoading);\n const favoriteListsLoading: boolean = useSelector(favoriteListsSelectors.isLoading);\n\n const dispatch = useDispatch();\n const addCompanyToList = useCallback(\n (\n selectedLists: { list_title: string; list_id: number | null }[],\n companyId: number,\n errorOnConflict: boolean\n ) => {\n dispatch(\n favoriteListsActions.addCompanyToListPopup({\n selectedLists,\n company_id: companyId,\n error_on_conflict: errorOnConflict,\n callback,\n })\n );\n },\n [callback, dispatch]\n );\n const createNewList = useCallback(\n (title: string, companyId: number) =>\n dispatch(favoriteListsActions.createFavoriteListPopup({ title, company_id: companyId })),\n [dispatch]\n );\n\n // local state\n const [title, setTitle] = useState('');\n const [action, setAction] = useState<WatchListAction>('Add to');\n const [selectedOptions, setSelectedOptions] = useState<Dictionary<boolean>>({});\n const selectedOptionsRef = useRef<Dictionary<boolean>>({});\n const [searchValue, setSearchValue] = useState<string>('');\n\n const handleToggle = useCallback(\n (manualClose?: boolean) => {\n setTitle('');\n setAction('Add to');\n setSelectedOptions({});\n setSearchValue('');\n\n if (!manualClose || autoClose) {\n toggle();\n }\n },\n [toggle, autoClose]\n );\n\n const showCreateList = useCallback(() => {\n setAction('Create');\n setTitle('');\n }, []);\n\n const handleSelectChange = (\n listId?: string[],\n item?: CompanyWatchList,\n isEmpty = false,\n companyActiveWatchlist?: Dictionary<boolean>\n ) => {\n if (isEmpty) {\n setSelectedOptions({});\n setTitle('');\n\n return;\n }\n\n setTitle((item as CompanyWatchList).title);\n\n const arraySelectedOptions = Object.keys(selectedOptionsRef.current);\n\n const deletedItem = arraySelectedOptions.find(list => !listId?.includes(list));\n\n let activeWatchlistArr = companyActiveWatchlist ? Object.keys(companyActiveWatchlist) : [];\n\n if (listId?.length) {\n listId.forEach((list, index) => {\n if (!activeWatchlistArr.includes(list)) {\n selectedOptionsRef.current[list] = true;\n }\n });\n }\n\n if (deletedItem) {\n delete selectedOptionsRef.current[deletedItem];\n setSelectedOptions(selectedOptionsRef.current);\n }\n\n setSelectedOptions(selectedOptionsRef.current);\n };\n\n const handleCreateNewList = () => {\n // Check if title is already taken.\n if (some(companyWatchLists, ['title', title])) {\n NotificationService.warn(message);\n } else if (title.trim().length === 0) {\n setTitle('');\n NotificationService.warn('Enter valid name');\n } else {\n createNewList(title.trim(), companyId);\n setSelectedOptions({});\n setAction('Add to');\n }\n };\n\n useEffect(() => {\n selectedOptionsRef.current = {};\n }, [isOpen]);\n\n const handleAction = () => {\n if (action === 'Add to') {\n const selectedLists = Object.keys(selectedOptions).map(listId => ({\n list_title: companyWatchLists[listId].title,\n list_id: Number(listId),\n }));\n addCompanyToList(selectedLists, companyId, true);\n window.pendo.track(handlePendoAction('CreateOrAddToWatchlist'));\n handleToggle(true);\n } else {\n handleCreateNewList();\n }\n };\n\n const handleTitleChange = (title: string) => {\n setTitle(title);\n setSearchValue('');\n };\n\n const onCancel = () => {\n setSelectedOptions({});\n setSearchValue('');\n\n if (action === 'Add to') {\n handleToggle(true);\n }\n\n if (action === 'Create') {\n setTitle('');\n setAction('Add to');\n }\n };\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n handleAction();\n }\n };\n\n // Disable action button when there are no items selected.\n const disabled = action === 'Add to' ? Object.keys(selectedOptions).length === 0 : !title;\n\n return (\n <Styles.Modal\n title={[<span>Select Lists</span>, <SortSelectLists />]}\n visible={isOpen}\n okText={`+ ${action} List`}\n okButtonProps={{ disabled }}\n onOk={handleAction}\n onCancel={onCancel}\n className=\"dropdownplus\"\n isExtension={isExtension}\n >\n {loading || favoriteListsLoading ? (\n <LoadingIcon />\n ) : (\n <PopoverContent\n companyId={companyId}\n action={action}\n handleSelectChange={handleSelectChange}\n companyWatchLists={companyWatchLists}\n handleTitleChange={handleTitleChange}\n selectedOptions={selectedOptions}\n isOpen={isOpen}\n title={title}\n showCreateList={showCreateList}\n searchValue={searchValue}\n setSearchValue={setSearchValue}\n handleDropdownKeyEvent={handleDropdownKeyEvent}\n />\n )}\n </Styles.Modal>\n );\n};\n\nAddCompanyToListPopover.defaultProps = {\n isOpen: false,\n toggle: () => {},\n autoClose: true,\n};\n\nexport default AddCompanyToListPopover;\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\n\nexport const toggleUserInvitationDialog = createAction(types.TOGGLE_USER_INVITATION_DIALOG);\n\nexport const sendUserInvite = createAction<{ email: string; role: string }>(types.SEND_USER_INVITE);\nexport const sendUserInviteSuccess = createAction<string>(types.SEND_USER_INVITE_SUCCESS);\nexport const sendUserInviteFail = createAction<string>(types.SEND_USER_INVITE_FAIL);\n","export const TOGGLE_USER_INVITATION_DIALOG = 'TOGGLE_USER_INVITATION_DIALOG';\nexport const SEND_USER_INVITE = 'SEND_USER_INVITE';\nexport const SEND_USER_INVITE_SUCCESS = 'SEND_USER_INVITE_SUCCESS';\nexport const SEND_USER_INVITE_FAIL = 'SEND_USER_INVITE_FAIL';\n","import { AppState } from '@optx/redux/interfaces';\nimport { createSelector } from 'reselect';\nimport { selectors as fetchSelectors } from '../../../feature/fetch';\n\nexport const userInvitationDialogState = (state: AppState) => state.ui.modals.userInvitation;\n\nexport const isLoading = createSelector(\n userInvitationDialogState,\n fetchSelectors.isLoadingSelector\n);\n\nexport const userInvitationDialog = createSelector(userInvitationDialogState, state => state.open);\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport * as actions from './actions';\nimport { toggleReducer } from '../../../feature/toggle/reducers';\nimport {\n fetchReducer,\n fetchFailReducer,\n fetchSuccessReducer,\n} from '../../../feature/fetch/reducers';\nimport { UserInvitationState } from './interfaces';\n\nconst initialState: UserInvitationState = {\n loading: false,\n error: '',\n data: [],\n open: false,\n};\n\nconst toggleUserInvitationDialogReducer: CaseReducer<UserInvitationState, PayloadAction> = (\n draftState,\n action\n) => {\n draftState.open = toggleReducer(draftState.open);\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n .addCase(actions.toggleUserInvitationDialog, toggleUserInvitationDialogReducer)\n .addCase(actions.sendUserInvite, fetchReducer)\n .addCase(actions.sendUserInviteSuccess, fetchSuccessReducer)\n .addCase(actions.sendUserInviteFail, fetchFailReducer)\n);\n\nexport default reducer;\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { values as _values } from 'lodash';\n// models\nimport { SortByRule } from '@optx/models/table/sorting';\n// services\nimport { UserManagement } from '@services/api';\nimport NotificationService from '@services/NotificationService';\n// redux\nimport {\n selectors as userManagementSelectors,\n actions as userManagementActions,\n} from '@redux/user-management';\nimport { AxiosResponse } from 'axios';\nimport * as actions from './actions';\n\nexport function* sendUserInviteSaga(action: PayloadAction<{ email: string; role: string }>) {\n const sorting: SortByRule<any>[] = yield select(userManagementSelectors.getSorting);\n\n try {\n const res: AxiosResponse<any> = yield call(UserManagement.setInvite, action.payload);\n\n if (!res.data) {\n yield put(actions.sendUserInviteSuccess(res.data));\n\n NotificationService.success('Invitation Sent!');\n\n yield put(actions.toggleUserInvitationDialog());\n\n // if the invite was a success, refresh the grid to get new data.\n yield put(userManagementActions.fetchUserManagement(sorting));\n } else {\n let errorMessage = 'Failed to send User Invitation!';\n\n if (res.data.errors) {\n errorMessage = _values(res.data.errors).toString();\n }\n\n yield put(actions.sendUserInviteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n let errorMessage = 'Failed to send User Invitation!';\n\n if (error.response.data && error.response.data.errors) {\n errorMessage = _values(error.response.data.errors).toString();\n }\n\n yield put(actions.sendUserInviteFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* userInvitationSaga() {\n yield takeLatest(actions.sendUserInvite, sendUserInviteSaga);\n}\n","import React from 'react';\nimport { Tooltip } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\n// redux\nimport {\n actions as viewTypeActions,\n selectors as viewTypeSelectors,\n} from '@features/grid/view-type';\n//constants\nimport { LONG_CARD_TITLE } from '@optx/constants/titles';\n// components;\nimport ToggleLongCardView from '@optx/components/common/long-card/ToggleLongCardView';\n\nconst ToggleLongCardViewContainer = () => {\n const dispatch = useDispatch();\n const searchView = useSelector(viewTypeSelectors.searchView('advancedSearch'));\n\n const toggleLongCardView = () => {\n dispatch(viewTypeActions.toggleSearchView({ gridKey: 'advancedSearch', data: 'long-card' }));\n };\n\n const active = searchView === 'long-card';\n\n return (\n <Tooltip title={LONG_CARD_TITLE}>\n <ToggleLongCardView onClick={toggleLongCardView} active={active} />\n </Tooltip>\n );\n};\n\nexport default ToggleLongCardViewContainer;\n","import React from 'react';\nimport { Tooltip } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\n// redux\nimport {\n selectors as viewTypeSelectors,\n actions as viewTypeActions,\n} from '@features/grid/view-type';\n// consts\nimport ToggleTableView from '@optx/components/common/long-card/ToggleTableView';\nimport { TABLE_VIEW_TITLE } from '@optx/constants/titles';\n\nconst ToggleTableViewContainer = () => {\n const dispatch = useDispatch();\n const searchView = useSelector(viewTypeSelectors.searchView('advancedSearch'));\n\n const toggleTableView = () => {\n if (searchView !== 'table') {\n window.scrollTo(0, 0);\n }\n\n dispatch(viewTypeActions.toggleSearchView({ gridKey: 'advancedSearch', data: 'table' }));\n };\n\n const active = searchView === 'table';\n\n return (\n <Tooltip title={TABLE_VIEW_TITLE}>\n <ToggleTableView onClick={toggleTableView} active={active} />\n </Tooltip>\n );\n};\n\nexport default ToggleTableViewContainer;\n","import { Select } from 'antd';\nimport { useState, useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid//sort/';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport styled from 'styled-components';\nimport {\n mapOptionsToLabeledValues,\n PrefixedSelectionItem,\n} from '@optx/components/common/select/Select/PrefixedSelectionItem';\nimport { SelectOption } from '@optx/models/Option';\nimport { SelectProps, SelectValue } from 'antd/lib/select';\n\nconst gridKey = 'advancedSearch';\n\nconst StyledLabel = styled(PrefixedSelectionItem)`\n .prefixed-selection-item__label {\n color: #1890ff;\n }\n`;\n\nconst StyledOption = styled(Select.Option)`\n .prefixed-selection-item__label {\n color: rgba(0, 0, 0, 0.65);\n }\n`;\n\nconst CardViewSelect = ({ className, ...restProps }: SelectProps<SelectValue>) => {\n return <Select dropdownClassName={className} {...restProps} />;\n};\n\nconst StyledSelect = styled(CardViewSelect)`\n .prefixed-selection-item__label {\n color: rgba(0, 0, 0, 0.65);\n }\n`;\n\nconst CardPannelSorting = () => {\n const defautlOptxScore = useSelector(userSelectors.getDefaultScore);\n const searchView = useSelector(viewTypeSelectors.searchView(gridKey));\n const optxScoreLabel = defautlOptxScore === 'il' ? 'Highest IL OPTX Score' : 'Highest OPTX Score';\n const optxScore = defautlOptxScore === 'il' ? 'il_optx_score' : 'score';\n\n const touchTypes: Array<SelectOption> = [\n {\n label: optxScoreLabel,\n value: optxScore,\n },\n { label: 'Top Raised', value: 'capital_raised' },\n { label: 'Number of Employees', value: 'num_employees' },\n { label: 'Employee Growth % Y/Y', value: 'emp_growth_percent' },\n ];\n\n const typesOptions = mapOptionsToLabeledValues('Sort by: ', touchTypes, StyledLabel);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const sortingValues = [optxScore, 'capital_raised', 'num_employees', 'emp_growth_percent'];\n\n const dispatch = useDispatch();\n const sorting = useSelector(sortSelectors.getSorting(gridKey));\n\n const [value, setValue] = useState<string>(sorting[0]?.id);\n\n useEffect(() => {\n if (['score', 'il_optx_score'].includes(value)) {\n setValue(sortingValues[0]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n useEffect(() => {\n if (sorting.length && sorting[0].id !== value) {\n setValue(sorting[0].id);\n }\n\n if (searchView === 'long-card') {\n window.scrollTo(0, 0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sorting]);\n\n const changeSorting = (value: SelectValue) => {\n dispatch(sortActions.changeSort({ gridKey, data: [{ id: value as string, desc: true }] }));\n setValue(value as string);\n };\n\n const selectValue = useMemo(\n () => (sortingValues.includes(value) ? value : 'Sort by: Choose Sorting'),\n [sortingValues, value]\n );\n\n return (\n <StyledSelect\n onChange={changeSorting}\n bordered={false}\n value={selectValue}\n dropdownMatchSelectWidth={false}\n >\n {typesOptions.map(option => (\n <StyledOption key={option.value} value={option.value}>\n {option.label}\n </StyledOption>\n ))}\n </StyledSelect>\n );\n};\n\nexport default CardPannelSorting;\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\n// redux\nimport { selectors as fullscreenSelectors } from '@redux/ui/settings/fullscreen';\nimport { actions as userInformationActions } from '@redux/user/information';\n// components\nimport ToggleButton from '@optx/components/common/molecules/buttons/ToggleButton';\n\ninterface QuickFiltersToggleProps {\n open: boolean;\n setOpen: (value: boolean) => void;\n}\n\nconst QuickFiltersToggle: React.FC<QuickFiltersToggleProps> = ({ open, setOpen }) => {\n const dispatch = useDispatch();\n const isFullscreen = useSelector(fullscreenSelectors.isFullscreen);\n\n const handleClick = () => {\n dispatch(userInformationActions.updateUserSettings({ show_quick_filters: !open }));\n\n setOpen(!open);\n };\n\n if (isFullscreen) {\n return null;\n }\n\n const title = `${open ? 'Hide' : 'Show'} Quick Filters`;\n\n return <ToggleButton onClick={handleClick} hide={open} title={title} />;\n};\n\nexport default QuickFiltersToggle;\n","import styled, { css } from 'styled-components';\nimport { Title } from '@optx/shared/view/atoms/Typography';\nimport { Row, Col } from 'antd';\n\nconst SearchGridWrapper = styled(Row)<{ $cardView?: boolean }>`\n background-color: rgb(240, 242, 245);\n min-height: 66px;\n\n padding: 1rem 40px;\n\n ${props =>\n props.$cardView &&\n css`\n margin-bottom: 0;\n `}\n`;\n\nconst SearchColWrapper = styled(Col)`\n flex: auto;\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n`;\n\nconst ControlsWrapper = styled(Col)`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n .ant-btn {\n margin-left: 8px;\n }\n\n .ant-btn-icon-only {\n margin-left: 4px;\n }\n\n .ant-select-selector {\n padding: 0 11px 0 0 !important;\n }\n`;\n\nconst PageTitle = styled(Title)`\n h1& {\n max-width: 70%;\n margin: 0 20px 0 0;\n min-width: fit-content;\n }\n`;\n\nconst PageTitleWrapper = styled.div`\n display: flex;\n align-items: center;\n`;\nexport default {\n SearchGridWrapper,\n PageTitleWrapper,\n ControlsWrapper,\n SearchColWrapper,\n PageTitle,\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Col } from 'antd';\nimport { Link, useLocation } from 'react-router-dom';\n// redux\nimport { selectors as fullscreenSelectors } from '@redux/ui/settings/fullscreen';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport { selectors as viewSelectors, actions as viewActions } from '@features/grid/view';\nimport { selectors as filterSelectors } from '@features/grid/filter';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\n// components\nimport { GridContext } from '@components/pages/Home/HomeContext';\nimport GridFullScreen from '@optx/shared/view/molecules/FullScreen/GridFullScreen';\nimport SearchCount from '@optx/features/grid/search-count/components/SearchCount';\nimport { BulkActionsButton } from '@features/bulk-actions/actions-menu';\nimport GridDropdown from './GridDropdown';\nimport GridView from '@features/grid/view/components/GridView';\nimport ToggleLongCardViewContainer from '../Header/ToggleLongCardViewContainer';\nimport ToggleTableViewContainer from '../Header/ToggleTableViewContainer';\nimport CardPannelSorting from './CardPannelSorting';\nimport TrendingControls from './TrendingControls';\nimport { GridActionMenu } from '@components/feature/drop-down/grid-action-menu';\nimport QuickFiltersToggle from './QuickFiltersToggle';\n// styles\nimport Styled from './SearchGridControls.styles';\n\ninterface SearchGridControlsProps {\n open: boolean;\n setOpen: (value: boolean) => void;\n}\n\nconst SearchGridControls: React.FC<SearchGridControlsProps> = ({ open, setOpen }) => {\n const location = useLocation();\n const isFullscreen = useSelector(fullscreenSelectors.isFullscreen);\n const searchView = useSelector(viewTypeSelectors.searchView('advancedSearch'));\n const activeView = useSelector(viewSelectors.getView('advancedSearch'));\n const similarCompanyInfo = useSelector(filterSelectors.getSimilarCompanyName());\n const selectedCompanies = useSelector(\n bulkActionsSelectors.selectedCompanies.getSelectedCompanies('advancedSearch')\n );\n\n const similarCompanyName = similarCompanyInfo?.label;\n const similarCompanyId = Number(similarCompanyInfo?.value.split(',').pop());\n\n const applyView = viewActions.applyView;\n\n return (\n <Styled.SearchGridWrapper\n justify=\"space-between\"\n align=\"middle\"\n $cardView={searchView === 'long-card'}\n >\n <Col flex=\"auto\" style={{ display: 'flex', flexWrap: 'wrap' }}>\n <Styled.PageTitle ellipsis>\n {`${similarCompanyName ? 'Similar Companies to' : 'Advanced Search'}`}\n <Link style={{ marginLeft: '6px' }} to={`/profile/${similarCompanyId}`}>\n {similarCompanyName}\n </Link>\n </Styled.PageTitle>\n <SearchCount gridName=\"advancedSearch\" searchViewType={searchView} />\n <Styled.ControlsWrapper>\n <TrendingControls />\n {searchView === 'table' && (\n <GridView gridKey=\"advancedSearch\" activeView={activeView} applyView={applyView} />\n )}\n {searchView === 'long-card' && <CardPannelSorting />}\n <ToggleTableViewContainer />\n <ToggleLongCardViewContainer />\n {searchView === 'table' && !isFullscreen && <GridFullScreen />}\n <QuickFiltersToggle open={open} setOpen={setOpen} />\n {searchView === 'table' && <GridDropdown />}\n <GridActionMenu />\n {!!selectedCompanies.length && searchView === 'table' && (\n <BulkActionsButton\n context={GridContext}\n selectedCompanies={selectedCompanies}\n referrer={encodeURIComponent(location.pathname)}\n />\n )}\n </Styled.ControlsWrapper>\n </Col>\n </Styled.SearchGridWrapper>\n );\n};\n\nexport default React.memo(SearchGridControls);\n","import { TouchesCreateForm } from '@models/api/touches';\n\nconst TOUCH_FORM_INITIAL_STATE: TouchesCreateForm = {\n companyId: '',\n touchId: null,\n userId: '',\n touchType: 'complete',\n type: '',\n typeId: '',\n initiator: '',\n initiatorId: '',\n is_optx_id: false,\n initiatorHasEtId: true,\n attendees: [],\n externalAttendees: [],\n touchDate: '',\n touchTime: [],\n subject: '',\n notes: '',\n textarea: '',\n scheduleFollow: false,\n scheduleInterval: '',\n scheduleSubject: '',\n scheduleTouchDate: '',\n scheduleType: '',\n scheduleTypeId: '',\n // financials fields added in order to speed up loading\n annual_recurring_revenue: [],\n revenue: [],\n gm: [],\n ebitda: [],\n revenue_model: [],\n revenue_by_country: '',\n cashflow: '',\n financial_notes: '',\n capital_raised: '',\n cap_table: '',\n last_round_date: '',\n last_round: undefined,\n last_round_amount: undefined,\n acquiring_company: '',\n banker: undefined,\n banker_name: '',\n deal_type: '',\n equity_check: null,\n next_steps: '',\n transaction_notes: '',\n customers_number: undefined,\n customer_type: [],\n sales_and_marketing: '',\n sales_cycle: [],\n acv: '',\n clt: '',\n nps: '',\n net_retention: undefined,\n gross_retention: undefined,\n customer_churn: '',\n customer_concentration: '',\n cac: '',\n ltv_cac: '',\n delivery_model: [],\n cloud_provider: [],\n architecture: [],\n technology_notes: '',\n primary_contact: undefined,\n product_category: [],\n sub_sector: undefined,\n num_employees: undefined,\n competitors: [],\n fte_location: '',\n};\n\nexport const TOUCH_TIME_FORMAT = 'HH:mm';\n\nexport default TOUCH_FORM_INITIAL_STATE;\n","import * as yup from 'yup';\n// models\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport {\n ONLY_DIGITS_AND_OPTIONS_ERROR_MESSAGE,\n ONLY_DIGITS_ERROR_MESSAGE,\n} from '@optx/constants/table/cells';\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// utils\nimport { isOptionChecked } from '@optx/utils/option';\nimport { validatePositiveNumbers } from '@optx/utils/validation';\n\nconst validationTouch = ({\n ebitdaOptions,\n revenueOptions,\n arrOptions,\n gmOptions,\n}: {\n ebitdaOptions: SelectOption[];\n revenueOptions: SelectOption[];\n arrOptions: SelectOption[];\n gmOptions: SelectOption[];\n}) => {\n const validationSchema = yup.object({\n typeId: yup.string().required('Field is required!').notOneOf(['select']).label('Type'),\n touchDate: yup.string().required('Field is required!'),\n touchTime: yup.string().required('Field is required!'),\n initiator: yup.string().required('Field is required!'),\n capital_raised: yup\n .number()\n .nullable()\n .test('requiredConditional', ONLY_DIGITS_ERROR_MESSAGE, function (value) {\n return validatePositiveNumbers(value);\n }),\n last_round_amount: yup\n .number()\n .nullable()\n .test('requiredConditional', ONLY_DIGITS_ERROR_MESSAGE, function (value) {\n return validatePositiveNumbers(value);\n }),\n acquiring_company: yup\n .string()\n .nullable()\n .test('requiredConditional', 'Field is required!', function (value) {\n return (\n (value && !!value && this.parent.last_round?.label === 'Acquisition') ||\n this.parent.last_round?.label !== 'Acquisition'\n );\n }),\n banker_name: yup.string().test('requiredConditional', 'Field is required!', function (value) {\n return (value && !!value && this.parent.banker) || !this.parent.banker;\n }),\n last_round: yup.object().nullable(),\n revenue: yup.array().test('financialsConditional', ONLY_DIGITS_ERROR_MESSAGE, function (value) {\n let finalReturn = true;\n\n value &&\n // @ts-ignore\n value.forEach(item => {\n if (\n item.value &&\n Number.isNaN(Number(item.value)) &&\n !isOptionChecked(item.value, revenueOptions) &&\n item.value !== DEFAULT_EMPTY_VALUE\n ) {\n finalReturn = false;\n }\n });\n\n return finalReturn;\n }),\n annual_recurring_revenue: yup\n .array()\n .test('financialsConditional', ONLY_DIGITS_ERROR_MESSAGE, function (value) {\n let finalReturn = true;\n\n value &&\n // @ts-ignore\n value.forEach(item => {\n if (\n item.value &&\n Number.isNaN(Number(item.value)) &&\n !isOptionChecked(item.value, arrOptions) &&\n item.value !== DEFAULT_EMPTY_VALUE\n ) {\n finalReturn = false;\n }\n });\n\n return finalReturn;\n }),\n gm: yup.array().test('financialsConditional', ONLY_DIGITS_ERROR_MESSAGE, function (value) {\n let finalReturn = true;\n\n value &&\n // @ts-ignore\n value.forEach(item => {\n if (\n item.value &&\n Number.isNaN(Number(item.value)) &&\n !isOptionChecked(item.value, gmOptions) &&\n item.value !== DEFAULT_EMPTY_VALUE\n ) {\n finalReturn = false;\n }\n });\n\n return finalReturn;\n }),\n ebitda: yup\n .array()\n .test('financialsConditional', ONLY_DIGITS_AND_OPTIONS_ERROR_MESSAGE, function (value) {\n let finalReturn = true;\n\n value &&\n // @ts-ignore\n value.forEach(item => {\n if (\n item.value &&\n Number.isNaN(Number(item.value)) &&\n !isOptionChecked(item.value, ebitdaOptions) &&\n item.value !== DEFAULT_EMPTY_VALUE\n ) {\n finalReturn = false;\n }\n });\n\n return finalReturn;\n }),\n });\n\n return validationSchema;\n};\n\nexport default validationTouch;\n","import { useSelector, useDispatch } from 'react-redux';\nimport { useCallback } from 'react';\n// redux\nimport { selectors, actions } from '@redux/ui/modals/company-touches';\n// hooks\nimport { useShouldFetch } from '../fetch';\n\nconst useInitCompanyTouchesDialog = (companyId?: number) => {\n const dispatch = useDispatch();\n const shouldFetch = useSelector(selectors.shouldInitialFetch);\n\n const fetchFilters = useCallback(\n () => dispatch(actions.initCompanyTouchesDialog(companyId)),\n [dispatch, companyId]\n );\n\n useShouldFetch(shouldFetch, fetchFilters);\n};\n\nexport default useInitCompanyTouchesDialog;\n","import styled from 'styled-components';\r\nimport { Drawer as AntDrawer } from 'antd';\r\n\r\nconst DrawerTouches = styled(AntDrawer)`\r\n &.touch-extension {\r\n max-width: 640px;\r\n }\r\n .modal-title {\r\n font-size: 24px;\r\n }\r\n .ant-drawer-close {\r\n display: none;\r\n }\r\n .row-spacer {\r\n padding-top: 24px;\r\n padding-bottom: 24px;\r\n }\r\n .row-spacer-top {\r\n padding-top: 24px;\r\n }\r\n .row-spacer-bottom {\r\n padding-bottom: 16px;\r\n }\r\n &.touch-extension {\r\n .row-spacer {\r\n padding-top: 12px;\r\n padding-bottom: 12px;\r\n }\r\n .row-spacer-top {\r\n padding-top: 12px;\r\n }\r\n .row-spacer-bottom {\r\n padding-bottom: 12px;\r\n }\r\n .ant-radio-button-wrapper {\r\n padding: 0 10px;\r\n }\r\n }\r\n .company-intro {\r\n background: #ffffff;\r\n border-bottom: 1px solid #c2cfe0;\r\n padding: 14px 0;\r\n }\r\n .flex-nowrap {\r\n flex-wrap: nowrap;\r\n }\r\n .company-avatar--profile {\r\n max-width: 75px;\r\n max-height: 75px;\r\n margin-right: 15px;\r\n }\r\n .company-name {\r\n font-size: 20px;\r\n line-height: 1.4;\r\n font-weight: 600;\r\n color: #334d6e;\r\n display: block;\r\n padding-top: 5px;\r\n }\r\n .company-info {\r\n max-width: 500px;\r\n }\r\n .company-location {\r\n font-size: 14px;\r\n color: #90a0b7;\r\n font-weight: 700;\r\n svg {\r\n width: 14px;\r\n margin-right: 6px;\r\n vertical-align: baseline;\r\n }\r\n }\r\n .company-year-founded {\r\n font-size: 14px;\r\n color: #90a0b7;\r\n font-weight: 700;\r\n }\r\n .company-owner-name {\r\n padding-right: 10px;\r\n font-size: 14px;\r\n color: #90a0b7;\r\n font-weight: 700;\r\n }\r\n .media-object {\r\n margin: 0;\r\n }\r\n .ant-drawer-body {\r\n background: rgba(224, 231, 239, 0.2);\r\n padding-top: 0;\r\n .ant-select-selection-overflow {\r\n min-height: 30px;\r\n }\r\n }\r\n &.touch-extension .ant-drawer-body .ant-select-selection-overflow {\r\n min-height: 22px;\r\n }\r\n\r\n .company-additional-info-wrapper {\r\n display: block !important;\r\n margin-left: -24px;\r\n margin-right: -24px;\r\n padding: 12px 24px 2px;\r\n background-color: #fff;\r\n border-bottom: 1px solid #c2cfe0;\r\n\r\n .company-additional-info {\r\n display: flex;\r\n gap: 12px;\r\n\r\n .add-touch-select {\r\n max-width: fit-content;\r\n margin-bottom: 10px;\r\n\r\n & > div {\r\n max-width: calc(100% - 48px);\r\n min-width: fit-content;\r\n height: 24px;\r\n\r\n .styled-single-select__control {\r\n height: 24px;\r\n min-width: fit-content;\r\n min-height: 24px;\r\n }\r\n\r\n .styled-single-select__menu {\r\n z-index: 3;\r\n }\r\n\r\n .styled-single-select__single-value {\r\n margin-left: 0px;\r\n overflow: initial;\r\n font-weight: 600;\r\n font-size: 14px;\r\n margin-top: -2px;\r\n }\r\n\r\n .styled-single-select__indicators {\r\n .styled-single-select__indicator {\r\n padding-left: 0;\r\n\r\n .anticon {\r\n margin-left: 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n &.is-error {\r\n .styled-single-select__control {\r\n border: 1px solid #ff4d4f !important;\r\n box-shadow: 0 0 0 1px #ff4d4f !important;\r\n }\r\n }\r\n\r\n &.is-disabled {\r\n cursor: not-allowed;\r\n }\r\n }\r\n\r\n .styled-single-select__value-container {\r\n min-width: fit-content;\r\n height: 21px;\r\n min-height: 21px;\r\n margin-left: 0;\r\n\r\n & > span {\r\n margin-left: 6px;\r\n }\r\n\r\n span span.ant-typography {\r\n color: #1890ff;\r\n font-weight: 600;\r\n }\r\n\r\n & > div:last-child {\r\n height: 21px;\r\n min-height: 21px;\r\n padding: 0;\r\n margin: 0;\r\n margin-top: -5px;\r\n margin-left: 5px;\r\n }\r\n }\r\n\r\n .styled-single-select__control {\r\n span:nth-child(1) {\r\n display: inline-block;\r\n font-size: 14px;\r\n margin-left: 4px;\r\n margin-top: -4px;\r\n }\r\n }\r\n\r\n .ant-select-single {\r\n .prefixed-selection-item__label {\r\n color: #1890ff;\r\n }\r\n }\r\n }\r\n\r\n .company-additional-info__error {\r\n color: #ff4d4f;\r\n\r\n &::first-letter {\r\n text-transform: uppercase;\r\n }\r\n }\r\n }\r\n`;\r\n\r\ninterface FormErrorMaskProps {\r\n $isChromeExtension: boolean;\r\n}\r\n\r\nconst FormErrorMask = styled.div<FormErrorMaskProps>`\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n z-index: 1001; // index of antd's Drawer is 1000\r\n\r\n display: flex;\r\n flex-direction: column;\r\n\r\n width: ${props => (props.$isChromeExtension ? '640px' : '735px')};\r\n height: ${props => (props.$isChromeExtension ? 'calc(100% - 60px)' : '100%')};\r\n margin-top: ${props => (props.$isChromeExtension ? '60px' : '0')};\r\n background: rgba(255, 255, 255, 0.9);\r\n\r\n div {\r\n padding: 40px;\r\n margin: 180px auto 0;\r\n\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n\r\n svg {\r\n margin-bottom: 12px;\r\n }\r\n\r\n p,\r\n button {\r\n display: block;\r\n margin: 0;\r\n font-size: 16px;\r\n font-weight: 600;\r\n line-height: 24px;\r\n }\r\n }\r\n`;\r\n\r\nconst TouchContainer = styled.div`\r\n position: relative;\r\n\r\n &.is-error:after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n right: -24px;\r\n bottom: -24px;\r\n left: -24px;\r\n background: #00000073;\r\n z-index: 2;\r\n }\r\n\r\n h1 {\r\n font-size: 16px;\r\n }\r\n\r\n .ant-typography {\r\n display: block;\r\n }\r\n\r\n .ant-select {\r\n width: 100%;\r\n }\r\n\r\n .ant-form-item-control-input {\r\n min-height: 24px;\r\n }\r\n\r\n .ant-select-selector {\r\n padding-top: 0;\r\n padding-bottom: 0;\r\n }\r\n\r\n .styled-single-select__indicator-separator {\r\n display: none !important;\r\n }\r\n`;\r\n\r\nexport const Styled = {\r\n TouchContainer,\r\n DrawerTouches,\r\n FormErrorMask,\r\n};\r\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Button, Row, Col } from 'antd';\n// redux\nimport { selectors as modalSelectors } from '@redux/ui/modals/company-touches';\n\ninterface TouchModalTitleProps {\n isSaveDisabled?: boolean;\n handleCancel: () => void;\n handleSave: () => void;\n}\n\nconst TouchModalTitle: React.FC<TouchModalTitleProps> = ({\n isSaveDisabled,\n handleCancel,\n handleSave,\n}) => {\n const saveBtnStatus = useSelector(modalSelectors.getDisableSaveBtnFor);\n const saveBtnStatusByAdditionalFields = useSelector(\n modalSelectors.getDisableSaveBtnByAdditionalFields\n );\n const modalTitle = useSelector(modalSelectors.getModalTitle);\n\n return (\n <Row justify=\"space-between\">\n <Col span={12}>\n <div className=\"modal-title\">\n <span>{modalTitle}</span>\n </div>\n </Col>\n <Col>\n <div className=\"company-buttons\">\n <Button className=\"btn-cancel\" onClick={handleCancel}>\n CANCEL\n </Button>{' '}\n <Button\n type=\"primary\"\n className=\"btn-send\"\n onClick={handleSave}\n disabled={isSaveDisabled || !!saveBtnStatus || saveBtnStatusByAdditionalFields}\n >\n SAVE\n </Button>\n </div>\n </Col>\n </Row>\n );\n};\n\nexport default React.memo(TouchModalTitle);\n","import React, { useState, useCallback, useRef, useEffect, useMemo, lazy, Suspense } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport moment from 'moment';\nimport { Formik, FormikProps } from 'formik';\nimport { Form } from 'formik-antd';\nimport { isEqual, Dictionary } from 'lodash';\n// models\nimport { TouchesCreateForm } from '@models/api/touches';\nimport {\n EditField,\n FieldOptions,\n UpdateFieldsPayload,\n UpdateFieldsPayloadCustomData,\n} from '@optx/features/company/edit-fields/state/interfaces';\nimport { SelectOption } from '@optx/models/Option';\nimport { CompanyUserContact } from '@optx/models/api/contacts';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport TOUCH_FORM_INITIAL_STATE, { TOUCH_TIME_FORMAT } from './touchInitialValues';\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\nimport { ADD_TOUCH_LOCALSTORAGE_KEY_PREFIX } from '@optx/constants/autosave';\n// services\nimport NotificationService from '@services/NotificationService';\n// utils\nimport validationTouch from './validation';\nimport { normalizeValue } from '@optx/utils/helpers';\nimport { isDateInFuture, handlePendoAction } from '@optx/utils/utils';\nimport { deleteSavedValues } from '@optx/storage/localStorage/autoSaveStorage';\n// redux\nimport {\n selectors as modalSelectors,\n actions as modalActions,\n} from '@redux/ui/modals/company-touches';\nimport { actions as editFieldActions } from '@optx/features/company/edit-fields/state';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\nimport { getFinancialFilterOptions } from '@optx/redux/company/filters/selectors';\nimport { selectors as individualEditSelectors } from '@components/feature/company-individual-edit/state/index';\n// hooks\nimport { useInjectUI } from '@optx/common/hooks/inject';\nimport { useInjectEditAllCompany } from '@optx/features/edit-all-info';\nimport useInitCompanyTouchesDialog from '@optx/common/hooks/init/useInitCompanyTouchesDialog';\nimport { useInjectLocalStorageAutosave } from '@optx/features/local-storage-autosave';\n// components\nimport { LocalStorageAutoSave, FormErrorMask } from '@optx/features/local-storage-autosave';\nimport { Styled } from './CompanyTouches.styled';\nimport TouchModalTitle from './TouchModalTitle';\nconst TouchPropInfo = lazy(() => import('./TouchPropInfo'));\nconst TouchInformation = lazy(() => import('./TouchInformation'));\nconst CompanyDrawerBanner = lazy(() => import('./CompanyDrawerBanner'));\nconst AdditionalCompanyInfo = lazy(() => import('./AdditionalCompanyInfo'));\n\nconst isFieldChanged = (\n normalizedValue: string,\n selectedValue: string | number | null | undefined,\n isCompanyOwner?: boolean\n) => {\n const normalizedSelectedValue =\n selectedValue === 'None' || selectedValue === 'Unowned' || selectedValue === DEFAULT_EMPTY_VALUE\n ? null\n : selectedValue;\n\n if (\n (normalizedValue === 'blank' && normalizedSelectedValue) ||\n (normalizedValue !== 'blank' && !normalizedSelectedValue) ||\n (normalizedValue !== 'blank' &&\n normalizedSelectedValue &&\n normalizedValue.toString() !==\n (isCompanyOwner\n ? normalizedSelectedValue.toString().split(' ')[1]\n : normalizedSelectedValue.toString()))\n ) {\n return true;\n }\n\n return false;\n};\n\ninterface CompanyTouchesType {\n isChromeExtension?: boolean;\n}\n\nconst MINUTES_INTERVAL = 15;\n\nconst CompanyTouches: React.FC<CompanyTouchesType> = ({ isChromeExtension }) => {\n // get the company ID from the URL because the one from redux is read as -1 at first\n const COMPANY_ID_FROM_URL = parseInt(window.location.pathname.replace('/profile/', ''));\n const IS_FROM_GRID = !isChromeExtension && isNaN(COMPANY_ID_FROM_URL);\n\n useInjectUI();\n useInjectLocalStorageAutosave();\n useInitCompanyTouchesDialog(IS_FROM_GRID ? undefined : COMPANY_ID_FROM_URL);\n useInjectEditAllCompany();\n const dispatch = useDispatch();\n const location = useLocation();\n\n const fullName = useSelector(userInformationSelectors.getFullName);\n const userId = useSelector(userInformationSelectors.getUserId);\n const userEtId = useSelector(userInformationSelectors.getUserEtId);\n const company = useSelector(modalSelectors.getTouchCompany);\n const financialsLoaded = useSelector(modalSelectors.hasFinancialsLoaded);\n const isOpen = useSelector(modalSelectors.isOpen);\n const editTouch = useSelector(modalSelectors.editTouch);\n const touchFields = useSelector(modalSelectors.getTouchFinancials);\n const additionalFieldsError = useSelector(modalSelectors.getAdditionalFieldsError);\n const selectedStageType = useSelector(modalSelectors.getTouchCompanyStage);\n const selectedStageRationale = useSelector(modalSelectors.getTouchCompanyStageRationale);\n const selectedRankType = useSelector(modalSelectors.getTouchCompanyRank);\n const selectedCompanyOwnerType = useSelector(modalSelectors.getTouchCompanyOwner);\n const psgParticipants = useSelector(modalSelectors.getPsgParticipants);\n const hasAllFormDataLoaded = useSelector(modalSelectors.getHasAllFormDataLoaded);\n const subSectorOptions = useSelector(\n individualEditSelectors.companyIndividualEdit.subSectorOptions\n );\n const companyOwnerOptions = useSelector(\n individualEditSelectors.companyIndividualEdit.companyOwnerOptions\n );\n const companyStageOptions = useSelector(\n individualEditSelectors.companyIndividualEdit.stageOptions\n );\n const companyRankOptions = useSelector(individualEditSelectors.companyIndividualEdit.rankOptions);\n\n const [shouldUpdateToInitial, setShouldUpdateToInitial] = useState(false);\n\n const ebitdaOptions = useSelector(getFinancialFilterOptions('ebitda_numeric'));\n const revenueOptions = useSelector(getFinancialFilterOptions('last_rev_update_amount'));\n const arrOptions = useSelector(getFinancialFilterOptions('last_arr_value'));\n const gmOptions = useSelector(getFinancialFilterOptions('last_gross_margin'));\n\n const useAutosave = isOpen && !editTouch;\n const showFormDataErrorMask = useAutosave && !hasAllFormDataLoaded && !!subSectorOptions.length;\n\n const toggle = useCallback(() => {\n if (formRef.current) {\n formRef.current.resetForm();\n setShouldUpdateToInitial(true);\n dispatch(modalActions.clearAdditionalFieldsError());\n }\n\n return dispatch(\n modalActions.toggleCompanyTouchesDialog({\n companyId: company.company_id,\n companyName: company.company_name,\n company,\n isFromGrid: IS_FROM_GRID,\n })\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, company]);\n\n const handleCreateCompanyTouch = () => {\n if (formRef.current) {\n formRef.current.submitForm();\n\n if (formRef.current.errors) {\n const errors = Object.keys(formRef.current.errors);\n errors.forEach(error =>\n NotificationService.error(\n error.charAt(0).toUpperCase() +\n error.toString().replaceAll('_', ' ').slice(1) +\n ' is required!'\n )\n );\n\n // fix issue when company comes with last round as acquisition and acquiring company is empty\n if (\n errors.length === 0 &&\n formRef.current.values.acquiring_company === '' &&\n formRef.current.values.last_round?.label === 'Acquisition'\n ) {\n NotificationService.error('Acquiring Company is required!');\n }\n }\n }\n };\n\n const handleModalCancel = () => {\n deleteSavedValues(\n ADD_TOUCH_LOCALSTORAGE_KEY_PREFIX,\n IS_FROM_GRID || isChromeExtension ? company.company_id : COMPANY_ID_FROM_URL\n );\n toggle();\n };\n\n // CompanyInfo\n const companyInfoToSaveRef = useRef<EditField | null>(null);\n\n // Form\n const formRef = useRef<FormikProps<Partial<TouchesCreateForm>> | null>(null);\n\n const initiator = useMemo(() => {\n return (\n psgParticipants.find(user => {\n let initiatorId = userEtId || userId;\n\n if (editTouch !== null) {\n initiatorId = editTouch.initiatorid ? editTouch.initiatorid : editTouch.initiatorid_optx;\n }\n\n return user.value === initiatorId || user.optx_id === initiatorId;\n }) || null\n );\n }, [userEtId, userId, psgParticipants, editTouch]);\n\n const selectedContacts = useMemo(() => {\n if (!company?.contacts) {\n return [];\n }\n\n const validPrimaryContactIds = (company?.contacts as CompanyUserContact[]).reduce(\n (acc: number[], contact) => {\n if (\n contact.primary_contact &&\n (contact.tenure_end_date === 'present' ||\n isDateInFuture(contact.tenure_end_date as string))\n ) {\n acc.push(contact.person_id as number);\n }\n\n return acc;\n },\n []\n );\n\n return validPrimaryContactIds;\n }, [company?.contacts]);\n\n const formInitialValues = useMemo(() => {\n const start = new Date();\n const missingMinutes = MINUTES_INTERVAL - (moment(start).minute() % MINUTES_INTERVAL);\n const startTime = moment(start).add(missingMinutes, 'minutes');\n const endTime = moment(start).add(missingMinutes, 'minutes').add(MINUTES_INTERVAL, 'minutes');\n const formattedDate = moment(new Date()).format(ISO_DATE_FORMAT);\n\n let initialValues = {\n ...TOUCH_FORM_INITIAL_STATE,\n userId: userId?.toString(),\n initiator: initiator ? initiator.label : fullName,\n initiatorId: initiator ? initiator.value : 0,\n initiatorHasEtId: !!userEtId,\n companyId: company.company_id?.toString() || '',\n touchDate: formattedDate,\n touchTime: [startTime.format(TOUCH_TIME_FORMAT), endTime.format(TOUCH_TIME_FORMAT)],\n scheduleTouchDate: formattedDate,\n externalAttendees: selectedContacts,\n };\n\n if (editTouch != null) {\n const editTouchFormattedDate = moment(editTouch.startdate).format(ISO_DATE_FORMAT);\n\n initialValues = {\n ...initialValues,\n subject: editTouch.subject,\n type: editTouch.touchtype,\n touchId: editTouch.touchid,\n attendees: editTouch.psgParticipants ? editTouch.psgParticipants : [],\n externalAttendees: editTouch.externalParticipants\n ? editTouch.externalParticipants?.filter(item => item !== null)\n : [],\n companyId: company.company_id.toString(),\n initiator: initiator ? initiator.label : '',\n initiatorId: initiator ? editTouch.initiatorid || editTouch.initiatorid_optx : 0,\n initiatorHasEtId: !!editTouch.initiatorid,\n touchType: editTouch.iscomplete ? 'complete' : 'schedule',\n touchDate: editTouchFormattedDate,\n scheduleTouchDate: editTouchFormattedDate,\n textarea: editTouch.notes,\n touchTime: [\n moment(editTouch.starttime, 'hh:mm:ss').format(TOUCH_TIME_FORMAT),\n moment(editTouch.endtime, 'hh:mm:ss').format(TOUCH_TIME_FORMAT),\n ],\n };\n }\n\n return initialValues;\n }, [userId, initiator, fullName, userEtId, company.company_id, selectedContacts, editTouch]);\n\n const handleInitialValues = useCallback(() => {\n if (isEqual(formRef.current?.values, formInitialValues)) {\n return formRef.current!.values;\n }\n\n if (!formRef.current?.values || !IS_FROM_GRID || isChromeExtension) {\n return formInitialValues;\n }\n\n // this logic solves an issue that when opening Add Touch Note for a company from grid actions,\n // formInitialValues runs an extra time causing to overwrite values from autosave.\n const newInitialValues = Object.keys(formRef.current?.values ?? {}).reduce((acc, valueKey) => {\n const formValue = formRef.current?.values[valueKey as keyof TouchesCreateForm];\n const initialValue = formInitialValues[valueKey as keyof TouchesCreateForm];\n\n const useFormValue =\n formValue !== initialValue &&\n formValue !== '' &&\n formValue !== null &&\n Array.isArray(formValue) &&\n !formValue.length;\n\n return { ...acc, [valueKey]: useFormValue ? formValue : initialValue };\n }, {} as Partial<TouchesCreateForm>);\n\n return newInitialValues;\n }, [IS_FROM_GRID, formInitialValues, isChromeExtension]);\n\n const handleCompanyInfoChange = (newInfo: EditField | null) => {\n companyInfoToSaveRef.current = newInfo;\n };\n\n const handleSubmit = (values: Partial<TouchesCreateForm>) => {\n let additionalCompanyInfoPayload = companyInfoToSaveRef.current\n ? { ...companyInfoToSaveRef.current }\n : null;\n\n window.pendo.track(handlePendoAction('AddTouchNote'));\n\n if (\n additionalCompanyInfoPayload &&\n additionalCompanyInfoPayload.value &&\n Array.isArray(additionalCompanyInfoPayload.fieldName)\n ) {\n const payloadValue = (additionalCompanyInfoPayload.value as UpdateFieldsPayload).value;\n const payloadRationale = (additionalCompanyInfoPayload.value as UpdateFieldsPayload)\n .rationale;\n\n if (additionalCompanyInfoPayload.fieldName.includes('Stage')) {\n let isStageChanged = false;\n const isStageRationaleChanged =\n payloadRationale !== undefined && payloadRationale !== selectedStageRationale\n ? true\n : false;\n\n if ((payloadValue as unknown as Dictionary<SelectOption>).Stage) {\n const companyStage = (payloadValue as unknown as Dictionary<SelectOption>).Stage;\n const normalizedCompanyStage = normalizeValue(companyStage, companyStageOptions);\n isStageChanged = isFieldChanged(normalizedCompanyStage, selectedStageType);\n }\n\n if (!isStageChanged && !isStageRationaleChanged) {\n additionalCompanyInfoPayload.fieldName = additionalCompanyInfoPayload.fieldName.filter(\n item => item !== 'Stage'\n );\n\n delete (payloadValue as unknown as Dictionary<SelectOption>).Stage;\n delete (additionalCompanyInfoPayload.value as UpdateFieldsPayload).rationale;\n }\n }\n\n if (additionalCompanyInfoPayload.fieldName.includes('Pipeline Rank')) {\n let isRankChanged = false;\n\n if ((payloadValue as unknown as Dictionary<SelectOption>)['Pipeline Rank']) {\n const companyRank = (payloadValue as unknown as Dictionary<SelectOption>)[\n 'Pipeline Rank'\n ];\n const normalizedCompanyRank = normalizeValue(companyRank, companyRankOptions);\n isRankChanged = isFieldChanged(normalizedCompanyRank, selectedRankType);\n }\n\n if (!isRankChanged) {\n additionalCompanyInfoPayload.fieldName = additionalCompanyInfoPayload.fieldName.filter(\n item => item !== 'Pipeline Rank'\n );\n\n delete (payloadValue as unknown as Dictionary<SelectOption>)['Pipeline Rank'];\n }\n }\n\n if (additionalCompanyInfoPayload.fieldName.includes('Company Owner')) {\n let isCompanyOwnerChanged = false;\n\n if ((payloadValue as unknown as Dictionary<SelectOption>)['Company Owner']) {\n const companyOwner = (payloadValue as unknown as Dictionary<SelectOption>)[\n 'Company Owner'\n ];\n const normalizedCompanyOwner = normalizeValue(companyOwner, companyOwnerOptions);\n isCompanyOwnerChanged = isFieldChanged(\n normalizedCompanyOwner,\n selectedCompanyOwnerType,\n true\n );\n }\n\n if (!isCompanyOwnerChanged) {\n additionalCompanyInfoPayload.fieldName = additionalCompanyInfoPayload.fieldName.filter(\n item => item !== 'Company Owner'\n );\n\n delete (payloadValue as unknown as Dictionary<SelectOption>)['Company Owner'];\n }\n }\n\n if (!additionalCompanyInfoPayload.fieldName.length) {\n additionalCompanyInfoPayload = null;\n } else {\n const normalizedValue = payloadValue as unknown as { [key in FieldOptions]: SelectOption };\n let customData: UpdateFieldsPayloadCustomData = {};\n\n if (normalizedValue.Stage) {\n const rationale = (additionalCompanyInfoPayload.value as UpdateFieldsPayload).rationale;\n customData.stage = normalizedValue.Stage.value;\n customData.stage_rationale = rationale;\n }\n\n if (normalizedValue['Pipeline Rank']) {\n customData.rank = normalizedValue['Pipeline Rank'].value;\n }\n\n if (normalizedValue['Company Owner']) {\n customData.deal_team_leader = normalizedValue['Company Owner'].value;\n customData.deal_team_leader_name = normalizedValue['Company Owner'].label;\n }\n\n (additionalCompanyInfoPayload.value as UpdateFieldsPayload) = {\n ...(additionalCompanyInfoPayload.value as UpdateFieldsPayload),\n customData,\n };\n }\n }\n\n if (!additionalFieldsError.error_field) {\n let formValues = { ...values };\n\n if (!isEqual(formInitialValues, formValues)) {\n if (typeof formValues.attendees === 'string' && formValues.attendees !== '') {\n formValues.attendees = [formValues.attendees];\n } else if (typeof formValues.attendees === 'string') {\n formValues.attendees = [];\n }\n\n dispatch(\n modalActions.addTouchToCompany({\n touchInfo: formValues,\n additionalCompanyInfo: additionalCompanyInfoPayload,\n location: location.pathname,\n })\n );\n }\n } else if (additionalCompanyInfoPayload !== null) {\n const payload = {\n ...additionalCompanyInfoPayload,\n canBeDuplicatedLoader: false,\n };\n\n dispatch(editFieldActions.updateFields(payload));\n } else {\n toggle();\n }\n };\n\n useEffect(() => {\n if (isOpen && formRef.current?.values && !isEqual(formRef.current.values, formInitialValues)) {\n formRef.current.resetForm();\n setShouldUpdateToInitial(true);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n return (\n <>\n <Styled.DrawerTouches\n placement={isChromeExtension ? 'bottom' : 'right'}\n onClose={handleModalCancel}\n visible={isOpen}\n className={isChromeExtension ? 'company-touches touch-extension' : 'company-touches'}\n height={isChromeExtension ? 'calc(100% - 60px)' : '100%'}\n width={isChromeExtension ? '640px' : '750px'}\n title={\n <div>\n <TouchModalTitle\n isSaveDisabled={!!additionalFieldsError.error_text}\n handleCancel={handleModalCancel}\n handleSave={handleCreateCompanyTouch}\n />\n </div>\n }\n >\n <div className=\"ant-drawer-body-inner\">\n <Suspense fallback={null}>\n {!isChromeExtension && <CompanyDrawerBanner company={company} />}\n </Suspense>\n <Styled.TouchContainer>\n <Formik\n initialValues={handleInitialValues()}\n enableReinitialize\n onSubmit={handleSubmit}\n validationSchema={validationTouch({\n ebitdaOptions,\n arrOptions,\n gmOptions,\n revenueOptions,\n })}\n validateOnMount={true}\n innerRef={instance => {\n formRef.current = instance;\n }}\n component={formikProps => (\n <Form layout=\"vertical\" style={{ position: 'relative' }}>\n {useAutosave && (\n <LocalStorageAutoSave\n key=\"add-touch-autosave\"\n storageKeyPrefix={ADD_TOUCH_LOCALSTORAGE_KEY_PREFIX}\n companyId={company.company_id}\n loadFromStorage={true}\n />\n )}\n <Suspense fallback={null}>\n <AdditionalCompanyInfo\n shouldUpdateToInitial={shouldUpdateToInitial}\n setUpdateToInitial={setShouldUpdateToInitial}\n setInfoToSave={handleCompanyInfoChange}\n />\n <TouchInformation\n sources={formikProps}\n isChromeExtension={isChromeExtension}\n editTouch={editTouch}\n />\n </Suspense>\n {isOpen && financialsLoaded && (\n <Suspense fallback={null}>\n <TouchPropInfo\n touchFields={touchFields}\n className={isChromeExtension ? 'touch-prop-info--chrome-extension' : ''}\n touchParentType={\n formRef.current?.values.touchType === 'complete'\n ? 'complete'\n : 'scheduled'\n }\n />\n </Suspense>\n )}\n </Form>\n )}\n />\n </Styled.TouchContainer>\n </div>\n </Styled.DrawerTouches>\n {showFormDataErrorMask && <FormErrorMask isChromeExtension={!!isChromeExtension} />}\n </>\n );\n};\n\nexport default React.memo(CompanyTouches);\n","import styled from 'styled-components';\n\nexport const HeaderContent = styled.div`\n display: flex;\n align-items: center;\n height: 100%;\n\n > * {\n white-space: nowrap;\n margin-left: auto;\n }\n`;\n","import styled from 'styled-components';\nimport { Title } from '@optx/shared/view/atoms/Typography';\nimport { Row, Col } from 'antd';\n\nconst SearchGridWrapper = styled(Row)`\n background-color: rgb(240, 242, 245);\n min-height: 66px;\n margin-bottom: 15px;\n`;\n\nconst ControlsWrapper = styled(Col)`\n margin-left: auto;\n\n .ant-btn {\n margin-left: 8px;\n }\n\n .ant-btn-icon-only {\n margin-left: 4px;\n }\n`;\n\nconst PageTitle = styled(Title)`\n h1& {\n max-width: 70%;\n margin: 0 20px 0 0;\n }\n`;\n\nconst PageTitleWrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const StyledSearchGridControls = {\n SearchGridWrapper,\n PageTitleWrapper,\n ControlsWrapper,\n PageTitle,\n};\n","import { Typography } from 'antd';\nimport styled from 'styled-components';\n\nconst ShowingCount = styled(Typography.Text)`\n font-size: 16px;\n color: rgb(137, 151, 177);\n`;\n\nexport const StyledShowingCount = {\n ShowingCount,\n};\n","import React from 'react';\nimport { TextProps } from 'antd/lib/typography/Text';\nimport { StyledShowingCount } from './ShowingCount.styled';\n\nexport { StyledShowingCount };\n\nexport const ShowingCount: React.FC<TextProps> = props => (\n <StyledShowingCount.ShowingCount {...props} />\n);\n\nShowingCount.defaultProps = {\n ellipsis: true,\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { TOGGLE_MY_WATCHLIST_CSV_ERROR_MODAL } from './types';\n\nexport const toggleModal = createAction(TOGGLE_MY_WATCHLIST_CSV_ERROR_MODAL);\n","export const TOGGLE_MY_WATCHLIST_CSV_ERROR_MODAL = 'TOGGLE_MY_WATCHLIST_CSV_ERROR_MODAL';\n","import { AppState } from '@optx/redux/interfaces';\n\nexport const isOpen = (state: AppState) => state.ui.modals.myWatchListCSVError;\n","import { createReducer } from '@reduxjs/toolkit';\nimport { toggleModal } from './actions';\nimport { toggleReducer } from '../../../feature/toggle/reducers';\n\nconst reducer = createReducer(false, builder => builder.addCase(toggleModal, toggleReducer));\n\nexport default reducer;\n","export default __webpack_public_path__ + \"static/media/google-news.f812d00e.png\";","import React from 'react';\nimport styled from 'styled-components';\nimport { Typography } from 'antd';\n// constants\nimport { COMPANY_PAGE_NEWS_FEED_GOOGLE_NEWS, OPTXChromePlugin } from '@constants/pendoActions';\n// utils\nimport { toURL } from '@optx/utils/url';\n// components\nimport Card from '../../../../common/cards';\nimport { ContentLink } from '../../../../common/link';\nimport googleNewsImage from '../../../../../assets/images/google-news.png';\n\ninterface GoogleNewsProps {\n url: string | null;\n}\n\nconst StyledImage = styled.img`\n max-width: 100%;\n margin: auto;\n display: block;\n position: relative;\n @media (min-width: 1700px) {\n max-width: 60%;\n }\n @media (min-width: 1919px) {\n max-width: 50%;\n }\n`;\n\nconst NoNewsTitle = styled(Typography.Text)`\n h4& {\n color: #90a0b7;\n }\n`;\n\nconst ClickHereText = styled(Typography.Text)`\n position: absolute;\n left: 50%;\n top: 80%;\n transform: translateX(-50%);\n color: #90a0b7;\n font-size: 12px;\n max-width: 100%;\n text-align: center;\n`;\n\nconst GoogleNews = ({ url }: GoogleNewsProps) => {\n const handlePendoAction = () => {\n const chromeExtensionExists = document.getElementsByClassName('extension-tabs').length;\n\n if (chromeExtensionExists) {\n window.pendo.track(OPTXChromePlugin.companyPage.news_clickNewsIcon);\n } else {\n window.pendo.track(COMPANY_PAGE_NEWS_FEED_GOOGLE_NEWS);\n }\n };\n\n return (\n <Card\n style={{ minHeight: '150px', margin: '5px' }}\n onClick={() => handlePendoAction()}\n hoverable={!!url}\n >\n {url ? (\n <ContentLink target=\"_blank\" href={toURL(url)}>\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '100%',\n }}\n >\n <StyledImage src={googleNewsImage} alt=\"Google News\" />\n </div>{' '}\n <ClickHereText>Click here to view news about this company</ClickHereText>\n </ContentLink>\n ) : (\n <NoNewsTitle>No Google News</NoNewsTitle>\n )}\n </Card>\n );\n};\n\nexport default GoogleNews;\n","import React from 'react';\nimport { Row, Col } from 'antd';\nimport styled from 'styled-components';\n// models\nimport Company from '@optx/models/Company';\n// constants\nimport { cardRowGutter } from '../../../../../constants/spacing';\n// components\nimport GoogleNews from './GoogleNews';\n\ninterface NewsFeedProps {\n company: Company;\n}\n\nconst GoogleNewsCol = styled(Col)`\n margin-left: auto;\n`;\n\nconst NewsFeed = ({ company }: NewsFeedProps) => (\n <Row gutter={cardRowGutter}>\n <GoogleNewsCol span={24} xl={12}>\n <GoogleNews url={company.links && company.links.GoogleNews} />\n </GoogleNewsCol>\n </Row>\n);\n\nexport default NewsFeed;\n","import { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\nimport { RegionOptions } from '../../../models/user';\n\nexport const fetchRegionOptions = createAction(types.FETCH_REGION_OPTIONS);\n\nexport const fetchRegionOptionsSuccess = createAction<Array<RegionOptions>>(\n types.FETCH_REGION_OPTIONS_SUCCESS\n);\n\nexport const fetchRegionOptionsFail = createAction<string>(types.FETCH_REGION_OPTIONS_FAIL);\n","export const FETCH_REGION_OPTIONS = 'FETCH_REGION_OPTIONS';\nexport const FETCH_REGION_OPTIONS_SUCCESS = 'FETCH_REGION_OPTIONS_SUCCESS';\nexport const FETCH_REGION_OPTIONS_FAIL = 'FETCH_REGION_OPTIONS_FAIL';\n","import { call, put, takeLatest } from 'redux-saga/effects';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { UserService } from '@services/api';\n// redux\nimport { AxiosResponse } from 'axios';\nimport { RegionOptions } from '@optx/models/user';\nimport * as actions from './actions';\n\nexport function* fetchRegionOptionsSaga() {\n try {\n const res: AxiosResponse<RegionOptions[]> = yield call(UserService.getRegionOptions);\n\n if (res.data) {\n yield put(actions.fetchRegionOptionsSuccess(res.data));\n } else {\n const errorMessage = 'Failed to fetch Region Settings!!!';\n yield put(actions.fetchRegionOptionsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (error: any) {\n const errorMessage = 'Failed to fetch Region Settings!!!';\n yield put(actions.fetchRegionOptionsFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* regionSettingsSaga() {\n yield takeLatest(actions.fetchRegionOptions, fetchRegionOptionsSaga);\n}\n","import React from 'react';\n// utils\nimport { formatPercentDefault } from '@utils/format';\n// components\nimport Icon from '@components/common/Icon';\nimport Styled from './TrendingValue.styles';\n\ntype FormatValue = number | null | undefined;\n\ntype TrendingValueProps = React.HTMLAttributes<HTMLSpanElement> & {\n value: number | null;\n format?: (value: FormatValue) => string | FormatValue;\n};\n\ntype TrendingDirection = 'up' | 'down' | 'none';\n\nconst getTrending = (value: number): TrendingDirection => {\n if (value > 0) {\n return 'up';\n }\n\n if (value < 0) {\n return 'down';\n }\n\n return 'none';\n};\n\nconst TrendingValue: React.FC<TrendingValueProps> = ({\n value,\n format = formatPercentDefault,\n ...restProps\n}) => {\n let icon: React.ReactNode | null = null;\n\n if (typeof value !== 'number') {\n return null;\n }\n\n if (value > 0) {\n icon = <Icon iconName=\"trending-up\" />;\n } else if (value < 0) {\n icon = <Icon iconName=\"trending-down\" />;\n }\n\n return (\n <Styled.TrendingValue trending={getTrending(value)} {...restProps}>\n {icon} {format(value)}\n </Styled.TrendingValue>\n );\n};\n\nexport default TrendingValue;\n","import styled from 'styled-components';\n\nconst ScoreTrending = styled.div`\n font-weight: 600;\n text-align: center;\n display: inline-block;\n white-space: nowrap;\n`;\n\nconst GrowthScore = styled.span`\n /* blue-6 */\n color: #1890ff;\n margin: 0 0 0 5px;\n font-size: 1rem;\n`;\n\nconst Label = styled.div`\n /* dark blue */\n color: #334d6e;\n font-size: 1rem;\n`;\n\nexport default {\n ScoreTrending,\n GrowthScore,\n Label,\n};\n","import styled from 'styled-components';\nimport Icon from '@components/common/Icon';\n\nconst EllipsisExpander = styled.button`\n background-color: #eaecef;\n height: 13px;\n border: 0;\n border-radius: 1px;\n color: #444d56;\n display: inline-block;\n font-size: 12px;\n font-weight: 600;\n height: 12px;\n line-height: 6px;\n padding: 0 5px 5px;\n text-decoration: none;\n vertical-align: middle;\n`;\n\nconst StickyNoteIcon = styled(Icon)`\n height: rem-calc(15);\n`;\n\nexport default {\n EllipsisExpander,\n StickyNoteIcon,\n};\n","import React, { useState, useMemo, useEffect } from 'react';\nimport Truncate from 'react-truncate';\nimport { useDispatch } from 'react-redux';\nimport { Select, Row, Col } from 'antd';\nimport { DoubleRightOutlined } from '@ant-design/icons';\n//models\nimport { CompanyProfile } from '@optx/models/Company';\nimport { FieldChangedValue } from '@optx/features/company/audit-trail/state/interfaces';\n// constants\nimport { OPTXChromePlugin, companyPageTop } from '@constants/pendoActions';\n// utils\nimport { mapDescriptionOptions } from '@optx/utils/utils';\n//redux\nimport { actions as CompanyProfileActions } from '@optx/redux/company/profile';\n// hooks\nimport { useToggle } from '@optx/common/hooks/modal';\nimport { useHistoryTab } from '@optx/common/hooks/history';\n// components\nimport PoweredByAITag from '@optx/components/common/powered-by-ai-tag/PoweredByAITag';\nimport { FeedbackMechanism } from '@optx/components/common/feedback-mechanism';\nimport { OverlayLoader } from '@optx/components/common/loader';\nimport Styles from './CompanySourceDescriptions.styles';\n// styles\nimport './styles.scss';\n\ninterface CompanySourceDescriptionsProps {\n company: CompanyProfile;\n}\n\nconst AI_DESCRIPTION_KEY = 'AI';\n\nconst CompanySourceDescriptions: React.FC<CompanySourceDescriptionsProps> = ({ company }) => {\n const { updateHistoryFields } = useHistoryTab();\n const dispatch = useDispatch();\n\n const options = useMemo(() => {\n return mapDescriptionOptions(company.descriptions);\n }, [company.descriptions]);\n\n const [currentValue, setCurrentValue] = useState(\n options.length ? (options[0].value as string) : ''\n );\n\n useEffect(() => {\n setCurrentValue(options.length ? (options[0].value as string) : '');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [company.descriptions]);\n\n const [lines, setLines] = useState<number | false>(6);\n const [isThumbsDown, setIsThumbsDown] = useState(false);\n const [loadingDescription, setLoadingDescription] = useState(false);\n const [isOpen, toggle] = useToggle();\n\n const handleCurrentValue = (value: string) => {\n const chromeExtensionExists = document.getElementsByClassName('extension-tabs').length;\n\n if (chromeExtensionExists) {\n window.pendo.track(OPTXChromePlugin.companyPage.descriptions.description);\n\n if (value === 'Crunchbase (Short)' || value === 'Crunchbase (Long)') {\n const key = value === 'Crunchbase (Short)' ? 'crunchbaseShort' : 'crunchbaseLong';\n\n window.pendo.track(\n OPTXChromePlugin.companyPage.descriptions[\n key as keyof typeof OPTXChromePlugin.companyPage.descriptions\n ]\n );\n } else {\n const key = value\n .replace(/\\s/g, '')\n .split(/\\s+/)\n .map(word => word.charAt(0).toLowerCase() + word.slice(1))\n .join('');\n\n window.pendo.track(\n OPTXChromePlugin.companyPage.descriptions[\n key as keyof typeof OPTXChromePlugin.companyPage.descriptions\n ]\n );\n }\n } else {\n window.pendo.track(companyPageTop.changeDescription);\n }\n\n setCurrentValue(value);\n dispatch(CompanyProfileActions.setSelectedDescription(value));\n };\n\n const saveHistory = (afterValue: string, beforeValue?: string, opinion?: string | null) => {\n updateHistoryFields({\n afterValue,\n beforeValue: beforeValue ?? '',\n opinion: opinion ?? undefined,\n fieldChanged: FieldChangedValue.generatedDescription,\n });\n };\n\n const handleThumbUp = () => {\n dispatch(\n CompanyProfileActions.opinionAiDescription(true, (newValue: string) =>\n saveHistory(newValue, currentValue, 'Positive')\n )\n );\n };\n\n const handleThumbDown = () => {\n setLoadingDescription(true);\n dispatch(\n CompanyProfileActions.opinionAiDescription(false, (newValue: string) => {\n saveHistory(newValue, company.descriptions[currentValue], 'Negative');\n setLoadingDescription(false);\n })\n );\n };\n\n const handleRegenerate = () => {\n setLoadingDescription(true);\n dispatch(\n CompanyProfileActions.regenerateAiDescription((newValue: string) => {\n saveHistory(newValue, company.descriptions[currentValue]);\n setLoadingDescription(false);\n })\n );\n };\n\n const handleToggle = (event: React.MouseEvent) => {\n event.stopPropagation();\n\n if (isOpen) {\n setLines(6);\n } else {\n setLines(false);\n }\n\n toggle();\n };\n\n const isDescriptionAI = useMemo(\n () =>\n currentValue === AI_DESCRIPTION_KEY ||\n (options.length === 1 && options[0].value === AI_DESCRIPTION_KEY),\n [currentValue, options]\n );\n\n if (!options.length) {\n return null;\n }\n\n return (\n <Row className=\"company-source-descriptions\">\n <Row align=\"middle\">\n <Col>\n {options.length === 1 ? (\n <div className=\"company-source-descriptions__no-selection\">{options[0].label}</div>\n ) : (\n <Select\n className=\"ant-select--profile-descriptions\"\n onChange={handleCurrentValue}\n value={currentValue}\n >\n {options.map(option => (\n <Select.Option key={option.value} value={option.value}>\n {option.label}\n </Select.Option>\n ))}\n </Select>\n )}\n </Col>\n {isDescriptionAI && (\n <>\n <Col>\n <PoweredByAITag />\n </Col>\n <Col>\n <FeedbackMechanism\n value={company.is_ai_description_approved}\n isGenerated={currentValue === AI_DESCRIPTION_KEY}\n handleThumbUp={handleThumbUp}\n handleThumbDown={handleThumbDown}\n handleRegenerate={handleRegenerate}\n setIsThumbsDown={setIsThumbsDown}\n />\n </Col>\n </>\n )}\n </Row>\n <Col span={24} className=\"company-source-descriptions__text\" style={{ minWidth: '500px' }}>\n {loadingDescription ? (\n <OverlayLoader isOverlay loading style={{ display: 'flex', justifyContent: 'center' }} />\n ) : (\n <Truncate\n lines={lines}\n ellipsis={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <Styles.EllipsisExpander type=\"button\" className=\"ml-1\" onClick={handleToggle}>\n ...\n </Styles.EllipsisExpander>\n }\n style={{ textDecoration: isThumbsDown ? 'line-through' : 'initial' }}\n >\n {company.descriptions[currentValue]}\n </Truncate>\n )}\n\n {isOpen && !loadingDescription && (\n <Row className=\"justify-content-center cursor-pointer\" onClick={handleToggle}>\n <Col className=\"col-sm-auto\">\n <DoubleRightOutlined style={{ transform: 'rotate(-90deg)', cursor: 'pointer' }} />\n </Col>\n </Row>\n )}\n </Col>\n </Row>\n );\n};\n\nexport default CompanySourceDescriptions;\n","import styled from 'styled-components';\n\nconst FeedbackMechanismWrapper = styled.div`\n display: inline-flex;\n align-items: center;\n min-height: 25px;\n gap: 7px;\n margin-left: 5px;\n\n * {\n color: #d9d9d9;\n }\n\n .thumbs-down {\n position: relative;\n top: 3px;\n width: 22px;\n height: 20px;\n\n .active path {\n fill: #fa541c;\n }\n }\n .thumbs-up {\n position: relative;\n width: 22px;\n height: 20px;\n\n .active path {\n fill: #52c41a;\n }\n }\n .reload {\n position: relative;\n width: 16px;\n height: 16px;\n }\n`;\n\nexport { FeedbackMechanismWrapper };\n","import { useState } from 'react';\nimport { Button } from 'antd';\n// components\nimport Icon from '../Icon';\nimport * as Styles from './FeedbackMechanism.styles';\n\ninterface FeedbackMechanismProps {\n value: boolean | null;\n isGenerated: boolean;\n handleThumbUp: () => void;\n handleThumbDown: () => void;\n handleRegenerate?: () => void;\n setIsThumbsDown?: (state: boolean) => void;\n}\n\nconst FeedbackMechanism: React.FC<FeedbackMechanismProps> = ({\n value,\n isGenerated,\n handleThumbUp,\n handleThumbDown,\n handleRegenerate,\n setIsThumbsDown,\n}) => {\n const [defaultValue, setDefaultValue] = useState<boolean | null>(value || null);\n\n const handleThumbsUp = () => {\n setDefaultValue(true);\n !defaultValue && handleThumbUp && handleThumbUp();\n };\n\n const handleThumbsDown = () => {\n handleThumbDown && handleThumbDown();\n setIsThumbsDown && setIsThumbsDown(true);\n setDefaultValue(false);\n\n setTimeout(() => {\n setDefaultValue(null);\n setIsThumbsDown && setIsThumbsDown(false);\n }, 2000);\n };\n\n const onRegenerateClick = () => {\n setDefaultValue(null);\n handleRegenerate && handleRegenerate();\n };\n\n return (\n <Styles.FeedbackMechanismWrapper>\n {isGenerated && (\n <>\n <Button\n className=\"thumbs-up\"\n type=\"link\"\n disabled={defaultValue === true}\n icon={\n <Icon\n iconName=\"thumbs-up\"\n style={{ fontSize: 20 }}\n className={defaultValue ? 'active' : ''}\n />\n }\n onClick={handleThumbsUp}\n />\n <Button\n className=\"thumbs-down\"\n type=\"link\"\n icon={\n <Icon\n iconName=\"thumbs-down\"\n style={{ fontSize: 20 }}\n className={defaultValue === false ? 'active' : ''}\n />\n }\n onClick={handleThumbsDown}\n />\n </>\n )}\n {handleRegenerate && (\n <Button\n className=\"reload\"\n type=\"link\"\n icon={<Icon iconName=\"reload\" style={{ fontSize: 16 }} />}\n onClick={onRegenerateClick}\n />\n )}\n </Styles.FeedbackMechanismWrapper>\n );\n};\n\nexport default FeedbackMechanism;\n","import React from 'react';\nimport { TooltipProps } from 'recharts';\n// models\nimport { ChartBarItem } from '@optx/models/charts/data';\n// constants\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\n// utils\nimport { roundNumber } from '@optx/utils/number';\n\ninterface BarChartTooltipProps extends TooltipProps {\n data: ChartBarItem[];\n}\n\nconst BarChartTooltip: React.FC<BarChartTooltipProps> = ({ label, data }) => {\n if (!data.length) {\n return null;\n }\n\n const tooltipData = data.find(item => item.x_axis === label);\n\n return (\n <>\n {tooltipData?.round_data &&\n tooltipData?.round_data.map((data, index) => (\n <div key={index} className=\"profile-chart-card__tooltip\">\n <div>Amount: {data.amount ? roundNumber(data.amount, `$${NUMBER_FORMAT}`) : 'N/A'}</div>\n <div>Investors: {data.investors ? data.investors.join('; ') : 'N/A'}</div>\n <div>Round name: {data.round_name || 'N/A'}</div>\n </div>\n ))}\n </>\n );\n};\n\nexport default BarChartTooltip;\n","import React from 'react';\nimport { LabelProps } from 'recharts';\nimport { ChartBarItem } from '@optx/models/charts/data';\n\ninterface BarCustomizedLabelProps extends LabelProps {\n data: ChartBarItem[];\n}\n\nconst BarCustomizedLabel: React.FC<BarCustomizedLabelProps> = props => {\n const { data, width, x, value } = props;\n const tooltipData = data.find(item => item.x_axis === value);\n\n const radius = 13;\n const id = `x${Math.trunc(x as number)}`;\n\n return (\n <>\n {tooltipData?.round_data && tooltipData.total_investment === null && (\n <g>\n <clipPath id={id}>\n <rect x={x} y={92} width={width} height={radius} />\n </clipPath>\n <circle\n cx={(x as number) + (width as number) / 2}\n cy={105}\n r={radius}\n fill=\"#f4ac56\"\n clipPath={`url(#${id})`}\n />\n </g>\n )}\n ;\n </>\n );\n};\n\nexport default BarCustomizedLabel;\n","import React, { useEffect, useState } from 'react';\nimport { Card, Radio } from 'antd';\nimport { ResponsiveContainer, XAxis, YAxis, Tooltip, BarChart, Bar, LabelList } from 'recharts';\n// models\nimport {\n ChartBarIntervalKeys,\n ChartBarItem,\n ChartBars,\n ChartBarExtra,\n} from '@optx/models/charts/data';\nimport { RadioChangeEvent } from 'antd/lib/radio';\n// constants\nimport { NUMBER_FORMAT } from '@optx/constants/format/number';\nimport { CompanyPageOverviewPendo } from '@optx/constants/pendoActions';\n// utils\nimport { roundNumber } from '@optx/utils/number';\n// components\nimport { MinimumSizeBar } from '@optx/components/common/charts/components';\nimport KeyPerformanceIndicator from '../../common/Text/KeyPerformanceIndicator';\nimport EmptyChart from './EmptyChart';\nimport BarChartTooltip from './BarChartTooltip';\n// styles\nimport Styles from './ChartHeader.style';\nimport BarCustomizedLabel from './BarCustomizedLabel';\n\ninterface BarChartIntervalsProps {\n data: ChartBars;\n isLoading?: boolean;\n title: string;\n dataKey: string;\n label: string;\n extra?: Array<ChartBarExtra>;\n emptyText?: string;\n className?: string;\n}\n\nconst BarChartIntervals: React.FC<BarChartIntervalsProps> = ({\n data,\n isLoading = false,\n title,\n dataKey,\n label,\n extra,\n emptyText,\n className,\n}) => {\n const keys = Object.keys(data).map(key => key);\n const lastKey = keys[keys.length - 1] as ChartBarIntervalKeys;\n const [interval, setInterval] = useState('');\n const [chartPoints, setChartPoints] = useState<ChartBarItem[]>([]);\n const [tooltipVisibility, setTooltipVisibility] = useState(false);\n\n const handleSizeChange = (e: RadioChangeEvent) => {\n const key = e.target.value as ChartBarIntervalKeys;\n setInterval(() => key);\n setChartPoints(data[key]?.data || []);\n };\n\n useEffect(() => {\n if (data[lastKey].data.length) {\n setInterval(() => lastKey);\n setChartPoints(data[lastKey].data);\n } else {\n setChartPoints(data[lastKey].data);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n const handleActionPendo = (action: keyof typeof CompanyPageOverviewPendo) => {\n if (CompanyPageOverviewPendo[action]) {\n window.pendo.track(CompanyPageOverviewPendo[action]);\n }\n };\n\n const header = (\n <Styles.ChartHeaderWrapper>\n <Styles.ChartTitleWrapper>{title}</Styles.ChartTitleWrapper>\n <Radio.Group value={interval} onChange={handleSizeChange}>\n {Object.keys(data).map((key, index) => (\n <Radio.Button\n key={index}\n value={key}\n onClick={() =>\n handleActionPendo(`fundingRounds${key}` as keyof typeof CompanyPageOverviewPendo)\n }\n >\n {key}\n </Radio.Button>\n ))}\n </Radio.Group>\n </Styles.ChartHeaderWrapper>\n );\n\n const extraContent = (\n <>\n <div>\n {extra!.map((item, index) => {\n if (item.format) {\n if (item.value === 'Unknown') {\n return (\n <KeyPerformanceIndicator\n key={index}\n label={item.label || ''}\n value={item.value || ''}\n />\n );\n }\n\n return (\n <KeyPerformanceIndicator\n key={index}\n label={item.label || ''}\n value={item.value || ''}\n formatValue={val => roundNumber(val, `$${NUMBER_FORMAT}`).toUpperCase()}\n />\n );\n }\n\n return (\n <KeyPerformanceIndicator\n key={index}\n label={item.label || ''}\n value={item.value || ''}\n />\n );\n })}\n </div>\n </>\n );\n\n return (\n <Card title={header} extra={extraContent} className={`profile-chart-card extra ${className}`}>\n {isLoading ? (\n <Styles.LoadingIconWrapper>\n <Styles.LoadingIcon />\n </Styles.LoadingIconWrapper>\n ) : (\n <div\n className=\"profile-chart-card__container\"\n onMouseEnter={() => setTooltipVisibility(true)}\n onMouseLeave={() => setTooltipVisibility(false)}\n >\n <ResponsiveContainer>\n <BarChart data={chartPoints} margin={{ top: 5 }}>\n <XAxis\n dataKey={label}\n tickLine={false}\n stroke=\"#C2CFE0\"\n tickSize={15}\n interval=\"preserveStartEnd\"\n padding={{ left: 0, right: 0 }}\n />\n <YAxis\n orientation=\"right\"\n tickCount={2}\n tickMargin={10}\n tickLine={false}\n axisLine={false}\n stroke=\"#C2CFE0\"\n tickFormatter={val => roundNumber(val, '$0,0a').toUpperCase()}\n />\n <Tooltip\n wrapperStyle={{\n visibility: `${tooltipVisibility ? 'visible' : 'hidden'}`,\n zIndex: '3',\n }}\n content={<BarChartTooltip data={chartPoints} />}\n cursor={{ fill: 'rgba(0,0,0,0)' }}\n />\n <Bar dataKey={dataKey} fill=\"#1890FF\" shape={MinimumSizeBar}>\n <LabelList dataKey={label} content={<BarCustomizedLabel data={chartPoints} />} />\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n {!chartPoints.length && <EmptyChart text={emptyText} />}\n </div>\n )}\n </Card>\n );\n};\n\nexport default BarChartIntervals;\n","import styled from 'styled-components';\nimport { Modal } from 'antd';\n\nconst ModalWrapper = styled(Modal)`\n .ant-modal-header {\n padding-top: 10px;\n padding-bottom: 10px;\n }\n\n .ant-modal-title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .btn--open-company-tag {\n margin-right: 30px;\n }\n\n .ant-modal-close {\n top: 4px;\n }\n\n .ant-modal-body {\n div:nth-child(1) {\n margin-bottom: 20px;\n }\n\n div:nth-child(2) {\n margin-bottom: 10px;\n }\n }\n`;\n\nexport const Styled = {\n ModalWrapper,\n};\n","import React, { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Tag, Button, Radio } from 'antd';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport { useLocation } from 'react-router-dom';\nimport queryString from 'query-string';\n// models\nimport { CompanyProfile } from '@optx/models/Company';\n// constants\nimport { CompanyProfileTabs } from '@optx/constants/routes';\n// services\nimport { UserService } from '@optx/services/api';\n// redux\nimport { actions as editFieldActions } from '@optx/features/company/edit-fields/state';\nimport { selectors as userSelectors } from '@redux/user/information';\n// styles\nimport { Styled } from './EditParentCompanyInfluence.styled';\n\ntype EditParentCompanyInfluenceProps = {\n company: CompanyProfile;\n handleParentCompanyClick: () => void;\n};\n\nconst EditParentCompanyInfluence: React.FC<EditParentCompanyInfluenceProps> = ({\n company,\n handleParentCompanyClick,\n}) => {\n const dispatch = useDispatch();\n const location = useLocation();\n const {\n use_parent_company: initialValue,\n company_id: companyId,\n parentcompany: parentCompanyName,\n company_name: companyName,\n } = company;\n const { tab } = queryString.parse(location.search);\n const [open, setOpen] = useState(false);\n const [radioValue, setRadioValue] = useState<boolean>(initialValue as boolean);\n\n const defautlOptxScore = useSelector(userSelectors.getDefaultScore);\n\n const handleOk = () => {\n const payload = {\n companyId,\n value: radioValue,\n successMessage: 'Parent company influence successfully updated',\n errorMessage: 'Error updating parent company influence!',\n };\n dispatch(\n editFieldActions.updateFields({\n companyUrl: company?.company_url,\n companyId: company.company_id,\n value: payload,\n service: UserService.updateCompanyUserValues,\n fieldName: 'Use Parent Company',\n isFromHistory: tab === CompanyProfileTabs.HISTORY,\n })\n );\n setOpen(false);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleOpen = () => {\n setOpen(true);\n setRadioValue(initialValue);\n };\n\n const onChange = (e: RadioChangeEvent) => {\n setRadioValue(e.target.value);\n };\n\n useEffect(() => {\n setRadioValue(initialValue as boolean);\n }, [initialValue]);\n\n const label = (\n <>\n Parent Company\n {parentCompanyName !== 'unknown' && (\n <Button\n className=\"btn--open-company-tag\"\n type=\"primary\"\n ghost\n onClick={handleParentCompanyClick}\n size=\"large\"\n >\n View Parent Company\n </Button>\n )}\n </>\n );\n\n return (\n <>\n <Tag color=\"red\" onClick={handleOpen} role=\"presentation\">\n Parent Company: {parentCompanyName}\n </Tag>\n <Styled.ModalWrapper\n title={label}\n visible={open}\n onCancel={handleClose}\n onOk={handleOk}\n okText=\"Save\"\n okButtonProps={{ disabled: radioValue === initialValue }}\n width={720}\n >\n <div>\n <b>"{parentCompanyName}"</b> is listed as the parent company for{' '}\n <b>"{companyName}"</b>\n </div>\n <div>\n {`Should this relationship affect the ${\n defautlOptxScore === 'il' ? 'IL OPTX Score' : 'OPTX Score'\n } and set it to 0?`}\n </div>\n <Radio.Group\n onChange={onChange}\n value={radioValue}\n className=\"popover-radio ant-popover-content-wrapper\"\n >\n <Radio value>Yes</Radio>\n <Radio value={false}>No</Radio>\n </Radio.Group>\n </Styled.ModalWrapper>\n </>\n );\n};\n\nexport default React.memo(EditParentCompanyInfluence);\n","import React from 'react';\nimport styled from 'styled-components';\nimport { GlobalOutlined } from '@ant-design/icons';\n// models\nimport { URLStatus } from '@optx/models/Company';\nimport { Cell } from '@optx/models/table/Cell';\n\ninterface TableCellCompanyURLProps {\n raw_url: string | null;\n urlStatus: URLStatus;\n}\n\nconst CompanyLink = styled.a`\n color: #c2cfe0;\n font-size: 22px;\n line-height: 1;\n\n &.not-active {\n color: red;\n }\n\n > svg {\n width: auto;\n height: auto;\n }\n`;\n\nconst TableCellCompanyURL: React.FC<Cell<TableCellCompanyURLProps>> = ({\n record: { raw_url: url, urlStatus },\n}) => {\n return (\n <>\n {url && (\n <CompanyLink\n href={url}\n title={url}\n className={urlStatus === 'active' ? undefined : 'not-active'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <GlobalOutlined />\n </CompanyLink>\n )}\n </>\n );\n};\n\nexport default TableCellCompanyURL;\n","/* eslint-disable no-nested-ternary */\nimport React, { useState, useEffect } from 'react';\nimport { Col, Row, Tag } from 'antd';\nimport { GlobalOutlined } from '@ant-design/icons';\nimport { useLocation } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n// models\nimport { Company } from '@models/Company';\nimport { ChartBarIntervalKeys } from '@optx/models/charts/data';\n// consts\nimport { DEFAULT_EMPTY_VALUE } from '@constants/value';\n// utils\nimport { getCompanyAddress, getIsPsgCompany } from '@utils/company';\nimport { formatLastTouch } from '@utils/touches';\nimport { abbreviateValue } from '@optx/utils/number';\n// redux\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as userSelectors } from '@redux/user/information';\n// hooks\nimport useReferrerProfileLink from '@hooks/useReferrerLink';\n// components\nimport { IconCompany, IconLocation } from '@components/icons';\nimport Icon from '@components/common/Icon/Icon';\nimport { ScoreTrending } from '@components/common/trending';\nimport { CompanyTagsOverflow, ListTagsOverflow } from '@optx/features/tags/overflow-tags';\nimport IsraelFlag from '@optx/assets/images/flags/israel_flag.jpg';\nimport { TrendingLine } from '@optx/components/common/charts';\nimport Styled from './LongCardView.styled';\n\ninterface CompanyCardProps {\n company: Company;\n newTab?: boolean;\n}\n\nconst LongCard: React.FC<CompanyCardProps> = ({ company, newTab }) => {\n const [period, setPeriod] = useState<ChartBarIntervalKeys>('1Y');\n const { pathname } = useLocation();\n const myCompaniesTrending = useSelector(searchSelectors.getTrending('myCompanies'));\n const sourcingOutReachTrending = useSelector(searchSelectors.getTrending('outreachDetails'));\n const searchTrending = useSelector(searchSelectors.getTrending('advancedSearch'));\n const watchlistTrending = useSelector(searchSelectors.getTrending('lists'));\n const defautlOptxScore = useSelector(userSelectors.getDefaultScore);\n const urlStatus = company.url_status === 'active';\n\n const companyWatchLists =\n company.et_watchlists && company.regular_watchlists\n ? [...company.et_watchlists, ...company.regular_watchlists]\n : company.et_watchlists\n ? company.et_watchlists\n : company.regular_watchlists;\n\n const { referrerUrl } = useReferrerProfileLink(company.company_id);\n\n useEffect(() => {\n if (pathname.startsWith('/user-lists') || pathname.startsWith('/ss-lists')) {\n setPeriod(watchlistTrending);\n } else if (pathname.startsWith('/my-companies')) {\n setPeriod(myCompaniesTrending);\n } else if (pathname.startsWith('/all-reports')) {\n setPeriod(sourcingOutReachTrending);\n } else {\n setPeriod(searchTrending);\n }\n }, [myCompaniesTrending, pathname, searchTrending, sourcingOutReachTrending, watchlistTrending]);\n\n const address = getCompanyAddress(company, DEFAULT_EMPTY_VALUE);\n\n return (\n <Row style={{ padding: '16px 16px', height: '162px' }}>\n <Styled.LogoColumn>\n <Styled.ImageWrapper>\n {/* When there is no image, the logo returns - instead of null. */}\n {company.logo_url === DEFAULT_EMPTY_VALUE || !company.logo_url ? (\n <IconCompany />\n ) : (\n <img src={company.logo_url} alt={company.company_name} />\n )}\n </Styled.ImageWrapper>\n <Styled.ScoreTrendingWrapper>\n {defautlOptxScore === 'il' ? (\n <ScoreTrending\n score={company.il_optx_score}\n growth={\n isNaN(parseInt(company.il_score_growth as string))\n ? null\n : Number(company.il_score_growth)\n }\n label=\"IL OPTX SCORE\"\n isPSGCompany={getIsPsgCompany(company)}\n isLongCardView={true}\n />\n ) : (\n <ScoreTrending\n score={company.score}\n growth={\n isNaN(parseInt(company.score_growth as string))\n ? null\n : Number(company.score_growth)\n }\n label=\"OPTX SCORE\"\n isPSGCompany={getIsPsgCompany(company)}\n isLongCardView={true}\n />\n )}\n {!getIsPsgCompany(company) && company?.optx_score_trends && (\n <TrendingLine\n points={company?.optx_score_trends[period]}\n color=\"#1890FF\"\n viewBoxWidth={70}\n svgWidth={70}\n />\n )}\n </Styled.ScoreTrendingWrapper>\n </Styled.LogoColumn>\n <Col style={{ width: 'calc(100% - 79px' }}>\n <Row gutter={[8, 0]}>\n <Col style={{ width: 'calc(100% - 218px' }}>\n <Styled.CompanyNameWrapper>\n <Styled.CompanyName ellipsis>{company.company_name}</Styled.CompanyName>\n {company.is_in_israel && (\n <Styled.IsraelFlagImg\n src={IsraelFlag}\n alt=\"Israel\"\n style={{ borderRadius: 4, marginLeft: '5px', maxWidth: '32px' }}\n />\n )}\n {company.raw_url && (\n <Styled.WebsiteIcon\n href={company.raw_url}\n title={company.raw_url}\n className={urlStatus ? undefined : 'not-active'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <GlobalOutlined />\n </Styled.WebsiteIcon>\n )}\n <Styled.CompanyProfileLink to={referrerUrl} target=\"_blank\">\n <Icon\n style={{ marginBottom: company.is_in_israel ? '5px' : '0px' }}\n iconName=\"open-in-new\"\n />\n </Styled.CompanyProfileLink>\n </Styled.CompanyNameWrapper>\n <Styled.CompanyDetailsWrapper>\n {address && address !== '-' && (\n <Styled.CompanyLocation ellipsis>\n <IconLocation />\n {address}\n </Styled.CompanyLocation>\n )}\n {company.year_founded !== '-' && (\n <Styled.CompanyDetails type=\"secondary\">\n <Styled.YearLabel strong>Year Founded:</Styled.YearLabel>{' '}\n <Styled.YearValue>{company.year_founded}</Styled.YearValue>\n </Styled.CompanyDetails>\n )}\n </Styled.CompanyDetailsWrapper>\n </Col>\n <Col style={{ width: '218px' }}>\n <Row style={{ flexFlow: 'row nowrap' }}>\n <Styled.CenteredColumn xs={20} lg={5}>\n <Styled.DateValue>{formatLastTouch(company.last_touch_date)}</Styled.DateValue>\n <Styled.Label>LAST TOUCH</Styled.Label>\n </Styled.CenteredColumn>\n <Styled.EmployeeColumn>\n <Styled.Value>{abbreviateValue(company.num_employees)}</Styled.Value>\n <Styled.Label># OF EMPLOYEES</Styled.Label>\n {company?.employee_count_trends && (\n <Styled.EmployeeChart>\n <TrendingLine\n points={company?.employee_count_trends[period]}\n color=\"#52C41A\"\n viewBoxWidth={100}\n svgWidth={100}\n />\n </Styled.EmployeeChart>\n )}\n </Styled.EmployeeColumn>\n </Row>\n </Col>\n </Row>\n <Row>\n <Styled.Description>{company.company_description}</Styled.Description>\n </Row>\n <Row>\n <Col>\n {!company.source_tag.includes('et') && !company.is_in_et ? (\n <Tag color=\"gray\">Not in ET</Tag>\n ) : (\n <Tag color=\"green\">In ET</Tag>\n )}\n </Col>\n <Col style={{ flex: '1' }}>\n <Row>\n <Col span={16}>\n <CompanyTagsOverflow company={company} isNewTab={newTab} />\n </Col>\n <Col span={8}>\n <ListTagsOverflow tags={companyWatchLists} />\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n </Row>\n );\n};\n\nexport default LongCard;\n","import styled from 'styled-components';\nimport { Form } from 'formik-antd';\nimport { Menu } from 'antd';\n\nconst FormWrapper = styled(Form)`\n .ant-form-item {\n width: 50%;\n }\n`;\n\nconst MenuWrapper = styled(Menu)`\n button {\n display: flex;\n width: 100%;\n }\n`;\n\nconst Styles = {\n FormWrapper,\n MenuWrapper,\n};\n\nexport default Styles;\n","import React, { useState, useMemo, useEffect, useRef } from 'react';\nimport { Radio, Row, Typography, Col, Button } from 'antd';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport classnames from 'classnames';\n// models\nimport { AppState } from '@optx/redux/interfaces';\nimport { CompanyProfile, Company } from '@optx/models/Company';\nimport { ChartBarIntervalKeys } from '@optx/models/charts/data';\nimport { CompanyFormRationale } from '@models/filters';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport { ADVANCED_SEARCH, MY_COMPANIES_PENDO } from '@optx/constants/pendoAction';\n// utils\nimport {\n getRationaleDefaultValue,\n getRangeValues,\n getValuesRalation,\n getRange,\n} from '@optx/utils/researchRationale';\nimport { sendPendoData } from '@optx/utils/utils';\n// redux\nimport { getFormRationales } from '@optx/redux/company/filters/selectors';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { sendOptxScoreRationale } from '@redux/company/score/actions';\nimport { selectors as userSelectors } from '@redux/user/information';\n// hooks\nimport { useOnClickOutside } from '@optx/common/hooks/useOnClickOutside';\nimport useCurrentGridName from '@optx/common/hooks/useCurrentGridName';\n// components\nimport { TrendingLine } from '@optx/components/common/charts';\nimport { ScoreTrending } from '@optx/components/common/trending';\nimport EditPopover from '@optx/components/common/popover/EditPopover';\nimport CreateOtherRaionale from '@optx/features/company/edit-fields/components/CreateOtherRationale';\nimport { ReactComponent as LogoIcon } from '../../../../assets/svg/icons/logo.svg';\n// styles\nimport Styled from './EditFieldOPTX.styled';\n\nconst getRationaleReasonKey = (rationaleValue: string, score: number) => {\n const rangeValues = getRangeValues(rationaleValue);\n\n let scoreTransformed;\n\n if (typeof score !== 'number') {\n scoreTransformed = 'N/A';\n } else {\n scoreTransformed = score;\n }\n\n const scoreValuesRelation =\n typeof scoreTransformed !== 'string'\n ? getValuesRalation(rangeValues, score as number)\n : 'upper';\n\n return (\n // eslint-disable-next-line no-nested-ternary\n scoreValuesRelation === 'lower'\n ? 'optx_score_lower_rationales'\n : scoreValuesRelation === 'upper'\n ? 'optx_score_upper_rationales'\n : null\n );\n};\n\ninterface EditFieldOPTXProps {\n record: Company | CompanyProfile;\n children: React.ReactNode;\n isFromGrid?: boolean;\n}\n\nconst EditFieldOPTX: React.FC<EditFieldOPTXProps> = ({ record, children, isFromGrid }) => {\n const dispatch = useDispatch();\n const [closePopup, setClosePopup] = useState(false);\n\n const [period, setPeriod] = useState<ChartBarIntervalKeys>('1Y');\n const { pathname } = useLocation();\n const currentGridName = useCurrentGridName();\n const myCompaniesTrending = useSelector(searchSelectors.getTrending('myCompanies'));\n const searchTrending = useSelector(searchSelectors.getTrending('advancedSearch'));\n const watchlistTrending = useSelector(searchSelectors.getTrending('lists'));\n const popoverContentRef = useRef(null);\n const defautlOptxScore = useSelector(userSelectors.getDefaultScore);\n const score = defautlOptxScore === 'il' ? record.il_optx_score : record.score;\n const title = defautlOptxScore === 'il' ? 'IL OPTX Score' : 'OPTX Score';\n const defaultRationaleScore =\n defautlOptxScore === 'us' ? record.optx_score_rationale : record.il_optx_score_rationale;\n const defaultRationaleScoreReasonType =\n defautlOptxScore === 'us'\n ? record.optx_score_rationale_reason_type\n : record.il_optx_score_rationale_reason_type;\n const defaultScoreVerified =\n defautlOptxScore === 'us' ? record.optx_score_verified : record.il_optx_score_verified;\n const defaultRationaleReasonValue =\n defautlOptxScore === 'us'\n ? record.optx_score_rationale_reason\n : record.il_optx_score_rationale_reason;\n\n const [radioValue, setRadioValue] = useState<boolean | undefined>(undefined);\n const [rationaleValue, setRationaleValue] = useState<string>(defaultRationaleScore as string);\n const [rationaleReasonValue, setRationaleReasonValue] = useState<string | null>(\n defaultRationaleReasonValue\n );\n\n const [rationaleReasonKey, setRationaleReasonKey] = useState<CompanyFormRationale | null>(null);\n const [disabledRange, setDisabledRange] = useState('none');\n const [isOptionsDisabled, setIsOptionsDisabled] = useState(false);\n\n const isSaveBtnDisabled = useMemo(() => {\n if (\n !radioValue &&\n (rationaleValue === undefined ||\n (rationaleValue === defaultRationaleScore &&\n rationaleReasonValue === defaultRationaleReasonValue))\n ) {\n return true;\n } else {\n return false;\n }\n }, [\n radioValue,\n rationaleValue,\n defaultRationaleScore,\n rationaleReasonValue,\n defaultRationaleReasonValue,\n ]);\n\n const rationaleOptions = useSelector((state: AppState) =>\n getFormRationales(state, 'optx_score_rationales')\n );\n\n const rationaleReasonOptions = useSelector((state: AppState) => {\n if (!rationaleReasonKey) {\n return null;\n }\n\n return getFormRationales(state, rationaleReasonKey);\n });\n\n useEffect(() => {\n setRationaleValue(defaultRationaleScore as string);\n }, [defaultRationaleScore]);\n\n useEffect(() => {\n setRadioValue(defaultScoreVerified === null ? undefined : defaultScoreVerified);\n }, [defaultScoreVerified]);\n\n useEffect(() => {\n setRationaleReasonValue(defaultRationaleReasonValue);\n }, [defaultRationaleReasonValue]);\n\n useEffect(() => {\n let reasonKey =\n // eslint-disable-next-line no-nested-ternary\n defaultRationaleScoreReasonType === 'lower'\n ? 'optx_score_lower_rationales'\n : defaultRationaleScoreReasonType === 'upper'\n ? 'optx_score_upper_rationales'\n : null;\n\n if (reasonKey === null && typeof rationaleValue === 'string') {\n reasonKey = getRationaleReasonKey(rationaleValue, score);\n }\n\n setRationaleReasonKey(reasonKey as CompanyFormRationale | null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultRationaleScoreReasonType]);\n\n const growth = () => {\n if (defautlOptxScore === 'il') {\n const ilScoreGrowth = (record as CompanyProfile).il_score_growth as string;\n\n return isNaN(parseInt(ilScoreGrowth ?? ''))\n ? null\n : Number((record as CompanyProfile).il_score_growth);\n }\n\n if (Object.prototype.hasOwnProperty.call(record, 'optx_score_growth')) {\n return (record as CompanyProfile).optx_score_growth;\n }\n\n if (Object.prototype.hasOwnProperty.call(record, 'score_growth')) {\n return isNaN(parseInt((record as Company).score_growth ?? ''))\n ? null\n : Number((record as Company).score_growth);\n }\n\n return null;\n };\n\n const showIsOtherOrTag = (key?: string) => {\n const values = rationaleReasonOptions?.map(option => option.value).slice(0, -1) || [];\n\n if (key === 'tag') {\n return (\n defaultRationaleReasonValue &&\n defaultRationaleReasonValue !== DEFAULT_EMPTY_VALUE &&\n defaultRationaleReasonValue !== null &&\n !values.includes(defaultRationaleReasonValue)\n );\n }\n\n if (!rationaleReasonValue) {\n return false;\n }\n\n return (\n !values.includes(rationaleReasonValue) &&\n rationaleReasonValue !== undefined &&\n rationaleReasonValue !== DEFAULT_EMPTY_VALUE &&\n rationaleReasonValue.length > 0\n );\n };\n\n const customRationaleReasonValue = showIsOtherOrTag() ? 'other' : rationaleReasonValue;\n\n const handlePendoActionCallBack = () => {\n if (currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_EditOPTXScore_${radioValue ? 'ThumbsUp' : 'ThumbsDown'}`);\n sendPendoData(`${ADVANCED_SEARCH}_EditOPTXScore_Save`);\n } else if (currentGridName === 'My Companies') {\n sendPendoData(\n `${MY_COMPANIES_PENDO}_EditOPTXScore_${radioValue ? 'ThumbsUp' : 'ThumbsDown'}`\n );\n sendPendoData(`${MY_COMPANIES_PENDO}_EditOPTXScore_Save`);\n }\n };\n\n const onChange = (e: RadioChangeEvent) => {\n setRadioValue(e.target.value);\n };\n\n const handleRationaleChange = (e: RadioChangeEvent) => {\n const reasonKey = getRationaleReasonKey(e.target.value, score);\n\n setRationaleReasonKey(reasonKey);\n\n setRationaleValue(e.target.value);\n setRationaleReasonValue(null);\n };\n\n const handleRationaleReasonChange = (e: RadioChangeEvent) => {\n setRationaleReasonValue(e.target.value);\n };\n\n const handlePendoAction = () => {\n if (currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_EditOPTXScore`);\n }\n };\n\n const handleSave = () => {\n const rationaleReasonKeyTransformed =\n // eslint-disable-next-line no-nested-ternary\n rationaleReasonKey === 'optx_score_upper_rationales'\n ? 'upper'\n : rationaleReasonKey === 'optx_score_lower_rationales'\n ? 'lower'\n : null;\n\n dispatch(\n sendOptxScoreRationale({\n companyId: record.company_id,\n rationale: !radioValue ? rationaleValue : DEFAULT_EMPTY_VALUE,\n optxScoreVerified: radioValue === undefined ? null : radioValue,\n optxScoreRationaleReason: radioValue === true ? '' : rationaleReasonValue,\n optxScoreRationaleReasonType: radioValue === true ? '' : rationaleReasonKeyTransformed,\n scoreType: defautlOptxScore === 'il' ? 'il_score' : 'score',\n callback: handlePendoActionCallBack,\n })\n );\n\n setClosePopup(true);\n };\n\n const handleOtherChange = (option: React.SetStateAction<string | null>) => {\n setRationaleReasonValue(option);\n };\n\n const handleCancel = () => {\n setRadioValue(defaultScoreVerified !== null ? defaultScoreVerified : undefined);\n setRationaleValue(defaultRationaleScore as string);\n\n let reasonKey =\n // eslint-disable-next-line no-nested-ternary\n defaultRationaleScoreReasonType === 'lower'\n ? 'optx_score_lower_rationales'\n : defaultRationaleScoreReasonType === 'upper'\n ? 'optx_score_upper_rationales'\n : null;\n\n if (reasonKey === null && typeof defaultRationaleScore === 'string') {\n reasonKey = getRationaleReasonKey(defaultRationaleScore, score);\n }\n\n if (currentGridName === 'Advanced Search') {\n sendPendoData(`${ADVANCED_SEARCH}_EditOPTXScore_Cancel`);\n } else if (currentGridName === 'My Companies') {\n sendPendoData(`${MY_COMPANIES_PENDO}_EditOPTXScore_Cancel`);\n }\n\n setRationaleReasonKey(reasonKey as CompanyFormRationale | null);\n setRationaleReasonValue(defaultRationaleReasonValue);\n setClosePopup(true);\n };\n\n useOnClickOutside(popoverContentRef, handleCancel);\n\n useEffect(() => {\n if (pathname.startsWith('/user-lists') || pathname.startsWith('/ss-lists')) {\n setPeriod(watchlistTrending);\n } else if (pathname.startsWith('/my-companies')) {\n setPeriod(myCompaniesTrending);\n } else {\n setPeriod(searchTrending);\n }\n }, [myCompaniesTrending, pathname, searchTrending, watchlistTrending]);\n\n useEffect(() => {\n const rangeValues =\n rationaleValue && rationaleValue.length > 1 ? getRangeValues(rationaleValue) : null;\n\n if (typeof score !== 'number') {\n setDisabledRange('none');\n } else {\n setDisabledRange(getRange(score));\n }\n\n if (\n rangeValues &&\n typeof score === 'number' &&\n getValuesRalation(rangeValues, score) === 'equal'\n ) {\n setIsOptionsDisabled(true);\n } else {\n setIsOptionsDisabled(false);\n }\n }, [score, rationaleValue]);\n\n const handleDropdownKeyEvent = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n handleSave();\n }\n };\n\n const content = (\n <Styled.ContentContainer\n ref={popoverContentRef}\n onKeyDown={handleDropdownKeyEvent}\n tabIndex={0}\n >\n <Row>\n <Styled.ScoreContainer>\n <LogoIcon className=\"navigation-logo__icon\" />\n {defautlOptxScore === 'il' && record?.il_optx_score_trends !== null ? (\n <TrendingLine points={record?.il_optx_score_trends[period]} color=\"#52C41A\" />\n ) : null}\n {defautlOptxScore !== 'il' && record?.optx_score_trends !== null ? (\n <TrendingLine points={record?.optx_score_trends[period]} color=\"#52C41A\" />\n ) : null}\n <ScoreTrending\n score={typeof score !== 'number' ? 'N/A' : score}\n growth={growth()}\n isPSGCompany={record.is_psg_company}\n customFontSize=\"16px\"\n />\n </Styled.ScoreContainer>\n </Row>\n <Row className=\"profile-information__subtitle\">\n <Typography.Text>Do you agree with the score?</Typography.Text>\n <Radio.Group\n onChange={onChange}\n value={radioValue}\n className=\"d-flex\"\n style={{ gap: '5px', marginTop: '15px' }}\n >\n <Styled.RadioButton\n value\n className=\"d-block\"\n style={{ borderColor: '#52C41A' }}\n checked={radioValue}\n >\n <Styled.ThumbsUpIcon\n iconName=\"thumbs-up\"\n className=\"icon\"\n color=\"#F5222D\"\n checked={radioValue}\n />\n </Styled.RadioButton>\n <Styled.RadioButton value={false} style={{ borderColor: '#F5222D' }} checked={radioValue}>\n <Styled.ThumbsDownIcon iconName=\"thumbs-down\" className=\"icon\" checked={radioValue} />\n </Styled.RadioButton>\n </Radio.Group>\n </Row>\n {radioValue === false && (\n <div>\n <Row className=\"profile-information__subtitle flex-column\">\n <Typography.Text>What score would you assign?</Typography.Text>\n </Row>\n <Row>\n <Styled.CustomRadioGroup\n buttonStyle=\"solid\"\n onChange={handleRationaleChange}\n value={rationaleValue}\n columns={rationaleOptions?.length || 0}\n >\n {rationaleOptions?.map(option => (\n <Col\n key={option.value}\n style={{ textAlign: 'center', marginTop: 10, flexDirection: 'column' }}\n >\n <Styled.CustomRadio\n disabled={option.value === disabledRange}\n value={option.value}\n >\n {option.label}\n </Styled.CustomRadio>\n </Col>\n ))}\n </Styled.CustomRadioGroup>\n </Row>\n {rationaleReasonKey && rationaleReasonOptions && (\n <>\n <Row className=\"profile-information__subtitle\">\n <Typography.Text>\n {rationaleReasonKey.includes('upper')\n ? 'Why score should be higher? (optional)'\n : 'Why score should be lower? (optional)'}\n </Typography.Text>\n </Row>\n <Radio.Group\n disabled={isOptionsDisabled}\n buttonStyle=\"solid\"\n onChange={handleRationaleReasonChange}\n value={customRationaleReasonValue}\n >\n {rationaleReasonOptions?.map(option => (\n <Col\n key={option.value}\n style={{ textAlign: 'center', marginTop: 10, padding: 0 }}\n >\n <Radio.Button value={option.value}>{option.label}</Radio.Button>\n </Col>\n ))}\n </Radio.Group>\n {showIsOtherOrTag() && (\n <Row style={{ marginTop: 20, padding: 0, flexDirection: 'column' }}>\n <Typography.Text>Please Explain</Typography.Text>\n <CreateOtherRaionale\n onInputChange={handleOtherChange}\n isDisabled={isOptionsDisabled}\n />\n {showIsOtherOrTag('tag') && (\n <Styled.Tag color=\"blue\">{defaultRationaleReasonValue}</Styled.Tag>\n )}\n </Row>\n )}\n </>\n )}\n </div>\n )}\n <div className=\"profile-information__popover-buttons\">\n <Button className=\"profile-information__cancel\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n className=\"profile-information__save\"\n type=\"primary\"\n onClick={handleSave}\n disabled={\n radioValue\n ? radioValue === getRationaleDefaultValue(defaultRationaleScore)\n : isSaveBtnDisabled\n }\n >\n Save\n </Button>\n </div>\n </Styled.ContentContainer>\n );\n\n return isFromGrid ? (\n <Styled.Wrapper\n className={classnames('edit-popover-wrapper', { 'psg-company': record.is_psg_company })}\n >\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n placement=\"bottom\"\n onClick={handlePendoAction}\n destroyOnHide\n >\n {children}\n </EditPopover>\n </Styled.Wrapper>\n ) : (\n <Styled.ContainerProfileBanner>\n <EditPopover\n content={content}\n title={title}\n closePopup={closePopup}\n setClosePopup={setClosePopup}\n placement=\"bottom\"\n destroyOnHide\n >\n {children}\n </EditPopover>\n </Styled.ContainerProfileBanner>\n );\n};\n\nexport default React.memo(EditFieldOPTX);\n","import { ColumnType } from 'antd/lib/table';\n\n// models\nimport { Analyst } from '@optx/features/checklist-research-insights/models/analyst';\n// components\nimport { TableCellDefault } from '@optx/components/common/table/AntTable/cells';\n\nconst columns: Array<ColumnType<Analyst>> = [\n {\n dataIndex: 'user_name',\n title: 'Reviewer',\n render: TableCellDefault,\n sorter: true,\n className: 'user_name',\n width: 170,\n },\n {\n dataIndex: 'total_companies_reviewed_cids',\n title: 'Total # of Companies Reviewed',\n render: TableCellDefault,\n sorter: true,\n className: 'total_companies_reviewed_cids',\n width: 180,\n },\n {\n dataIndex: 'optx_score_reviewed_cids',\n title: '# of OPTX Score Reviewed',\n render: TableCellDefault,\n sorter: true,\n className: 'optx_score_reviewed_cids',\n width: 140,\n },\n {\n dataIndex: 'il_optx_score_reviewed_cids',\n title: '# of IL OPTX Scores Reviewed',\n render: TableCellDefault,\n sorter: true,\n className: 'il_optx_score_reviewed_cids',\n width: 140,\n },\n {\n dataIndex: 'optx_score_agreement_percentage',\n title: 'OPTX Score Agreement %',\n render: TableCellDefault,\n sorter: true,\n className: 'optx_score_agreement_percentage',\n width: 140,\n },\n {\n dataIndex: 'il_optx_score_agreement_percentage',\n title: 'IL OPTX Score Agreement %',\n render: TableCellDefault,\n sorter: true,\n className: 'il_optx_score_agreement_percentage',\n width: 140,\n },\n {\n dataIndex: 'psg_fits_reviewed_cids',\n title: '# of PSG Fits Reviewed',\n render: TableCellDefault,\n sorter: true,\n className: 'psg_fits_reviewed_cids',\n width: 140,\n },\n {\n dataIndex: 'psg_fits_verified_cids',\n title: '# of PSG Fits Verified Yes',\n render: TableCellDefault,\n sorter: true,\n className: 'psg_fits_verified_cids',\n width: 140,\n },\n {\n dataIndex: 'software_companies_reviewed_cids',\n title: '# of Software Y/N Reviewed',\n render: TableCellDefault,\n sorter: true,\n className: 'software_companies_reviewed_cids',\n width: 140,\n },\n {\n dataIndex: 'software_changes_cids',\n title: '# of Software Y/N Changes Made',\n render: TableCellDefault,\n sorter: true,\n className: 'software_changes_cids',\n width: 140,\n },\n {\n dataIndex: 'software_change_accuracy',\n title: 'Accuracy of Software Y/N',\n render: TableCellDefault,\n sorter: true,\n className: 'software_change_accuracy',\n width: 140,\n },\n {\n dataIndex: 'software_change_no_accuracy',\n title: 'Accuracy of Software No',\n render: TableCellDefault,\n sorter: true,\n className: 'software_change_no_accuracy',\n width: 140,\n },\n {\n dataIndex: 'software_change_yes_accuracy',\n title: 'Accuracy of Software Yes',\n render: TableCellDefault,\n sorter: true,\n className: 'software_change_yes_accuracy',\n width: 140,\n },\n];\n\nexport default columns;\n","import { RectRadius } from '@models/recharts';\nimport { ChartResponse } from '@optx/models/feature/equity-touch-integration/charts';\n\n/**\n * Original method in recharts to draw a rectangle.\n * @param x\n * @param y\n * @param width\n * @param height\n * @param radius\n */\nexport const getRectanglePath = (\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number | RectRadius\n) => {\n const maxRadius = Math.min(Math.abs(width) / 2, Math.abs(height) / 2);\n const ySign = height >= 0 ? 1 : -1;\n const xSign = width >= 0 ? 1 : -1;\n const clockWise = (height >= 0 && width >= 0) || (height < 0 && width < 0) ? 1 : 0;\n let path;\n\n if (maxRadius > 0 && radius instanceof Array) {\n const newRadius: RectRadius = [0, 0, 0, 0];\n\n for (let i = 0, len = 4; i < len; i++) {\n newRadius[i] = radius[i] > maxRadius ? maxRadius : radius[i];\n }\n\n path = `M${x},${y + ySign * newRadius[0]}`;\n\n if (newRadius[0] > 0) {\n path += `A ${newRadius[0]},${newRadius[0]},0,0,${clockWise},${x + xSign * newRadius[0]},${y}`;\n }\n\n path += `L ${x + width - xSign * newRadius[1]},${y}`;\n\n if (newRadius[1] > 0) {\n path += `A ${newRadius[1]},${newRadius[1]},0,0,${clockWise},\n ${x + width},${y + ySign * newRadius[1]}`;\n }\n\n path += `L ${x + width},${y + height - ySign * newRadius[2]}`;\n\n if (newRadius[2] > 0) {\n path += `A ${newRadius[2]},${newRadius[2]},0,0,${clockWise},\n ${x + width - xSign * newRadius[2]},${y + height}`;\n }\n\n path += `L ${x + xSign * newRadius[3]},${y + height}`;\n\n if (newRadius[3] > 0) {\n path += `A ${newRadius[3]},${newRadius[3]},0,0,${clockWise},\n ${x},${y + height - ySign * newRadius[3]}`;\n }\n\n path += 'Z';\n } else if (maxRadius > 0 && radius === +radius && radius > 0) {\n const newRadius = Math.min(maxRadius, radius);\n\n path = `M ${x},${y + ySign * newRadius}\n A ${newRadius},${newRadius},0,0,${clockWise},${x + xSign * newRadius},${y}\n L ${x + width - xSign * newRadius},${y}\n A ${newRadius},${newRadius},0,0,${clockWise},${x + width},${y + ySign * newRadius}\n L ${x + width},${y + height - ySign * newRadius}\n A ${newRadius},${newRadius},0,0,${clockWise},${x + width - xSign * newRadius},${\n y + height\n }\n L ${x + xSign * newRadius},${y + height}\n A ${newRadius},${newRadius},0,0,${clockWise},${x},${\n y + height - ySign * newRadius\n } Z`;\n } else {\n path = `M ${x},${y} h ${width} v ${height} h ${-width} Z`;\n }\n\n return path;\n};\n\n/**\n * Grop data by quarter for bar charts\n * @param data\n */\n\nexport const groupDataByQuarter = (data: ChartResponse[]) => {\n const groupData = [...data].map(item => item.x_axis);\n\n return { groupData };\n};\n","import { call, takeLeading, select, delay } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { logOut } from './actions';\n// constants\nimport { isInIframe } from '@optx/constants/plugin';\n// utils\nimport { getErrorMessage } from '@optx/utils/api/errors';\n// services\nimport NotificationService from '../../../services/NotificationService';\nimport { AuthService } from '@optx/services/api';\n// redux\nimport { deleteCookie } from '@optx/redux/login/utils';\nimport { selectors as cognitoLogoutSelectors } from '../cognitoLogout';\nimport { LogOutActionPayload } from '../interfaces';\n// storage\nimport {\n JWTStorage,\n MenuStorage,\n AnalystStorage,\n AdminStorage,\n PartnerStorage,\n} from '@optx/storage/localStorage';\nimport { checkPluginVersion } from '@optx/storage/localStorage/pluginStorage';\n\nexport function* logOutSaga(action: PayloadAction<LogOutActionPayload>) {\n NotificationService.forceLock = true;\n const logOutURL: string = yield select(cognitoLogoutSelectors.getCognitoLogoutURL);\n\n // check usage in getJWT function\n const isPluginVersion2_3 = checkPluginVersion(2.3);\n\n try {\n console.log('remove jwt 2');\n yield call(JWTStorage.removeJWT);\n yield call(MenuStorage.removeMenuCollapsed);\n yield call(AnalystStorage.removeIsAnalyst);\n yield call(AdminStorage.removeIsAdmin);\n yield call(PartnerStorage.removeIsPartner);\n\n console.log('clear-data 2');\n const payload = { type: 'clear-data' };\n\n // send message to plugin to clear chrome storage local\n console.log('clear 2');\n\n if (isInIframe) {\n window.parent.postMessage(payload, '*');\n } else {\n window.postMessage(payload, '*');\n }\n\n if (!isPluginVersion2_3) {\n yield call(deleteCookie, 'optx_token');\n }\n\n yield call(AuthService.logout);\n // prevent aborting call before redirect\n yield delay(1000);\n window.location.replace(logOutURL);\n } catch (e: any) {\n const errorMessage = getErrorMessage(e, 'Logout failed');\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* authSaga() {\n yield takeLeading(logOut, logOutSaga);\n}\n","import React from 'react';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n\nexport const GridContext = React.createContext<BulkEditFieldContext>({\n selectedData: [],\n setSelectedData: () => {},\n gridName: 'advancedSearch',\n hasSelectViewChanged: false,\n setHasSelectViewChanged: () => {},\n rationaleValue: undefined,\n setRationaleValue: () => {},\n});\n","import styled from 'styled-components';\n\ninterface ChangeRationaleWrapperProps {\n positionedAbsolute?: boolean;\n}\n\nconst ChangeRationaleWrapper = styled.div<ChangeRationaleWrapperProps>`\n align-items: center;\n background: #fff;\n box-shadow: 0 0 10px #575757;\n border: 1px solid #1890ff;\n margin-top: 16px;\n margin-bottom: 16px;\n width: ${props => (props.positionedAbsolute ? '500px' : '100%')};\n\n ${props =>\n props.positionedAbsolute &&\n `\n position: absolute;\n top: -150px; \n z-index: 1;\n `}\n\n .heading-wrapper {\n padding: 16px;\n border-bottom: 1px solid #c2cfe080;\n\n h1.ant-typography {\n font-size: 16px !important;\n margin-top: 10px;\n\n span {\n color: red;\n }\n }\n }\n\n .body-row {\n padding: 16px 16px 26px;\n display: flex;\n justify-content: center;\n\n & > div {\n min-width: 300px;\n }\n }\n\n .cancel-btn {\n border: 1px solid #d9d9d9;\n color: ##595959;\n margin-right: 10px;\n }\n\n .save-rationale-btn:not(:disabled) {\n background: #1890ff;\n color: #ffffff;\n border: 1px solid #1890ff;\n }\n`;\n\nconst RationaleVerifiedWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 16px;\n max-width: max-content;\n\n & > span:first-child {\n font-size: 21px;\n }\n\n .rationale-label {\n display: inline-block;\n font-weight: 600;\n }\n\n .rationale-value {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #1890ff;\n font-weight: 600;\n cursor: pointer;\n\n .rationale-edit-icon {\n font-size: 16px;\n margin-top: -4px;\n visibility: hidden;\n }\n\n &:hover {\n .rationale-edit-icon {\n visibility: visible;\n }\n }\n }\n`;\n\nexport const Styled = { ChangeRationaleWrapper, RationaleVerifiedWrapper };\n","import { FC, useState } from 'react';\n// models\nimport { CompanyProfile } from '@optx/models/Company';\n// components\nimport { CompanyTagsOverflow } from '@optx/features/tags/overflow-tags';\nimport { CompanyTags } from '@optx/features/tags/tags';\n\ninterface CompanyTagsCollapsableProps {\n company: CompanyProfile;\n isAdd?: boolean;\n closable?: boolean;\n showPSGFit?: boolean;\n setTagsCollapsed?: (areTagsCollapsable: boolean) => void;\n}\n\nconst CompanyTagsCollapsable: FC<CompanyTagsCollapsableProps> = ({\n company,\n isAdd,\n closable,\n showPSGFit,\n setTagsCollapsed,\n}) => {\n const [collapsed, setCollapsed] = useState<boolean>(true);\n\n const onTagMoreClick = () => {\n setCollapsed(false);\n setTagsCollapsed && setTagsCollapsed(false);\n };\n\n return (\n <div className=\"tags-collapsable__wrapper\">\n {collapsed ? (\n <CompanyTagsOverflow\n company={company}\n companyId={company.company_id}\n isAdd={isAdd}\n closable={closable}\n onTagMoreClick={onTagMoreClick}\n isCollapsed={collapsed}\n showPSGFit={showPSGFit}\n />\n ) : (\n <CompanyTags company={company} isAdd={isAdd} closable={closable} isCollapsed={collapsed} />\n )}\n </div>\n );\n};\n\nexport default CompanyTagsCollapsable;\n","import React from 'react';\n// components\nimport FixedLoader from '@components/common/loader';\nimport { useSelector } from 'react-redux';\nimport { isLoading } from './selectors';\n\nconst PageLoader = () => {\n const isLoadingPage = useSelector(isLoading);\n\n return <FixedLoader loading={isLoadingPage} />;\n};\n\nexport default PageLoader;\n","import React from 'react';\nimport { Typography } from 'antd';\n\nimport { CommonProps } from 'react-select';\nimport { SingleSelectProps } from '../interfaces';\nimport { SelectOption } from '@optx/models/Option';\n\ninterface SingleValueContainerProps extends CommonProps<SelectOption> {\n data: SelectOption;\n}\n\nconst SingleValueContainer: React.FC<SingleValueContainerProps> = props => {\n const { selectProps, data } = props;\n\n const { placeholder } = selectProps as SingleSelectProps;\n\n const valueSelected = data.label;\n\n return (\n <Typography.Text ellipsis>\n {placeholder}: <Typography.Text style={{ color: '#1890FF' }}>{valueSelected}</Typography.Text>\n </Typography.Text>\n );\n};\n\nexport default SingleValueContainer;\n","import { Modal } from 'antd';\nimport styled from 'styled-components';\n\nconst TouchContainer = styled.div`\n h1 {\n font-size: 16px;\n }\n .ant-typography {\n display: block;\n }\n .ant-select,\n .ant-picker {\n width: 100%;\n background: #ffffff;\n }\n .ant-picker.ant-picker-disabled {\n background: #f5f5f5;\n }\n .ant-form-item {\n margin-bottom: 0px;\n }\n .change-contact-cell {\n background: #fff;\n padding: 4px 10px;\n border: 1px solid #d9d9d9;\n }\n .ant-form-item-explain.ant-form-item-explain-error {\n position: absolute;\n top: 100%;\n left: 0;\n font-size: 12px;\n }\n .ant-select-selection-overflow {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .ant-select-selector .ant-select-selection-placeholder {\n z-index: 1;\n font-size: 14px;\n }\n .ant-select-customize-input .ant-select-arrow {\n top: 50%;\n }\n .ant-select-selection-overflow-item {\n display: inline-block;\n margin-right: 3px;\n }\n .ant-select-item-option-active:not(.ant-select-item-option-disabled) {\n }\n .ant-select-open\n .ant-select-selector\n .ant-select-selection-overflow-item:not(.ant-select-selection-overflow-item-suffix) {\n display: none;\n }\n`;\n\nconst SelectContactCell = styled.div`\n .change-contact-cell {\n width: 100%;\n color: #1890ff;\n display: flex;\n align-items: center;\n justify-content: space-between;\n .anticon svg {\n width: 16px;\n height: 16px;\n }\n }\n button:disabled,\n button[disabled] {\n color: gray;\n opacity: 0.5;\n }\n .ant-select-disabled.ant-select-multiple {\n .ant-select-selector {\n background: initial;\n opacity: 0.5;\n }\n .ant-select-arrow .anticon svg {\n color: gray;\n opacity: 0.5;\n }\n }\n`;\n\nconst DocumentUploadModal = styled(Modal)<{ $isChromeExtension: boolean }>`\n width: ${({ $isChromeExtension }) => ($isChromeExtension ? '590px' : '724px')} !important;\n transform: ${({ $isChromeExtension }) =>\n $isChromeExtension ? 'translateX(-250px)' : 'inherit'} !important;\n`;\n\nconst ExternalSelectWrapper = styled.div`\n .ant-select {\n border: 1px solid #d9d9d9;\n }\n`;\n\nexport const Styled = {\n TouchContainer,\n SelectContactCell,\n DocumentUploadModal,\n ExternalSelectWrapper,\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { PAGE_LOADED } from './types';\n\nexport const pageLoaded = createAction(PAGE_LOADED);\n","import React, { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { MultiSelectFilterColumns } from '@optx/models/feature/analystsLeaderboard/filters';\nimport { SelectOption } from '@models/Option';\nimport { AppState } from '@optx/redux/interfaces';\nimport { MultiSelectFilter } from '@optx/models/filters';\n// hooks\nimport useLocalMultiSelect from '@optx/common/hooks/select/useLocalMultiSelect';\n// components\nimport { MultiSelectInline, MultiSelectProps } from '@shared/view/molecules/Select';\n// Local\nimport { selectors, actions } from '../state';\n\ninterface FilterMultiSelectProps extends MultiSelectProps {\n filterKey: MultiSelectFilterColumns;\n criteria?: string;\n}\n\nconst AnalystsMultiSelect: React.FC<FilterMultiSelectProps> = ({\n filterKey,\n criteria,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n\n const filter = useSelector((state: AppState) =>\n selectors.filters.getFilter(state, filterKey)\n ) as MultiSelectFilter<Array<SelectOption>>;\n const options = useSelector((state: AppState) =>\n selectors.filters.getSelectOptions(state, filterKey)\n );\n const allowAnalystsEditing = useSelector(selectors.filters.allowAnalystsEditing);\n const value = useSelector((state: AppState) =>\n selectors.filters.getSelectValue(state, filterKey)\n );\n\n const updateValue = useCallback(\n (newValue: Array<SelectOption>) =>\n dispatch(actions.filters.updateValue({ value: newValue, filterKey, criteria })),\n [dispatch, filterKey, criteria]\n );\n\n const { localValue, onBlur, onChange } = useLocalMultiSelect(value, updateValue);\n\n return (\n <MultiSelectInline\n options={options}\n onBlur={onBlur}\n onChange={onChange}\n value={localValue}\n placeholder={filter ? filter.placeholders : undefined}\n allPrefix={filter ? filter.placeholders : undefined}\n {...restProps}\n isDisabled={!allowAnalystsEditing}\n />\n );\n};\n\nexport default AnalystsMultiSelect;\n","import { Typography } from 'antd';\nimport styled from 'styled-components';\nimport { Title } from '@optx/shared/view/atoms/Typography';\nimport AnalystsMultiSelect from './AnalystsMultiSelect';\n\nexport const PageTitle = styled(Title)`\n margin-top: 10px;\n`;\n\nexport const SecondaryTitle = styled(Typography.Paragraph)`\n /* Gray */\n color: #90a0b7;\n`;\n\nexport const TypographyTitle = styled(Typography.Title)`\n &.ant-typography {\n /* Dark BLue */\n color: #334d6e;\n margin: 0;\n }\n`;\n\nexport const ByAnalystsOrTeamMultiSelect = styled(AnalystsMultiSelect)`\n max-width: 350px;\n\n .multiselect__value-container {\n flex-wrap: nowrap;\n }\n`;\n","import { TooltipPayload } from 'recharts';\n\nexport const tooltipValueFormat = (payload: TooltipPayload, separator: string = ' : ') =>\n `${payload.name}${separator}${payload.value}`;\n","import styled from 'styled-components';\n// components\nimport StyledTooltip from '@optx/components/common/charts/Tooltip.styles';\n\nconst PreviousPeriodLabel = styled(StyledTooltip.Label)`\n margin: 10px 0 0;\n`;\n\nconst Styled = {\n PreviousPeriodLabel,\n};\n\nexport default Styled;\n","import React from 'react';\nimport { TooltipPayload, TooltipProps } from 'recharts';\n// models\nimport { ChartIntervalOption } from '@optx/models/feature/analystsLeaderboard/chart';\n// utils\nimport { tooltipValueFormat } from '@optx/utils/chart/tooltip';\n// components\nimport StyledTooltip from '@optx/components/common/charts/Tooltip.styles';\nimport Styled from './LeaderboardChartTooltip.styled';\n\ninterface LeaderboardChartTooltipProps extends TooltipProps {\n // override default tooltip props\n payload: ReadonlyArray<TooltipPayload>;\n}\n\nconst LeaderboardChartTooltip = ({\n active,\n payload,\n label,\n labelStyle,\n separator,\n}: LeaderboardChartTooltipProps) => {\n if (active) {\n const current = payload.find(item => item.dataKey === 'selectedPeriod');\n const previous = payload.find(item => item.dataKey === 'previousPeriod');\n\n const showCurrent = current && current.payload.selectedPeriod !== null;\n const showPrevious = previous && previous.payload.previousPeriod !== null;\n const previousPeriodLabel = previous\n ? (previous.payload as ChartIntervalOption).previous_date\n : null;\n\n return (\n <StyledTooltip.Wrapper>\n {showCurrent && current && (\n <>\n <StyledTooltip.Label style={{ ...labelStyle }}>{label}</StyledTooltip.Label>\n <div style={{ color: current.color }}>{tooltipValueFormat(current, separator)}</div>\n </>\n )}\n\n {showPrevious && previous && (\n <>\n <Styled.PreviousPeriodLabel style={{ ...labelStyle }}>\n {previousPeriodLabel}\n </Styled.PreviousPeriodLabel>\n <div style={{ color: previous.color }}>{tooltipValueFormat(previous, separator)}</div>\n </>\n )}\n </StyledTooltip.Wrapper>\n );\n }\n\n return null;\n};\n\nexport default LeaderboardChartTooltip;\n","import React, { useCallback } from 'react';\nimport {\n ResponsiveContainer,\n ResponsiveContainerProps,\n LineChart,\n Line,\n CartesianGrid,\n XAxis,\n Legend,\n Tooltip,\n YAxis,\n LegendValueFormatter,\n} from 'recharts';\nimport { useSelector } from 'react-redux';\n// models\nimport { LegendValue } from '@optx/models/feature/analystsLeaderboard/AnalystsLeaderboardResponse';\nimport { AppState } from '@optx/redux/interfaces';\n// components\nimport {\n xAxisProps,\n yAxisProps,\n lineProps as defaultLineProps,\n legendProps,\n cartesianGridProps,\n} from '@optx/components/common/charts/LineChart/config';\nimport EmptyChart from '@optx/components/common/charts/EmptyChart';\nimport { LegendText } from '@optx/components/common/charts/LineChart/LegendFormatter/styles';\nimport { ChartIntervalOption } from '@optx/models/feature/analystsLeaderboard/chart';\n// utils\nimport { formatDate } from '@optx/utils/format';\n// redux\nimport { selectors } from '../../state';\n// components\nimport LeaderboardChartTooltip from './LeaderboardChartTooltip';\n\ninterface LeaderboardChartProps extends Omit<ResponsiveContainerProps, 'children'> {}\n\ntype OptionKey = keyof ChartIntervalOption;\n\nconst LeaderboardChart = (props: LeaderboardChartProps) => {\n const data = useSelector(selectors.getChartInfo);\n const lines = useSelector((state: AppState) =>\n selectors.filters.getChartLines(state, 'startdatetime')\n );\n\n const searchData = useSelector(selectors.search.getData);\n\n // Add formatting for date interval in component in order to use proper date label in tooltip.\n const legendFormatter: LegendValueFormatter = useCallback(\n (value, entry) => {\n const periodLabel = (value as string).toUpperCase();\n let text = periodLabel;\n\n if (searchData) {\n // @ts-ignore\n if (entry.dataKey === 'previousPeriod') {\n text = getLegendInterval(periodLabel, searchData.legend.previous);\n } else {\n text = getLegendInterval(periodLabel, searchData.legend.current);\n }\n }\n\n return <LegendText>{text}</LegendText>;\n },\n [searchData]\n );\n\n if (!data || !data.length) {\n return <EmptyChart />;\n }\n\n return (\n <ResponsiveContainer width=\"100%\" height={300} {...props}>\n <LineChart data={data} margin={{ bottom: 20 }} style={{ margin: '20px 0 0' }}>\n <CartesianGrid {...cartesianGridProps} />\n <XAxis {...xAxisProps} dataKey={'selected_date' as OptionKey} />\n <YAxis {...yAxisProps} />\n <Tooltip content={LeaderboardChartTooltip} filterNull={false} />\n {data && data.length && <Legend formatter={legendFormatter} {...legendProps} />}\n\n {lines.map(lineProps => (\n <Line key={lineProps.dataKey as string} {...defaultLineProps} {...lineProps} />\n ))}\n </LineChart>\n </ResponsiveContainer>\n );\n};\n\nfunction getLegendInterval(period: string, legendOption: LegendValue) {\n return `${period}: ${formatDate(legendOption.start_date, 'shortDate')} - ${formatDate(\n legendOption.end_date,\n 'shortDate'\n )}`;\n}\n\nexport default LeaderboardChart;\n","import { blue } from '@ant-design/colors';\nimport Option from '@optx/models/Option';\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst Label = styled.div`\n font-size: 12px;\n /* Gray */\n color: #90a0b7;\n opacity: 0.8;\n font-weight: 600;\n font-family: 'Lato', sans-serif;\n`;\n\nexport const Value = styled.div`\n font-size: 16px;\n font-weight: 600;\n /* Daybreak Blue / blue-6 */\n color: ${blue[6]};\n opacity: 0.8;\n`;\n\ninterface OptionValueProps {\n option: Option<React.ReactNode>;\n}\n\n/**\n * KPI Option\n * @param param0\n */\nconst OptionValue = ({ option }: OptionValueProps) => {\n return (\n <div>\n <Label>{option.label}</Label>\n <Value>{option.value}</Value>\n </div>\n );\n};\n\nexport default OptionValue;\n","/* eslint-disable max-len */\nimport { CardInfo } from '@optx/models/feature/analystsLeaderboard/CarfInfo';\nimport { CriteriaKeys } from '@optx/models/feature/analystsLeaderboard/CardCriteria';\n\nconst touches: CardInfo = {\n title: 'Calculation Explanations',\n content: [\n {\n title: 'Total Touches',\n description:\n 'This includes completed, past due, and future touches for the time range selected',\n },\n {\n title: 'Completed Touches',\n description: 'All completed touches during the time range selected',\n },\n {\n title: 'Past Due Touches',\n description: 'Incomplete touches with schedule dates that have passed',\n },\n {\n title: 'Scheduled Touches',\n description:\n \"Touches that are scheduled that haven't been completed and aren't past due in the time range selected\",\n },\n ],\n};\n\nconst companiesReached: CardInfo = {\n title: 'Calculation Explanations',\n content: [\n {\n title: 'Companies Touched',\n description: 'This is the total number of companies touched over the time range selected',\n },\n {\n title: 'Rank of 5',\n description:\n 'This is the number of companies touched over the time range selected with a pipeline rank of 5',\n },\n {\n title: 'New',\n description:\n \"This is the number of companies that had it's first touch over the time range selected\",\n },\n ],\n};\n\nconst stageChanges: CardInfo = {\n title: 'Calculation Explanations',\n content: [\n {\n title: 'Stage Changes',\n description:\n 'This is the total number of positive and negative stage changes over the time range selected',\n },\n {\n title: 'Positive',\n description:\n 'This is the number of companies that go from (Lead, Track, Pass or Dead) to (Qualified Lead, VWIA, Target, Priority, IOI Presented, LOI Presented/Live, LOI Signed or Portfolio Company)',\n },\n {\n title: 'Negative',\n description:\n 'This is the number of companies that go from LOI Signed, LOI Presented/Live or IOI Presented to any stage that is “lower†(i.e. Priority, Target, VWIA, Track, Qualified Lead) is consider a negative change. This would provide a measure of “hit rate†success.',\n },\n {\n title: 'Deals',\n description:\n 'This is the number of companies that went to the \"Portfolio Company\" stage in the time range selected',\n },\n ],\n};\n\nconst cardInfo: Record<CriteriaKeys, CardInfo | null> = {\n touches,\n companies_reached: companiesReached,\n stage_changes: stageChanges,\n};\n\nexport default cardInfo;\n","import { Typography } from 'antd';\nimport styled from 'styled-components';\n\nconst Wrapper = styled.div`\n position: relative;\n`;\n\nexport const Title = styled(Typography.Title)`\n /* Dark BLue */\n color: #334d6e;\n`;\n\nexport const TitleValue = styled(Typography.Text)`\n /* Daybreak Blue / blue-6 */\n color: #1890ff;\n margin: 0 30px 0 0;\n font-weight: 600;\n font-size: 20px;\n`;\n\nconst Styles = {\n Wrapper,\n Title,\n TitleValue,\n};\n\nexport default Styles;\n","import React from 'react';\n// utils\nimport { formatPercentDefault } from '@utils/format';\n// components\nimport { TrendingValue } from '@optx/shared/view/molecules/trending';\nimport Styles from './CardTitle.styles';\n\nconst formatTrending = (value: string | number | null | undefined) =>\n formatPercentDefault(value, true);\n\ninterface CardTitleProps {\n className?: string;\n title: string;\n value: number | null;\n trending: number | null;\n}\n\nconst CardTitle: React.FC<CardTitleProps> = ({ className, title, value, trending }) => {\n return (\n <Styles.Wrapper className={className}>\n <Styles.Title level={5}>{title}</Styles.Title>\n <div>\n <Styles.TitleValue>{value}</Styles.TitleValue>\n <TrendingValue value={trending} format={formatTrending} />\n </div>\n </Styles.Wrapper>\n );\n};\n\nexport default CardTitle;\n","import styled, { css } from 'styled-components';\nimport { InfoCircleOutlined } from '@ant-design/icons';\nimport PopoverComponent from '@optx/shared/view/molecules/Popover';\n\nconst Icon = styled(InfoCircleOutlined)`\n color: #6d8fb9;\n opacity: 0.2;\n font-size: 21px;\n`;\n\nconst Popover = styled(PopoverComponent)`\n max-width: 500px;\n\n &.ant-popover-placement-rightTop,\n &.ant-popover-placement-leftTop {\n .ant-popover-arrow {\n top: 51px;\n }\n }\n`;\n\nconst PopoverTitle = styled.span`\n white-space: nowrap;\n font-style: normal;\n font-weight: 600;\n font-size: 14px;\n line-height: 22px;\n /* Gray / gray-9 */\n color: #262626;\n`;\n\nconst contentStyles = css`\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n /* Gray / gray-8 */\n color: #595959;\n`;\n\nconst PopoverContentTitle = styled.div`\n ${contentStyles};\n font-weight: 600;\n`;\n\nconst PopoverContentDescription = styled.p`\n ${contentStyles};\n`;\n\nexport default {\n Icon,\n Popover,\n PopoverTitle,\n PopoverContentTitle,\n PopoverContentDescription,\n};\n","import styled, { css } from 'styled-components';\n// components\nimport { Value } from '@components/common/Text/OptionValue';\nimport TrendingValueStyles from '@optx/shared/view/molecules/trending/TrendingValue.styles';\nimport Card from '@components/common/cards';\n// components\nimport CardTitle from './CardTitle';\nimport CardTitleStyles from './CardTitle.styles';\nimport StyledInfo from './Info.styled';\n\nconst CardOptionsWrapper = styled.div`\n display: flex;\n\n & > * {\n flex: 1;\n }\n`;\n\nconst PastDue = styled.span<{ $value: number }>`\n color: ${props => (props.$value > 0 ? '#FF4D4F' : 'inherit')};\n`;\n\nconst cardActiveStyles = css`\n background: #001529;\n\n .ant-card-body {\n background: #03213e;\n }\n\n ${CardTitleStyles.Title} {\n /* Daybreak Blue / blue-6 */\n color: #1890ff;\n }\n\n ${CardTitleStyles.TitleValue} {\n color: #fff;\n }\n\n ${Value} {\n color: #fff;\n }\n\n ${StyledInfo.Icon} {\n opacity: 1;\n }\n`;\n\nconst StyledCard = styled(Card)<{ $active?: boolean }>`\n height: 100%;\n display: flex;\n flex-direction: column;\n\n .ant-card-body {\n flex: 1;\n padding: 15px 24px;\n }\n\n ${StyledInfo.Icon} {\n position: absolute;\n top: 12px;\n right: 12px;\n }\n\n ${props => props.$active && cardActiveStyles};\n`;\n\nconst StyledCardTitle = styled(CardTitle)<{ active: boolean }>`\n /*\n Trending value is black when trending is 0.\n Because on highlight background is dark color we need to make text white.\n */\n ${props =>\n props.active &&\n props.trending === 0 &&\n css`\n ${TrendingValueStyles.TrendingValue} {\n color: #fff;\n }\n `}\n`;\n\nexport default {\n CardOptionsWrapper,\n PastDue,\n Card: StyledCard,\n CardTitle: StyledCardTitle,\n};\n","import React, { useMemo, Fragment } from 'react';\nimport { CardInfo, CardInfoSection } from '@optx/models/feature/analystsLeaderboard/CarfInfo';\nimport Styled from './Info.styled';\n\ninterface InfoProps {\n info: CardInfo;\n className?: string;\n}\n\nconst mapInfoSection = (section: CardInfoSection, index: number) => {\n return (\n <Fragment key={index}>\n <Styled.PopoverContentTitle>{section.title}</Styled.PopoverContentTitle>\n <Styled.PopoverContentDescription>{section.description}</Styled.PopoverContentDescription>\n </Fragment>\n );\n};\n\nconst Info: React.FC<InfoProps> = ({ info, ...restProps }) => {\n const content = useMemo(() => info.content.map(mapInfoSection), [info]);\n\n return (\n <Styled.Popover\n align={{\n offset: [15, -55],\n }}\n arrowPointAtCenter\n placement=\"rightTop\"\n title={<Styled.PopoverTitle>{info.title}</Styled.PopoverTitle>}\n content={content}\n >\n <Styled.Icon {...restProps} />\n </Styled.Popover>\n );\n};\n\nexport default Info;\n","import React, { useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Col, Row } from 'antd';\n// models\nimport Option from '@optx/models/Option';\nimport { AppState } from '@optx/redux/interfaces';\nimport FilterCountCard from '@optx/models/cards/FilterCountCard';\nimport { CriteriaKeys } from '@optx/models/feature/analystsLeaderboard/CardCriteria';\n// constants\nimport { cardRowGutter } from '@optx/constants/spacing';\n// components\nimport OptionValue from '@components/common/Text/OptionValue';\n// Local\n// constants\nimport cardInfoDictionary from '../../constants/cardInfo';\nimport { ALL_REPORTS, mapReportTouchesToActions } from '@optx/constants/pendoActions';\n// redux\nimport { selectors, actions } from '../../state';\n// components\nimport Styles from './FilterCards.styles';\nimport Info from './Info';\n\nconst getValue = (value?: number) => {\n return typeof value === 'number' ? value : null;\n};\n\n/**\n * Map past due option.\n * @param option\n * @param index\n */\nconst mapPastDueCardOption = (\n option: Option<React.ReactNode>,\n index: number\n): Option<React.ReactNode> => {\n if (index === 1) {\n return {\n ...option,\n value: <Styles.PastDue $value={option.value as number}>{option.value}</Styles.PastDue>,\n };\n }\n\n return option;\n};\n\n/**\n * Custom mapping to show red value when value is positive in past due.\n * @param card\n */\nconst mapCardOption = (card: FilterCountCard) => {\n if (card.key === 'touches') {\n return {\n ...card,\n options: card.options ? card.options.map(mapPastDueCardOption) : [],\n };\n }\n\n return card;\n};\n\nconst FilterCards = () => {\n const dispatch = useDispatch();\n const cards = useSelector(selectors.getCards);\n const selectedCard = useSelector((state: AppState) =>\n selectors.filters.getRadioValue(state, 'filter_criteria')\n );\n\n const mappedCards = useMemo(() => cards.map(mapCardOption), [cards]);\n\n const handleCardClick = (cardKey: string) => {\n if (selectedCard !== cardKey) {\n dispatch(actions.filters.updateValue({ value: cardKey, filterKey: 'filter_criteria' }));\n }\n\n window.pendo.track(`${ALL_REPORTS}_${mapReportTouchesToActions[cardKey]}`);\n };\n\n const renderInfo = (cardKey: CriteriaKeys) => {\n const info = cardInfoDictionary[cardKey];\n\n if (info) {\n return <Info info={info} />;\n }\n\n return null;\n };\n\n return (\n <Row gutter={cardRowGutter}>\n {mappedCards.map((card, index) => (\n <Col key={index} xs={24} md={8}>\n <Styles.Card\n title={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <Styles.CardTitle\n active={selectedCard === card.key}\n title={card.title}\n value={getValue(card.count)}\n trending={getValue(card.trending)}\n />\n }\n hoverable\n onClick={() => handleCardClick(card.key)}\n $size=\"small\"\n $active={selectedCard === card.key}\n $transparent\n >\n <Styles.CardOptionsWrapper>\n {card.options?.map((option, index) => (\n <OptionValue key={index} option={option} />\n ))}\n </Styles.CardOptionsWrapper>\n {renderInfo(card.key as CriteriaKeys)}\n </Styles.Card>\n </Col>\n ))}\n </Row>\n );\n};\n\nexport default FilterCards;\n","import Option, { SelectableOption } from '@optx/models/Option';\nimport { useMemo } from 'react';\n\ninterface SelectOptionClickHandler {\n (nextValue: string): void;\n}\n\nconst mapSelectedOption = (value: string | undefined, option: Option) => {\n if (value === option.value) {\n return {\n ...option,\n selected: true,\n } as SelectableOption;\n }\n\n return { ...option };\n};\n\nconst useSingleSelect = (\n value: string | undefined,\n options: Array<Option>,\n onClick: SelectOptionClickHandler\n) => {\n const mappedOptions: Array<SelectableOption> = useMemo(\n () => options.map(option => mapSelectedOption(value, option)),\n [options, value]\n );\n\n const handleClick = (nextValue: string) => {\n if (nextValue !== value) {\n onClick(nextValue);\n }\n };\n\n return {\n options: mappedOptions,\n onClick: handleClick,\n };\n};\n\nexport default useSingleSelect;\n","import React from 'react';\nimport { Button, Space } from 'antd';\nimport { ButtonProps } from 'antd/lib/button';\nimport styled from 'styled-components';\n// models\nimport { SelectableOption } from '@optx/models/Option';\n// hooks\n\nconst StyledButton = styled(Button)<ButtonProps>`\n font-weight: 600;\n\n color: ${props => (props.type === 'default' ? '#1890ff' : '#fff')};\n`;\n\ninterface SingleSelectButtons extends Omit<ButtonProps, 'onClick'> {\n options: Array<SelectableOption>;\n onClick: (nextValue: string) => void;\n}\n\nconst SingleSelectButtons = ({ options, onClick, ...props }: SingleSelectButtons) => {\n return (\n <Space>\n {options.map(option => {\n return (\n <StyledButton\n key={option.value}\n type={option.selected ? 'primary' : 'default'}\n shape=\"round\"\n onClick={() => onClick(option.value)}\n >\n {option.label}\n </StyledButton>\n );\n })}\n </Space>\n );\n};\n\nexport default SingleSelectButtons;\n","import React, { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { RadioFilterColumns } from '@optx/models/feature/analystsLeaderboard/filters';\nimport { AppState } from '@optx/redux/interfaces';\nimport { SelectOption } from '@optx/models/Option';\n// constants\nimport { ALL_REPORTS, NT, mapAnalystStatsToActions } from '@optx/constants/pendoActions';\n// hooks\nimport useSingleSelect from '@optx/common/hooks/filters/useSingleSelect';\n// components\nimport SingleSelectButtons from '@components/common/filters/SingleSelectButtons';\n// Local\n// redux\nimport { selectors, actions } from '../state';\n\ninterface FilterSingleSelectButtonsProps {\n filterKey: RadioFilterColumns;\n criteria?: string;\n}\n\nconst FilterSingleSelectButtons: React.FC<FilterSingleSelectButtonsProps> = ({\n filterKey,\n criteria,\n}) => {\n const dispatch = useDispatch();\n const stageChangeStatuses = useSelector((state: AppState) =>\n selectors.filters.getSelectOptions(state, filterKey)\n ) as Array<SelectOption>;\n const value = useSelector((state: AppState) =>\n selectors.filters.getRadioValue(state, filterKey, criteria)\n );\n const updateValue = useCallback(\n (newValue: string) => {\n if (filterKey === 'pipeline_companies_rank') {\n window.pendo.track(\n `${ALL_REPORTS}_Pipeline_${mapAnalystStatsToActions(newValue, filterKey)}`\n );\n } else if (filterKey === 'touch_type_status') {\n window.pendo.track(`${ALL_REPORTS}_${NT}_${mapAnalystStatsToActions(newValue, filterKey)}`);\n } else if (filterKey === 'companies_reached_status') {\n window.pendo.track(\n `${ALL_REPORTS}_#ofCompaniesReached_${mapAnalystStatsToActions(newValue, filterKey)}`\n );\n } else if (filterKey === 'stage_change_status') {\n window.pendo.track(\n `${ALL_REPORTS}_#ofStageChanges_${mapAnalystStatsToActions(newValue, filterKey)}`\n );\n }\n\n dispatch(actions.filters.updateValue({ value: newValue, filterKey, criteria }));\n },\n [dispatch, filterKey, criteria]\n );\n const { options, onClick } = useSingleSelect(value, stageChangeStatuses, updateValue);\n\n return <SingleSelectButtons options={options} onClick={onClick} />;\n};\n\nexport default FilterSingleSelectButtons;\n","import React, { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { MultiSelectFilterColumns } from '@optx/models/feature/analystsLeaderboard/filters';\nimport { SelectOption } from '@models/Option';\nimport { AppState } from '@optx/redux/interfaces';\nimport { MultiSelectFilter } from '@optx/models/filters';\n// constants\nimport { handleMultipleActions } from '@optx/constants/pendoActions';\n// hooks\nimport useLocalMultiSelect from '@optx/common/hooks/select/useLocalMultiSelect';\n// components\nimport { MultiSelectInline, MultiSelectProps } from '@shared/view/molecules/Select';\n// Local\nimport { selectors, actions } from '../state';\n\ninterface FilterMultiSelectProps extends MultiSelectProps {\n filterKey: MultiSelectFilterColumns;\n criteria?: string;\n}\n\nconst FilterMultiSelect: React.FC<FilterMultiSelectProps> = ({\n filterKey,\n criteria,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n\n const filter = useSelector((state: AppState) =>\n selectors.filters.getFilter(state, filterKey)\n ) as MultiSelectFilter<Array<SelectOption>>;\n const options = useSelector((state: AppState) =>\n selectors.filters.getSelectOptions(state, filterKey)\n );\n const value = useSelector((state: AppState) =>\n selectors.filters.getSelectValue(state, filterKey, criteria)\n );\n\n const updateValue = useCallback(\n (newValue: Array<SelectOption>) => {\n handleMultipleActions(newValue, filterKey);\n dispatch(actions.filters.updateValue({ value: newValue, filterKey, criteria }));\n },\n [dispatch, filterKey, criteria]\n );\n\n const { localValue, onBlur, onChange } = useLocalMultiSelect(value, updateValue, filterKey);\n\n return (\n <MultiSelectInline\n options={options}\n onBlur={onBlur}\n onChange={onChange}\n value={localValue}\n placeholder={filter ? filter.placeholders : undefined}\n allPrefix={filter ? filter.placeholders : undefined}\n {...restProps}\n />\n );\n};\n\nexport default FilterMultiSelect;\n","import React from 'react';\nimport { Dictionary } from 'lodash';\nimport { Row, Col } from 'antd';\nimport { useSelector } from 'react-redux';\n// models\nimport { AppState } from '@optx/redux/interfaces';\n// Local\n// styles\nimport { SecondaryTitle, TypographyTitle } from '../styled';\n// redux\nimport { selectors } from '../../state';\n// components\nimport FilterSingleSelectButtons from '../FilterSingleSelectButtons';\nimport FilterMultiSelect from '../FilterMultiSelect';\n\nconst headOptions: Dictionary<React.ReactNode> = {\n touches: (\n <>\n <Row justify=\"space-between\">\n <Col>\n <TypographyTitle level={4}># of Touches by Date</TypographyTitle>\n <SecondaryTitle>This is the total # of touches across the sourcing group</SecondaryTitle>\n </Col>\n <Col>\n <FilterMultiSelect filterKey=\"touch_type_id\" criteria=\"touches\" />\n </Col>\n </Row>\n <FilterSingleSelectButtons filterKey=\"touch_type_status\" criteria=\"touches\" />\n </>\n ),\n\n companies_reached: (\n <>\n <Row justify=\"space-between\">\n <Col>\n <TypographyTitle level={4}># of Companies Touched by Date</TypographyTitle>\n <SecondaryTitle>This is the total # of companies touched over time</SecondaryTitle>\n </Col>\n <Col>\n <FilterMultiSelect filterKey=\"deal_stage_id\" criteria=\"companies_reached\" />\n </Col>\n </Row>\n <FilterSingleSelectButtons\n filterKey=\"companies_reached_status\"\n criteria=\"companies_reached\"\n />\n </>\n ),\n stage_changes: (\n <>\n <Row justify=\"space-between\">\n <Col>\n <TypographyTitle level={4}># of Stage Changes by Date</TypographyTitle>\n <SecondaryTitle>\n This is the total # of stage changes across the sourcing group\n </SecondaryTitle>\n </Col>\n <Col>\n <FilterMultiSelect filterKey=\"past_stage_id\" criteria=\"stage_changes\" />\n </Col>\n </Row>\n <FilterSingleSelectButtons filterKey=\"stage_change_status\" criteria=\"stage_changes\" />\n </>\n ),\n};\n\nconst ChartCardHead = () => {\n const searchCategory = useSelector((state: AppState) =>\n selectors.filters.getRadioValue(state, 'filter_criteria')\n );\n\n if (searchCategory) {\n return <>{headOptions[searchCategory]}</>;\n }\n\n return null;\n};\n\nexport default ChartCardHead;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { RadioDateRangeFilterColumns } from '@optx/models/feature/analystsLeaderboard/filters';\nimport { DateRangeOption } from '@optx/models/Option';\nimport { AppState } from '@optx/redux/interfaces';\n// constants\nimport { ALL_REPORTS } from '@optx/constants/pendoActions';\n// components\nimport SingleSelectDateRanges from '@components/common/filters/SingleSelectDateRanges';\n// Local\n// redux\nimport { selectors, actions } from '../state';\n\ninterface FilterSingleSelectDateRangesProps {\n filterKey: RadioDateRangeFilterColumns;\n}\n\nconst FilterSingleSelectDateRanges: React.FC<FilterSingleSelectDateRangesProps> = ({\n filterKey,\n}) => {\n const dispatch = useDispatch();\n\n const handleChange = (option: DateRangeOption) => {\n dispatch(\n actions.filters.updateValue({\n value: [option.start, option.end],\n filterKey,\n })\n );\n\n window.pendo.track(`${ALL_REPORTS}_${option.label?.replace(/\\s/g, '')}`);\n };\n\n const options = useSelector((state: AppState) =>\n selectors.filters.getSingleDateRangesOptions(state, filterKey)\n );\n const value = useSelector((state: AppState) =>\n selectors.filters.getSingleDateRangesValue(state, filterKey)\n );\n\n return <SingleSelectDateRanges value={value} data={options} onChange={handleChange} />;\n};\n\nexport default FilterSingleSelectDateRanges;\n","import React, { useMemo } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\n// models\nimport { FilterTag } from '@optx/models/tags';\n// components\nimport { FilterTagsOverflow } from '@optx/features/tags/overflow-tags';\n// constants\nimport { pipelineCriteria } from '../../constants/custom-criteria';\n// redux\nimport { selectors } from '../../state';\nimport * as actions from '../../state/filters/actions';\n\n/**\n * Check if tag is editable.\n * Handle situation when only analyst is showed as an option in analysts multiselect and\n * user is not allowed to uncheck the option.\n * @param filterColumn filter key.\n * @param allowAnalystsEditing showld analysts selection be editable.\n */\nconst isTagEditable = (filterColumn: string, allowAnalystsEditing: boolean) => {\n if (filterColumn !== 'analyst_id') {\n return true;\n }\n\n return allowAnalystsEditing;\n};\n\nconst FilterTags = () => {\n const dispatch = useDispatch();\n const options = useSelector(selectors.filters.getTags);\n const allowAnalystsEditing = useSelector(selectors.filters.allowAnalystsEditing);\n\n const handleFilterRemove = (tag: FilterTag) => () => {\n let criteria: string | undefined;\n\n if (tag.filter === 'previous_period' || tag.filter === 'pipeline_companies_rank') {\n criteria = pipelineCriteria;\n }\n\n dispatch(actions.clearFilter({ filterKey: tag.filter, criteria }));\n };\n\n const filteredOptions = useMemo(\n () => options.filter(item => !item.isDefault && item.values?.length > 0),\n [options]\n );\n\n // Don't return null or anything prior to this return. The ref will be lost and max displayed index logic won't work.\n return (\n <FilterTagsOverflow\n options={filteredOptions}\n onClose={handleFilterRemove}\n closable={(item: FilterTag) => isTagEditable(item.filter, allowAnalystsEditing)}\n isFullWidth\n multipleValue\n />\n );\n};\n\nexport default FilterTags;\n","import React from 'react';\nimport { Space } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\n// components\nimport { MainHeader } from '@components/common/layout';\nimport ClearSearchButton from '@optx/shared/view/molecules/Buttons/ClearSearchButton';\n// Local\nimport { selectors } from '../../state';\nimport * as filtersActions from '../../state/filters/actions';\n// components\nimport FilterTags from './FilterTags';\n\nconst Header = () => {\n const dispatch = useDispatch();\n\n const showRestoreIcon = useSelector(selectors.filters.showClearAll);\n\n return (\n <MainHeader className=\"main-header fixed\">\n <div className=\"search-header-content\" style={{ height: '100%' }}>\n <FilterTags />\n <Space size={4} style={{ marginLeft: 'auto' }}>\n <ClearSearchButton\n title=\"Clear All\"\n isVisible={showRestoreIcon}\n onClick={() => dispatch(filtersActions.clearAllFilters())}\n />\n </Space>\n </div>\n </MainHeader>\n );\n};\n\nexport default Header;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// components\nimport FixedLoader from '@components/common/loader';\n// redux\nimport { selectors } from '../state';\n\nconst PageLoader = () => {\n const loading = useSelector(selectors.isLoading);\n\n return <FixedLoader loading={loading} />;\n};\n\nexport default PageLoader;\n","import React, { Component } from 'react';\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n /**\n * fallback UI.\n */\n placeholder: React.ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n}\n\nclass ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n componentDidCatch(error: any, info: any) {\n // eslint-disable-next-line no-console\n console.error(error);\n // Display fallback UI\n this.setState({ hasError: true });\n }\n\n render() {\n const { placeholder, children } = this.props;\n const { hasError } = this.state;\n\n if (hasError) {\n return placeholder; // render custom fallback UI\n }\n\n return children;\n }\n}\n\nexport default ErrorBoundary;\n","export function fitToLocations(map: google.maps.Map, locations: Array<google.maps.LatLngLiteral>) {\n const bounds = new google.maps.LatLngBounds();\n\n // Create bounds from markers\n for (let index = 0; index < locations.length; index++) {\n const latlng = locations[index];\n bounds.extend(latlng);\n }\n\n // Don't zoom in too far on only one marker\n if (bounds.getNorthEast().equals(bounds.getSouthWest())) {\n const extendPoint1 = new google.maps.LatLng(\n bounds.getNorthEast().lat() + 0.01,\n bounds.getNorthEast().lng() + 0.01\n );\n const extendPoint2 = new google.maps.LatLng(\n bounds.getNorthEast().lat() - 0.01,\n bounds.getNorthEast().lng() - 0.01\n );\n\n bounds.extend(extendPoint1);\n bounds.extend(extendPoint2);\n }\n\n map.fitBounds(bounds);\n\n // Adjusting zoom here doesn't work :)\n}\n\n/**\n * Fit map to single world view.\n * @param map google map instance.\n */\nexport function worldViewFit(map: google.maps.Map) {\n const worldBounds = new google.maps.LatLngBounds(\n new google.maps.LatLng(90, -180), // Top-left\n new google.maps.LatLng(-90, 180) // Bottom-right\n );\n map.fitBounds(worldBounds, 0);\n const actualBounds = map.getBounds();\n\n if (\n actualBounds &&\n actualBounds.getSouthWest().lng() === -180 &&\n actualBounds.getNorthEast().lng() === 180\n ) {\n // @ts-ignore\n map.setZoom(map.getZoom() + 1);\n }\n}\n\n/**\n * Generate unique key from location coordinates.\n * @param location\n */\nexport function createLocationKey(location: google.maps.LatLngLiteral) {\n return location.lat + location.lng;\n}\n","import React, { useCallback, useEffect, useState, CSSProperties, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { GoogleMap, MarkerClusterer, Marker, useLoadScript } from '@react-google-maps/api';\nimport { ClustererOptions } from '@react-google-maps/marker-clusterer';\n// constants\nimport { ALL_REPORTS } from '@optx/constants/pendoActions';\nimport GLOBAL_CONFIG from '@optx/constants/config';\n// utils\nimport { fitToLocations, worldViewFit } from '../../utils/maps';\n// redux\nimport { selectors } from '../../state';\nconst containerStyle: CSSProperties = {\n width: '100%',\n height: 500,\n};\n\nconst mapOptions: google.maps.MapOptions = {\n minZoom: 2.5,\n};\n\nconst clusterOptions: ClustererOptions = {\n // so you must have m1.png, m2.png, m3.png, m4.png, m5.png and m6.png in that folder\n imagePath:\n 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m',\n};\n\nconst TouchesMap = () => {\n const { isLoaded, loadError } = useLoadScript({\n googleMapsApiKey: GLOBAL_CONFIG.short_date.GOOGLE_MAPS_API_KEY,\n });\n const [map, setMap] = useState<google.maps.Map | null>(null);\n const locations = useSelector(selectors.touchesAcrossRegion.getLocations);\n const zoomSize = useRef<number | null>(null);\n\n /**\n * Update zoom level every time new locations are loaded.\n */\n useEffect(() => {\n if (map) {\n if (!locations.length) {\n if (!map.getBounds()) {\n // Need to wait for the first bounds_changed event on the map before the bounds is defined and fit map.\n google.maps.event.addListenerOnce(map, 'bounds_changed', () => {\n worldViewFit(map);\n });\n } else {\n worldViewFit(map);\n }\n } else {\n // Set zoom to locations bound.\n const mapLocations = locations.map(location => location.coordinates);\n\n if (!map.getBounds()) {\n // Need to wait for the first bounds_changed event on the map before the bounds is defined and fit map.\n google.maps.event.addListenerOnce(map, 'bounds_changed', () => {\n fitToLocations(map, mapLocations);\n });\n } else {\n fitToLocations(map, mapLocations);\n }\n }\n\n google.maps.event.addListener(map, 'zoom_changed', () => {\n const currentZoom = map.getZoom();\n\n if (currentZoom !== undefined && zoomSize.current !== null) {\n if (currentZoom > zoomSize.current) {\n window.pendo.track(`${ALL_REPORTS}_Map_Maximize`);\n } else if (currentZoom < zoomSize.current) {\n window.pendo.track(`${ALL_REPORTS}_Map_Minimize`);\n }\n }\n\n zoomSize.current = currentZoom ?? null;\n });\n }\n }, [locations, map]);\n\n // wrapping to a function is useful in case you want to access `window.google`\n // to eg. setup options or create latLng object, it won't be available otherwise\n // feel free to render directly if you don't need that\n const onLoad = useCallback(function onLoad(mapInstance: google.maps.Map) {\n setMap(mapInstance);\n\n document.addEventListener('fullscreenchange', () => {\n if (document.fullscreenElement) {\n window.pendo.track(`${ALL_REPORTS}_Map_FullScreen`);\n }\n });\n }, []);\n\n const onUnmount = useCallback(function callback(map) {\n setMap(null);\n }, []);\n\n if (isLoaded) {\n return (\n <GoogleMap\n options={mapOptions}\n mapContainerStyle={containerStyle}\n onLoad={onLoad}\n onUnmount={onUnmount}\n >\n <MarkerClusterer options={clusterOptions}>\n {\n clusterer =>\n // @ts-ignore\n locations.map((location, index) => (\n <Marker\n key={index}\n position={location.coordinates}\n clusterer={clusterer}\n title={location.company_name}\n noClustererRedraw\n />\n ))\n // eslint-disable-next-line react/jsx-curly-newline\n }\n </MarkerClusterer>\n </GoogleMap>\n );\n }\n\n if (loadError) {\n return <div>Map cannot be loaded right now, sorry.</div>;\n }\n\n return <>Loading...</>;\n};\n\nconst MemoizedTouchesMap = React.memo(TouchesMap);\n\nexport default MemoizedTouchesMap;\n","import styled from 'styled-components';\nimport { Typography } from 'antd';\n\nconst Wrapper = styled.div`\n display: flex;\n padding: 10px 0;\n align-items: center;\n min-width: 190px;\n`;\n\nconst Text = styled(Typography.Text)`\n color: #90a0b7;\n font-size: 14px;\n line-height: 22px;\n flex: 1;\n margin: 0 10px 0 0;\n`;\n\nconst Total = styled.div`\n color: #1890ff;\n font-size: 16px;\n line-height: 24px;\n font-weight: 600;\n flex: 0;\n`;\n\nconst Styles = {\n Wrapper,\n Text,\n Total,\n};\n\nexport default Styles;\n","import React from 'react';\n// styles\nimport Styles from './LegendCard.styles';\n\ninterface LegendProps {\n text: string;\n info: string | number;\n}\n\nconst LegendCard: React.FC<LegendProps> = ({ text, info }) => {\n return (\n <Styles.Wrapper>\n <Styles.Text ellipsis>{text}</Styles.Text>\n <Styles.Total>{info}</Styles.Total>\n </Styles.Wrapper>\n );\n};\n\nexport default LegendCard;\n","import { RegionTouches } from '@optx/models/feature/analystsLeaderboard/touchesAcrossRegion';\n\n/**\n *\n * @param touch touch region info.\n * OBS: region can be empty string and we use country in that situation.\n */\nexport const getTopTouchLabel = (touch: RegionTouches) =>\n `${touch.region || touch.country}${touch.iso_2 ? `, ${touch.iso_2}` : ''}`;\n","import styled from 'styled-components';\nimport { up } from 'styled-breakpoints';\n\nconst Wrapper = styled.div`\n flex: 0;\n padding: 0 16px;\n white-space: nowrap;\n\n ${up('xl')} {\n padding: 0 50px;\n }\n`;\n\nconst Head = styled.div``;\n\nconst Body = styled.div`\n display: inline-block;\n\n ${up('xl')} {\n padding-top: 20px;\n }\n`;\n\nconst OrderedList = styled.ol`\n padding-inline-start: 15px;\n`;\n\nconst OrderedListItem = styled.li`\n ::marker {\n font-style: normal;\n font-weight: 600;\n font-size: 14px;\n line-height: 22px;\n /* Dark BLue */\n color: #334d6e;\n }\n`;\n\nconst Styles = {\n Wrapper,\n Head,\n Body,\n OrderedList,\n OrderedListItem,\n};\n\nexport default Styles;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// components\nimport LegendCard from '@optx/components/common/legend-card';\n// Local\n// utils\nimport { getTopTouchLabel } from '../../utils/top-touches';\n// redux\nimport { selectors } from '../../state';\n// components\nimport { SecondaryTitle, TypographyTitle } from '../styled';\nimport Styles from './TopTouches.styles';\n\nconst TopTouchesLegend = () => {\n const topTouches = useSelector(selectors.touchesAcrossRegion.getTopTouches);\n\n return (\n <Styles.Wrapper>\n <Styles.Head>\n <TypographyTitle level={4}>Top 5 Touch Regions</TypographyTitle>\n <SecondaryTitle>Regions with the most touches</SecondaryTitle>\n </Styles.Head>\n <Styles.Body>\n {topTouches.length ? (\n <Styles.OrderedList>\n {topTouches.map((touch, index) => {\n return (\n <Styles.OrderedListItem key={index}>\n <LegendCard text={getTopTouchLabel(touch)} info={touch.total} />\n </Styles.OrderedListItem>\n );\n })}\n </Styles.OrderedList>\n ) : (\n <>No touches</>\n )}\n </Styles.Body>\n </Styles.Wrapper>\n );\n};\n\nexport default TopTouchesLegend;\n","import styled from 'styled-components';\nimport { Row } from 'antd';\nimport { up } from 'styled-breakpoints';\n// components\nimport { SecondaryTitle } from '../styled';\n\nconst Content = styled(Row)`\n padding-top: 16px;\n\n ${up('xl')} {\n padding-top: 45px;\n }\n`;\n\nconst StyledSecondaryTitle = styled(SecondaryTitle)`\n &.ant-typography {\n margin-bottom: 0;\n }\n`;\n\nconst Styles = { Content, SecondaryTitle: StyledSecondaryTitle };\n\nexport default Styles;\n","import React from 'react';\nimport { Row, Col } from 'antd';\n// components\nimport Card from '@components/common/cards';\nimport ErrorBoundary from '@optx/components/common/ErrorBoundary';\nimport TouchesMap from './TouchesMap';\nimport { TypographyTitle } from '../styled';\nimport TopTouches from './TopTouches';\nimport Styles from './AnalystsTouches.styles';\n\nexport const AnalystsTouches = () => {\n return (\n <Card $transparent>\n <Row>\n <Col span={24}>\n <TypographyTitle level={4}># of Touches Across Region</TypographyTitle>\n <Styles.SecondaryTitle>\n This is the total # of touches across the sourcing group\n </Styles.SecondaryTitle>\n </Col>\n </Row>\n <Styles.Content>\n <Col flex={1}>\n <ErrorBoundary placeholder={<div>Ups, something went wrong with the map!</div>}>\n <TouchesMap />\n </ErrorBoundary>\n </Col>\n <Col>\n <TopTouches />\n </Col>\n </Styles.Content>\n </Card>\n );\n};\n\nexport default AnalystsTouches;\n","import styled from 'styled-components';\nimport { up } from 'styled-breakpoints';\n\nconst Section = styled.section`\n /* height: 100%; */\n background: #c2cfe0;\n\n &:nth-child(1) {\n box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.15);\n }\n`;\n\nconst Title = styled.h2`\n font-style: normal;\n font-weight: 600;\n font-size: 20px;\n line-height: 28px;\n margin: 0 0 30px;\n /* Gray / gray-1 */\n color: #ffffff;\n`;\n\nconst Body = styled.div`\n padding: 0 16px 16px;\n\n ${up('md')} {\n padding: 0 40px 40px;\n }\n`;\n\nconst BodyContent = styled.div`\n margin-top: -130px;\n`;\n\nconst Banner = styled.div`\n height: 150px;\n background: linear-gradient(0deg, #064885 0%, #137edf 119.38%);\n`;\n\nconst SubSection = styled.div`\n /* Gray / gray-1 */\n background: #ffffff;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.15);\n border-radius: 2px;\n\n padding: 18px 20px 14px 20px;\n margin-bottom: 36px;\n\n ${up('md')} {\n padding: 25px 40px;\n }\n`;\n\nconst SubSectionTitle = styled.h3`\n display: flex;\n align-items: center;\n font-style: normal;\n font-weight: 600;\n font-size: 16px;\n line-height: 24px;\n margin: 0 0 20px;\n\n .anticon:first-child {\n color: #1890ff;\n font-size: 24px;\n margin: 0 15px 0 0;\n }\n\n .radaricon {\n font-size: 28px;\n margin-right: 12px;\n }\n`;\n\nconst Styles = {\n Section,\n Title,\n Banner,\n Body,\n BodyContent,\n // subsection\n SubSection,\n SubSectionTitle,\n};\n\nexport default Styles;\n","import moment from 'moment';\nimport { LabelFormatter, TickFormatterFunction } from 'recharts';\nimport {\n DateTimePeriod,\n EmailsSentOption,\n} from '@optx/models/feature/analystsLeaderboard/EmailStatistics';\n\ntype DateRangeValue = [string | null, string | null];\n\ntype CreateLabelFormatter = (\n timerPeriod: DateTimePeriod | undefined,\n selectedInterval: DateRangeValue,\n options: Array<EmailsSentOption>\n) => LabelFormatter;\n\n/**\n * Create tooltip label formatter.\n * @param timerPeriod type of time period.\n * @param selectedInterval current selected stats date time interval.\n * @param options chart options.\n */\nexport const createLabelFormatter: CreateLabelFormatter =\n (timerPeriod, selectedInterval, options) => label => {\n switch (timerPeriod) {\n case 'hour': {\n return handleLabelHourFormatter(label as string);\n }\n\n case 'week': {\n return handleLabelWeekFormatter(label as string, selectedInterval, options);\n }\n\n case 'month':\n\n // eslint-disable-next-line no-fallthrough\n case 'year': {\n // December 28, 2020\n return `# of emails sent in ${label}`;\n }\n\n case 'day': {\n return `# of emails sent ${label}`;\n }\n\n default:\n return `# of emails on ${label}`;\n }\n };\n\n/**\n * Handle tooltip label hour formatter.\n * @param label label.\n */\nfunction handleLabelHourFormatter(label: string) {\n // February 01, 00:00\n const receivedFormat = 'MMMM DD, HH:mm';\n const date = moment(label, receivedFormat);\n const dayFormat = 'MMMM DD, YYYY';\n const hourFormat = 'HH:mm';\n const endDate = date.clone().add(2, 'hours');\n\n return `# of emails on ${date.format(dayFormat)} between\\n${date.format(\n hourFormat\n )} and ${endDate.format(hourFormat)} hours`;\n}\n\n/**\n * Handle tooltip label week formatter.\n * @param label label.\n * @param selectedInterval current selected stats date time interval.\n * @param options chart options.\n */\nfunction handleLabelWeekFormatter(\n label: string,\n selectedInterval: DateRangeValue,\n options: Array<EmailsSentOption>\n) {\n // December 28, 2020\n const receivedFormat = 'MMMM DD, YYYY';\n const optionIndex = options.findIndex(option => option.date === label);\n\n if (optionIndex !== -1) {\n if (optionIndex + 1 === options.length) {\n const dateEndString = moment(selectedInterval[1]).format(receivedFormat);\n\n return `# of emails between\\n${label} and ${dateEndString}`;\n }\n\n const dateEndString = moment(options[optionIndex + 1].date)\n .subtract(1, 'days')\n .format(receivedFormat);\n\n return `# of emails between\\n${label} and ${dateEndString}`;\n }\n\n return `# of emails sent ${label}`;\n}\n\n/**\n * Create tooltip tick formatter.\n * @param format\n */\nexport const createTickFormatter: (format: DateTimePeriod | undefined) => TickFormatterFunction =\n format => (value: string) => {\n switch (format) {\n case 'day': {\n // Display only week day.\n // Wed Jan 27 2021\n const receivedFormat = 'ddd MMM DD YYYY';\n const date = moment(value, receivedFormat);\n const chartFormat = 'dd';\n\n return date.format(chartFormat);\n }\n\n default:\n break;\n }\n\n return value;\n };\n","import { BarProps, TooltipProps, XAxisProps } from 'recharts';\nimport {\n defaultAxisLineProps,\n xAxisTickDefaultProps,\n} from '@optx/components/common/charts/LineChart/config';\n\nexport const commonBarProps: Omit<BarProps, 'dataKey'> = {\n radius: [10, 10, 0, 0],\n};\n\nexport const leftBarProps: Omit<BarProps, 'dataKey'> = {\n ...commonBarProps,\n fill: '#1890FF',\n};\n\nexport const rightBarProps: Omit<BarProps, 'dataKey'> = {\n fill: '#C2CFE0',\n ...commonBarProps,\n};\n\nexport const axisLineProps: React.SVGProps<SVGSVGElement> = {\n ...defaultAxisLineProps,\n style: {\n // space between XAxis line and bars.\n transform: 'translateY(4px)',\n },\n};\n\nexport const xAxisProps: XAxisProps = {\n axisLine: axisLineProps,\n tickLine: false,\n tick: xAxisTickDefaultProps,\n tickMargin: 10,\n interval: 'preserveStartEnd',\n};\n\n// tooltip\nexport const tooltipWrapperStyles: React.CSSProperties = {\n zIndex: 1,\n};\n\nconst tooltipCursor: React.CSSProperties = {\n opacity: 0.2,\n};\n\nconst tooltipLabelStyle: React.CSSProperties = {\n whiteSpace: 'pre-line',\n};\n\nexport const tooltipProps: TooltipProps = {\n wrapperStyle: tooltipWrapperStyles,\n labelStyle: tooltipLabelStyle,\n allowEscapeViewBox: { y: true },\n cursor: tooltipCursor,\n};\n","import React, { useMemo } from 'react';\nimport { BarChart, Bar, XAxis, Tooltip, ResponsiveContainer } from 'recharts';\n// models\nimport {\n EmailsSentOption,\n DateTimePeriod,\n} from '@models/feature/analystsLeaderboard/EmailStatistics';\n// components\nimport { MinimumSizeBar } from '@optx/components/common/charts/components';\nimport { createLabelFormatter, createTickFormatter } from './helpers';\nimport * as config from './config';\n\ntype DateRangeValue = [string | null, string | null];\n\ninterface EmailsSentChartProps {\n data: Array<EmailsSentOption>;\n timePeriod?: DateTimePeriod;\n selectedInterval: DateRangeValue;\n}\n\ntype DataKey = keyof EmailsSentOption;\n\nconst EmailsSentChart: React.FC<EmailsSentChartProps> = ({\n data,\n timePeriod,\n selectedInterval,\n}) => {\n const tickFormatter = useMemo(() => createTickFormatter(timePeriod), [timePeriod]);\n const labelFormatter = useMemo(\n () => createLabelFormatter(timePeriod, selectedInterval, data),\n [timePeriod, selectedInterval, data]\n );\n\n return (\n <ResponsiveContainer height={86}>\n <BarChart data={data} margin={{ top: 0, right: 0, left: 0, bottom: 10 }} barSize={8}>\n <XAxis dataKey={'date' as DataKey} {...config.xAxisProps} tickFormatter={tickFormatter} />\n <Tooltip separator=\": \" labelFormatter={labelFormatter} {...config.tooltipProps} />\n <Bar\n dataKey={'total_emails' as DataKey}\n name=\"Total Emails\"\n {...config.leftBarProps}\n shape={MinimumSizeBar}\n />\n <Bar\n dataKey={'average_emails' as DataKey}\n name=\"Team Average Emails\"\n {...config.rightBarProps}\n shape={MinimumSizeBar}\n />\n </BarChart>\n </ResponsiveContainer>\n );\n};\n\nexport default EmailsSentChart;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport StyledStatsCompare from '@optx/shared/view/molecules/statistics/StatsCompare/StatsCompare.styles';\n// redux\nimport { selectors } from '../../state';\n\nconst EmailsSentTitle = () => {\n const selectedPeriodLabel = useSelector(selectors.filters.getSelectedPeriodLabel);\n\n return (\n <StyledStatsCompare.Title>\n # OF EMAILS SENT {selectedPeriodLabel.toUpperCase()}\n </StyledStatsCompare.Title>\n );\n};\n\nexport default EmailsSentTitle;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { MailOutlined } from '@ant-design/icons';\nimport { Skeleton } from 'antd';\nimport { StatsCompare } from '@optx/shared/view/molecules/statistics';\nimport { AppState } from '@optx/redux/interfaces';\nimport { computePercent } from '@utils/number';\nimport StyledStatsSection from '../StatsSection/StatsSection.styles';\nimport EmailsSentChart from './EmailsSentChart';\nimport EmailsSentTitle from './EmailsSentTitle';\nimport { selectors } from '../../state';\n\n// touches\nconst formatTouchesAverage = (value: number) => `${value} Team Average`;\n\n// personalized emails\nconst formatValueWithPercent = (value: number, percent: number, hidePercentage = false) => {\n const formatPercent = `(${percent}%)`;\n\n return `${value} ${hidePercentage ? '' : formatPercent}`;\n};\n\nconst formatAverageWithPercent = (\n value: number,\n percent: number,\n suffix = 'Team Average',\n hidePercentage = false\n) => {\n const formatPercent = `(${percent}%)`;\n\n return `${value} ${hidePercentage ? '' : formatPercent} ${suffix}`;\n};\n\nconst EmailStatistics = () => {\n const emailInfo = useSelector(selectors.emailStatistics.getEmailsStatistics);\n const isFetching = useSelector(selectors.emailStatistics.isFetching);\n const selectedInterval = useSelector((state: AppState) =>\n selectors.filters.getSingleDateRangesValue(state, 'startdatetime')\n );\n\n return (\n <StyledStatsSection.SubSection>\n <StyledStatsSection.SubSectionTitle>\n <MailOutlined />\n Emails\n </StyledStatsSection.SubSectionTitle>\n\n <Skeleton loading={isFetching}>\n {emailInfo && (\n <>\n <EmailsSentTitle />\n <EmailsSentChart\n data={emailInfo.email_touches_statistics.data}\n timePeriod={emailInfo.email_touches_statistics.datetime_period}\n selectedInterval={selectedInterval}\n />\n\n <StatsCompare\n title=\"# OF TOTAL EMAILS SENT\"\n values={[\n emailInfo.email_touches_statistics.total_emails,\n emailInfo.email_touches_statistics.total_avg_emails,\n ]}\n renderCompareValue={formatTouchesAverage}\n />\n <StatsCompare\n title=\"# OF EMAILS SENT FROM SALES LOFT\"\n values={[\n emailInfo.salesloft_email_statistics.total_email_sent,\n emailInfo.salesloft_email_statistics.team_avg_sent,\n ]}\n renderMainValue={\n value =>\n formatValueWithPercent(\n value,\n computePercent(\n emailInfo.salesloft_email_statistics.total_email_sent,\n emailInfo.email_touches_statistics.total_emails\n ),\n emailInfo.email_touches_statistics.total_emails === 0\n )\n // eslint-disable-next-line react/jsx-curly-newline\n }\n renderCompareValue={\n value =>\n formatAverageWithPercent(\n value,\n computePercent(\n emailInfo.salesloft_email_statistics.team_avg_sent,\n emailInfo.email_touches_statistics.total_avg_emails\n ),\n 'Team Avg.',\n emailInfo.email_touches_statistics.total_avg_emails === 0\n )\n // eslint-disable-next-line react/jsx-curly-newline\n }\n />\n <StatsCompare\n title=\"# OF EMAILS OPENED SENT FROM SALES LOFT\"\n values={[\n emailInfo.salesloft_email_statistics.total_opened_sent,\n emailInfo.salesloft_email_statistics.team_avg_opened_sent,\n ]}\n renderMainValue={\n value =>\n formatValueWithPercent(\n value,\n computePercent(\n emailInfo.salesloft_email_statistics.total_opened_sent,\n emailInfo.salesloft_email_statistics.total_email_sent\n ),\n emailInfo.salesloft_email_statistics.total_email_sent === 0\n )\n // eslint-disable-next-line react/jsx-curly-newline\n }\n renderCompareValue={\n value =>\n formatAverageWithPercent(\n value,\n computePercent(\n emailInfo.salesloft_email_statistics.team_avg_opened_sent,\n emailInfo.salesloft_email_statistics.team_avg_sent\n ),\n 'Team Avg.',\n emailInfo.salesloft_email_statistics.team_avg_sent === 0\n )\n // eslint-disable-next-line react/jsx-curly-newline\n }\n />\n </>\n )}\n </Skeleton>\n </StyledStatsSection.SubSection>\n );\n};\n\nexport default EmailStatistics;\n","import styled from 'styled-components';\n// styles\nimport StyledTooltip from '@optx/components/common/charts/Tooltip.styles';\n\nconst Label = styled(StyledTooltip.Label)`\n white-space: pre-line;\n`;\n\nconst Total = styled.div<{ $selected: boolean }>`\n color: ${props => (props.$selected ? '#1890FF' : '#C2CFE0')};\n`;\n\nconst UserNames = styled.div`\n color: #1890ff;\n white-space: normal;\n`;\n\nexport default {\n Label,\n Total,\n UserNames,\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { isEmpty } from 'lodash';\nimport { TooltipProps } from 'recharts';\n// models\nimport { MultiSelectFilterColumns } from '@models/feature/analystsLeaderboard/filters';\nimport { SmartTouchScoreOption } from '@optx/models/feature/analystsLeaderboard/SmartTouchScore';\n// styles\nimport StyledTooltip from '@optx/components/common/charts/Tooltip.styles';\n// redux\nimport { AppState } from '@optx/redux/interfaces';\nimport { selectors } from '../../../state';\nimport Styled from './ChartTooltip.styled';\n\nconst ChartTooltip = ({ payload, active }: TooltipProps) => {\n const analysts = useSelector((state: AppState) =>\n selectors.filters.getSelectValue(state, 'analyst_id' as MultiSelectFilterColumns)\n );\n\n if (active && payload) {\n const item = payload[0].payload as SmartTouchScoreOption;\n const analystName = !isEmpty(analysts) ? analysts[0].label : '';\n\n return (\n <StyledTooltip.Wrapper>\n <Styled.Label>\n {item.is_selected\n ? `# of analysts fall into this range ${item.label}\n and the selected analyst ${analystName} falls into this range`\n : `# of analysts fall into this range ${item.label}`}\n </Styled.Label>\n <Styled.Total $selected={item.is_selected}>Total Analysts: {item.y_axis}</Styled.Total>\n\n {item.users && item.users.length > 0 ? (\n <>\n <Styled.Label>Analysts:</Styled.Label>\n <Styled.UserNames>{item.users.join(', ')}</Styled.UserNames>\n </>\n ) : (\n ''\n )}\n </StyledTooltip.Wrapper>\n );\n }\n\n return null;\n};\n\nexport default ChartTooltip;\n","import { BarProps, XAxisProps, YAxisProps, TooltipProps } from 'recharts';\n// components\nimport {\n defaultAxisLineProps,\n xAxisTickDefaultProps,\n} from '@optx/components/common/charts/LineChart/config';\n\nexport const commonBarProps: Omit<BarProps, 'dataKey'> = {\n radius: [10, 10, 0, 0],\n};\n\nexport const xAxisProps: XAxisProps = {\n axisLine: defaultAxisLineProps,\n tickLine: false,\n tick: xAxisTickDefaultProps,\n tickMargin: 10,\n};\n\nexport const yAxisProps: YAxisProps = {\n tick: false,\n axisLine: defaultAxisLineProps,\n interval: 0,\n label: {\n fill: '#C2CFE0',\n fontSize: 10,\n fontWeight: 600,\n value: 'FREQUENCY',\n angle: -90,\n dx: 16,\n },\n padding: { top: 0, bottom: 4 },\n};\n\nconst tooltipWrapperStyles: React.CSSProperties = {\n zIndex: 1,\n};\n\nconst tooltipCursor: React.CSSProperties = {\n opacity: 0.2,\n};\n\nexport const tooltipProps: TooltipProps = {\n wrapperStyle: tooltipWrapperStyles,\n allowEscapeViewBox: { y: true },\n cursor: tooltipCursor,\n};\n","import styled from 'styled-components';\n\nconst Title = styled.div`\n font-style: normal;\n font-weight: 600;\n font-size: 12px;\n line-height: 20px;\n padding-bottom: 16px;\n /* Dark BLue */\n color: #334d6e;\n opacity: 0.8;\n`;\n\nconst Legend = styled.div`\n font-style: normal;\n font-weight: 600;\n font-size: 10px;\n line-height: 20px;\n\n text-align: center;\n padding-top: 2px;\n padding-bottom: 6px;\n\n /* Gray */\n color: #90a0b7;\n opacity: 0.8;\n`;\n\nconst Styled = { Title, Legend };\n\nexport default Styled;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { BarChart, Bar, XAxis, Tooltip, ResponsiveContainer, YAxis, Cell } from 'recharts';\n// models\nimport { SmartTouchScoreOption } from '@models/feature/analystsLeaderboard/SmartTouchScore';\n// components\nimport ChartTooltip from './ChartTooltip';\nimport * as config from './config';\n// redux\nimport { selectors } from '../../../state';\n// styles\nimport Styles from '../SmartTouchScore.styled';\n\ninterface SmartTouchScoreChartProps {\n data: Array<SmartTouchScoreOption>;\n}\n\ntype DataKey = keyof SmartTouchScoreOption;\n\nconst SmartTouchScoreChart = ({ data }: SmartTouchScoreChartProps) => {\n const selectedPeriodLabel = useSelector(selectors.filters.getSelectedPeriodLabel);\n\n return (\n <>\n <Styles.Title>Distribution Across All Analysts</Styles.Title>\n\n <ResponsiveContainer height={112}>\n <BarChart data={data} margin={{ top: 0, right: 0, left: -40, bottom: 10 }} barSize={8}>\n <XAxis dataKey={'x_axis' as DataKey} {...config.xAxisProps} />\n <YAxis {...config.yAxisProps} domain={[0, 'dataMax + 5']} />\n <Tooltip content={<ChartTooltip />} {...config.tooltipProps} />\n <Bar dataKey={'y_axis' as DataKey} {...config.commonBarProps}>\n {data.map(entry => (\n <Cell key={entry.y_axis} fill={entry.is_selected ? '#1890FF' : '#C2CFE0'} />\n ))}\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n\n <Styles.Legend>SMART TOUCH SCORE OVER {selectedPeriodLabel.toUpperCase()}</Styles.Legend>\n </>\n );\n};\n\nexport default SmartTouchScoreChart;\n","import styled from 'styled-components';\nimport { InfoCircleOutlined } from '@ant-design/icons';\nimport PopoverComponent from '@optx/shared/view/molecules/Popover';\n\nconst Icon = styled(InfoCircleOutlined)`\n color: #6d8fb9;\n opacity: 0.8;\n font-size: 21px;\n margin-left: auto;\n`;\n\nconst Popover = styled(PopoverComponent)`\n max-width: 500px;\n\n &.ant-popover-placement-rightTop,\n &.ant-popover-placement-leftTop {\n .ant-popover-arrow {\n top: 51px;\n }\n }\n`;\n\nconst PopoverTitle = styled.span`\n white-space: nowrap;\n font-style: normal;\n font-weight: 600;\n font-size: 14px;\n line-height: 22px;\n /* Gray / gray-9 */\n color: #262626;\n`;\n\nconst PopoverContentDescription = styled.p`\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n /* Gray / gray-8 */\n color: #595959;\n margin: 0;\n\n b {\n /* color: #1890ff; */\n }\n`;\n\nexport default {\n Icon,\n Popover,\n PopoverTitle,\n PopoverContentDescription,\n};\n","import React from 'react';\nimport Styled from './Info.styled';\n\ninterface InfoProps {\n title: string;\n className?: string;\n}\n\nconst InfoContent = () => {\n return (\n <>\n <Styled.PopoverContentDescription>\n <b>Email</b> = <b>1</b> point\n </Styled.PopoverContentDescription>\n <Styled.PopoverContentDescription>\n <b>Voicemail</b> = <b>5</b> points\n </Styled.PopoverContentDescription>\n <Styled.PopoverContentDescription>\n <b>Call</b> = <b>10</b> points\n </Styled.PopoverContentDescription>\n <Styled.PopoverContentDescription>\n <b>Meeting</b> = <b>20</b> points\n </Styled.PopoverContentDescription>\n </>\n );\n};\n\nconst Info: React.FC<InfoProps> = ({ title, ...restProps }) => {\n return (\n <Styled.Popover\n align={{\n offset: [15, -55],\n }}\n arrowPointAtCenter\n placement=\"rightTop\"\n title={<Styled.PopoverTitle>{title}</Styled.PopoverTitle>}\n content={InfoContent}\n >\n <Styled.Icon {...restProps} />\n </Styled.Popover>\n );\n};\n\nexport default Info;\n","import React from 'react';\nimport { Skeleton } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { RadarChartOutlined } from '@ant-design/icons';\n// components\nimport { StatsCompare } from '@optx/shared/view/molecules/statistics';\nimport SmartTouchScoreChart from './SmartTouchScoreChart';\n// redux\nimport { selectors } from '../../state';\n// styles\nimport StyledStatsSection from '../StatsSection/StatsSection.styles';\nimport Info from './Info';\n\n// touches\nconst formatTouchesAverage = (value: number) => `${Math.round(value)} Team Average`;\n\nconst SmartTouchScore = () => {\n const selectedPeriodLabel = useSelector(selectors.filters.getSelectedPeriodLabel);\n const scoreData = useSelector(selectors.smartTouchScore.getSmartTouchScore);\n const isFetching = useSelector(selectors.smartTouchScore.isFetching);\n\n return (\n <StyledStatsSection.SubSection>\n <StyledStatsSection.SubSectionTitle>\n <RadarChartOutlined className=\"radaricon\" />\n Smart Touch Score\n <Info title=\"Number of points for each touch type\" />\n </StyledStatsSection.SubSectionTitle>\n <Skeleton loading={isFetching}>\n {scoreData && (\n <>\n <StatsCompare\n title={`MY TOTAL SCORE ${selectedPeriodLabel.toUpperCase()}`}\n values={[scoreData.selected_average, scoreData.team_average]}\n renderCompareValue={formatTouchesAverage}\n />\n\n <SmartTouchScoreChart data={scoreData.histogram} />\n </>\n )}\n </Skeleton>\n </StyledStatsSection.SubSection>\n );\n};\n\nexport default SmartTouchScore;\n","import React from 'react';\nimport Styles from './StatsSection.styles';\n\ninterface StatsSectionProps {\n title: string;\n}\n\nconst StatsSection: React.FC<StatsSectionProps> = ({ title, children }) => {\n return (\n <Styles.Section>\n <Styles.Banner />\n <Styles.Body>\n <Styles.BodyContent>\n <Styles.Title>{title}</Styles.Title>\n {children}\n </Styles.BodyContent>\n </Styles.Body>\n </Styles.Section>\n );\n};\n\nexport default StatsSection;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// import { ClockCircleOutlined } from '@ant-design/icons';\n// import { StatsCompare } from '@optx/shared/view/molecules/statistics';\nimport StatsPresentation from '@optx/shared/view/molecules/statistics/StatsPresentation';\nimport StyledStatsSection from '../StatsSection/StatsSection.styles';\n// import { formatHours } from '../../utils/format';\nimport { selectors } from '../../state';\n\n// const formatAverage = (value: number, suffix = 'Team Average') => `${formatHours(value)} ${suffix}`;\n\nconst AdditionalStatistics = () => {\n const additionalStatistics = useSelector(selectors.additionalStatistics.getAdditionalStatistics);\n\n return (\n <>\n <StyledStatsSection.SubSection>\n <StatsPresentation\n title={additionalStatistics?.all_time.title}\n items={additionalStatistics?.all_time.items}\n />\n </StyledStatsSection.SubSection>\n {/* <StyledStatsSection.SubSection>\n <StyledStatsSection.SubSectionTitle>\n <ClockCircleOutlined />\n Time Spent in OPTX\n </StyledStatsSection.SubSectionTitle>\n {additionalStatistics && (\n <StatsCompare\n title=\"AVERAGE # OF HOURS A DAY\"\n values={[\n additionalStatistics.time_spent_optx.items[0].value,\n additionalStatistics.time_spent_optx.items[1].value,\n ]}\n renderMainValue={formatHours}\n renderCompareValue={formatAverage}\n />\n )}\n </StyledStatsSection.SubSection> */}\n </>\n );\n};\n\nexport default AdditionalStatistics;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { selectors } from '../../state';\nimport { TypographyTitle } from '../styled';\n\nexport const Title = () => {\n const count = useSelector(selectors.pipelineInformation.selectCount);\n const countText = `${count} ${count !== 1 ? 'Companies' : 'Company'}`;\n const text = `Pipeline (${countText})`;\n\n return <TypographyTitle level={4}>{text}</TypographyTitle>;\n};\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\ninterface OrderedListProps extends React.LiHTMLAttributes<any> {\n $marker?: boolean;\n}\n\nconst Item = styled.li`\n padding: 10px 0;\n color: #90a0b7;\n font-size: 14px;\n line-height: 22px;\n\n ::marker {\n font-style: normal;\n font-weight: 600;\n font-size: 14px;\n line-height: 22px;\n color: #334d6e;\n }\n`;\n\nconst OrderedList = styled.ol<OrderedListProps>`\n padding-inline-start: 15px;\n\n ${props =>\n props.$marker === false &&\n css`\n padding-inline-start: 0;\n list-style: none;\n `}\n`;\n\nOrderedList.defaultProps = {\n $marker: true,\n};\n\nexport const Styled = {\n OrderedList,\n Item,\n};\n","import React from 'react';\nimport { Styled } from './OrderedList.styled';\nimport { OrderedListProps } from './OrderedList.interfaces';\n\nexport { Styled };\n\nconst RenderLiItem = (children: any, index: number) => (\n <Styled.Item key={index}>{children}</Styled.Item>\n);\n\nexport const OrderedList: React.FC<OrderedListProps> = ({\n dataSource,\n renderItem = RenderLiItem,\n ...restProps\n}) => <Styled.OrderedList {...restProps}>{dataSource.map(renderItem)}</Styled.OrderedList>;\n\nOrderedList.defaultProps = {\n $marker: true,\n};\n","import styled from 'styled-components';\n\nconst Value = styled.span`\n color: #1890ff;\n font-size: 16px;\n line-height: 24px;\n font-weight: 600;\n flex: 0;\n`;\n\nconst Label = styled.span`\n margin: 0 10px 0 0;\n`;\n\nconst Wrapper = styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nexport const Styled = {\n Value,\n Label,\n Wrapper,\n};\n","import React from 'react';\n\nimport { Styled } from './LabelValuePair.styled';\n\ninterface ListItemLabelValuePair {\n label: React.ReactNode;\n value: React.ReactNode;\n}\n\nexport const LabelValuePair: React.FC<ListItemLabelValuePair> = ({ label, value }) => {\n return (\n <Styled.Wrapper>\n <Styled.Label>{label}</Styled.Label>\n <Styled.Value>{value}</Styled.Value>\n </Styled.Wrapper>\n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { SelectOption } from '@optx/models/Option';\n\nimport { OrderedList, Styled as StyledOrderedList } from '@shared/view/molecules/List/OrderedList';\nimport { selectors } from '../../state';\nimport { TypographyTitle, SecondaryTitle } from '../styled';\nimport { LabelValuePair } from './LabelValuePair';\n\nconst renderStageItem = (stage: SelectOption, index: number) => (\n <StyledOrderedList.Item key={index}>\n <LabelValuePair label={stage.label} value={stage.value} />\n </StyledOrderedList.Item>\n);\n\nexport const OtherDealStages = () => {\n const dealStages = useSelector(selectors.pipelineInformation.selectOtherDealStages);\n\n return (\n <div>\n <TypographyTitle level={5}>Other Deal Stages</TypographyTitle>\n <SecondaryTitle>There are 12 different deal stages</SecondaryTitle>\n\n <OrderedList dataSource={dealStages} renderItem={renderStageItem} />\n </div>\n );\n};\n","import React from 'react';\nimport { TooltipProps } from 'recharts';\n\nimport { PipelineInterval } from '@optx/models/feature/analystsLeaderboard/PipelineInformation';\nimport StyledTooltip from '@optx/components/common/charts/Tooltip.styles';\n\ntype OptionKey = keyof PipelineInterval;\n\nexport const TooltipContent = (props: TooltipProps) => {\n const { active, payload, separator, labelStyle } = props;\n\n if (active && payload && payload.length) {\n const tooltipPayload = payload[0];\n const data = tooltipPayload.payload as PipelineInterval;\n const dataKey = tooltipPayload.dataKey as OptionKey;\n\n return (\n <StyledTooltip.Wrapper>\n <StyledTooltip.Label style={{ ...labelStyle }}>{data.label}</StyledTooltip.Label>\n <div style={{ color: tooltipPayload.color }}>\n {tooltipPayload.name}\n {separator}\n {data[dataKey]}\n </div>\n </StyledTooltip.Wrapper>\n );\n }\n\n return null;\n};\n","import styled from 'styled-components';\n\nconst ChartsWrapper = styled.div`\n display: flex;\n`;\n\nconst SelectedPeriodWrapper = styled.div<{ fillContent: boolean }>`\n width: ${props => (props.fillContent ? '100%' : 'calc(50% + 70px)')};\n`;\n\nconst PreviousPeriodWrapper = styled.div`\n width: calc(50% - 70px);\n`;\n\nexport const Styled = {\n ChartsWrapper,\n SelectedPeriodWrapper,\n PreviousPeriodWrapper,\n};\n","import React from 'react';\nimport { LegendValueFormatter } from 'recharts';\nimport moment from 'moment';\n\nimport globalConfig from '@constants/config';\nimport { LegendText } from '@components/common/charts/LineChart/LegendFormatter/styles';\n\nexport const createLegendFormatter: (date: string | null) => LegendValueFormatter =\n date => value => {\n const momentDate = moment(date);\n\n const text =\n date && momentDate.isValid()\n ? `AS OF ${momentDate.format(globalConfig.short_date.DATE_FORMAT)} Last day of period`\n : String(value).toUpperCase();\n\n return <LegendText>{text}</LegendText>;\n };\n","import React, { useCallback } from 'react';\nimport {\n ResponsiveContainer,\n ResponsiveContainerProps,\n CartesianGrid,\n XAxis,\n Legend,\n Tooltip,\n YAxis,\n BarChart,\n Bar,\n YAxisProps,\n} from 'recharts';\nimport { useSelector } from 'react-redux';\nimport { merge } from 'lodash';\n\n// components\nimport {\n yAxisProps,\n legendProps,\n cartesianGridProps,\n} from '@optx/components/common/charts/LineChart/config';\nimport EmptyChart from '@optx/components/common/charts/EmptyChart';\nimport { PipelineInterval } from '@optx/models/feature/analystsLeaderboard/PipelineInformation';\nimport { MinimumSizeBar } from '@optx/components/common/charts/components';\n// Local\n// redux\nimport { selectors } from '../../../state';\nimport { TooltipContent } from './Tooltip';\nimport { Styled } from './PipelineChart.styled';\nimport { createLegendFormatter } from './Legend';\n\ninterface LeaderboardChartProps extends Omit<ResponsiveContainerProps, 'children'> {}\n\ntype OptionKey = keyof PipelineInterval;\n\nconst labelKey: OptionKey = 'label';\nconst selectedPeriodKey: OptionKey = 'selected_period';\nconst previousPeriodKey: OptionKey = 'previous_period';\n\nconst valueYAxisDifferentProps: YAxisProps = {\n tick: {\n fill: '#334D6E',\n },\n};\n\nconst valueYAxisProps = merge({}, yAxisProps, valueYAxisDifferentProps);\n\nconst tooltipCursor: React.CSSProperties = {\n opacity: 0.2,\n};\n\nexport const PipelineChart = (props: LeaderboardChartProps) => {\n const data = useSelector(selectors.pipelineInformation.selectPipelineInfo);\n const selectedPeriodDate = useSelector(selectors.pipelineInformation.selectSelectedPeriodDate);\n const previousPeriodDate = useSelector(selectors.pipelineInformation.selectPreviousPeriodDate);\n const selectedPeriodName = useSelector(selectors.filters.getSelectedPeriodLabel);\n const previousPeriodName = useSelector(selectors.pipelineInformation.selectPreviousPeriodName);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const selectedPeriodLegendFormatter = useCallback(createLegendFormatter(selectedPeriodDate), [\n selectedPeriodDate,\n ]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const previousPeriodLegendFormatter = useCallback(createLegendFormatter(previousPeriodDate), [\n previousPeriodDate,\n ]);\n\n const isAllTime = selectedPeriodName.toLowerCase() === 'all time';\n\n if (!data || !data.length) {\n return <EmptyChart />;\n }\n\n return (\n <Styled.ChartsWrapper>\n <Styled.SelectedPeriodWrapper fillContent={isAllTime}>\n <ResponsiveContainer width=\"100%\" height={330} {...props}>\n <BarChart\n data={data}\n margin={{ bottom: 20 }}\n style={{ margin: '20px 0 0' }}\n layout=\"vertical\"\n syncId=\"syncId\"\n barGap={0}\n barCategoryGap={5}\n barSize={18}\n >\n <CartesianGrid {...cartesianGridProps} />\n {/* YAxis are displayed in reversed order. */}\n <YAxis\n {...valueYAxisProps}\n dataKey={selectedPeriodKey}\n type=\"category\"\n yAxisId={0}\n axisLine={false}\n tickMargin={6}\n width={50}\n tick={{ dx: -30, textAnchor: 'start' }}\n />\n <YAxis\n {...yAxisProps}\n dataKey={labelKey}\n type=\"category\"\n yAxisId={1}\n width={140}\n tickMargin={16}\n />\n <XAxis dataKey={selectedPeriodKey} domain={['dataMin', 'dataMax']} type=\"number\" hide />\n <Tooltip separator=\": \" content={TooltipContent} cursor={tooltipCursor} />\n <Legend\n {...legendProps}\n wrapperStyle={{ paddingLeft: 188 }}\n formatter={selectedPeriodLegendFormatter}\n />\n <Bar\n dataKey={selectedPeriodKey}\n fill=\"#096DD9\"\n name={selectedPeriodName}\n shape={MinimumSizeBar}\n />\n </BarChart>\n </ResponsiveContainer>\n </Styled.SelectedPeriodWrapper>\n {!isAllTime && (\n <Styled.PreviousPeriodWrapper>\n <ResponsiveContainer width=\"100%\" height={330} {...props}>\n <BarChart\n data={data}\n margin={{ bottom: 20 }}\n style={{ margin: '20px 0 0' }}\n layout=\"vertical\"\n syncId=\"syncId\"\n barGap={0}\n barCategoryGap={5}\n barSize={18}\n >\n <CartesianGrid {...cartesianGridProps} />\n {/* YAxis are displayed in reversed order. */}\n <YAxis\n {...valueYAxisProps}\n dataKey={previousPeriodKey}\n type=\"category\"\n yAxisId={0}\n axisLine={false}\n width={50}\n tickMargin={6}\n tick={{ dx: -30, textAnchor: 'start' }}\n />\n <YAxis\n {...yAxisProps}\n dataKey={previousPeriodKey}\n type=\"category\"\n yAxisId={1}\n tick={false}\n width={2}\n />\n <XAxis\n dataKey={previousPeriodKey}\n domain={['dataMin', 'dataMax']}\n type=\"number\"\n hide\n />\n <Tooltip separator=\": \" content={TooltipContent} cursor={tooltipCursor} />\n <Legend\n {...legendProps}\n wrapperStyle={{ paddingLeft: 51 }}\n formatter={previousPeriodLegendFormatter}\n />\n <Bar\n dataKey={previousPeriodKey}\n fill=\"#F5222D\"\n name={previousPeriodName}\n shape={MinimumSizeBar}\n />\n </BarChart>\n </ResponsiveContainer>\n </Styled.PreviousPeriodWrapper>\n )}\n </Styled.ChartsWrapper>\n );\n};\n\nexport default PipelineChart;\n","import React, { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { ValueType } from 'react-select';\n// models\nimport { SingleSelectColumns } from '@optx/models/feature/analystsLeaderboard/filters';\nimport { SelectOption } from '@models/Option';\nimport { AppState } from '@optx/redux/interfaces';\nimport { MultiSelectFilter } from '@optx/models/filters';\n// components\nimport { SingleSelect, SingleSelectProps } from '@shared/view/molecules/Select';\n\n// Local\nimport { selectors, actions } from '../state';\n\ninterface FilterSingleSelectProps extends SingleSelectProps {\n filterKey: SingleSelectColumns;\n criteria?: string;\n}\n\nconst FilterSingleSelect: React.FC<FilterSingleSelectProps> = ({\n filterKey,\n criteria,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n\n const filter = useSelector((state: AppState) =>\n selectors.filters.getFilter(state, filterKey)\n ) as MultiSelectFilter<Array<SelectOption>>;\n const options = useSelector((state: AppState) =>\n selectors.filters.getSelectOptions(state, filterKey)\n );\n const value = useSelector((state: AppState) =>\n selectors.filters.getSelectValue(state, filterKey, criteria)\n );\n\n const updateValue = useCallback(\n (newValue: ValueType<SelectOption>) => {\n let finalValue = newValue;\n\n if (newValue && !Array.isArray(newValue)) {\n finalValue = [newValue as SelectOption];\n }\n\n dispatch(actions.filters.updateValue({ value: finalValue, filterKey, criteria }));\n },\n [dispatch, filterKey, criteria]\n );\n\n return (\n <SingleSelect\n options={options}\n onChange={updateValue}\n value={value}\n placeholder={filter ? filter.placeholders : undefined}\n {...restProps}\n />\n );\n};\n\nexport default FilterSingleSelect;\n","import styled from 'styled-components';\n\nimport FilterSingleSelect from '../FilterSingleSelect';\n\nconst Select = styled(FilterSingleSelect)`\n min-width: 330px;\n`;\n\nexport const Styled = {\n Select,\n};\n","import React, { useEffect } from 'react';\nimport { CalendarOutlined } from '@ant-design/icons';\nimport { useSelector } from 'react-redux';\n\nimport { SelectOption } from '@optx/models/Option';\nimport { Styled } from './PreviousPeriodSelect.styled';\nimport { pipelineCriteria } from '../../constants/custom-criteria';\nimport { selectors } from '../../state';\nimport { ALL_REPORTS, transformPendoString } from '@optx/constants/pendoActions';\n\nconst emptyValue: [SelectOption] = [{ label: 'None', value: '' }];\n\nexport const PreviousPeriodSelect = () => {\n const isAllTimeRange = useSelector(selectors.filters.isAllTimeDate);\n const storeValue = useSelector((state: any) =>\n selectors.filters.getSelectValue(state, 'previous_period', pipelineCriteria)\n );\n const value = isAllTimeRange ? emptyValue : storeValue;\n\n useEffect(() => {\n if (value[0]?.label) {\n window.pendo.track(`${ALL_REPORTS}_Pipeline_${transformPendoString(value[0]?.label)}`);\n }\n }, [value]);\n\n return (\n <Styled.Select\n filterKey=\"previous_period\"\n criteria={pipelineCriteria}\n valuePrefix=\"Compare with:\"\n SearchIcon={<CalendarOutlined />}\n isDisabled={isAllTimeRange}\n value={value}\n />\n );\n};\n","import styled from 'styled-components';\nimport { Card as ANTDCard } from 'antd';\nimport { down } from 'styled-breakpoints';\n\nimport $Card from '@optx/components/common/cards/Card';\nimport * as StyledTitle from '../styled';\nimport FilterSingleSelect from '../FilterSingleSelect';\n\nconst SecondaryTitle = styled(StyledTitle.SecondaryTitle)`\n &.ant-typography {\n margin-bottom: 0;\n }\n`;\n\nconst Card = styled($Card)`\n .ant-card-body {\n display: flex;\n flex-wrap: wrap;\n /* Issue with Grid if the type is not actual ANTD Grid type is not hiding padding */\n padding: 0;\n }\n\n .ant-card-loading-content {\n width: 100%;\n }\n`;\n\nconst GridChart = styled(ANTDCard.Grid)`\n flex: 1;\n`;\n\nconst GridOtherDealStages = styled(ANTDCard.Grid)`\n width: calc(33% - 40px);\n min-width: 264px;\n\n ${down('xl')} {\n width: 100%;\n }\n`;\n\nconst PreviousPeriodSelect = styled(FilterSingleSelect)`\n min-width: 330px;\n`;\n\nexport const Styled = {\n SecondaryTitle,\n Card,\n GridChart,\n GridOtherDealStages,\n PreviousPeriodSelect,\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { pipelineCriteria } from '../../constants/custom-criteria';\nimport { selectors } from '../../state';\nimport FilterSingleSelectButtons from '../FilterSingleSelectButtons';\nimport { Title } from './Title';\nimport { OtherDealStages } from './OtherDealStages';\nimport { PipelineChart } from './PipelineChart';\nimport { PreviousPeriodSelect } from './PreviousPeriodSelect';\nimport { Styled } from './PipelineInformation.styled';\n\nexport const PipelineInformation = () => {\n const isLoading = useSelector(selectors.pipelineInformation.isLoading);\n\n return (\n <Styled.Card\n $transparent\n title={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <>\n <Title />\n <Styled.SecondaryTitle># of companies in each deal stage</Styled.SecondaryTitle>\n </>\n }\n extra={<PreviousPeriodSelect />}\n loading={isLoading}\n >\n <Styled.GridChart hoverable={false}>\n <FilterSingleSelectButtons\n filterKey=\"pipeline_companies_rank\"\n criteria={pipelineCriteria}\n />\n <PipelineChart />\n </Styled.GridChart>\n\n <Styled.GridOtherDealStages hoverable={false}>\n <OtherDealStages />\n </Styled.GridOtherDealStages>\n </Styled.Card>\n );\n};\n","import styled from 'styled-components';\nimport { MainContent } from '@optx/components/common/layout';\n\nconst StyledMainContent = styled(MainContent)``;\n\nconst StatsWrapper = styled.div`\n background: #c2cfe0;\n box-shadow: 0px 0px 4px rgb(0 0 0 / 15%);\n`;\n\nconst Wrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n\n ${StatsWrapper},\n ${StyledMainContent} {\n min-width: 1px;\n width: 100%;\n }\n\n @media (min-width: 1600px) {\n flex-wrap: nowrap;\n\n ${StatsWrapper} {\n flex: 0;\n min-width: 500px;\n max-width: 500px;\n }\n\n ${StyledMainContent} {\n flex: 1;\n margin-top: 23px;\n }\n }\n`;\n\nconst Styled = {\n Wrapper,\n StatsWrapper,\n MainContent: StyledMainContent,\n};\n\nexport default Styled;\n","import React, { useEffect } from 'react';\nimport { Row, Col } from 'antd';\nimport { useDispatch } from 'react-redux';\n// constants\nimport { cardRowGutter } from '@constants/spacing';\n// components\nimport Card from '@components/common/cards';\n// local\n// hooks\nimport { useInject } from '@components/pages/AnalystsLeaderboard/hooks';\n// redux\nimport { actions as initActions } from '@components/pages/AnalystsLeaderboard/state/init/index';\n// styles\nimport {\n PageTitle,\n ByAnalystsOrTeamMultiSelect,\n} from '@components/pages/AnalystsLeaderboard/components/styled';\n// components\nimport ReportBreadcrumb from '@optx/screens/App/AllReports/components/ReportBreadcrumb';\nimport LeaderboardChart from './LeaderboardChart';\nimport FilterCards from './Cards/FilterCards';\nimport ChartCardHead from './ChartCardHead';\nimport FilterSingleSelectDateRanges from './FilterSingleSelectDateRanges';\nimport Header from './Header';\nimport PageLoader from './PageLoader';\nimport AnalystsTouches from './AnalystsTouches';\nimport EmailStatistics from './EmailStatistics';\nimport SmartTouchScore from './SmartTouchScore';\nimport StatsSection from './StatsSection';\nimport AdditionalStatistics from './AdditionalStatistics';\nimport { PipelineInformation } from './PipelineInformation';\nimport Styled from './AnalystsLeaderboard.styled';\n\nconst AnalystsLeaderboard = () => {\n useInject();\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(initActions.pageLoaded());\n }, [dispatch]);\n\n return (\n <>\n <PageLoader />\n <Header />\n\n <Styled.Wrapper>\n <Styled.MainContent className=\"main-content\">\n <ReportBreadcrumb reportPage=\"Sourcing Team Stats\" />\n <PageTitle>Sourcing Team Stats</PageTitle>\n <Row gutter={cardRowGutter} justify=\"space-between\" style={{ marginBottom: 0 }}>\n <Col xs={24} xl={12}>\n <ByAnalystsOrTeamMultiSelect filterKey=\"analyst_id\" allowSelectAll />\n </Col>\n <Col>\n <FilterSingleSelectDateRanges filterKey=\"startdatetime\" />\n </Col>\n </Row>\n <Row gutter={cardRowGutter} style={{ paddingTop: '21px', paddingBottom: '42px' }}>\n <Col xs={24} xl={24}>\n <FilterCards />\n </Col>\n </Row>\n <Row gutter={cardRowGutter} style={{ paddingBottom: '42px' }}>\n <Col span={24}>\n <Card $transparent>\n <ChartCardHead />\n <LeaderboardChart />\n </Card>\n </Col>\n <Col span={24}>\n <PipelineInformation />\n </Col>\n <Col span={24}>\n <AnalystsTouches />\n </Col>\n </Row>\n </Styled.MainContent>\n <Styled.StatsWrapper>\n <StatsSection title=\"My Stats Breakdown\">\n <SmartTouchScore />\n <EmailStatistics />\n </StatsSection>\n <StatsSection title=\"OPTX Stats\">\n <AdditionalStatistics />\n </StatsSection>\n </Styled.StatsWrapper>\n </Styled.Wrapper>\n </>\n );\n};\n\nexport default AnalystsLeaderboard;\n","export const featureName = 'company-merges';\n","import { utils as requestUtils } from '@features/request';\nimport { createFeatureActionType } from '@optx/utils/feature';\nimport { featureName } from '../featureName';\n\n// fetch company merges\nexport const fetchCompanyMerges = requestUtils.createActionTypes(featureName, 'FETCH_MERGES');\n// unmerge\nexport const unmergeCompanies = createFeatureActionType(featureName, 'UNMERGE_COMPANIES');\nexport const setSelectedCompanies = createFeatureActionType(featureName, 'SET_SELECTED_COMAPNIES');\nexport const setUnmergeLoading = createFeatureActionType(featureName, 'SET_UNMERGE_LOADING');\nexport const setUnmergeCompleted = createFeatureActionType(featureName, 'SET_UNMERGE_COMPLETED');\nexport const resetUnmerge = createFeatureActionType(featureName, 'RESET_UNMERGE');\nexport const toggleUnmergeModal = createFeatureActionType(featureName, 'TOGGLE_UNMERGE_MODAL');\nexport const toggleShouldCopyData = createFeatureActionType(featureName, 'TOGGLE_SHOULD_COPY_DATA');\nexport const resetPagination = createFeatureActionType(featureName, 'RESET_PAGINATION');\nexport const setUnmergeCompanyId = createFeatureActionType(featureName, 'SET_UNMERGE_COMPANY_ID');\nexport const setUnmergeError = createFeatureActionType(featureName, 'SET_UNMERGE_ERROR');\n","import { createAction } from '@reduxjs/toolkit';\nimport { CompanyMergesResponse } from '@optx/models/company/CompanyMerges';\nimport * as types from './types';\nimport {\n CompanyMergesPayload,\n SelectedCompaniesPayload,\n UnmergeCompaniesPayload,\n UnmergeCompaniesResponse,\n} from './interfaces';\n\n// fetch company touches actions\nexport const fetchMerges = createAction<CompanyMergesPayload>(types.fetchCompanyMerges.REQUEST);\nexport const fetchMergesSuccess = createAction(\n types.fetchCompanyMerges.SUCCESS,\n (response: CompanyMergesResponse, searchPayload: CompanyMergesPayload) => ({\n payload: response,\n meta: searchPayload,\n })\n);\nexport const fetchMergesFail = createAction<string>(types.fetchCompanyMerges.FAILURE);\nexport const unmergeCompanies = createAction<UnmergeCompaniesPayload>(types.unmergeCompanies);\nexport const setSelectedCompanies = createAction<SelectedCompaniesPayload>(\n types.setSelectedCompanies\n);\nexport const setUnmergeCompleted = createAction<boolean>(types.setUnmergeCompleted);\nexport const setUnmergeLoading = createAction<boolean>(types.setUnmergeLoading);\nexport const resetUnmerge = createAction(types.resetUnmerge);\nexport const toggleUnmergeModal = createAction<boolean>(types.toggleUnmergeModal);\nexport const toggleShouldCopyData = createAction(types.toggleShouldCopyData);\nexport const resetPagination = createAction(types.resetPagination);\nexport const setUnmergeCompanyId = createAction<UnmergeCompaniesResponse>(\n types.setUnmergeCompanyId\n);\nexport const setUnmergeError = createAction<string>(types.setUnmergeError);\n","import { createSelector } from 'reselect';\nimport { featureName } from '../featureName';\nimport { CompanyMergesState } from './interfaces';\n\nconst getCompanyMergesState = (state: Record<typeof featureName, CompanyMergesState>) =>\n state[featureName];\n\nexport const shouldInitialFetch = createSelector(\n getCompanyMergesState,\n state => !state.fetchedAt && !state.loading\n);\n\nexport const isLoading = createSelector(getCompanyMergesState, state => state.loading);\n\nexport const getError = createSelector(getCompanyMergesState, state => state.error);\n\nexport const getCompanyMerges = createSelector(getCompanyMergesState, state => state.data);\nexport const getCompanyMergesPagination = createSelector(\n getCompanyMergesState,\n state => state.pagination\n);\nexport const getCompanyMergesCount = createSelector(getCompanyMergesState, state => state.count);\n\n// unmerge\nexport const getUnmergeModalVisible = createSelector(\n getCompanyMergesState,\n state => state.unmergeModalVisible\n);\nexport const getUnmergeLoading = createSelector(\n getCompanyMergesState,\n state => state.unmergeLoading\n);\nexport const getUnmergeCompleted = createSelector(\n getCompanyMergesState,\n state => state.unmergeCompleted\n);\nexport const getSelectedCompanies = createSelector(\n getCompanyMergesState,\n state => state.selectedCompanies\n);\nexport const getShouldCopyData = createSelector(\n getCompanyMergesState,\n state => state.shouldCopyData\n);\nexport const getUnmergedCompanyId = createSelector(\n getCompanyMergesState,\n state => state.unmergedCompanyId\n);\nexport const getUnmergeError = createSelector(getCompanyMergesState, state => state.unmergeError);\nexport const getHasMore = createSelector(getCompanyMergesState, state => state.hasMore);\n","import { takeLatest, call, put, select } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { CompanyService, UserService } from '@services/api';\nimport { AxiosResponse } from 'axios';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { CompanyMergesResponse } from '@optx/models/company/CompanyMerges';\nimport NotificationService from '@services/NotificationService';\nimport { getErrorMessage } from '@optx/utils/api/errors';\nimport { actions as customGlobalLoaderActions } from '@features/custom-global-loader';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\nimport {\n CompanyMergesPayload,\n UnmergeCompaniesPayload,\n UnmergeCompaniesResponse,\n} from './interfaces';\n\nexport function* fetchCompanyMergesSaga(action: PayloadAction<CompanyMergesPayload, any, boolean>) {\n const searchPayload = action.payload;\n\n try {\n const res: AxiosResponse<CompanyMergesResponse> = yield call(\n CompanyService.getCompanyMerges,\n searchPayload\n );\n yield put(actions.fetchMergesSuccess(res.data, searchPayload));\n } catch (error: any) {\n const errorMessage = getErrorMessage(error, 'Error fetching company merges!');\n yield put(actions.fetchMergesFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nfunction* unmergeCompaniesSaga(action: PayloadAction<UnmergeCompaniesPayload>) {\n const pagination: PageInfo = yield select(selectors.getCompanyMergesPagination);\n const shouldCopyData: boolean = yield select(selectors.getShouldCopyData);\n const { selectedCompanies, companyId } = action.payload;\n const companies = [...selectedCompanies];\n\n const sourceIds = companies.map(company => +company.id);\n yield put(actions.setUnmergeLoading(true));\n\n try {\n const res: AxiosResponse<UnmergeCompaniesResponse> = yield call(\n UserService.unmergeCompanies,\n companyId,\n sourceIds,\n shouldCopyData\n );\n\n if (res.data) {\n const successMessage = 'Companies unmerged successfully';\n NotificationService.success(successMessage);\n\n yield put(actions.setUnmergeCompanyId(res.data));\n yield put(actions.setUnmergeLoading(false));\n yield put(actions.setUnmergeCompleted(true));\n yield put(actions.resetPagination());\n yield put(actions.fetchMerges({ companyId, page: pagination.pageNumber, reset: true }));\n }\n } catch (e: any) {\n const message = getErrorMessage(e, 'Failed to unmerged companies!');\n NotificationService.error(message);\n\n yield put(actions.setUnmergeLoading(false));\n yield put(actions.setUnmergeCompleted(true));\n yield put(actions.setUnmergeError(message));\n } finally {\n yield put(customGlobalLoaderActions.toggle({ loading: false, customText: '' }));\n }\n}\n\nexport default function* companyTouchesSaga() {\n yield takeLatest(actions.fetchMerges, fetchCompanyMergesSaga);\n yield takeLatest(actions.unmergeCompanies, unmergeCompaniesSaga);\n}\n","import { createReducer, CaseReducer, PayloadAction } from '@reduxjs/toolkit';\nimport { CompanyMergesResponse } from '@optx/models/company/CompanyMerges';\nimport { fetchFailReducer } from '@redux/feature/fetch/reducers';\nimport * as actions from './actions';\n// models\nimport {\n CompanyMergesPayload,\n CompanyMergesState,\n SelectedCompaniesPayload,\n UnmergeCompaniesResponse,\n} from './interfaces';\n\nconst initialState: CompanyMergesState = {\n data: [],\n loading: false,\n error: '',\n fetchedAt: '',\n count: 0,\n per_page: 200,\n pagination: {\n pageNumber: 1,\n pageSize: 200,\n },\n selectedCompanies: [],\n unmergeCompleted: false,\n unmergeLoading: false,\n unmergeModalVisible: false,\n shouldCopyData: false,\n unmergedCompanyId: null,\n resetData: false,\n unmergeError: '',\n hasMore: false,\n};\n\n// fetch merges\nconst fetchMergesReducer: CaseReducer<CompanyMergesState, PayloadAction<CompanyMergesPayload>> = (\n draftState,\n action\n) => {\n draftState.loading = true;\n draftState.resetData = action.payload.reset ?? false;\n draftState.error = '';\n};\n\nconst fetchMergesSuccessReducer: CaseReducer<\n CompanyMergesState,\n PayloadAction<CompanyMergesResponse, any, CompanyMergesPayload>\n> = (draftState, action) => {\n const results = action.payload.results;\n\n if (draftState.resetData) {\n draftState.data = results;\n draftState.pagination.pageNumber = 1;\n } else {\n draftState.data = [...draftState.data, ...results];\n draftState.pagination.pageNumber += 1;\n }\n\n draftState.loading = false;\n draftState.count = action.payload.count;\n draftState.hasMore =\n results.length === action.payload.per_page && results.length < action.payload.count;\n};\n\nconst selectCompanyIdsReducer: CaseReducer<\n CompanyMergesState,\n PayloadAction<SelectedCompaniesPayload>\n> = (draftState, { payload }) => {\n draftState.selectedCompanies = payload.selectedCompanies;\n};\n\nconst setUnmergeCompletedReducer: CaseReducer<CompanyMergesState, PayloadAction<boolean>> = (\n draftState,\n { payload }\n) => {\n draftState.unmergeCompleted = payload;\n};\n\nconst setUnmergeLoadingReducer: CaseReducer<CompanyMergesState, PayloadAction<boolean>> = (\n draftState,\n { payload }\n) => {\n draftState.unmergeLoading = payload;\n};\n\nconst resetUnmergeReducer: CaseReducer<CompanyMergesState, PayloadAction> = draftState => {\n draftState.selectedCompanies = [];\n draftState.unmergedCompanyId = null;\n draftState.resetData = false;\n draftState.unmergeError = '';\n draftState.unmergeCompleted = false;\n draftState.unmergeLoading = false;\n draftState.unmergeModalVisible = false;\n draftState.shouldCopyData = false;\n};\n\nconst toggleUnmergeModalReducer: CaseReducer<CompanyMergesState, PayloadAction<boolean>> = (\n draftState,\n { payload }\n) => {\n draftState.unmergeModalVisible = payload;\n};\n\nconst resetPaginationReducer: CaseReducer<CompanyMergesState, PayloadAction> = draftState => {\n draftState.pagination = {\n pageNumber: 1,\n pageSize: 25,\n };\n};\n\nconst toggleShouldCopyDataReducer: CaseReducer<CompanyMergesState, PayloadAction> = draftState => {\n draftState.shouldCopyData = !draftState.shouldCopyData;\n};\n\nconst setUnmergeCompanyIdReducer: CaseReducer<\n CompanyMergesState,\n PayloadAction<UnmergeCompaniesResponse>\n> = (draftState, { payload }) => {\n draftState.unmergedCompanyId = payload.company_id;\n};\n\nconst setUnmergeErrorReducer: CaseReducer<CompanyMergesState, PayloadAction<string>> = (\n draftState,\n { payload }\n) => {\n draftState.unmergeError = payload;\n};\n\nconst reducer = createReducer(initialState, builder =>\n builder\n // fetch company merges\n .addCase(actions.fetchMerges, fetchMergesReducer)\n .addCase(actions.fetchMergesSuccess, fetchMergesSuccessReducer)\n .addCase(actions.fetchMergesFail, fetchFailReducer)\n // unmerge companies\n .addCase(actions.setSelectedCompanies, selectCompanyIdsReducer)\n .addCase(actions.setUnmergeCompleted, setUnmergeCompletedReducer)\n .addCase(actions.setUnmergeLoading, setUnmergeLoadingReducer)\n .addCase(actions.resetUnmerge, resetUnmergeReducer)\n .addCase(actions.toggleUnmergeModal, toggleUnmergeModalReducer)\n .addCase(actions.toggleShouldCopyData, toggleShouldCopyDataReducer)\n .addCase(actions.resetPagination, resetPaginationReducer)\n .addCase(actions.setUnmergeCompanyId, setUnmergeCompanyIdReducer)\n .addCase(actions.setUnmergeError, setUnmergeErrorReducer)\n);\n\nexport default reducer;\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\nimport reducer, { saga } from './state';\nimport { featureName } from './featureName';\n\nconst useInject = () => {\n useInjectReducer({ key: featureName, reducer });\n useInjectSaga({ key: featureName, saga });\n};\n\nexport default useInject;\n","// components\nimport { ColumnType } from 'antd/lib/table';\nimport { CompanyMerge } from '@optx/models/company/CompanyMerges';\nimport { TableCellDefault } from '../AntTable/cells';\nimport TableCellLink from './cells/TableCellLink';\n\nconst columns: ColumnType<CompanyMerge>[] = [\n {\n dataIndex: 'url',\n title: 'URL',\n key: 'url',\n width: 80,\n render: TableCellLink,\n },\n {\n dataIndex: 'name',\n title: 'Company Name',\n key: 'name',\n width: 100,\n render: TableCellDefault,\n },\n {\n dataIndex: 'founded',\n title: 'Year Founded',\n key: 'founded',\n width: 100,\n render: TableCellDefault,\n },\n {\n dataIndex: 'location',\n title: 'Location',\n key: 'location',\n width: 100,\n render: TableCellDefault,\n },\n {\n dataIndex: 'source_db',\n title: 'Source',\n key: 'source',\n width: 60,\n render: TableCellDefault,\n },\n {\n dataIndex: 'source_id',\n title: 'Source ID',\n key: 'id',\n width: 60,\n render: TableCellDefault,\n },\n {\n dataIndex: 'merge_type',\n title: 'Merge Type',\n key: 'type',\n width: 80,\n render: TableCellDefault,\n },\n];\n\nexport default columns;\n","import React from 'react';\nimport { Tooltip } from 'antd';\nimport { DEFAULT_CELL_VALUE } from '@constants/table/cells';\nimport { convertToURL } from '@optx/utils/url';\n\nexport const TableCellLink = (value: any) => {\n if (!value) {\n return <>{DEFAULT_CELL_VALUE}</>;\n }\n\n return (\n <Tooltip title={value}>\n <a href={convertToURL(value)} target=\"_blank\" rel=\"noopener noreferrer\">\n {value}\n </a>\n </Tooltip>\n );\n};\n\n// @ts-ignore\nexport default TableCellLink;\n","import styled from 'styled-components';\nimport { Modal, Row, Col, Result } from 'antd';\nimport { ModalProps } from 'antd/lib/modal';\n\ninterface ModalWrapperProps extends ModalProps {\n background?: string;\n}\n\nconst ModalWrapper = styled(Modal)<ModalWrapperProps>`\n top: 50%;\n transform: translateY(-50%);\n padding: 0;\n\n .ant-modal-header,\n .ant-modal-footer {\n border-color: #e8e8e8;\n }\n\n .ant-modal-body {\n background: ${({ background }) => background || '#f3f6f9'};\n }\n\n th.ant-table-cell {\n padding: 19px 7px;\n }\n\n .ant-table-wrapper {\n max-height: 60vh;\n overflow-y: auto;\n }\n\n .ant-btn:first-child {\n display: inline-block;\n }\n`;\n\nconst RowWrapper = styled(Row)`\n justify-content: space-between;\n padding: 13px 15px;\n`;\n\nconst BoxWrapper = styled(Col)`\n width: calc(50% - 17px);\n padding: 20px 30px;\n background: #fff;\n box-shadow: 0px 0px 10px rgba(66, 17, 115, 0.06);\n border-radius: 8px;\n\n .ant-typography:not(.multiselect__value-container .ant-typography) {\n display: inline-block;\n margin-bottom: 13px;\n }\n`;\nconst ResultWrapper = styled(Result)`\n padding-bottom: 48px;\n\n .ant-result-icon {\n margin-bottom: 0;\n }\n`;\n\nexport const Styled = {\n ModalWrapper,\n RowWrapper,\n BoxWrapper,\n ResultWrapper,\n};\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Table, Checkbox, Button } from 'antd';\n// utils\nimport { getCompanyProfileURL } from '@optx/utils/routes';\nimport columns from '@components/common/table/TableCompanyMerges/defaultColumns';\n// redux\nimport { selectors as mergeSelectors, actions as mergeActions } from '../state';\n// styles\nimport { Styled } from './UnmergeModal.styled';\n\ninterface UnmergeModalProps {\n companyId: number;\n}\n\nconst UnmergeModal: React.FC<UnmergeModalProps> = ({ companyId }) => {\n const isInProgress = useSelector(mergeSelectors.getUnmergeLoading);\n const isCompleted = useSelector(mergeSelectors.getUnmergeCompleted);\n const isModalVisible = useSelector(mergeSelectors.getUnmergeModalVisible);\n const selectedCompanies = useSelector(mergeSelectors.getSelectedCompanies);\n const shouldCopyData = useSelector(mergeSelectors.getShouldCopyData);\n const unmergedCompanyId = useSelector(mergeSelectors.getUnmergedCompanyId);\n const unmergeError = useSelector(mergeSelectors.getUnmergeError);\n const dispatch = useDispatch();\n\n const handleOk = () => {\n if (isCompleted) {\n dispatch(mergeActions.resetUnmerge());\n } else {\n dispatch(\n mergeActions.unmergeCompanies({\n companyId,\n selectedCompanies,\n })\n );\n }\n };\n\n const handleCancel = () => {\n if (!isInProgress) {\n dispatch(mergeActions.resetUnmerge());\n }\n };\n\n const openInNewTab = () => {\n unmergedCompanyId && window.open(getCompanyProfileURL(unmergedCompanyId), '_blank');\n };\n\n return (\n <Styled.ModalWrapper\n title=\"Un-Merge Selected Companies\"\n visible={isModalVisible}\n onOk={handleOk}\n onCancel={handleCancel}\n width={840}\n okButtonProps={{ loading: isInProgress }}\n okText={isCompleted ? 'OK' : 'Unmerge'}\n destroyOnClose\n maskClosable={false}\n cancelButtonProps={{\n disabled: isCompleted,\n }}\n >\n {!isCompleted && (\n <>\n <Styled.ResultWrapper\n subTitle=\"By unmerging, the selected companies will be removed from this companies record and a new\n company record will be created.\"\n icon={<></>}\n />\n <Table\n dataSource={selectedCompanies}\n columns={columns}\n pagination={false}\n rowKey=\"id\"\n bordered\n className=\"legacy-table overflow-auto\"\n tableLayout=\"fixed\"\n />\n <Checkbox\n className=\"mt-4\"\n checked={shouldCopyData}\n onChange={() => dispatch(mergeActions.toggleShouldCopyData())}\n >\n Should OPTX data be copied to new company?\n </Checkbox>\n </>\n )}\n {isCompleted && (\n <>\n <Styled.ResultWrapper\n subTitle={`${!unmergeError ? 'Un-Merge Completed' : unmergeError}`}\n icon={<></>}\n style={{ paddingTop: unmergeError ? '48px' : 0 }}\n />\n {!unmergeError && (\n <Button className=\"d-flex mx-auto\" type=\"primary\" onClick={openInNewTab}>\n Show in OPTX\n </Button>\n )}\n </>\n )}\n </Styled.ModalWrapper>\n );\n};\n\nexport default UnmergeModal;\n","import React, { useCallback, useEffect, ReactText, useState } from 'react';\nimport { Table, Card, Button, Alert } from 'antd';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { TableProps } from 'antd/lib/table';\nimport { useInfiniteScroll } from 'react-infinite-scroll-hook';\n// constants\nimport { CompanyPageHistory } from '@optx/constants/pendoActions';\n// utils\nimport { stripUrlSlashes } from '@utils/url';\nimport columns from '@components/common/table/TableCompanyMerges/defaultColumns';\n// models\nimport { CompanyMerge } from '@optx/models/company/CompanyMerges';\nimport { useLocation } from 'react-router-dom';\nimport { getIsAnalyst } from '@optx/redux/user/information/selectors';\nimport { CompanyMergesPayload } from '../state/interfaces';\n// redux\nimport { selectors as localSelectors, actions as localActions } from '../state';\n// components\nimport UnmergeModal from './UnmergeModal';\n\ninterface MergeHistoryProps extends TableProps<any> {\n companyId: number;\n}\n\nconst MergeHistory: React.FC<MergeHistoryProps> = ({ companyId }) => {\n const [selectedRowKeys, setSelectedRowKeys] = useState<ReactText[]>([]);\n const companySources = useSelector(localSelectors.getCompanyMerges);\n const isLoading = useSelector(localSelectors.isLoading);\n const pagination = useSelector(localSelectors.getCompanyMergesPagination);\n const selectedCompanies = useSelector(localSelectors.getSelectedCompanies);\n const hasMore = useSelector(localSelectors.getHasMore);\n const isAnalyst = useSelector(getIsAnalyst);\n const location = useLocation();\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (selectedCompanies.length === 0) {\n setSelectedRowKeys([]);\n }\n }, [selectedCompanies]);\n\n const fetchMerges = useCallback(\n (payload: CompanyMergesPayload) => dispatch(localActions.fetchMerges(payload)),\n [dispatch]\n );\n\n const handleMore = () => {\n fetchMerges({ companyId, page: pagination.pageNumber + 1 });\n };\n\n const infiniteScrollRef = useInfiniteScroll<HTMLDivElement>({\n loading: isLoading,\n hasNextPage: hasMore,\n onLoadMore: handleMore,\n });\n\n useEffect(() => {\n fetchMerges({\n companyId,\n page: 1,\n reset: true,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n return () => {\n dispatch(localActions.resetUnmerge());\n };\n }, [location, dispatch]);\n\n const onSelectChange = (selectedRowKeys: ReactText[], selectedRows: CompanyMerge[]) => {\n const selectedCompaniesData = selectedRows.map(company => {\n return {\n ...company,\n company_url: company.url ? stripUrlSlashes(company.url) : null,\n };\n });\n setSelectedRowKeys(selectedRowKeys);\n dispatch(\n localActions.setSelectedCompanies({\n selectedCompanies: selectedCompaniesData,\n })\n );\n };\n\n const rowSelection = {\n selectedRowKeys,\n onChange: onSelectChange,\n getCheckboxProps: (record: CompanyMerge) => ({\n name: record.id.toString(),\n }),\n };\n\n return (\n <>\n <div ref={infiniteScrollRef}>\n <Card title=\"Merge History\">\n <div className=\"d-flex flex-column\">\n {!isAnalyst && (\n <Button\n className=\"mb-4 ml-auto\"\n type=\"primary\"\n onClick={() => {\n window.pendo.track(CompanyPageHistory.mergeHistory_checkBox_unmergeCompanies);\n dispatch(localActions.toggleUnmergeModal(true));\n }}\n disabled={\n selectedCompanies.length === 0 ||\n selectedCompanies.length === companySources.length\n }\n >\n Unmerge Companies\n </Button>\n )}\n {!isAnalyst &&\n selectedCompanies.length !== 0 &&\n selectedCompanies.length === companySources.length && (\n <Alert\n message=\"At least one company should remain unselected\"\n type=\"error\"\n className=\"mb-4\"\n />\n )}\n <Table\n dataSource={companySources}\n columns={columns}\n pagination={false}\n rowKey=\"id\"\n bordered\n className=\"legacy-table overflow-auto\"\n tableLayout=\"fixed\"\n rowSelection={isAnalyst ? undefined : rowSelection}\n />\n </div>\n </Card>\n </div>\n <UnmergeModal companyId={companyId} />\n </>\n );\n};\n\nexport default MergeHistory;\n","import React from 'react';\nimport { Row, Col } from 'antd';\n\nimport { Gutter } from 'antd/lib/grid/row';\nimport { AuditTrail } from '@features/company/audit-trail';\nimport MergeHistory from './MergeHistory';\n\nconst gridGutter: Gutter | [Gutter, Gutter] = [\n { xs: 24, sm: 24, xl: 40 },\n { xs: 24, sm: 24, xl: 40 },\n];\n\ninterface HistoryProps {\n companyId: number;\n activeProfileKey: string;\n}\n\nconst History: React.FC<HistoryProps> = ({ companyId, activeProfileKey }) => {\n return (\n <Row gutter={gridGutter}>\n <Col span={24} xl={12}>\n <AuditTrail companyId={companyId} activeProfileKey={activeProfileKey} />\n </Col>\n <Col span={24} xl={12}>\n <MergeHistory companyId={companyId} />\n </Col>\n </Row>\n );\n};\n\nexport default History;\n","import React from 'react';\nimport { TableCellPipelineReport } from '@optx/models/table/Cell';\nimport { lib as companySearchLib } from '@features/company-search';\n\nconst {\n Table: {\n columns: { CompanyNameRender },\n },\n} = companySearchLib;\n\nexport const TableCellCompanyName: React.FC<TableCellPipelineReport> = ({ value, record }) => {\n return <CompanyNameRender name={value} companyId={record.company_id} />;\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { GlobalOutlined } from '@ant-design/icons';\n// models\nimport { Cell } from '@models/table/Cell';\nimport Company from '@optx/models/Company';\n\nconst CompanyLink = styled.a`\n color: #c2cfe0;\n font-size: 22px;\n line-height: 1;\n vertical-align: middle;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &.not-active {\n color: red;\n }\n\n > svg {\n width: auto;\n height: auto;\n }\n`;\n\nconst TableCellCompanyURL: React.FC<Cell<Company>> = ({ record }) => {\n const { raw_url: rawUrl } = record;\n const { url_status: urlStatus } = record;\n\n return (\n <>\n {rawUrl && (\n <CompanyLink\n href={rawUrl}\n title={rawUrl}\n className={urlStatus === 'active' ? undefined : 'not-active'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <GlobalOutlined />\n </CompanyLink>\n )}\n </>\n );\n};\n\nexport default TableCellCompanyURL;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\n// models\nimport { TableCellPipelineReport } from '@optx/models/table/Cell';\n// redux\nimport { selectors } from '@optx/components/feature/company-individual-edit/state';\n// components\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nconst TableCellTeams: React.FC<TableCellPipelineReport> = ({ value }) => {\n const list = useSelector(selectors.companyIndividualEdit.dealTeamOptions);\n const selectOptions = list.map(list => ({\n label: list.label.toString(),\n value: list.value.toString(),\n }));\n\n const handleAllValuesSelected = () => {\n if (value.length === 0) {\n return <>{DEFAULT_EMPTY_VALUE}</>;\n }\n\n if (value.length === selectOptions.length) {\n return <>ALL</>;\n }\n\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n\n return value;\n };\n\n if (value === null) {\n return <>{DEFAULT_EMPTY_VALUE}</>;\n }\n\n return (\n <TruncateTooltip\n placement=\"topLeft\"\n title={value && Array.isArray(value) ? value.join(', ') : value}\n >\n {handleAllValuesSelected()}\n </TruncateTooltip>\n );\n};\n\nexport default TableCellTeams;\n","import React from 'react';\nimport moment from 'moment';\n// models\nimport { TableCellPipelineReport } from '@optx/models/table/Cell';\n// constants\nimport { DEFAULT_EMPTY_VALUE } from '@optx/constants/value';\nimport globalConfig from '@optx/constants/config';\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\n\nconst TableCellDate: React.FC<TableCellPipelineReport> = ({ value }) => {\n const isValid = moment(value, ISO_DATE_FORMAT).isValid();\n\n if (value === 'TBD') return <>TBD</>;\n if (!isValid) return <>{DEFAULT_EMPTY_VALUE}</>;\n\n return <>{moment(value, ISO_DATE_FORMAT).format(globalConfig.grid_date.DATE_FORMAT)}</>;\n};\n\nexport default TableCellDate;\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Dropdown, Menu } from 'antd';\nimport { EllipsisOutlined } from '@ant-design/icons';\n// models\nimport Company from '@optx/models/Company';\nimport { Cell } from '@models/table/Cell';\n// hooks\nimport { useActiveEditableField } from '@components/feature/company-individual-edit/hooks';\n// redux\nimport { actions } from '@features/pipeline-report/state';\n\nconst TableCellActions: React.FC<Cell<Company>> = ({ record }) => {\n const dispatch = useDispatch();\n\n const { addCompanyActive } = useActiveEditableField(false);\n\n const handleMarkCompanyAsInactive = () => {\n addCompanyActive(record.company_id, false);\n // we should do it to update all value on report\n dispatch(actions.fetchFilters());\n };\n\n const menu = (\n <Menu>\n <Menu.Item key=\"mark-company-as-active\">\n <button type=\"button\" onClick={handleMarkCompanyAsInactive}>\n Mark company as inactive\n </button>\n </Menu.Item>\n </Menu>\n );\n\n return (\n <div className=\"dropdown-dot\">\n <Dropdown overlay={menu} trigger={['click']} placement=\"bottomRight\">\n <EllipsisOutlined className=\"dropdown-dot__icon\" />\n </Dropdown>\n </div>\n );\n};\n\nexport default TableCellActions;\n","import React from 'react';\nimport { ColumnType } from 'antd/lib/table';\nimport numeral from 'numeral';\n// services\nimport { UserService, CompanyService } from '@optx/services/api';\n// models\nimport { PipelineReportCompanies } from '@features/pipeline-report/models';\nimport Company, { Addon } from '@optx/models/Company';\n// constants\nimport { NEXT_STEPS_OPINION_ENDPOINT } from '@constants/asyncEndpoints';\n// components\nimport { TableCellDefault } from '@optx/components/common/table/AntTable/cells';\nimport {\n EditFieldSingleSelect,\n EditFieldSingleSelectOther,\n EditFieldText,\n} from '@optx/features/company/edit-fields/components';\nimport { TableCellCompanyName, TableCellCompanyURL, TableCellDate, TableCellTeams } from './cells';\nimport TableCellActions from './cells/TableCellActions';\nimport { TableCellAddon } from '@optx/components/common/table/Companies/cells';\n\nconst columns: Array<ColumnType<PipelineReportCompanies & Company>> = [\n {\n dataIndex: 'company_url',\n render: (value: string | null, record: Company) => (\n <TableCellCompanyURL value={value} record={record} />\n ),\n width: 36,\n className: 'company_url align-center',\n },\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n render: (value: string, record: Company) => (\n <TableCellCompanyName value={value} record={record as Company} />\n ),\n width: 150,\n className: 'name',\n ellipsis: true,\n },\n {\n dataIndex: 'stage',\n className: 'stage',\n title: 'Stage',\n render: (value: string, record: Company) => (\n <EditFieldSingleSelect\n isFromGrid\n service={CompanyService.updateCompanyData}\n fieldName=\"Stage\"\n fieldKey=\"stage\"\n value={value ?? 'None'}\n successMessage=\"Company stage updated successfully\"\n errorMessage=\"Company stage update failed, Server error!\"\n record={record}\n />\n ),\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'addon',\n className: 'addon',\n title: 'Add-on For',\n render: (value: Addon | null, record: Company) => (\n <TableCellAddon value={value} record={record} isFromPipelineReportGrid={true} />\n ),\n width: 200,\n ellipsis: true,\n },\n {\n dataIndex: 'location',\n title: 'Location',\n className: 'location',\n render: TableCellDefault,\n width: 100,\n ellipsis: true,\n },\n {\n dataIndex: 'asking_amount',\n className: 'asking_amount',\n title: 'Equity Check (Ask Amount)',\n width: 200,\n ellipsis: true,\n render: (value: string, record: Company) => (\n <EditFieldText\n record={record}\n value={numeral(Number(value)).format('0.[0]a')}\n isFromGrid\n fieldName=\"Asking Amount\"\n />\n ),\n },\n {\n dataIndex: 'fund',\n className: 'fund',\n title: 'Fund',\n width: 110,\n ellipsis: true,\n render: (value: string, record: Company) => (\n <EditFieldSingleSelect\n isFromGrid\n fieldName=\"Fund\"\n fieldKey=\"fund\"\n service={CompanyService.updateCompanyData}\n value={value}\n successMessage=\"Company fund updated successfully\"\n errorMessage=\"Company fund update failed, Server error!\"\n record={record}\n />\n ),\n },\n {\n dataIndex: 'senior_deal_team_lead',\n title: 'Senior Deal Team Lead',\n className: 'senior_deal_team_lead',\n render: (value: string, record: Company) => <TableCellTeams value={value} record={record} />,\n width: 200,\n ellipsis: true,\n },\n {\n dataIndex: 'deal_team',\n className: 'deal_team',\n title: 'Deal Team',\n render: (value: string, record: Company) => <TableCellTeams value={value} record={record} />,\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'ops_team',\n className: 'ops_team',\n title: 'OPS Team',\n render: (value: string, record: Company) => <TableCellTeams value={value} record={record} />,\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'lead_source',\n className: 'lead_source',\n title: 'Lead Source',\n render: (value: string, record: Company) => (\n <EditFieldSingleSelect\n isFromGrid\n value={value ?? 'None'}\n record={record}\n service={CompanyService.updateCompanyData}\n successMessage=\"Lead Source updated successfully\"\n errorMessage=\"Lead Source update failed, Server error!\"\n fieldName=\"Lead Source\"\n fieldKey=\"lead_source\"\n />\n ),\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'ic_status_date',\n className: 'ic_status_date',\n title: 'IC Status',\n render: (value: string, record: Company) => <TableCellDate value={value} record={record} />,\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'expected_close_date',\n className: 'expected_close_date',\n title: 'Close Date',\n render: (value: string, record: Company) => <TableCellDate value={value} record={record} />,\n width: 140,\n ellipsis: true,\n },\n {\n dataIndex: 'next_steps',\n title: 'Next Steps',\n className: 'next_steps',\n render: (value: string, record: Company) => (\n <EditFieldSingleSelectOther\n dropdownPlacement=\"topRight\"\n isFromGrid\n service={UserService.updateCompanyUserValues}\n fieldName=\"Next Steps\"\n value={value}\n successMessage=\"Company next steps updated successfully!\"\n errorMessage=\"Company next steps update failed, Server error!\"\n record={record}\n fieldOtherKey={'next_steps_opinion'}\n otherEndpoint={NEXT_STEPS_OPINION_ENDPOINT}\n fieldOtherValue={record.next_steps_opinion}\n />\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'row_action',\n title: 'Action',\n align: 'center',\n fixed: 'right',\n className: 'cell-actions',\n render: (value: unknown, record: Company) => <TableCellActions value={value} record={record} />,\n width: 65,\n ellipsis: true,\n },\n];\n\nexport default columns;\n","export const FETCH_REVENUE_GROWTH = 'FETCH_REVENUE_GROWTH';\nexport const FETCH_REVENUE_GROWTH_SUCCESS = 'FETCH_REVENUE_GROWTH_SUCCESS';\nexport const FETCH_REVENUE_GROWTH_FAIL = 'FETCH_REVENUE_GROWTH_FAIL';\n","import { SuccessErrorCallback } from '@optx/models/callback';\nimport { GrowthOverTime } from '@optx/models/charts/data';\nimport {\n FetchCompanyRevenueGrowthSuccessAction,\n FetchCompanyRevenueGrowthAction,\n FetchCompanyRevenueGrowthFailAction,\n} from './interfaces';\nimport * as types from './actionTypes';\n\nexport const fetchCompanyRevenueGrowth = (\n companyId: number,\n callback: SuccessErrorCallback<Array<GrowthOverTime>>\n): FetchCompanyRevenueGrowthAction => ({\n type: types.FETCH_REVENUE_GROWTH,\n payload: companyId,\n meta: callback,\n});\n\nexport const fetchCompanyRevenueSuccess = (\n growth: Array<GrowthOverTime>\n): FetchCompanyRevenueGrowthSuccessAction => ({\n type: types.FETCH_REVENUE_GROWTH_SUCCESS,\n payload: growth,\n});\n\nexport const fetchCompanyRevenueFail = (error: string): FetchCompanyRevenueGrowthFailAction => ({\n type: types.FETCH_REVENUE_GROWTH_FAIL,\n payload: error,\n});\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { GrowthOverTime } from '@optx/models/charts/data';\nimport { FETCH_REVENUE_GROWTH } from './actionTypes';\nimport { fetchCompanyRevenueSuccess, fetchCompanyRevenueFail } from './actions';\nimport { CompanyService } from '../../../services/api';\nimport NotificationService from '../../../services/NotificationService';\nimport { FetchCompanyRevenueGrowthAction } from './interfaces';\n\nexport function* fetchCompanyRevenueGrowthSaga(action: FetchCompanyRevenueGrowthAction) {\n const { payload: companyId, meta: callback } = action;\n\n try {\n const res: AxiosResponse<Array<GrowthOverTime>> = yield call(\n CompanyService.revenueGrowth,\n companyId\n );\n\n if (res.data) {\n yield put(fetchCompanyRevenueSuccess(res.data));\n callback && callback(res.data);\n } else {\n const errorMessage = 'Failed to fetch Revenue Growth!';\n yield put(fetchCompanyRevenueFail(errorMessage));\n callback && callback(null, errorMessage);\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Failed to fetch Revenue Growth!';\n yield put(fetchCompanyRevenueFail(errorMessage));\n callback && callback(null, errorMessage);\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companyRevenueGrowthSaga() {\n yield takeLatest(FETCH_REVENUE_GROWTH, fetchCompanyRevenueGrowthSaga);\n}\n","import { fork } from 'redux-saga/effects';\nimport { saga as companyProfileSaga } from '@redux/company/profile';\nimport { saga as companyRevenueGrowthSaga } from '@redux/company/revenue-growth';\nimport { sagas as tagsSagas } from '@redux/company/tags';\n\n/**\n * Root saga manages watcher lifecycle\n */\nexport default function* profileSaga() {\n yield fork(companyProfileSaga);\n yield fork(companyRevenueGrowthSaga);\n yield fork(tagsSagas);\n}\n","import { useInjectReducer, useInjectSaga } from 'redux-injectors';\n// hooks\nimport { useInject as useInjectCompanyMerges } from '@features/company/merges';\nimport { useInjectAuditTrail } from '@features/company/audit-trail';\nimport { useInject as useInjectCompanyTouches } from '@features/company-touches';\nimport { useInject as useInjectCompanySocialMedia } from '@features/company/social-media';\nimport {\n useInjectPortfolio,\n useInjectEquityTouch,\n useInjectDatePresented,\n useInjectScoreGrowth,\n useInjectEmployeeGrowth,\n useInjectCompanyFundingRounds,\n useInjectFavorites,\n useInjectCompanyUserValues,\n useInjectCompanyInBusinessEvaluation,\n useInjectCompanyActive,\n useInjectCompanyAddonManagement,\n useInjectScore,\n} from '../../../common/hooks/inject';\nimport companyProfileReducer from '../../../redux/company/profile';\nimport profileSaga from './saga';\n\nexport const useInjectCompanyProfile = () => {\n useInjectReducer({ key: 'companyProfile', reducer: companyProfileReducer });\n useInjectSaga({ key: 'companyProfile', saga: profileSaga });\n};\n\n/**\n * Inject need reducers and sagas for profile page.\n */\nexport const useInjectProfilePage = () => {\n useInjectCompanyProfile();\n useInjectCompanyTouches();\n useInjectPortfolio();\n useInjectEquityTouch();\n useInjectDatePresented();\n useInjectScoreGrowth();\n useInjectEmployeeGrowth();\n useInjectCompanyFundingRounds();\n useInjectCompanyMerges();\n useInjectAuditTrail();\n useInjectCompanySocialMedia();\n useInjectFavorites();\n useInjectCompanyUserValues();\n useInjectCompanyInBusinessEvaluation();\n useInjectCompanyActive();\n useInjectCompanyAddonManagement();\n useInjectScore();\n};\n","import { SuccessErrorCallback } from '@optx/models/callback';\nimport { createAction } from '@reduxjs/toolkit';\nimport * as types from './actionTypes';\n\nexport const resetPassword = createAction(\n types.RESET_PASSWORD,\n (currentPassword: string, newPassword: string, callback: SuccessErrorCallback) => ({\n payload: {\n currentPassword,\n newPassword,\n },\n meta: callback,\n })\n);\n\nexport const resetPasswordSuccess = createAction(types.RESET_PASSWORD_SUCCESS);\n\nexport const resetPasswordFail = createAction<string>(types.RESET_PASSWORD_FAIL);\n","export const RESET_PASSWORD = 'user/RESET_PASSWORD';\nexport const RESET_PASSWORD_SUCCESS = 'user/RESET_PASSWORD_SUCCESS';\nexport const RESET_PASSWORD_FAIL = 'user/RESET_PASSWORD_FAIL';\n","import { PayloadAction } from '@reduxjs/toolkit';\nimport { call, takeLatest } from 'redux-saga/effects';\n// services\nimport NotificationService from '@services/NotificationService';\nimport { UserService } from '@services/api';\n// models\nimport { SuccessErrorCallback } from '@optx/models/callback';\n// redux\nimport * as actions from './actions';\n\nexport function* resetPasswordSaga(\n action: PayloadAction<{ currentPassword: string; newPassword: string }, any, SuccessErrorCallback>\n) {\n const { currentPassword, newPassword } = action.payload;\n const callback = action.meta;\n\n try {\n yield call(UserService.resetPassword, currentPassword, newPassword);\n callback && callback(true);\n NotificationService.success('Password succesfully updated');\n } catch (error: any) {\n const errorMessage = 'Failed to update password!!!';\n callback && callback(null, errorMessage);\n }\n}\n\nexport default function* passwordSaga() {\n yield takeLatest(actions.resetPassword, resetPasswordSaga);\n}\n","export const FETCH_EMPLOYEE_GROWTH = 'FETCH_EMPLOYEE_GROWTH';\nexport const FETCH_EMPLOYEE_GROWTH_SUCCESS = 'FETCH_EMPLOYEE_GROWTH_SUCCESS';\nexport const FETCH_EMPLOYEE_GROWTH_FAIL = 'FETCH_EMPLOYEE_GROWTH_FAIL';\n","import { ChartData } from '@optx/models/charts/data';\nimport {\n FetchCompanyEmployeeGrowthSuccessAction,\n FetchCompanyEmployeeGrowthAction,\n FetchCompanyEmployeeGrowthFailAction,\n} from './interfaces';\nimport * as types from './actionTypes';\n\nexport const fetchCompanyEmployeeGrowth = (\n companyId: number,\n callback: (res: ChartData) => void\n): FetchCompanyEmployeeGrowthAction => ({\n type: types.FETCH_EMPLOYEE_GROWTH,\n payload: companyId,\n meta: callback,\n});\n\nexport const fetchCompanyEmployeeGrowthSuccess = (\n employeeGrowth: ChartData\n): FetchCompanyEmployeeGrowthSuccessAction => ({\n type: types.FETCH_EMPLOYEE_GROWTH_SUCCESS,\n payload: employeeGrowth,\n});\n\nexport const fetchCompanyEmployeeGrowthFail = (\n error: string\n): FetchCompanyEmployeeGrowthFailAction => ({\n type: types.FETCH_EMPLOYEE_GROWTH_FAIL,\n payload: error,\n});\n","import { call, put, takeLatest } from 'redux-saga/effects';\nimport { AxiosResponse } from 'axios';\nimport { ChartData } from '@optx/models/charts/data';\nimport { FETCH_EMPLOYEE_GROWTH } from './actionTypes';\nimport { fetchCompanyEmployeeGrowthSuccess, fetchCompanyEmployeeGrowthFail } from './actions';\nimport { CompanyService } from '../../../services/api';\nimport NotificationService from '../../../services/NotificationService';\nimport { FetchCompanyEmployeeGrowthAction } from './interfaces';\n\nexport function* fetchCompanyEmployeeGrowthSaga(action: FetchCompanyEmployeeGrowthAction) {\n const { payload: companyId, meta: callback } = action;\n\n try {\n const res: AxiosResponse<ChartData> = yield call(CompanyService.getEmployeeGrowth, companyId);\n\n if (res.data) {\n yield put(fetchCompanyEmployeeGrowthSuccess(res.data));\n callback && callback(res.data as ChartData);\n } else {\n const errorMessage = 'Failed to fetch Employee Growth!';\n yield put(fetchCompanyEmployeeGrowthFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n } catch (e: any) {\n const errorMessage = 'Failed to fetch Employee Growth!';\n yield put(fetchCompanyEmployeeGrowthFail(errorMessage));\n NotificationService.error(errorMessage);\n }\n}\n\nexport default function* companyEmployeeGrowthSaga() {\n yield takeLatest(FETCH_EMPLOYEE_GROWTH, fetchCompanyEmployeeGrowthSaga);\n}\n","import styled from 'styled-components';\n\nconst TextWrapper = styled.div`\n text-align: center;\n margin: 0 8px 0 12px;\n`;\n\nconst SelectText = styled.div`\n color: #e8e8e8;\n margin-top: -5px;\n`;\n\nconst FitText = styled.span`\n color: #334d6e;\n font-weight: 600;\n`;\n\nconst Thumb = styled.div`\n border-radius: 21px;\n width: 42px;\n height: 42px;\n padding: 7px;\n cursor: pointer;\n`;\n\nconst ThumbUp = styled(Thumb)`\n margin-right: 6px;\n padding: 5px 5px 5px 8px;\n border: 1px solid #52c41a;\n`;\n\nconst ThumbDown = styled(Thumb)`\n padding: 9px 5px 5px 5px;\n border: 1px solid #f5222d;\n`;\n\nconst Styles = {\n TextWrapper,\n SelectText,\n FitText,\n ThumbUp,\n ThumbDown,\n};\n\nexport default Styles;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Col, Row } from 'antd';\nimport AntIcon from '@ant-design/icons';\nimport queryString from 'query-string';\nimport { useLocation } from 'react-router-dom';\n// models\nimport { FieldChangedValue } from '@optx/features/company/audit-trail/state/interfaces';\n// constants\nimport { CompanyProfileTabs } from '@optx/constants/routes';\nimport { companyPageTop } from '@optx/constants/pendoActions';\n// hooks\nimport { useHistoryTab } from '@optx/common/hooks/history';\n// redux\nimport { selectors as profileSelectors } from '@optx/redux/company/profile';\nimport { actions as editFieldActions } from '@optx/features/company/edit-fields/state';\nimport { getIsAdminOrAnalyst } from '@optx/redux/user/information/selectors';\n// components\nimport Icon from '@optx/components/common/Icon';\nimport { UserService } from '@optx/services/api';\nimport { EditFieldRadioRationale } from '@optx/features/company/edit-fields/components';\nimport Styles from './PSGFit.style';\n\nconst PSGFitDefault: React.FC = () => {\n const dispatch = useDispatch();\n const location = useLocation();\n const company = useSelector(profileSelectors.getProfile);\n const { updateHistoryFields } = useHistoryTab();\n const { tab } = queryString.parse(location.search);\n const isAdminOrAnalyst = useSelector(getIsAdminOrAnalyst);\n\n if (!company) {\n return null;\n }\n\n const handleSelect = (val: boolean) => {\n const payload = {\n companyId: company.company_id,\n value: val,\n successMessage: 'Company PSG fit updated successfully!',\n };\n dispatch(\n editFieldActions.updateFields({\n companyUrl: company.company_url,\n companyId: company.company_id,\n value: payload,\n service: UserService.updateFitEvaluation,\n fieldName: 'PSG Fit',\n })\n );\n updateHistoryFields({\n afterValue: val !== null ? val : 'None',\n beforeValue: company.is_interesting !== null ? company.is_interesting : 'None',\n fieldChanged: FieldChangedValue.psgFit,\n });\n };\n\n return (\n <Row className=\"fit-default\">\n <Styles.TextWrapper>\n <Styles.FitText>PSG FIT</Styles.FitText>\n <Styles.SelectText>(Select)</Styles.SelectText>{' '}\n </Styles.TextWrapper>\n <Col>\n <Row>\n <Styles.ThumbUp\n onClick={() => {\n window.pendo.track(companyPageTop.psgFitThumbsUp);\n handleSelect(true);\n }}\n >\n <AntIcon\n component={() => (\n <Icon\n iconName=\"thumbs-up\"\n style={{ color: '#E8E8E8', fontSize: 27 }}\n onClick={() => {\n window.pendo.track(companyPageTop.psgFitThumbsUp);\n }}\n />\n )}\n />\n </Styles.ThumbUp>\n\n {isAdminOrAnalyst ? (\n <EditFieldRadioRationale\n record={company}\n value={company.is_interesting}\n isFromGrid={false}\n service={UserService.updateFitEvaluation}\n successMessage=\"Company PSG fit updated successfully!\"\n errorMessage=\"Failed to update value!\"\n fieldName=\"PSG Fit\"\n isFromHistory={tab === CompanyProfileTabs.HISTORY}\n placement=\"leftTop\"\n updateRadioValue={false}\n destroyOnHide\n showOnlyRadio\n hidePen\n >\n <Styles.ThumbDown>\n <AntIcon\n component={() => (\n <Icon\n iconName=\"thumbs-down\"\n style={{ color: '#E8E8E8', fontSize: 27 }}\n onClick={() => {\n window.pendo.track(companyPageTop.psgFitThumbsDown);\n }}\n />\n )}\n />\n </Styles.ThumbDown>\n </EditFieldRadioRationale>\n ) : (\n <Styles.ThumbDown\n onClick={() => {\n window.pendo.track(companyPageTop.psgFitThumbsDown);\n handleSelect(false);\n }}\n >\n <AntIcon\n component={() => (\n <Icon iconName=\"thumbs-down\" style={{ color: '#E8E8E8', fontSize: 27 }} />\n )}\n />\n </Styles.ThumbDown>\n )}\n </Row>\n </Col>\n </Row>\n );\n};\n\nexport default PSGFitDefault;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Button } from 'antd';\nimport AntIcon from '@ant-design/icons';\n// services\nimport { UserService } from '@optx/services/api';\n// redux\nimport { selectors as profileSelectors } from '@redux/company/profile';\n// components\nimport { EditFieldRadioRationale, EditFieldRadio } from '@features/company/edit-fields/components';\nimport { getIsAdminOrAnalyst } from '@optx/redux/user/information/selectors';\nimport Icon from '../../../../common/Icon';\nimport PSGFitDefault from './PSGFitDefault';\n\ninterface PSGFitProps {\n isFromHistory?: boolean;\n}\n\nconst ThumbsUp = (\n <AntIcon\n component={() => (\n <Icon iconName=\"thumbs-up\" style={{ color: '#52C41A', fontSize: 27, marginTop: '-4px' }} />\n )}\n />\n);\nconst ThumbsDown = (\n <AntIcon\n component={() => (\n <Icon iconName=\"thumbs-down\" style={{ color: '#FA541C', fontSize: 27, marginTop: '-2px' }} />\n )}\n />\n);\n\nconst PSGFit: React.FC<PSGFitProps> = ({ isFromHistory }) => {\n const company = useSelector(profileSelectors.getProfile);\n const isAdminOrAnalyst = useSelector(getIsAdminOrAnalyst);\n\n if (!company) {\n return null;\n }\n\n let icon: React.ReactNode = <></>;\n\n if (company.is_interesting === true) {\n icon = ThumbsUp;\n } else if (company.is_interesting === false) {\n icon = ThumbsDown;\n }\n\n return (\n <div className=\"psg-fit-wrapper\">\n {company.is_interesting !== null ? (\n <>\n {isAdminOrAnalyst ? (\n <EditFieldRadioRationale\n record={company}\n value={company.is_interesting}\n isFromGrid={false}\n service={UserService.updateFitEvaluation}\n successMessage=\"Company PSG fit updated successfully!\"\n errorMessage=\"Failed to update value!\"\n fieldName=\"PSG Fit\"\n isFromHistory={isFromHistory}\n placement=\"leftTop\"\n destroyOnHide\n showOnlyRadio\n hidePen\n >\n <Button\n type=\"text\"\n style={{ fontWeight: 600, textTransform: 'uppercase' }}\n icon={icon}\n className=\"ant-btn--is-fit d-flex\"\n size=\"small\"\n >\n PSG Fit\n </Button>\n </EditFieldRadioRationale>\n ) : (\n <EditFieldRadio\n record={company}\n value={company.is_interesting}\n isFromGrid={false}\n service={UserService.updateFitEvaluation}\n successMessage=\"Company PSG fit updated successfully!\"\n errorMessage=\"Failed to update value!\"\n fieldName=\"PSG Fit\"\n isFromHistory={isFromHistory}\n placement=\"leftTop\"\n showOnlyRadio\n hidePen\n >\n <Button\n type=\"text\"\n style={{ fontWeight: 600, textTransform: 'uppercase' }}\n icon={icon}\n className=\"ant-btn--is-fit d-flex\"\n size=\"small\"\n >\n PSG Fit\n </Button>\n </EditFieldRadio>\n )}\n </>\n ) : (\n <PSGFitDefault />\n )}\n </div>\n );\n};\n\nexport default React.memo(PSGFit);\n","import { call, put, takeLatest, select, fork } from 'redux-saga/effects';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { Dictionary } from 'lodash';\nimport queryString from 'query-string';\nimport { SortByRule } from '@models/table/sorting';\n// models\nimport { SearchPayloadRequest } from '@optx/models/api/contacts';\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { PageInfo } from '@optx/models/table/Pagination';\nimport { SearchViewType } from '@optx/models/user';\nimport { GridKeys } from '@models/grid';\n// constants\nimport { LONG_CARD_VIEW_DEFAULT_PAGE_SIZE } from '@constants/pagination';\n// utils\nimport { mapSortQuery } from '@utils/search';\n// redux\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { actions as columnActions } from '@features/grid/columns';\nimport { actions as listsActions } from '@redux/lists/details';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport { actions as histogramActions } from '@features/grid/histograms';\nimport {\n selectors as paginationSelectors,\n actions as paginationActions,\n} from '@features/grid/pagination';\nimport { sagas as searchFiltersSagas } from '@optx/features/grid/filter';\nimport { actions as longCardPaginationActions } from '@features/grid/pagination-long-card';\nimport { selectors as viewSelectors } from '@features/grid/view-type';\nimport { selectors as filterSelectors } from '@optx/features/grid/filter';\nimport { getFiltersQuery } from '@redux/company/search/search';\nimport { searchCompanies, searchCompaniesFail } from '@features/grid/search/state/sagasReusable';\nimport { getViewId } from '@optx/features/grid/view/state/selectors';\nimport { getListType } from '@optx/features/grid/search/state/selectors';\nimport { selectors as searchTypeSelectors } from '@features/grid/search-type';\n\nexport function* loadCompanyListSaga(\n action: PayloadAction<{ id: string; isSourceScrub: boolean }>\n) {\n const { id, isSourceScrub } = action.payload;\n const gridKey: GridKeys = 'lists';\n\n const defaultFilter: Dictionary<PreselectedFilter> = yield select(\n filterSourcesSelectors.getDefaultFilters\n );\n const defaultSorting: SortByRule<any>[] = yield select(filterSourcesSelectors.getDefaultSorting);\n const defaultColumns: string = yield select(filterSourcesSelectors.getDefaultColumns);\n const defaultColumnOrder: string = yield select(filterSourcesSelectors.getDefaultColumnOrder);\n const defaultPinnedColumns: string = yield select(filterSourcesSelectors.getDefaultPinnedColumns);\n\n const regularPagination: PageInfo = yield select(paginationSelectors.getPagination(gridKey));\n const view: SearchViewType = yield select(viewSelectors.searchView(gridKey));\n const pagination = {\n pageNumber: 1,\n pageSize: view === 'table' ? regularPagination.pageSize : LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n };\n const sortBy = defaultSorting || (yield select(sortSelectors.getSorting(gridKey)));\n const searchKey: string = yield select(filterSourcesSelectors.getDefaultSearchkey);\n let filter = Object.keys(defaultFilter).length\n ? defaultFilter\n : // @ts-ignore\n yield select(filterSelectors.getCustomClearedFilter(gridKey));\n\n const listId: number = yield select(getViewId(gridKey));\n const listType: string = yield select(getListType(gridKey));\n const searchType: string = yield select(searchTypeSelectors.getSearchType(gridKey));\n\n // Ensures to filter by the selected list\n filter = {\n ...filter,\n ...(isSourceScrub ? { ss_list_id: id } : { saved_list_id: id }),\n };\n const filterQuery: Dictionary<string | (string | number)[]> = yield call(getFiltersQuery, filter);\n\n const searchData: SearchPayloadRequest = {\n searchKey,\n searchType,\n filter: filterQuery,\n pagination,\n sortBy,\n fromSavedList: listId,\n listType,\n };\n\n const sortQuery = queryString.stringify(mapSortQuery(sortBy), { arrayFormat: 'comma' });\n\n try {\n if (defaultColumns) {\n yield put(\n columnActions.updateColumn({\n columns: defaultColumns,\n columnOrder: defaultColumnOrder,\n pinnedColumns: defaultPinnedColumns,\n gridName: 'lists',\n })\n );\n }\n\n yield call(searchCompanies, searchData, gridKey, filter, false, undefined, {\n user_list_sorting: sortQuery,\n user_list_display_columns: defaultColumns ?? undefined,\n user_list_column_order: defaultColumnOrder || undefined,\n user_list_pinned_columns: defaultPinnedColumns ?? undefined,\n user_list_search_results_page_number: searchData.pagination.pageNumber,\n });\n\n yield put(listsActions.loadCompanyListDetails({ id, isSourceScrub }));\n\n if (defaultSorting) {\n if (defaultSorting.length > 1) {\n yield put(sortActions.changeMultiSort(true, gridKey));\n } else {\n yield put(sortActions.resetSortSuccess({ gridKey, data: sortBy }));\n }\n }\n\n if (view === 'long-card') {\n yield put(\n longCardPaginationActions.changeLongCardPaginationSuccess({\n gridKey,\n data: searchData.pagination,\n })\n );\n } else {\n yield put(\n paginationActions.changePaginationSuccess({\n gridKey,\n data: searchData.pagination,\n })\n );\n }\n\n yield put(histogramActions.fetchHistogramFilters(gridKey, filter));\n } catch (error: any) {\n yield call(searchCompaniesFail, gridKey, error);\n }\n}\n\nexport default function* userListsSearchSaga() {\n yield takeLatest(listsActions.loadCompanyList, loadCompanyListSaga);\n yield fork(searchFiltersSagas);\n}\n","import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n`;\n\nconst SubSectionWrapper = styled.div``;\n\nconst Title = styled.h3`\n display: flex;\n align-items: center;\n font-style: normal;\n font-weight: 600;\n font-size: 16px;\n line-height: 24px;\n margin: 20px 20px 20px 0px;\n`;\n\nconst SubTitle = styled.div`\n font-style: normal;\n font-weight: 600;\n letter-spacing: 0.5px;\n font-family: 'Lato', sans-serif;\n font-size: 12px;\n line-height: 20px;\n /* Dark BLue */\n color: #334d6e;\n`;\n\nconst MainStatValue = styled.div`\n font-style: normal;\n font-weight: 600;\n font-size: 16px;\n line-height: 24px;\n /* Daybreak Blue / blue-6 */\n color: #1890ff;\n`;\n\nconst Styles = {\n Wrapper,\n SubSectionWrapper,\n Title,\n SubTitle,\n MainStatValue,\n};\n\nexport default Styles;\n","import React from 'react';\nimport { AdditionalStatisticsItems } from '@optx/models/feature/analystsLeaderboard/AdditionalStatistics';\nimport { formatDate } from '@optx/utils/format';\nimport Styles from './StatsPresentation.styles';\n\ninterface StatsPresentationProps {\n title?: string;\n items: AdditionalStatisticsItems | undefined;\n isDateTitle?: boolean;\n}\n\nconst StatsPresentation: React.FC<StatsPresentationProps> = ({\n title,\n items,\n isDateTitle = true,\n}) => {\n let formatedTitle = '';\n\n if (title && isDateTitle) {\n formatedTitle = title\n .split('-')\n .map(date => formatDate(date, 'shortDate'))\n .join(' - ');\n }\n\n if (!isDateTitle) {\n formatedTitle = title as string;\n }\n\n return (\n <Styles.Wrapper>\n <Styles.SubSectionWrapper>\n <Styles.Title>{formatedTitle}</Styles.Title>\n </Styles.SubSectionWrapper>\n <Styles.SubSectionWrapper>\n {items?.map((item, index) => {\n return (\n <React.Fragment key={index}>\n <Styles.SubTitle>{item.label}</Styles.SubTitle>\n <Styles.MainStatValue>{item.value}</Styles.MainStatValue>\n </React.Fragment>\n );\n })}\n </Styles.SubSectionWrapper>\n </Styles.Wrapper>\n );\n};\n\nexport default StatsPresentation;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// models\nimport Company from '@models/Company';\nimport { Cell } from '@models/table/Cell';\n// redux\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\n// components\nimport DropdownAdd from '@components/DropdownAdd';\n\nconst TableCellMyWatchlistsActions: React.FC<Cell<Company>> = ({ value, record, index }) => {\n const view = useSelector(viewTypeSelectors.searchView('lists'));\n\n return <DropdownAdd record={record} index={index} view={view} />;\n};\n\nexport default TableCellMyWatchlistsActions;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Link } from 'react-router-dom';\n// models\nimport { TableCellWatchlists } from '@optx/models/table/Cell';\n// constants\nimport { CompanyProfileTabs } from '@optx/constants/routes';\nimport { DEFAULT_CELL_VALUE } from '@optx/constants/table/cells';\n// utils\nimport { getCompanyProfileURL } from '@optx/utils/routes';\n\nconst StyledCompanyLink = styled(Link)`\n display: inline;\n`;\n\nconst TableCellAssociatedCompany: React.FC<TableCellWatchlists> = ({ value, row }) => {\n if (!row.addon_company) return <>{DEFAULT_CELL_VALUE}</>;\n\n if (!row.addon_company_id) return <>{row.addon_company}</>;\n\n return (\n <div role=\"presentation\">\n <StyledCompanyLink\n className=\"company-name__profile-link\"\n to={getCompanyProfileURL(row.addon_company_id, `tab=${CompanyProfileTabs.ADDON_MGMT}`)}\n target=\"_blank\"\n >\n {row.addon_company}\n </StyledCompanyLink>\n </div>\n );\n};\n\nexport default TableCellAssociatedCompany;\n","import { useCallback, lazy, Suspense } from 'react';\nimport { Modal } from 'antd';\n// models\nimport { PreselectedFilter } from '@optx/models/filters';\nimport { GridKeys } from '@models/grid';\n// utils\nimport validationSchema from '@utils/filtersValidationSchema';\nimport { normalizeFilter } from '@optx/utils/filters/filterHelpers';\n// redux\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Dictionary } from 'lodash';\nimport { SuccessErrorCallback } from '@optx/models/callback';\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as companyFiltersSelectors } from '@redux/company/filters';\nimport { selectors as modalSelectors, actions as modalActions } from '@redux/ui/modals/gridModals';\n\n// components\nimport useSaveViewMessage from '@hooks/filters/useSaveViewMessage';\nimport FixedLoader from '@optx/components/common/loader/FixedLoader';\nconst FiltersModalContent = lazy(() => import('./FiltersModalContent'));\n\ninterface FilterModalProps {\n gridName: 'Companies OutReach' | 'Advanced Search';\n filter: Dictionary<PreselectedFilter>;\n keySearch: string;\n gridKey: GridKeys;\n}\n\nconst FiltersModal = ({ gridName, keySearch, filter, gridKey }: FilterModalProps) => {\n const dispatch = useDispatch();\n\n const sorting = useSelector(sortSelectors.getSorting(gridKey));\n const onSearch = useCallback(\n (searchKey: string, filter: Dictionary<PreselectedFilter>) =>\n dispatch(\n searchActions.searchCompanies({\n gridKey,\n data: {\n searchKey,\n filter,\n sortBy: sorting,\n shouldResetPageNumber: true,\n shouldHandleTouchFilters: true,\n },\n })\n ),\n [dispatch, gridKey, sorting]\n );\n\n const filterSources = useSelector(companyFiltersSelectors.getCompanyFilters);\n const defaultFilters = useSelector(companyFiltersSelectors.getDefaultFilters);\n\n const clearSearch = useCallback(\n (shouldSort: boolean, callback: SuccessErrorCallback) => {\n dispatch(\n shouldSort || gridKey === 'outreachDetails'\n ? searchActions.clearSearch(\n {\n gridKey,\n data: undefined,\n },\n callback\n )\n : searchActions.resetSearch({ gridKey, data: true }, callback)\n );\n },\n [dispatch, gridKey]\n );\n\n // modal\n const modalIsOpen = useSelector(modalSelectors.isOpen(gridKey));\n const toggleModalFilters = () => dispatch(modalActions.toggleModal({ gridKey }));\n useSaveViewMessage(modalIsOpen && !!Object.keys(defaultFilters).length, toggleModalFilters);\n\n const handleSearch = (key: string, filter: Dictionary<PreselectedFilter>) => {\n const normalizedFilter = normalizeFilter(filter);\n onSearch(key, normalizedFilter);\n toggleModalFilters();\n };\n\n return (\n <Suspense fallback={<FixedLoader loading={true} />}>\n <Modal\n className=\"ant-modal-full ant-modal--filters\"\n title={null}\n visible={modalIsOpen}\n footer={null}\n onCancel={toggleModalFilters}\n closable={false}\n destroyOnClose\n >\n <FiltersModalContent\n filter={filter}\n gridName={gridName}\n filterSources={filterSources}\n keySearch={keySearch}\n onClearFilter={clearSearch}\n onSearch={handleSearch}\n validationSchema={validationSchema}\n onClose={toggleModalFilters}\n modalIsOpen={modalIsOpen}\n gridKey={gridKey}\n />\n </Modal>\n </Suspense>\n );\n};\n\nexport default FiltersModal;\n","import { useLayoutEffect, useState } from 'react';\nimport { useSize } from '@umijs/hooks';\n\ninterface UseMaxDisplayedChildrenOptions {\n hideChildClass?: string;\n rightOffset?: number;\n moreClassName?: string;\n updateContentDependency?: any;\n listType?: string | null;\n}\n\ninterface UseMaxDisplayedChildrenResult {\n domRef: React.MutableRefObject<HTMLDivElement>;\n /**\n * Number of hidden children. (Count more)\n */\n countHiddenChildren: number;\n hiddenChildrenIdList: string[];\n}\n\n/**\n * Compute the maximum number of children a wrapper can contain and hide children overflowing.\n * All children must be rendered and the hook just adds a class to children that need to be hidden inside the container.\n */\nconst useMaxDisplayedChildren = ({\n hideChildClass = 'hide',\n updateContentDependency,\n listType,\n}: UseMaxDisplayedChildrenOptions = {}): UseMaxDisplayedChildrenResult => {\n const [tagsWrapperSize, tagsWrapperRef] = useSize<HTMLDivElement>();\n const [countHiddenChildren, setCountHiddenChildren] = useState<number>(0);\n const [hiddenChildrenIdList, setHiddenChildrenIdList] = useState<string[]>([]);\n\n useLayoutEffect(() => {\n if (tagsWrapperRef.current) {\n const hiddenChildren: string[] = [];\n // convert HTMLCollection to Array of HTMLElement.\n const children: Array<HTMLElement> = Array.prototype.slice.call(\n tagsWrapperRef.current.children\n );\n // sort children by width, so we can hide the tags\n // that take the most amount of space\n const childrenSorted =\n listType === 'combined' ? children : children.sort((a, b) => a.offsetWidth - b.offsetWidth);\n\n const childrensWidths = childrenSorted.map(\n child =>\n child.offsetWidth +\n Number.parseInt(window.getComputedStyle(child).marginLeft) +\n Number.parseInt(window.getComputedStyle(child).marginRight)\n );\n\n let maxIndex = 0;\n let tagsWidth = 0;\n // tagsWrapperRef is positioned using flex styling. by hiding it's content, tagsWrapperRef\n // stretches to inhabit all available space. this way we can get the width available for displaying tags.\n // just using the .hide class and progressively hiding tags causes issue on ipad, where tagsWrapperRef's width\n // is always the sum of it's children even though they're hidden using position absolute and visibility hidden\n tagsWrapperRef.current.classList.add('hide-content');\n const availableWidth = tagsWrapperRef.current.clientWidth;\n\n // fix for cases where we can't fit any tags at all,\n // predominantly on smaller rezolutions, like ipad\n if (childrensWidths[0] > availableWidth) {\n for (let i = 0; i < childrenSorted.length; i++) {\n childrenSorted[i].classList.add(hideChildClass);\n hiddenChildren.push(childrenSorted[i].id);\n }\n } else {\n // iterate through tags and display them until their added widths\n // is bigger then the available width and save the index\n for (let i = 0; i < childrensWidths.length; i++) {\n tagsWidth += childrensWidths[i];\n\n if (tagsWidth <= availableWidth) {\n childrenSorted[i].classList.remove(hideChildClass);\n } else {\n maxIndex = i;\n\n break;\n }\n }\n\n // hide the tags that don't fit\n if (maxIndex > 0) {\n for (let i = maxIndex; i < childrenSorted.length; i++) {\n // setTimeout is used to avoid skipping adding .hide class\n // when resizing for SingleTag component\n setTimeout(() => childrenSorted[i].classList.add(hideChildClass));\n hiddenChildren.push(childrenSorted[i].id);\n }\n }\n }\n\n setHiddenChildrenIdList(hiddenChildren);\n setCountHiddenChildren(hiddenChildren.length);\n\n tagsWrapperRef.current.classList.remove('hide-content');\n }\n\n // updateContentDependency can be used to trigger content recalculation\n }, [tagsWrapperSize.width, tagsWrapperRef, hideChildClass, updateContentDependency, listType]);\n\n return {\n domRef: tagsWrapperRef,\n countHiddenChildren,\n hiddenChildrenIdList,\n };\n};\n\nexport default useMaxDisplayedChildren;\n","import React from 'react';\nimport styled from 'styled-components';\n// models\nimport { CompanyProfile } from '@optx/models/Company';\n// components\nimport { CheckCircleTwoTone, CloseOutlined } from '@ant-design/icons';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nconst PSGCompanyLabel = styled.span`\n text-align: center;\n color: #1e3a51;\n font: bold 18px 'Times New Roman';\n`;\n\ninterface TableCellScoreProps {\n value: number | string | null;\n record: CompanyProfile;\n verifiedKey: 'optx_score_verified' | 'il_optx_score_verified';\n isPSGCompany?: boolean;\n}\n\nconst TableCellScore: React.FC<TableCellScoreProps> = ({\n value,\n record,\n verifiedKey,\n isPSGCompany,\n}) => {\n return (\n <>\n {isPSGCompany ? (\n <>\n {record[verifiedKey] ? (\n <CheckCircleTwoTone\n twoToneColor=\"#52c41a\"\n style={{ fontSize: 21, marginRight: 6, position: 'relative', top: 2 }}\n />\n ) : record[verifiedKey] === false ? (\n <CloseOutlined style={{ fontSize: 21, marginRight: 6, position: 'relative', top: 2 }} />\n ) : null}\n <PSGCompanyLabel>PSG</PSGCompanyLabel>\n </>\n ) : (\n <TruncateTooltip title={value} className=\"text-truncate\" placement=\"topRight\">\n {record[verifiedKey] ? (\n <CheckCircleTwoTone\n twoToneColor=\"#52c41a\"\n style={{ fontSize: 21, marginRight: 6, position: 'relative', top: 2 }}\n />\n ) : record[verifiedKey] === false ? (\n <CloseOutlined style={{ fontSize: 21, marginRight: 6, position: 'relative', top: 2 }} />\n ) : null}\n <span>{value}</span>\n </TruncateTooltip>\n )}\n </>\n );\n};\n\nexport default TableCellScore;\n","import { ColumnType } from 'antd/lib/table';\nimport moment from 'moment';\n// constants\nimport globalConfig from '@optx/constants/config';\nimport { ISO_DATE_FORMAT } from '@optx/constants/format/date';\n// models\nimport { CompanyKeys } from '@optx/models/table/Columns';\nimport Company, { CompanyProfile } from '@optx/models/Company';\n// services\nimport { CompanyService, UserService } from '@optx/services/api';\n// utils\nimport { getIsPsgCompany } from '@optx/utils/company';\n// components\nimport { EditFieldSingleSelect } from '@optx/features/company/edit-fields/components';\nimport {\n TableCellActions,\n TableCellRadioAdmin,\n} from '@optx/components/common/table/Companies/cells';\nimport {\n TableCellName,\n TableCellCompanyURL,\n} from '@optx/components/common/table/Companies/styled-cells';\nimport TableCellScore from './cells/TableCellScore';\nimport TableCellDefaultRender from '@optx/components/common/table/AntTable/cells/TableCellDefault';\nimport TruncateTooltip from '@optx/shared/view/molecules/TruncateTooltip';\n\nexport interface CompanyColumnType extends ColumnType<CompanyProfile> {\n dataIndex: CompanyKeys;\n}\n\nexport const columns: Array<CompanyColumnType> = [\n {\n dataIndex: 'company_url',\n title: '',\n className: 'company_url',\n render: (value: string | null, record: Company, index: number) => (\n <TableCellCompanyURL value={value} record={record} />\n ),\n width: 42,\n align: 'center',\n },\n {\n dataIndex: 'company_name',\n title: 'Company Name',\n className: 'company_name',\n sorter: true,\n render: (value: string, record: CompanyProfile, index: number) => (\n <TableCellName value={value} record={record} />\n ),\n width: 170,\n ellipsis: true,\n },\n {\n dataIndex: 'checklist_reviewed_by',\n title: 'Reviewer',\n className: 'checklist_reviewed_by',\n sorter: true,\n render: TableCellDefaultRender,\n width: 160,\n ellipsis: true,\n },\n {\n dataIndex: 'stage',\n title: 'Stage',\n className: 'stage',\n sorter: true,\n render: (value: string, record: Company) =>\n record.source_tag.includes('et') ? (\n <EditFieldSingleSelect\n isFromGrid\n service={CompanyService.updateCompanyData}\n fieldName=\"Stage\"\n value={value}\n successMessage=\"Company stage updated successfully!\"\n errorMessage=\"Company stage update failed, Server error!\"\n record={record}\n fieldKey=\"stage\"\n />\n ) : (\n value\n ),\n width: 110,\n ellipsis: true,\n },\n {\n dataIndex: 'pipeline_rank',\n title: 'Pipeline Rank',\n className: 'pipeline_rank',\n sorter: true,\n render: (value: string, record: Company) =>\n record.source_tag.includes('et') ? (\n <EditFieldSingleSelect\n isFromGrid\n service={CompanyService.updateCompanyData}\n fieldName=\"Pipeline Rank\"\n value={value}\n successMessage=\"Company pipeline rank updated successfully!\"\n errorMessage=\"Company pipeline rank update failed, Server error!\"\n record={record}\n fieldKey=\"rank\"\n />\n ) : (\n value\n ),\n width: 85,\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'checklist_reviewed_date',\n title: 'Date Reviewed',\n className: 'checklist_reviewed_date',\n sorter: true,\n render: (value: string) => (\n <TruncateTooltip\n title={moment(value, ISO_DATE_FORMAT).format(globalConfig.grid_date.DATE_FORMAT)}\n >\n {moment(value, ISO_DATE_FORMAT).format(globalConfig.grid_date.DATE_FORMAT)}\n </TruncateTooltip>\n ),\n width: 120,\n ellipsis: true,\n },\n {\n dataIndex: 'score',\n title: 'OPTX Score',\n className: 'score',\n sorter: true,\n width: 150,\n render: (value: number | string | null, record: CompanyProfile) => (\n <TableCellScore\n value={value}\n record={record}\n verifiedKey=\"optx_score_verified\"\n isPSGCompany={getIsPsgCompany(record)}\n />\n ),\n fixed: 'left',\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'il_optx_score',\n title: 'IL OPTX Score',\n className: 'il_optx_score',\n sorter: true,\n width: 150,\n render: (value: number | string | null, record: CompanyProfile) => (\n <TableCellScore\n value={value}\n record={record}\n verifiedKey=\"il_optx_score_verified\"\n isPSGCompany={getIsPsgCompany(record)}\n />\n ),\n fixed: 'left',\n align: 'right',\n ellipsis: true,\n },\n {\n dataIndex: 'is_interesting',\n title: 'PSG Fit',\n className: 'is_interesting',\n sorter: true,\n render: (value: boolean | null, record: Company, index: number) => (\n <TableCellRadioAdmin\n value={value}\n record={record}\n fieldName=\"PSG Fit\"\n service={UserService.updateFitEvaluation}\n successMessage=\"Company PSG fit updated successfully!\"\n errorMessage=\"Failed to update value!\"\n destroyOnHide\n isFromGrid\n />\n ),\n width: 110,\n align: 'left',\n ellipsis: true,\n },\n {\n dataIndex: 'is_software',\n title: 'Software',\n className: 'is_software',\n sorter: true,\n width: 85,\n render: (value: boolean | null, record: Company, index: number) => (\n <TableCellRadioAdmin\n value={value}\n record={record}\n fieldName=\"Software Company\"\n service={UserService.addCompanySoftwareEvaluation}\n successMessage=\"Company software company updated successfully!\"\n errorMessage=\"Failed to update value!\"\n destroyOnHide\n isFromGrid\n />\n ),\n },\n {\n dataIndex: 'row_actions',\n title: 'Action',\n className: 'row_actions',\n render: (value: unknown, record: CompanyProfile, index: number) => (\n <TableCellActions value={value} record={record} index={index} />\n ),\n width: 65,\n fixed: 'right',\n },\n];\n\nexport default columns;\n","import React from 'react';\nimport { Tooltip } from 'antd';\n\nexport const TableCellErrorReason = (value: string) => {\n if (!value) {\n return null;\n }\n\n return (\n <Tooltip overlayStyle={{ whiteSpace: 'pre-line' }} title={value}>\n <span style={{ display: 'block' }}>{value}</span>\n </Tooltip>\n );\n};\n\nexport default TableCellErrorReason;\n","import numeral from 'numeral';\n\nfunction numeralOrdinal(number: number) {\n const b = number % 10;\n let numeral = '';\n\n if (Math.floor((number % 100) / 10) === 1) {\n numeral = 'th';\n } else if (b === 1) {\n numeral = 'st';\n } else if (b === 2) {\n numeral = 'nd';\n } else if (b === 3) {\n numeral = 'rd';\n } else {\n numeral = 'th';\n }\n\n return numeral;\n}\n\nnumeral.register('locale', 'us', {\n delimiters: { thousands: ',', decimal: '.' },\n abbreviations: { thousand: 'K', million: 'M', billion: 'B', trillion: 'T' },\n ordinal: numeralOrdinal,\n currency: { symbol: '$' },\n});\n\nnumeral.locale('us');\n","import { presetPalettes, PalettesProps } from '@ant-design/colors';\nimport { ANTDColors } from '@optx/models/theme';\n\n/**\n * Generate colors object.\n * @param presetColors\n */\nfunction getColors(presetColors: PalettesProps) {\n const { grey } = presetColors;\n\n // Replace UK grey word with US gray word.\n const colors = {\n ...presetPalettes,\n gray: grey,\n } as ANTDColors;\n\n // @ts-ignore\n delete colors.grey;\n\n return colors;\n}\n\nexport const colors = getColors(presetPalettes);\n","import { DefaultTheme } from 'styled-components';\nimport { colors } from './colors';\nimport { breakpoints } from './breakpoints';\n\nexport const defaultTheme: DefaultTheme = {\n colors,\n breakpoints,\n};\n","import { Breakpoints } from '@models/theme';\n\nexport const breakpoints: Breakpoints = {\n xs: '0px',\n sm: '576px',\n md: '768px',\n lg: '992px',\n xl: '1200px',\n xxl: '1400px',\n};\n","import styled, { keyframes } from 'styled-components';\n\nconst pulse = keyframes`\n 0% {\n background-color: rgba($info, 0.2);\n }\n 13% {\n background-color: rgba($info, 0.2);\n }\n 15% {\n background-color: rgba($info, 0.9);\n }\n 28% {\n background-color: rgba($info, 0.9);\n }\n 30% {\n background-color: rgba($info, 0.2);\n }\n 43% {\n background-color: rgba($info, 0.2);\n }\n 45% {\n background-color: rgba($info, 0.9);\n }\n 70% {\n background-color: rgba($info, 0.9);\n }\n 74% {\n background-color: rgba($info, 0.2);\n }\n 100% {\n background-color: rgba($info, 0.9);\n }\n`;\n\nconst borderPulse = keyframes`\n 0% {\n box-shadow: 0 0 0 0 rgb(255, 255, 255), 0 0 0 1px rgba($info, 0.8);\n }\n 40% {\n box-shadow: 0 0 0 1px rgb(255, 255, 255), 0 0 0 2px rgba($info, 0.8);\n }\n 80% {\n box-shadow: 0 0 0 3px $white, 0 0 1px 3px rgba($info, 0.8);\n }\n`;\n\nconst spin = keyframes`\n 0% {\n transform: rotate(0deg);\n }\n 50% {\n transform: rotate(360deg);\n }\n 100% {\n transform: rotate(1080deg);\n }\n`;\n\nconst Preloader = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: $bg-body;\n z-index: 9999999;\n`;\n\nconst Status = styled.div`\n width: 40px;\n height: 40px;\n position: absolute;\n left: 50%;\n top: 50%;\n margin: -20px 0 0 -20px;\n`;\n\nconst Spinner = styled.div`\n position: absolute;\n width: 78px;\n height: 78px;\n left: 50%;\n margin-left: -39px;\n margin-top: -39px;\n\n &:before {\n content: '';\n position: absolute;\n width: 45px;\n height: 45px;\n top: 50%;\n margin-top: -23px;\n left: 50%;\n margin-left: -23px;\n border-width: 2px 1px;\n border-style: solid;\n border-color: $info rgba($info, 0.3);\n border-radius: 50%;\n -o-border-radius: 50%;\n -ms-border-radius: 50%;\n -webkit-border-radius: 50%;\n -moz-border-radius: 50%;\n box-sizing: border-box;\n -o-box-sizing: border-box;\n -ms-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n animation: ${spin} 3.45s infinite;\n -o-animation: ${spin} 3.45s infinite;\n -ms-animation: ${spin} 3.45s infinite;\n -webkit-animation: ${spin} 3.45s infinite;\n -moz-animation: ${spin} 3.45s infinite;\n }\n &:after {\n content: '';\n position: absolute;\n width: 12px;\n height: 12px;\n top: 50%;\n margin-top: -6px;\n left: 50%;\n margin-left: -6px;\n background-color: $info;\n border-radius: 50%;\n -o-border-radius: 50%;\n -ms-border-radius: 50%;\n -webkit-border-radius: 50%;\n -moz-border-radius: 50%;\n box-sizing: border-box;\n -o-box-sizing: border-box;\n -ms-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n animation: ${pulse} 6.9s infinite, ${borderPulse} 6.9s infinite;\n -o-animation: ${pulse} 6.9s infinite, ${borderPulse} 6.9s infinite;\n -ms-animation: ${pulse} 6.9s infinite, ${borderPulse} 6.9s infinite;\n -webkit-animation: ${pulse} 6.9s infinite, ${borderPulse} 6.9s infinite;\n -moz-animation: ${pulse} 6.9s infinite, ${borderPulse} 6.9s infinite;\n }\n`;\n\nexport default {\n Preloader,\n Status,\n Spinner,\n};\n","import React from 'react';\nimport { useInjectReducer } from 'redux-injectors';\n// styles\nimport './styles.scss';\n// redux\nimport { useSelector } from 'react-redux';\nimport reducer, { selectors as loaderSelectors } from '@redux/global-loader';\nimport Styled from './GlobalLoader.styles';\n\nconst useInjectLoader = () => {\n useInjectReducer({ key: 'loaderReducer', reducer });\n};\n\nconst GlobalLoader = () => {\n useInjectLoader();\n const isLoading = useSelector(loaderSelectors.isLoading);\n\n if (!isLoading) {\n return null;\n }\n\n return (\n <Styled.Preloader>\n <Styled.Status>\n <Styled.Spinner />\n </Styled.Status>\n </Styled.Preloader>\n );\n};\n\nexport default React.memo(GlobalLoader);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport styled, { css } from 'styled-components';\nimport { Typography } from 'antd';\n// redux\nimport { selectors, useInject } from '@features/custom-global-loader';\n// components\nimport { LoadIcon32 } from '@components/LoadingIcon';\n\ninterface GlobalLoaderProps {\n $isChromePlugin: boolean | undefined;\n}\n\nconst Wrapper = styled.div<GlobalLoaderProps>` {\n position: fixed;\n background: rgba(223, 223, 223, 0.5);\n top: 0;\n left: 0;\n ${({ $isChromePlugin }) => css`\n width: ${$isChromePlugin ? '60vw' : '100vw'};\n `}\n height: 100vh;\n z-index: 3000;\n`;\n\nconst Content = styled.div` {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n\n .load__icon {\n animation: linear load 2s infinite;\n width: 32px;\n height: 32px;\n }\n\n .ant-typography {\n margin-top: 25px;\n display: block;\n line-height: 1.5715;\n background-image: none;\n border: 1px solid #d9d9d9;\n box-shadow: 0 2px #00000004;\n padding: 4px 15px;\n border-radius: 2px;\n color: ##000000d9;\n background: #fff;\n }\n\n @keyframes load {\n from {\n transform: rotate(0deg) scale(2);\n }\n to {\n transform: rotate(360deg) scale(2);\n }\n }\n`;\n\nconst CustomGlobalLoader: React.FC = () => {\n useInject();\n const loading = useSelector(selectors.loading);\n const customText = useSelector(selectors.customText);\n const isChromePlugin = window.location.pathname.startsWith('/chrome-extension-new');\n\n if (loading) {\n return (\n <Wrapper $isChromePlugin={isChromePlugin}>\n <Content>\n <LoadIcon32 />\n {customText && <Typography.Text>{customText}</Typography.Text>}\n </Content>\n </Wrapper>\n );\n }\n\n return null;\n};\n\nexport default CustomGlobalLoader;\n","import React from 'react';\nimport { Route, Redirect, RouteProps } from 'react-router-dom';\nimport JWTStorage from '../../../storage/localStorage/jwtStorage';\n// constants\nimport appRoutes from '../../../constants/routes';\n\ninterface PrivateRouteProps extends RouteProps {\n // TODO: Add correct types\n component: React.ComponentType<RouteProps> | any;\n}\n\nconst PrivateRoute = ({ component: Component, ...rest }: PrivateRouteProps) => {\n return (\n <Route\n {...rest}\n render={props => (\n <>\n {JWTStorage.exists() && Component && <Component {...props} />}\n\n {!JWTStorage.exists() && (\n <Redirect to={{ pathname: appRoutes.login, state: { from: props.location } }} />\n )}\n </>\n )}\n />\n );\n};\n\nexport default PrivateRoute;\n","import React from 'react';\n\nimport { Route, Redirect, RouteProps } from 'react-router-dom';\nimport JWTStore from '../../../storage/localStorage/jwtStorage';\n// constants\nimport appRoutes from '../../../constants/routes';\n\ninterface PublicRouteProps extends RouteProps {\n component: React.ComponentType<RouteProps>;\n}\n\nconst PublicRoute = ({ component: Component, ...rest }: PublicRouteProps) => {\n return (\n <Route\n {...rest}\n render={props => (\n <>\n {!JWTStore.exists() && <Component {...props} />}\n\n {JWTStore.exists() && (\n <Redirect to={{ pathname: appRoutes.home, state: { from: props.location } }} />\n )}\n </>\n )}\n />\n );\n};\n\nexport default PublicRoute;\n","import React from 'react';\nimport { BulkEditFieldContext } from '@optx/models/bulkActions';\n\nexport const SourcingOutReachContext = React.createContext<BulkEditFieldContext>({\n selectedData: [],\n setSelectedData: () => {},\n gridName: 'outreachDetails',\n hasSelectViewChanged: false,\n setHasSelectViewChanged: () => {},\n rationaleValue: undefined,\n setRationaleValue: () => {},\n});\n","import { Menu, MenuProps } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport { useDispatch, useSelector } from 'react-redux';\n// redux\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\n\nexport const ClearSortingMenuItem = ({ onClick, ...restProps }: MenuItemProps) => {\n const dispatch = useDispatch();\n const sorting = useSelector(sortSelectors.getSorting('outreachDetails'));\n const clearSort = () => dispatch(sortActions.resetSort('outreachDetails'));\n\n if (!sorting.length) {\n return null;\n }\n\n const handleClick: MenuProps['onClick'] = info => {\n onClick && onClick(info);\n clearSort();\n };\n\n return (\n <Menu.Item onClick={handleClick} {...restProps}>\n Clear All Sorting\n </Menu.Item>\n );\n};\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Menu } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\n// redux\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort/';\n\nconst ToggleSortType = ({ onClick, ...restProps }: MenuItemProps) => {\n const dispatch = useDispatch();\n const isMultiSort = useSelector(sortSelectors.isMultiSort('outreachDetails'));\n const searchView = useSelector(viewTypeSelectors.searchView('outreachDetails'));\n const sorting = useSelector(sortSelectors.getSorting('outreachDetails'));\n const multiSort = useCallback(() => {\n if (!isMultiSort) {\n const tableElement = document.querySelector('.ant-table-body');\n tableElement?.scrollTo(0, 0);\n }\n\n dispatch(sortActions.changeMultiSort(!isMultiSort, 'outreachDetails', sorting));\n }, [dispatch, isMultiSort, sorting]);\n\n if (searchView === 'long-card') return null;\n\n return (\n <Menu.Item onClick={multiSort} {...restProps}>\n {isMultiSort ? 'Enable Single Sort' : 'Enable Multi Sort'}\n </Menu.Item>\n );\n};\n\nexport default ToggleSortType;\n","import React from 'react';\nimport { Menu } from 'antd';\n// models\nimport { SearchViewType } from '@models/user';\n// components\nimport { ResetColumnWidthsMenu } from '@features/columns/update-columns/components';\nimport DisplayColumnToggle from '@components/pages/Home/SearchGridControls/GridDropdown/GridMenu/DisplayColumnToggle';\nimport { ClearSortingMenuItem } from './ClearSortingMenuItem';\nimport ToggleSortType from '../../ToggleSortType';\n\ninterface CompaniesOutReachMenuProps {\n viewType: SearchViewType;\n}\n\nconst CompaniesOutReachMenu: React.FC<CompaniesOutReachMenuProps> = ({ viewType }) => {\n return (\n <Menu>\n <DisplayColumnToggle key={1} />\n <ResetColumnWidthsMenu key={2} />\n <ClearSortingMenuItem key={3} />\n {viewType === 'table' && <ToggleSortType key={4} />}\n </Menu>\n );\n};\n\nexport default CompaniesOutReachMenu;\n","import React, { useState, useEffect, ReactElement } from 'react';\nimport { Dropdown, Button, Tooltip } from 'antd';\nimport { SettingOutlined } from '@ant-design/icons';\nimport { useLocation } from 'react-router';\n// models\nimport { SearchViewType } from '@models/user';\n// constants\nimport { COLUMNS_SOURCE_MANEGEMENT_TITLE } from '@optx/constants/titles';\n// components\nimport { CompaniesOutReachMenu } from './GridMenu';\n\ninterface GridDropdownProps {\n viewType: SearchViewType;\n}\n\nconst GridDropdown: React.FC<GridDropdownProps> = ({ viewType }) => {\n const [overlayMenu, setOverlayMenu] = useState<ReactElement | null>(null);\n const { pathname } = useLocation();\n\n useEffect(() => {\n if (pathname.startsWith('/all-reports')) {\n setOverlayMenu(CompaniesOutReachMenu({ viewType }));\n }\n }, [pathname, viewType]);\n\n if (!overlayMenu) return null;\n\n return (\n <Tooltip title={COLUMNS_SOURCE_MANEGEMENT_TITLE} placement=\"topRight\">\n <Dropdown overlay={overlayMenu} trigger={['click']} placement=\"bottomRight\">\n <Button type=\"text\" icon={<SettingOutlined style={{ fontSize: 19, color: 'white' }} />} />\n </Dropdown>\n </Tooltip>\n );\n};\n\nexport default React.memo(GridDropdown);\n","import React from 'react';\nimport { Tooltip } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\n// redux\nimport {\n actions as viewTypeActions,\n selectors as viewTypeSelectors,\n} from '@features/grid/view-type';\n//constants\nimport { LONG_CARD_TITLE } from '@optx/constants/titles';\n// components;\nimport ToggleLongCardView from '@optx/components/common/long-card/ToggleLongCardView';\n\nconst ToggleLongCardViewContainer = () => {\n const dispatch = useDispatch();\n const searchView = useSelector(viewTypeSelectors.searchView('outreachDetails'));\n\n const toggleLongCardView = () => {\n dispatch(viewTypeActions.toggleSearchView({ gridKey: 'outreachDetails', data: 'long-card' }));\n };\n\n const active = searchView === 'long-card';\n\n return (\n <Tooltip title={LONG_CARD_TITLE}>\n <ToggleLongCardView color=\"white\" onClick={toggleLongCardView} active={active} />\n </Tooltip>\n );\n};\n\nexport default React.memo(ToggleLongCardViewContainer);\n","import React from 'react';\nimport { Tooltip } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\n// redux\nimport {\n selectors as viewTypeSelectors,\n actions as viewTypeActions,\n} from '@features/grid/view-type';\n// consts\nimport ToggleTableView from '@optx/components/common/long-card/ToggleTableView';\nimport { TABLE_VIEW_TITLE } from '@optx/constants/titles';\n\nconst ToggleTableViewContainer = () => {\n const dispatch = useDispatch();\n const searchView = useSelector(viewTypeSelectors.searchView('outreachDetails'));\n\n const toggleTableView = () => {\n if (searchView !== 'table') {\n window.scrollTo(0, 0);\n }\n\n dispatch(viewTypeActions.toggleSearchView({ gridKey: 'outreachDetails', data: 'table' }));\n };\n\n const active = searchView === 'table';\n\n return (\n <Tooltip title={TABLE_VIEW_TITLE}>\n <ToggleTableView color=\"white\" onClick={toggleTableView} active={active} />\n </Tooltip>\n );\n};\n\nexport default React.memo(ToggleTableViewContainer);\n","import styled from 'styled-components';\nimport { Title } from '@optx/shared/view/atoms/Typography';\nimport { Row, Col } from 'antd';\n\ninterface SearchGridWrapperProps {\n $isFullScreen: boolean;\n}\n\nconst SearchGridWrapper = styled(Row)<SearchGridWrapperProps>`\n min-height: ${props => (props.$isFullScreen ? '56px' : '86px')};\n background-color: transparent;\n\n .ant-typography,\n .ant-typography-ellipsis,\n .h1,\n .span {\n color: #ffffff;\n font-size: 24px;\n font-weight: 600;\n }\n`;\n\nconst ControlsWrapper = styled(Col)`\n position: relative;\n\n .prefixed-selection-item__label {\n color: #1890ff;\n }\n .ant-select-arrow,\n .prefixed-selection-item__prefix {\n color: #ffffff;\n }\n .ant-select-single.ant-select-open .ant-select-selection-item,\n .ant-select-selection-item {\n color: #ffffff;\n }\n\n .ant-btn,\n .ant-dropdown-trigger,\n .ant-typography,\n .ant-typography-ellipsis,\n .ant-typography-ellipsis-single-line {\n font-size: 15px;\n }\n .ant-btn {\n margin-left: 8px;\n }\n\n .ant-btn-icon-only {\n margin-left: 4px;\n }\n`;\n\nconst PageTitle = styled(Title)`\n h1& {\n flex: 1 1 20%;\n margin: 0;\n color: #ffffff;\n }\n`;\n\nconst PageTitleWrapper = styled.div`\n display: flex;\n align-items: center;\n`;\nconst GridViewWrapper = styled.span`\n .ant-dropdown-trigger {\n background: #074681;\n border: 1px solid #1890ff;\n border-radius: 3px;\n color: #ffffff;\n\n .ant-typography {\n color: #1890ff;\n font-weight: 400;\n }\n .anticon {\n color: #ffffff;\n }\n }\n`;\n\nexport default {\n SearchGridWrapper,\n PageTitleWrapper,\n ControlsWrapper,\n PageTitle,\n GridViewWrapper,\n};\n","import { Select } from 'antd';\nimport React, { useState, useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort/';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport styled from 'styled-components';\nimport {\n mapOptionsToLabeledValues,\n PrefixedSelectionItem,\n} from '@optx/components/common/select/Select/PrefixedSelectionItem';\nimport { SelectOption } from '@optx/models/Option';\nimport { SelectProps, SelectValue } from 'antd/lib/select';\n\nconst StyledLabel = styled(PrefixedSelectionItem)`\n .prefixed-selection-item__label {\n color: #1890ff;\n }\n`;\n\nconst StyledOption = styled(Select.Option)`\n .prefixed-selection-item__label {\n color: rgba(0, 0, 0, 0.65);\n }\n`;\n\nconst CardViewSelect = ({ className, ...restProps }: SelectProps<SelectValue>) => {\n return <Select dropdownClassName={className} {...restProps} />;\n};\n\nconst StyledSelect = styled(CardViewSelect)`\n .prefixed-selection-item__label {\n color: rgba(0, 0, 0, 0.65);\n }\n`;\n\nconst touchTypes: Array<SelectOption> = [\n { label: 'Highest OPTX Score', value: 'score' },\n { label: 'Top Raised', value: 'capital_raised' },\n { label: 'Number of Employees', value: 'num_employees' },\n { label: 'Employee Growth % Y/Y', value: 'emp_growth_percent' },\n];\n\nconst typesOptions = mapOptionsToLabeledValues('Sort by: ', touchTypes, StyledLabel);\n\nconst sortingValues = ['score', 'capital_raised', 'num_employees', 'emp_growth_percent'];\n\nconst CardPannelSorting = () => {\n const dispatch = useDispatch();\n const sorting = useSelector(sortSelectors.getSorting('outreachDetails'));\n const viewType = useSelector(viewTypeSelectors.searchView('outreachDetails'));\n\n const [value, setValue] = useState<string>(sorting[0]?.id);\n\n useEffect(() => {\n if (sorting.length && sorting[0].id !== value) {\n setValue(sorting[0].id);\n }\n\n if (viewType === 'long-card') {\n window.scrollTo(0, 0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sorting]);\n\n const changeSorting = (value: SelectValue) => {\n dispatch(\n sortActions.changeSort({\n gridKey: 'outreachDetails',\n data: [{ id: value as string, desc: true }],\n })\n );\n setValue(value as string);\n };\n\n const selectValue = useMemo(\n () => (sortingValues.includes(value) ? value : 'Sort by: Choose Sorting'),\n [value]\n );\n\n return (\n <StyledSelect\n onChange={changeSorting}\n bordered={false}\n value={selectValue}\n dropdownMatchSelectWidth={false}\n >\n {typesOptions.map(option => (\n <StyledOption key={option.value} value={option.value}>\n {option.label}\n </StyledOption>\n ))}\n </StyledSelect>\n );\n};\n\nexport default React.memo(CardPannelSorting);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport { Tooltip } from 'antd';\n// redux\nimport { selectors as fullscreenSelectors } from '@redux/ui/settings/fullscreen';\nimport { selectors as listsSelectors } from '@optx/common/selectors/lists';\nimport { selectors as listDetailsSelectors } from '@redux/lists/details';\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport { selectors as gridViewSelectors, actions as gridViewActions } from '@features/grid/view';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport * as searchesSelectors from 'src/components/pages/UserLists/components/PageLoader/selectors';\n// components\nimport { BulkActionsButton } from '@features/bulk-actions/actions-menu';\nimport { SourcingOutReachContext } from './SourcingOutReachContext';\nimport GridView from '@optx/features/grid/view/components/GridView';\nimport { TrendingControls } from '@optx/components/pages/Home/SearchGridControls';\nimport SaveSearch from '@optx/components/pages/Home/Header/SaveSearch/SaveSearch';\nimport GridDropdown from './GridDropdown';\nimport GridFullScreen from '@optx/shared/view/molecules/FullScreen/GridFullScreen';\nimport ToggleLongCardViewContainer from './ToggleLongCardViewContainer';\nimport ToggleTableViewContainer from './ToggleTableViewContainer';\nimport { GridActionMenu } from '@components/feature/drop-down/grid-action-menu';\n// styles\nimport Styled from './SearchGridControls.styles';\nimport CardPannelSorting from './CardPannelSorting';\nimport SearchCount from '@optx/features/grid/search-count/components/SearchCount';\n\nconst SearchGridControls = () => {\n const location = useLocation();\n const isFullscreen = useSelector(fullscreenSelectors.isFullscreen);\n const activeView = useSelector(gridViewSelectors.getView('outreachDetails'));\n let listName = useSelector(listsSelectors.getSelectedListName);\n const viewType = useSelector(viewTypeSelectors.searchView('outreachDetails'));\n const selectedCompanies = useSelector(\n bulkActionsSelectors.selectedCompanies.getSelectedCompanies('outreachDetails')\n );\n const loading = useSelector(searchesSelectors.listIsLoading);\n const sourceScrubListCompanyName = useSelector(listDetailsSelectors.getListData);\n\n const applyView = gridViewActions.applyView;\n\n if (!listName.length && sourceScrubListCompanyName) {\n listName = sourceScrubListCompanyName.title;\n }\n\n if (isFullscreen && viewType === 'table') {\n return null;\n }\n\n return (\n <>\n <Styled.SearchGridWrapper $isFullScreen={isFullscreen} align=\"middle\">\n <Styled.PageTitle ellipsis>\n <span className=\"d-flex align-items-center\">\n {!isFullscreen && (\n <Tooltip title=\"Companies\" className=\"mr-3 text-truncate\">\n {!loading && 'Companies'}\n </Tooltip>\n )}\n <SearchCount gridName=\"outreachDetails\" searchViewType={viewType} />\n </span>\n </Styled.PageTitle>\n\n {!isFullscreen && (\n <Styled.ControlsWrapper>\n <SaveSearch showButton={false} viewId={activeView.id} />\n <TrendingControls />\n {viewType === 'table' && (\n <Styled.GridViewWrapper>\n <GridView\n gridKey=\"outreachDetails\"\n activeView={activeView}\n applyView={applyView}\n customWidth=\"350px\"\n isFromSourcingOutReach\n />\n </Styled.GridViewWrapper>\n )}\n {viewType === 'long-card' && <CardPannelSorting />}\n <ToggleTableViewContainer />\n <ToggleLongCardViewContainer />\n {viewType === 'table' && <GridFullScreen />}\n {viewType === 'table' && <GridDropdown viewType={viewType} />}\n <GridActionMenu isEllipsisWhite />\n {!!selectedCompanies.length && viewType === 'table' && (\n <BulkActionsButton\n context={SourcingOutReachContext}\n selectedCompanies={selectedCompanies}\n referrer={encodeURIComponent(location.pathname)}\n />\n )}\n </Styled.ControlsWrapper>\n )}\n </Styled.SearchGridWrapper>\n </>\n );\n};\n\nexport default React.memo(SearchGridControls);\n","import styled, { css } from 'styled-components';\n\nconst Container = styled.div`\n .search-header-content {\n position: sticky;\n top: 0;\n background-color: white;\n z-index: 1;\n\n .ant-input-affix-wrapper,\n .ant-dropdown-trigger,\n .antd-search-input {\n margin-left: 12px;\n }\n .rc-overflow {\n right: 0;\n }\n }\n .ant-btn-icon-only {\n margin-left: 10px;\n vertical-align: top;\n }\n`;\n\nconst CompanyCardInfo = styled.div`\n display: flex;\n flex-direction: column;\n background: #064885;\n background: linear-gradient(360deg, #064885 0%, #137edf 124.9%);\n .ant-table-column-sorters,\n .ant-table-column-sorter,\n .ant-table-column-sorter-full,\n .ant-table-column-sorter-inner {\n margin-right: -8px;\n }\n\n .ant-table-container {\n width: 101%;\n position: absolute;\n background-color: white;\n }\n\n .ant-breadcrumb {\n line-height: 1.5715;\n font-size: 14px;\n }\n .ant-breadcrumb-separator,\n .ant-breadcrumb a {\n color: #bae7ff !important;\n }\n .ant-breadcrumb-link {\n color: #ffffff;\n }\n .multiselect__control {\n border: 1px solid #1890ff;\n background: #074681;\n border-radius: 3px;\n flex-wrap: nowrap;\n &:hover {\n cursor: pointer;\n border: 1px solid #1890ff;\n }\n }\n .multiselect__value-container {\n color: #ffffff;\n .ant-typography-ellipsis,\n .multiselect__placeholder,\n .multiselect__indicator {\n color: #ffffff;\n }\n .multiselect__placeholder {\n font-size: 14px;\n }\n }\n .multiselect__indicators {\n background: #074681;\n\n .anticon {\n color: #ffffff;\n }\n }\n div.styled-single-select__control {\n padding-left: 0;\n background: #074681;\n border: 1px solid #1890ff;\n border-radius: 3px;\n\n &:hover {\n cursor: pointer;\n border: 1px solid #1890ff;\n }\n .ant-typography-ellipsis,\n .anticon {\n color: #ffffff;\n }\n .styled-single-select__placeholder {\n color: #ffffff;\n font-size: 14px;\n }\n }\n .ant-table .ant-table-column-sorter {\n margin-right: 0;\n }\n`;\n\ninterface CompanyCardContainerProps {\n isLongCard?: boolean;\n}\n\nconst CompanyCardContainer = styled.div<CompanyCardContainerProps>`\n ${props =>\n css`\n padding: ${props.isLongCard ? '23px 40px 0px 40px' : '23px 40px 40px 40px'};\n `}\n width: 100%;\n .anticon-setting:hover,\n .ant-btn-icon-only:hover {\n color: #1890ff !important;\n }\n`;\n\nconst ContainerAnalystName = styled.div`\n display: flex;\n align-items: center;\n .span,\n svg {\n height: 2em;\n position: relative;\n color: #bae7ff;\n }\n`;\n\nconst BackButtonText = styled.span`\n color: #bae7ff;\n margin-left: 10px;\n font-size: 24px;\n font-weight: 600;\n cursor: pointer;\n`;\n\nconst AnalystName = styled.span`\n color: #ffffff;\n font-size: 24px;\n font-weight: 600;\n width: 60rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-left: 7px;\n`;\n\nconst FilterContainer = styled.div`\n align-items: center;\n margin-top: 12px;\n display: flex;\n gap: 11px;\n justify-content: space-between;\n position: relative;\n z-index: 5;\n\n @media all and (max-width: 1550px) {\n display: block;\n }\n`;\n\nconst FilterSelectContainer = styled.div`\n display: flex;\n gap: 11px;\n justify-content: flex-start;\n @media all and (max-width: 1550px) {\n margin-bottom: 11px;\n }\n .bLcoCK {\n min-width: 250px;\n }\n`;\n\nconst FilterDateContainer = styled.div`\n display: flex;\n gap: 11px;\n justify-content: flex-end;\n @media all and (max-width: 1550px) {\n justify-content: flex-start;\n }\n`;\n\nexport {\n CompanyCardInfo,\n ContainerAnalystName,\n BackButtonText,\n AnalystName,\n CompanyCardContainer,\n FilterContainer,\n FilterSelectContainer,\n FilterDateContainer,\n Container,\n};\n","import { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Col, Empty, Row } from 'antd';\nimport { useInfiniteScroll } from 'react-infinite-scroll-hook';\n// models\nimport { GridKeys } from '@models/grid';\n// constants\nimport {\n LONG_CARD_VIEW_DEFAULT_PAGE_SIZE,\n LONG_CARD_VIEW_DEFAULT_LOAD_MORE_SIZE,\n} from '@constants/pagination';\n// redux\nimport { CompanyCard } from '@features/long-card/company-card';\nimport {\n actions as longCardPaginationActions,\n selectors as longCardPaginationSelectors,\n} from '@features/grid/pagination-long-card';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as searchCountSelectors } from '@features/grid/search-count';\nimport { actions as viewTypeActions } from '@features/grid/view-type';\n// hooks\nimport useLoadCompanyData from '@optx/features/long-card/hooks/useLoadCompanyData';\n// components\nimport { CardPannel } from '@optx/features/long-card/card-pannel';\n\nconst gridKey: GridKeys = 'outreachDetails';\n\nconst LongCardView = () => {\n const dispatch = useDispatch();\n\n const companiesCount = useSelector(searchCountSelectors.getSearchCount(gridKey));\n const companies = useSelector(searchSelectors.getCompanies(gridKey));\n const loading = useSelector(searchSelectors.isLoading(gridKey));\n const { pageNumber, pageSize } = useSelector(\n longCardPaginationSelectors.getLongCardPagination('outreachDetails')\n );\n\n const handleLoadMore = () => {\n const newPageSize: number = pageSize + LONG_CARD_VIEW_DEFAULT_LOAD_MORE_SIZE;\n\n // This resets the state so that the active company doesn't scroll into view when the page loads more cards.\n dispatch(viewTypeActions.changedCompanyCard({ gridKey, data: false }));\n dispatch(\n longCardPaginationActions.changeLongCardPagination({\n gridKey: 'outreachDetails',\n data: { pageNumber, pageSize: newPageSize },\n })\n );\n };\n\n const infiniteScrollRef = useInfiniteScroll<HTMLDivElement>({\n loading,\n hasNextPage: companies.length < companiesCount,\n onLoadMore: handleLoadMore,\n });\n\n const { loadCompanyData } = useLoadCompanyData();\n\n useEffect(() => {\n loadCompanyData(companies[0]?.company_id, companies[0]?.company_url);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [companies[0]?.company_id]);\n\n useEffect(() => {\n if (pageSize === LONG_CARD_VIEW_DEFAULT_PAGE_SIZE) {\n window.scrollTo(0, 0);\n }\n }, [pageSize]);\n\n return (\n <div ref={infiniteScrollRef}>\n <Row gutter={[16, 0]}>\n <Col xl={10} xxl={12}>\n {companies.map((company, index) => {\n return <CompanyCard key={index} company={company} />;\n })}\n </Col>\n <Col xl={10} xxl={12}>\n {companiesCount > 0 ? <CardPannel companies={companies} /> : <Empty />}\n </Col>\n </Row>\n </div>\n );\n};\n\nexport default LongCardView;\n","import { useSelector } from 'react-redux';\nimport { selectors } from '@features/grid/view-transition';\nimport LongCardView from './LongCardView';\n\nconst CardContent = () => {\n const isViewTransition = useSelector(selectors.getViewTransition);\n\n return <div className=\"position-relative\">{!isViewTransition && <LongCardView />}</div>;\n};\n\nexport default CardContent;\n","import { createSelector } from 'reselect';\nimport { selectors as userSelectors } from '@redux/user/information';\nimport { selectors as companyFiltersSelectors } from '@redux/company/filters';\nimport { selectors as saveSearchSelectors } from '@redux/company/saved-searches';\nimport { selectors as userListSelectors } from '@redux/user/user-list';\nimport { selectors as equityTouchSelectors } from '@redux/company/equity-touch';\nimport { isLoading as searchIsLoading } from '@features/grid/search/state/selectorsReusable';\n\nexport const isLoading = createSelector(\n userSelectors.isLoading,\n companyFiltersSelectors.isLoading,\n searchIsLoading('outreachDetails'),\n saveSearchSelectors.isLoading,\n userListSelectors.isFieldLoading,\n equityTouchSelectors.isLoading,\n (loadingUser, loadingFilters, searching, savingSearch, userManagement, equityTouch) =>\n loadingUser || loadingFilters || searching || savingSearch || userManagement || equityTouch\n);\n\nexport const saveSearchLoading = createSelector(\n searchIsLoading('outreachDetails'),\n saveSearchSelectors.isLoading,\n (searching, savingSearch) => searching || savingSearch\n);\n","import React, {\n useEffect,\n useRef,\n useState,\n useContext,\n ReactText,\n useMemo,\n SyntheticEvent,\n ReactNode,\n} from 'react';\nimport queryString from 'query-string';\nimport Company from '@optx/models/Company';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useVT } from 'virtualizedtableforantd4';\nimport { useSize } from '@umijs/hooks';\nimport { isEqual, pick } from 'lodash';\nimport { ResizeCallbackData } from 'react-resizable';\n// utils\nimport { checkOverflow } from '@optx/utils/utils';\n// models\nimport { ColumnType } from 'antd/lib/table';\nimport { ColumnKeys } from '@optx/models/table/Columns';\nimport { TableChangeCallback } from '@optx/models/table/antd-table';\nimport { SortByRule } from '@optx/models/table/sorting';\nimport { SelectedCompaniesGrids } from '@optx/models/bulkActions';\nimport { getPageSize } from '@optx/utils/table/pagination';\n// constants\nimport { BULK_ACTIONS_FIELDS } from '@constants/equitytouch';\nimport { MAX_SELECT_ALL_COMPANIES } from '@optx/config/bulkConfig';\n// utils\nimport { mapSorting } from '@utils/table/sorting';\nimport { stripUrlSlashes } from '@utils/url';\nimport scrollTableOnSorting from '@optx/utils/scrollTable';\nimport { getDataSource } from '@optx/utils/search';\nimport { disableSelectAllCheckbox } from '@optx/utils/select/selectAll';\n// redux\nimport { actions as selectedCompaniesActions } from '@features/bulk-actions/selected-companies';\nimport { actions as mergeCompaniesActions } from '@features/bulk-actions/bulk-merge-companies';\nimport { selectors as bulkActionsSelectors } from '@features/bulk-actions';\nimport { selectors as fetchCountSelectors } from '@optx/features/grid/fetched-count';\nimport { selectors as columnSelectors, actions as columnActions } from '@features/grid/columns';\nimport { getSessionSettings } from '@optx/redux/user/information/selectors';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as searchCountSelectors } from '@features/grid/search-count';\nimport { selectors as paginationSelectors } from '@features/grid/pagination';\nimport { actions as sortActions, selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as fullscreenSelectors } from '@redux/ui/settings/fullscreen';\nimport selectedCompanies from '@features/bulk-actions/state/selectors/selectedCompanies';\n// hooks\nimport useNonVirtualizedTable from '@hooks/useNonVirtualizedTable';\nimport useIsMount from '@hooks/useIsMount';\nimport useNavigateOnCompanyNameClick from '@optx/common/hooks/useNavigateOnCompanyNameClick';\nimport { useVirtualScrollPosition, VirtualTableScrollYContext } from '@features/scroll-history';\nimport useTableLayoutHeight from '@hooks/useTableLayoutHeight';\nimport useUserRole from '@hooks/useUserRole';\nimport useMultiSortNumbers from '@hooks/useMultiSortNumbers';\nimport useIsForTesting from '@optx/common/hooks/testing/useIsForTesting';\nimport useSelectAll from '@optx/common/hooks/select/useSelectAll';\n// components\nimport TestingGridTable from '@optx/components/pages/Home/TestingGridTable';\nimport { Styled } from '@components/common/table/Companies/CompanyTable.styled';\nimport { ResizeColumn } from '@optx/features/company-search/lib/Table/columns/ResizeColumn';\nimport { COMPANY_DEFAULT_SORT } from '@optx/constants/table/sort/defaultSort';\nimport * as selectors from './PageLoader/selectors';\nimport { GridPagination } from '@features/grid/pagination/components';\nimport ExternalScroll from '../../../../components/common/external-scroll';\nimport DisplayColumnModal from '@optx/features/grid/columns/components/DisplayColumnModal';\nimport { SelectAllBanner } from '@optx/features/grid/select-all/components';\nimport RenderCell from '@optx/features/grid/select-all/components/RenderCell';\n\nconst rowKey: keyof Company = 'company_id';\nconst paginationId = 'advanced-search-pagination';\nlet isMouseDown = false;\nconst gridKey = 'outreachDetails';\n\nconst SearchGrid: React.FC = () => {\n // hooks\n const dispatch = useDispatch();\n useNavigateOnCompanyNameClick('outreach');\n const isMount = useIsMount();\n const virtualizedActive = useNonVirtualizedTable();\n const { advancedSearchPathname } = useUserRole();\n const { onScroll, initialScrollPosition } = useVirtualScrollPosition(advancedSearchPathname);\n const [windowSize] = useSize(window.document.documentElement);\n const ctx = useContext(VirtualTableScrollYContext);\n const tableWrapperRef = useRef<HTMLDivElement>(null);\n const vtImperativeScroll = useRef<any>();\n // useSize triggers a typescript error for class selectors,\n // but works fine with tag selectors\n // @ts-ignore\n const [tableHeader] = useSize(document.querySelector('.ant-table-header'));\n const [mainHeaderHeight] = useSize(document.getElementById('mainHeader'));\n const isForTesting = useIsForTesting();\n\n // selectors\n const isLoading = useSelector(selectors?.isLoading);\n const initCompanies = useSelector(searchSelectors.getCompanies(gridKey));\n const reduxColumns = useSelector(columnSelectors.getColumns(gridKey));\n const sorting = useSelector(sortSelectors.getSorting(gridKey));\n const isMultiSort = useSelector(sortSelectors.isMultiSort(gridKey));\n const sessionSettings = useSelector(getSessionSettings);\n const fetchedCount = useSelector(fetchCountSelectors.getFetchedCount(gridKey));\n const { pageNumber, pageSize } = useSelector(paginationSelectors.getPagination(gridKey));\n const getMergeCompaniesStatus: boolean = useSelector(\n bulkActionsSelectors.mergeCompanies.getMergeCompaniesStatus\n );\n const gridSelectedCompanyIds = useSelector(\n bulkActionsSelectors.selectedCompanies.getSelectedCompanies(gridKey, pageNumber)\n );\n const selectedCompaniesCount = useSelector(\n selectedCompanies.getSelectedCompanies(gridKey as SelectedCompaniesGrids)\n ).length;\n const totalItemsCount = useSelector(searchCountSelectors.getSearchCount(gridKey));\n const actualPageSize = getPageSize(pageSize, totalItemsCount, pageNumber);\n const isFullscreen = useSelector(fullscreenSelectors.isFullscreen);\n const lastPageSize = totalItemsCount % pageSize;\n const lastPageNumber = Math.ceil(totalItemsCount / pageSize);\n\n // state\n const [selectedRowKeys, setSelectedRowKeys] = useState<ReactText[]>([]);\n const [columns, setColumns] = useState(reduxColumns);\n const [currentScroll, setCurrentScroll] = useState(0);\n const [externalScroll, setExternalScroll] = useState<Element | null>(null);\n const columnReferences = useRef(reduxColumns);\n const [showSelectAll, setShowSelectAll] = useState(false);\n\n const handleDeselect = () => {\n setShowSelectAll(false);\n };\n\n const [vt, setVt] = useVT(\n () => ({\n initTop: initialScrollPosition,\n scroll: { y: currentScroll },\n onScroll,\n ref: vtImperativeScroll,\n }),\n [currentScroll, initialScrollPosition]\n );\n\n const externalScrollElement = document.querySelector('.external-scroll');\n\n const contentRef = useRef<HTMLDivElement | null>(\n tableWrapperRef.current?.querySelector('.ant-table-body') || null\n );\n\n if (!contentRef.current && tableWrapperRef.current) {\n contentRef.current = tableWrapperRef.current.querySelector('.ant-table-body') || null;\n }\n\n const [tableSize] = useSize(\n () => document.querySelector('.advanced-companies-grid-wrapper table') as HTMLElement\n );\n\n useEffect(() => {\n if (externalScrollElement !== null) {\n setExternalScroll(externalScrollElement);\n }\n }, [externalScrollElement]);\n\n useMultiSortNumbers(tableWrapperRef, sorting, isMultiSort as boolean, isLoading);\n\n const handleChange: TableChangeCallback<Company> = (pagination, filters, sorter, extra) => {\n switch (extra.action) {\n case 'sort': {\n // while resizing columns, prevent sorting from being triggered.\n // this happens when decreasing the width of a column and letting go of\n // the mouse button over the column header\n if (!isMouseDown) {\n const parsedSort =\n sessionSettings?.sourcing_outreach_detail_filters &&\n queryString.parse(sessionSettings?.sourcing_outreach_detail_filters, {\n arrayFormat: 'comma',\n });\n\n const sort = mapSorting(\n sorter,\n sorting,\n parsedSort && (parsedSort?.query as string),\n COMPANY_DEFAULT_SORT,\n isMultiSort\n );\n dispatch(\n sortActions.changeSort({\n gridKey: gridKey,\n data: sort.sortBy as SortByRule<any>[],\n })\n );\n\n // scroll table to the left when sorting, issue for firefox\n scrollTableOnSorting(tableWrapperRef);\n }\n\n break;\n }\n\n default:\n break;\n }\n };\n\n const onSelectChange = (selectedRowKeys: ReactText[], selectedRows: Company[]) => {\n const selectedCompaniesData = selectedRows.map(company => {\n return {\n ...pick(company, BULK_ACTIONS_FIELDS),\n company_url: company.company_url ? stripUrlSlashes(company.company_url) : null,\n };\n });\n\n setShowSelectAll(selectedRowKeys.length === actualPageSize);\n setSelectedRowKeys(selectedRowKeys);\n dispatch(\n selectedCompaniesActions.selectCompanyIds({\n gridName: gridKey,\n pageNumber,\n // selectedCompanies object properties are picked from Company model\n // strange conflict between Partial and Pick\n // @ts-ignore\n selectedCompanies: selectedCompaniesData,\n })\n );\n };\n\n const handleResizeStart = () => {\n isMouseDown = true;\n };\n\n const handleResizeStop = (e: SyntheticEvent, data: ResizeCallbackData) => {\n dispatch(\n columnActions.saveColumnWidth({\n userSetting: 'column_widths_sourcing_outreach_detail',\n columnId: data.node.offsetParent?.classList[1] as ColumnKeys,\n width: data.size.width,\n })\n );\n setTimeout(() => {\n isMouseDown = false;\n }, 0);\n };\n\n useMemo(\n () =>\n setVt({\n header: {\n cell: props => {\n return (\n <ResizeColumn\n handleResizeStart={handleResizeStart}\n handleResizeStop={handleResizeStop}\n {...props}\n />\n );\n },\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [setVt]\n );\n\n const rowSelection = {\n selectedRowKeys,\n onChange: onSelectChange,\n onSelectAll: () => {\n if (\n selectedRowKeys.length === pageSize ||\n (pageNumber === lastPageNumber && selectedRowKeys.length === lastPageSize)\n ) {\n dispatch(\n selectedCompaniesActions.deselectCompanyIds({\n gridName: gridKey as SelectedCompaniesGrids,\n })\n );\n }\n },\n fixed: true,\n getCheckboxProps: (record: Company) => ({\n name: record.company_id.toString(),\n disabled:\n selectedCompaniesCount >= MAX_SELECT_ALL_COMPANIES &&\n !selectedRowKeys.includes(record.company_id),\n }),\n renderCell: (value: boolean, record: Company, index: number, originNode: ReactNode) => (\n <RenderCell\n companyId={record.company_id}\n originNode={originNode}\n selectedRowKeys={selectedRowKeys}\n selectedCompaniesCount={selectedCompaniesCount}\n />\n ),\n };\n\n const updateFinalColumns = (columns: ColumnType<any>[]) => {\n return columns.map((col: any, index: number) => ({\n ...col,\n onHeaderCell: (column: any) => ({\n width: column.width,\n onResize: handleResize(index),\n }),\n ...(virtualizedActive\n ? {}\n : {\n onCell: () => ({\n style: {\n 'max-width': '409px',\n 'min-width': '120px',\n },\n }),\n }),\n }));\n };\n\n const mergedColumns = useMemo(() => {\n return updateFinalColumns(columns);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columns, virtualizedActive]);\n\n const handleResize = (index: number) => (e: any, other: any) => {\n const nextColumns = [...columns];\n nextColumns[index] = {\n ...nextColumns[index],\n width: other.size.width,\n };\n setColumns(nextColumns);\n };\n\n useEffect(() => {\n if (!isEqual(reduxColumns, columnReferences.current)) {\n // @ts-ignore\n setColumns(reduxColumns);\n columnReferences.current = reduxColumns;\n }\n }, [reduxColumns]);\n\n useEffect(() => {\n if (gridSelectedCompanyIds) {\n setSelectedRowKeys(gridSelectedCompanyIds.map(company => company.company_id));\n } else {\n setSelectedRowKeys([]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [gridSelectedCompanyIds]);\n\n useEffect(() => {\n // fix table being cropped when navigating to other pages and coming back\n setTimeout(() => {\n vtImperativeScroll.current?.scrollTo(initialScrollPosition);\n }, 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /**\n * Each time a new search success is made reset scroll.\n */\n useEffect(() => {\n if (!isMount && !getMergeCompaniesStatus) {\n vtImperativeScroll.current?.scrollTo(0);\n }\n\n if (getMergeCompaniesStatus) {\n dispatch(mergeCompaniesActions.invertStatusAfterMerge());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fetchedCount]);\n\n useEffect(() => {\n if (!isMount && !getMergeCompaniesStatus) {\n vtImperativeScroll.current?.scrollTo(0);\n }\n\n if (getMergeCompaniesStatus) {\n dispatch(mergeCompaniesActions.invertStatusAfterMerge());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pageNumber]);\n\n const { tableScroll } = useTableLayoutHeight(\n tableWrapperRef.current,\n paginationId,\n windowSize.height,\n tableHeader.height,\n mainHeaderHeight.height,\n [totalItemsCount, ctx.height]\n );\n\n useEffect(() => {\n setCurrentScroll(tableScroll);\n }, [tableScroll]);\n\n useSelectAll(selectedRowKeys, actualPageSize, setShowSelectAll);\n\n disableSelectAllCheckbox(selectedRowKeys.length, pageSize, selectedCompaniesCount);\n\n return (\n <Styled.CompanyTableWrapper>\n <SelectAllBanner\n showSelectAll={showSelectAll}\n gridKey={gridKey}\n selectedRowKeys={selectedRowKeys.length}\n totalNumber={totalItemsCount}\n handleDeselect={handleDeselect}\n />\n {initCompanies.length && !isLoading && !isForTesting ? (\n <ExternalScroll refElement={contentRef} contentWidth={tableSize.width} isVirtualGrid />\n ) : null}\n <div className=\"advanced-companies-grid-wrapper\" ref={tableWrapperRef}>\n {isForTesting ? (\n <div className=\"customTableWrap\">\n <TestingGridTable companies={initCompanies} columns={mergedColumns} />\n </div>\n ) : (\n <Styled.CompanyTable\n size=\"small\"\n rowKey={rowKey}\n rowSelection={rowSelection}\n columns={mergedColumns}\n dataSource={getDataSource(initCompanies, pageSize, pageNumber)}\n pagination={false}\n bordered\n onChange={handleChange}\n showSorterTooltip={false}\n // virtualization\n scroll={{ y: currentScroll, x: true }} // It's important for using VT!!! DO NOT FORGET!!!\n components={virtualizedActive ? vt : undefined}\n isEmpty={!initCompanies.length}\n overflowHeight={checkOverflow(externalScroll)}\n />\n )}\n <DisplayColumnModal gridName=\"outreachDetails\" />\n <GridPagination\n id={paginationId}\n gridKey={gridKey}\n totalItemsCount={totalItemsCount}\n pageNumber={pageNumber}\n pageSize={pageSize}\n searchCountPageSize={initCompanies.length}\n isFullscreen={isFullscreen}\n selectedCountType={gridKey}\n />\n </div>\n </Styled.CompanyTableWrapper>\n );\n};\n\nexport default SearchGrid;\n","import React from 'react';\n// components\nimport { useVirtualTableContainerSize, VirtualTableScrollYContext } from '@features/scroll-history';\nimport SearchGrid from './SearchGrid';\n\nconst GridContent = () => {\n const virtualTableScrollYContext = useVirtualTableContainerSize();\n const containerRef = virtualTableScrollYContext.containerRef as React.RefObject<HTMLDivElement>;\n\n return (\n <div ref={containerRef} className=\"position-relative\">\n <VirtualTableScrollYContext.Provider value={virtualTableScrollYContext}>\n <SearchGrid />\n </VirtualTableScrollYContext.Provider>\n </div>\n );\n};\n\nexport default GridContent;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\n// redux\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\n// components\nimport CardContent from './CardContent';\nimport GridContent from './GridContent';\n\n/**\n * Switch between card and grid content.\n * Grid content needs to be separated from card content\n * due to how it checks the height of it's wrapper on size change and\n * we don't need this functionality on cards because it might create performance issues.\n */\nconst CompanySearchDisplay = () => {\n const searchView = useSelector(viewTypeSelectors.searchView('outreachDetails'));\n\n return <>{searchView === 'long-card' ? <CardContent /> : <GridContent />}</>;\n};\n\nexport default CompanySearchDisplay;\n","import React from 'react';\nimport { Button } from 'antd';\nimport { EnterOutlined } from '@ant-design/icons';\n\ninterface ApplySearchButtonProps {\n onSearch: VoidFunction;\n validation: () => boolean;\n}\n\nconst ApplySearchButton: React.FC<ApplySearchButtonProps> = ({ onSearch, validation }) => {\n const handleClick = () => {\n validation() && onSearch();\n };\n\n return (\n <Button\n type=\"primary\"\n icon={<EnterOutlined />}\n size=\"small\"\n onClick={handleClick}\n style={{ marginRight: '10px' }}\n >\n Apply Search [ENTER]\n </Button>\n );\n};\n\nexport default ApplySearchButton;\n","import React, { useCallback, useEffect, useState, useRef } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Input } from 'antd';\nimport classnames from 'classnames';\n// redux\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\n// components\nimport SearchInput, { SearchInputProps } from '@optx/components/common/form/input/SearchInput';\n// utils\nimport { sliceURLQuery } from '@optx/utils/url';\nimport { validateSearchTerm } from '@utils/search';\n// components\nimport ApplySearchButton from '../ApplySearchButton';\n\ninterface CompanySearchProps extends Omit<SearchInputProps, 'onSearch' | 'value'> {}\n\nconst CompanySearch: React.FC<CompanySearchProps> = ({\n onFocus,\n onBlur,\n className,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n const searchKey = useSelector(searchSelectors.getSearchKey('outreachDetails'));\n const [query, setQuery] = useState('');\n const [validSearchKey, setValidSearchKey] = useState(true);\n const inputRef = useRef<Input | null>(null);\n\n const search = useCallback(\n (searchKey: string) => {\n dispatch(\n searchActions.searchCompanies({\n gridKey: 'outreachDetails',\n data: { searchKey, shouldResetPageNumber: true },\n })\n );\n setQuery('');\n },\n [dispatch]\n );\n\n useEffect(() => {\n setQuery('');\n }, [searchKey]);\n\n const slicedQuery = sliceURLQuery(query);\n\n useEffect(() => {\n setQuery(slicedQuery);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query]);\n\n const handleSearch = (searchKey: string) => {\n // close the dropdown by clicking on input.\n inputRef.current!.input?.click();\n search(searchKey);\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setQuery(event.target.value);\n\n if (event.target.value.length === 3 || event.target.value.length === 0) {\n setValidSearchKey(true);\n }\n };\n\n return (\n <>\n <SearchInput\n ref={inputRef}\n {...restProps}\n onChange={handleChange}\n iconSize={22}\n onSearch={handleSearch}\n value={query}\n placeholder=\"Search for companies,notes,etc\"\n className={classnames(className, { 'search-term-error': !validSearchKey })}\n />\n {query && (\n <ApplySearchButton\n onSearch={() => search(query)}\n validation={() => validateSearchTerm(query, setValidSearchKey)}\n />\n )}\n </>\n );\n};\n\nexport default React.memo(CompanySearch);\n","import React, { useCallback, useMemo } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\n// models\nimport { FilterTag, SpecialFilterTag } from '@optx/models/tags';\n// redux\nimport { selectors as searchSelectors } from '@redux/company-outreach/search';\nimport { actions as searchActions } from '@features/grid/search';\nimport {\n actions as filterActions,\n selectors as filterSelectors,\n} from '@redux/company-outreach/filters';\nimport { actions as modalActions } from '@redux/ui/modals/gridModals';\n// components\nimport { FilterTagsOverflow } from '@optx/features/tags/overflow-tags';\nimport { SelectOption } from '@optx/models/Option';\n\nconst FilterTags = () => {\n const dispatch = useDispatch();\n const options = useSelector(searchSelectors.getTags);\n const defaultDateRange = useSelector(searchSelectors.getDefaultDateRange);\n const defaultAnalystIds = useSelector(searchSelectors.getDefaultAnalystId);\n const defaultColumnName = useSelector(searchSelectors.getDefaultColumnName);\n const filtersLoaded = useSelector(filterSelectors.sourcingOutReachFiltersLoaded);\n\n const toggleFiltersModal = useCallback(\n () => dispatch(modalActions.toggleModal({ gridKey: 'outreachDetails' })),\n [dispatch]\n );\n\n const handleFilterRemove = (tag: FilterTag) => () => {\n // Handle removal of search keyword special tag.\n if ((tag.filter as SpecialFilterTag) === 'keyword') {\n dispatch(\n searchActions.searchCompanies({\n gridKey: 'outreachDetails',\n data: { searchKey: '', shouldResetPageNumber: true },\n })\n );\n\n return;\n }\n\n if (tag.filter === 'analyst_name') {\n dispatch(\n filterActions.updateSourcingFilterOptions({\n filterKey: 'analyst_id',\n value: defaultAnalystIds as unknown as SelectOption<string>,\n })\n );\n }\n\n if (tag.filter === 'date_range') {\n dispatch(\n filterActions.updateSourcingFilterOptions({\n filterKey: 'ddate',\n value: defaultDateRange,\n })\n );\n }\n\n if (tag.filter === 'column_name') {\n dispatch(\n filterActions.updateSourcingFilterOptions({\n filterKey: 'column_name',\n value: defaultColumnName as unknown as SelectOption<string>,\n })\n );\n }\n\n dispatch(\n searchActions.removeFilter({\n gridKey: 'outreachDetails',\n data: { selectedTag: tag, filterTags: filteredOptions },\n })\n );\n };\n\n const filteredOptions = useMemo(\n () => (filtersLoaded ? options.filter(item => !item.isDefault && item.values?.length > 0) : []),\n [options, filtersLoaded]\n );\n\n return (\n <FilterTagsOverflow\n options={filteredOptions}\n onClick={toggleFiltersModal}\n onClose={handleFilterRemove}\n multipleValue\n />\n );\n};\n\nexport default FilterTags;\n","import React from 'react';\nimport { Menu } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { MenuProps } from 'antd/lib/menu';\n// redux\nimport { selectors as fullscreenSelectors } from '@redux/ui/settings/fullscreen';\n// components\nimport styled from 'styled-components';\nimport ClearAllSortingMenuItem from '@optx/features/company-sorting/ClearAllSortingMenuItem';\nimport ToggleSortTypeMenuItem from '@optx/features/company-sorting/ToggleSortTypeMenuItem';\n\ninterface SearchMenuProps extends MenuProps {\n hideDropdown: () => void;\n isAddonManagement?: boolean;\n}\nconst StyledSearchMenu = styled(Menu)`\n box-shadow: 0 3px 6px -4px rgb(0 0 0 / 12%), 0 6px 16px 0 rgb(0 0 0 / 8%),\n 0 9px 28px 8px rgb(0 0 0 / 5%) !important;\n &:not(.ant-menu-horizontal) li.ant-menu-item {\n color: inherit;\n &-active,\n &-selected {\n background-color: transparent;\n }\n &:hover {\n color: inherit;\n background-color: #f5f5f5;\n }\n }\n`;\n\nconst SearchMenu: React.FC<SearchMenuProps> = ({\n children,\n hideDropdown,\n isAddonManagement,\n ...rest\n}) => {\n const isFullscreen = useSelector(fullscreenSelectors.isFullscreen);\n\n return (\n <StyledSearchMenu className=\"search-menu\">\n {React.cloneElement(children as React.ReactElement<any>, { hideDropdown })}\n {isFullscreen && <ClearAllSortingMenuItem gridName=\"outreachDetails\" />}\n {isFullscreen && <ToggleSortTypeMenuItem gridName=\"outreachDetails\" />}\n </StyledSearchMenu>\n );\n};\n\nexport default SearchMenu;\n","import React from 'react';\nimport { Dropdown, Button, Tooltip } from 'antd';\nimport { EllipsisOutlined } from '@ant-design/icons';\nimport SearchMenu from './SearchMenu';\n\ninterface CompanySearchDropdownProps {\n isAddonManagement?: boolean;\n}\n\nconst CompanySearchDropdown: React.FC<CompanySearchDropdownProps> = ({\n children,\n isAddonManagement,\n}) => {\n const [visible, setVisible] = React.useState(false);\n\n const handleVisibleChange = (flag: boolean) => {\n setVisible(flag);\n };\n\n return (\n <Tooltip title=\"Export\">\n <Dropdown\n overlay={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <SearchMenu isAddonManagement={isAddonManagement} hideDropdown={() => setVisible(false)}>\n {children}\n </SearchMenu>\n }\n overlayStyle={{ position: 'fixed' }}\n trigger={['click']}\n visible={visible}\n placement=\"bottomRight\"\n onVisibleChange={handleVisibleChange}\n >\n <Button\n type=\"text\"\n onClick={() => setVisible(!visible)}\n icon={<EllipsisOutlined style={{ fontSize: 28 }} />}\n />\n </Dropdown>\n </Tooltip>\n );\n};\n\nexport default CompanySearchDropdown;\n","import React, { useRef, useState } from 'react';\nimport { Menu, Tooltip, Popconfirm } from 'antd';\nimport { MenuItemProps } from 'antd/lib/menu/MenuItem';\nimport queryString from 'query-string';\nimport { useSelector } from 'react-redux';\nimport { Dictionary } from 'lodash';\n// models\nimport { SelectOption } from '@models/Option';\nimport { PreselectedFilter } from '@models/filters';\nimport { SourcingInfo } from './interfaces';\n// constants\nimport { COMPANY_CSV_SIZE_LIMIT } from '@constants/limit';\n// services\nimport { AnalystService } from '@services/api';\n// utils\nimport { mapSortFieldQuery } from '@utils/mapSortFieldQuery';\nimport { mapSortOrderQuery } from '@utils/mapSortOrderQuery';\nimport mapFilterToParams from '@utils/filters/mapFiltersToURLParams';\nimport { exportFileCSV } from '@utils/csvHandler';\n// redux\nimport { selectors as outreachSearchSelectors } from '@redux/company-outreach/search';\nimport { selectors as searchCountSelectors } from '@features/grid/search-count';\nimport { selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as sortSelectors } from '@features/grid/sort';\nimport { selectors as filterSourcingSelectors } from '@redux/company-outreach/filters';\nimport { selectors as filterSourcesSelectors } from '@redux/company/filters';\nimport { getViewId } from '@optx/features/grid/view/state/selectors';\n// components\nimport { columns } from '@components/common/table/Companies/columns/virtual-column-config';\nimport { SOURCING_OUTREACH_SUMMARY_REPORT_DETAILS } from '@optx/constants/exportedFileName';\n\ninterface RedirectSavedSearchesMenuItemProps {\n hideDropdown?: () => void;\n}\n\nconst RedirectSavedSearchesMenuItem = ({\n hideDropdown,\n onClick,\n ...restProps\n}: MenuItemProps & RedirectSavedSearchesMenuItemProps) => {\n const searchCompanyCount = useSelector(searchCountSelectors.getSearchCount('outreachDetails'));\n const analystId = useRef<any>();\n const columnName = useRef<any>();\n const newFilters = useRef<{ queryParsed: queryString.ParsedQuery<string> }>();\n const [isLoading, setIsLoading] = useState(false);\n\n const analystIdFilter = useSelector(\n filterSourcingSelectors.getSourcingOptitonsFilterValues('analyst_id')\n );\n const columnNameFilter = useSelector(\n filterSourcingSelectors.getSourcingOptitonsFilterValues('column_name')\n );\n const dateValueFilter = useSelector(filterSourcingSelectors.getSourcingFilterOptionsDateValue);\n const searchHasValues = useSelector(outreachSearchSelectors.searchHasValues);\n const searchKey = useSelector(searchSelectors.getSearchKey('outreachDetails'));\n const filter = useSelector(outreachSearchSelectors.getFilters);\n const tableGridQuery = useSelector(searchSelectors.getTableGridQuery('outreachDetails'));\n const sortBy = useSelector(sortSelectors.getSorting('outreachDetails'));\n const filtersMap = useSelector(filterSourcesSelectors.getFiltersMap);\n const listType = useSelector(searchSelectors.getListType('outreach'));\n const id = useSelector(getViewId('outreach'));\n\n if (tableGridQuery) {\n const queryParsed = queryString.parse(tableGridQuery);\n const filterGridQuery = { ...filter, queryParsed };\n analystId.current = queryParsed.analyst_id;\n columnName.current = queryParsed.column_name;\n const customFilterGridQuery = { ...filterGridQuery, ddate: dateValueFilter };\n newFilters.current = customFilterGridQuery;\n }\n\n const sourcingOutReachInfo: SourcingInfo = {\n analyst_id:\n (analystIdFilter as unknown as Array<SelectOption<string>>)?.map(list => list.value) ||\n analystId.current,\n column_name: (columnNameFilter as SelectOption<string>)?.value || columnName.current,\n };\n\n if (!searchHasValues) {\n return null;\n }\n\n const handleExportCSV = (includeDescription: boolean) => {\n const params = mapFilterToParams(\n filtersMap,\n newFilters.current as unknown as Dictionary<PreselectedFilter>\n );\n\n const parameterFilter = {\n ...params,\n ...(searchKey ? { query: searchKey } : {}),\n ...(listType === 'combined' ? { combined_search_id: id } : {}),\n sort_fields: sortBy.map(mapSortFieldQuery),\n sort_orders: sortBy.map(mapSortOrderQuery),\n };\n\n setIsLoading(true);\n\n exportFileCSV(\n SOURCING_OUTREACH_SUMMARY_REPORT_DETAILS,\n parameterFilter,\n columns,\n AnalystService.exportCompaniesOutReachToCSV,\n includeDescription,\n undefined,\n sourcingOutReachInfo,\n undefined,\n undefined\n ).then(() => {\n setIsLoading(false);\n });\n };\n\n const disabled = !searchCompanyCount || searchCompanyCount > COMPANY_CSV_SIZE_LIMIT || isLoading;\n\n const handleClick = (includeDescription = false) => {\n if (!disabled) {\n handleExportCSV(includeDescription);\n\n setTimeout(() => {\n hideDropdown && hideDropdown();\n }, 1000);\n }\n };\n\n // wrap Menu.Item in span to show tooltip on hovering while Menu.Item is disabled.\n return (\n <Tooltip title=\"Up to 100K rows\" placement=\"left\">\n <span>\n <Popconfirm\n title=\"Include the description?\"\n placement=\"bottom\"\n onConfirm={() => handleClick(true)}\n overlayStyle={{ position: 'fixed' }}\n onCancel={() => handleClick()}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <Menu.Item disabled={disabled} key=\"export-to-csv\" {...restProps}>\n {isLoading ? 'Exporting' : 'Export to .csv'}\n </Menu.Item>\n </Popconfirm>\n </span>\n </Tooltip>\n );\n};\n\nexport default React.memo(RedirectSavedSearchesMenuItem);\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// styles\nimport './SearchHeader.styles.scss';\n// utils\nimport { mapTagsToNamesAndOperators } from '@utils/filters/mapTagsToNamesAndOperators';\n// redux\nimport { selectors as searchSelectors } from '@redux/company-outreach/search';\nimport { actions as searchActions } from '@features/grid/search';\nimport { selectors as fullScreenSelectors } from '@redux/ui/settings/fullscreen';\nimport { selectors as searchesSelectors } from '@redux/company/saved-searches';\nimport { selectors as gridSearchSelectors } from '@features/grid/search';\nimport { selectors as userSelectors } from '@redux/user/information';\n// components\nimport ClearSearchButton from '@shared/view/molecules/Buttons/ClearSearchButton';\nimport CompanySearch from './CompanySearch';\nimport FilterTags from './FilterTags';\nimport CompanySearchDropdown from './CompanySearchDropdown';\nimport ExportToCSV from './CompanySearchDropdown/SearchMenu/ExportToCSV';\nimport GridFullScreen from '@optx/shared/view/molecules/FullScreen/GridFullScreen';\nimport ShowFilterButton from '@optx/features/grid/filter/components/ShowFilterButton';\nimport SearchTypeMenu from '@optx/features/grid/search-type/components/SearchTypeMenu';\n// eslint-disable-next-line max-len\nimport { default as CombinedSearchFilterTags } from '@optx/components/common/table/TableSavedSearches/cells/company/FilterTags';\n\nconst gridKey = 'outreachDetails';\n\nconst SearchHeader = () => {\n const dispatch = useDispatch();\n\n const showRestoreIcon = useSelector(searchSelectors.showCustomClearedFilter);\n const customClearedFilter = useSelector(searchSelectors.getCustomClearedFilter);\n const isFullScreen = useSelector(fullScreenSelectors.isFullscreen);\n\n const savedSearches = useSelector(searchesSelectors.getSavedSearches);\n const combinedSearchId = useSelector(userSelectors.getCombinedSearchId('outreach'));\n const selectedCombinedSearch = savedSearches.find(\n search => search.unique_id === combinedSearchId\n );\n const listType = useSelector(gridSearchSelectors.getListType('outreach'));\n\n const filterNames = mapTagsToNamesAndOperators(\n selectedCombinedSearch?.parent_search_ids,\n savedSearches,\n selectedCombinedSearch?.logical_operators\n );\n\n return (\n <div className=\"search-header-content\">\n <SearchTypeMenu gridKey={'outreachDetails'} />\n <CompanySearch className=\"antd-search-input\" autoComplete=\"off\" />\n {listType === 'combined' ? (\n <CombinedSearchFilterTags\n filterNames={filterNames}\n listType={listType}\n savedSearches={filterNames}\n />\n ) : (\n <FilterTags />\n )}\n <div>\n <ClearSearchButton\n title=\"Clear All\"\n placement=\"bottom\"\n isVisible={showRestoreIcon || listType === 'combined'}\n onClick={() =>\n dispatch(searchActions.clearSearch({ gridKey: gridKey, data: customClearedFilter }))\n }\n />\n <ShowFilterButton gridKey={gridKey} style={{ position: 'relative' }} />\n </div>\n <div style={{ position: 'relative', paddingRight: '40px' }}>\n <CompanySearchDropdown>\n <ExportToCSV />\n </CompanySearchDropdown>\n {isFullScreen && <GridFullScreen />}\n </div>\n </div>\n );\n};\n\nexport default React.memo(SearchHeader);\n","import React from 'react';\nimport { ActionMeta, ValueType } from 'react-select';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { MultiSelectFilterColumns } from '@optx/models/feature/analystsLeaderboard/filters';\nimport { SelectOption } from '@models/Option';\n// components\nimport { MultiSelectInline, MultiSelectProps, SingleSelect } from '@shared/view/molecules/Select';\nimport SingleValueContainer from '@optx/shared/view/molecules/Select/SingleSelect/components/SingleValueContainer';\n// redux\nimport {\n selectors as filterSelectors,\n actions as filterActions,\n} from '@redux/company-outreach/filters';\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\n\ninterface FilterMultiSelectProps extends MultiSelectProps {\n filterKey: MultiSelectFilterColumns;\n criteria?: string;\n}\n\nconst AnalystsSelect: React.FC<FilterMultiSelectProps> = ({\n filterKey,\n criteria,\n ...restProps\n}) => {\n const dispatch = useDispatch();\n\n const searchKey = useSelector(searchSelectors.getSearchKey('outreachDetails'));\n const isDefaultAnalyst = useSelector(userInformationSelectors.getSourcingOutReachDefaultAnalyst);\n\n const isMultiSelectDisabled = isDefaultAnalyst ? true : false;\n\n const options = useSelector(\n filterSelectors.getSourcingFiltersOptions(filterKey as 'analyst_id' | 'column_name')\n );\n\n const value = useSelector(\n filterSelectors.getSourcingOptitonsFilterValues(filterKey as 'analyst_id' | 'column_name')\n );\n\n const handleChange = (value: ValueType<SelectOption>, actionMeta: ActionMeta<SelectOption>) => {\n dispatch(\n filterActions.updateSourcingFilterOptions({\n filterKey: filterKey as 'ddate' | 'analyst_id' | 'column_name',\n value: value as SelectOption<string>,\n })\n );\n dispatch(\n searchActions.searchCompanies({\n gridKey: 'outreachDetails',\n data: { searchKey, shouldResetPageNumber: true },\n })\n );\n };\n\n if (filterKey === 'column_name') {\n return (\n <div>\n <SingleSelect\n options={options}\n SearchIcon={false}\n onBlur={() => {}}\n styles={{\n valueContainer: () => ({\n display: 'flex',\n alignItems: 'center',\n marginLeft: '18px',\n }),\n }}\n components={{\n SingleValue: SingleValueContainer,\n }}\n onChange={handleChange}\n {...restProps}\n value={(value as SelectOption<string>) || []}\n placeholder=\"Show by\"\n />\n </div>\n );\n }\n\n return (\n <div>\n <MultiSelectInline\n options={options}\n SearchIcon={false}\n styles={{\n valueContainer: () => ({\n display: 'flex',\n alignItems: 'center',\n marginLeft: '-18px',\n }),\n }}\n onBlur={() => {}}\n onChange={handleChange}\n {...restProps}\n value={(value as SelectOption<string>) || []}\n isDisabled={isMultiSelectDisabled}\n placeholder=\"Show by\"\n />\n </div>\n );\n};\n\nexport default AnalystsSelect;\n","import { Typography } from 'antd';\nimport styled from 'styled-components';\nimport { Title } from '@optx/shared/view/atoms/Typography';\nimport AnalystsSelect from './AnalystsSelect';\n\nexport const PageTitle = styled(Title)`\n margin-top: 10px;\n`;\n\nexport const SecondaryTitle = styled(Typography.Paragraph)`\n /* Gray */\n color: #90a0b7;\n`;\n\nexport const TypographyTitle = styled(Typography.Title)`\n &.ant-typography {\n /* Dark BLue */\n color: #334d6e;\n margin: 0;\n }\n`;\n\nexport const SourcingOutReachFilters = styled(AnalystsSelect)`\n .styled-single-select__value-container {\n max-width: calc(100% - 48px);\n }\n .multiselect__value-container {\n flex-wrap: nowrap;\n }\n`;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n// models\nimport { DateRangeOption } from '@optx/models/Option';\n// components\nimport SingleSelectDateRanges from '@components/common/filters/SingleSelectDateRanges';\n// redux\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\nimport {\n selectors as filterSelectors,\n actions as filterActions,\n} from '@redux/company-outreach/filters';\n\ninterface FilterSingleSelectDateRangesProps {\n filterKey: 'ddate';\n}\n\nconst FilterSingleSelectDateRanges: React.FC<FilterSingleSelectDateRangesProps> = ({\n filterKey,\n}) => {\n const dispatch = useDispatch();\n\n const searchKey = useSelector(searchSelectors.getSearchKey('outreachDetails'));\n\n const options = useSelector(filterSelectors.getSourcingFiltersOptionsDate);\n\n const value = useSelector(filterSelectors.getSourcingFilterOptionsDateValue);\n\n const handleChange = (option: DateRangeOption) => {\n dispatch(\n filterActions.updateSourcingFilterOptions({\n filterKey,\n label: option.label,\n value: [option.start, option.end],\n })\n );\n dispatch(\n searchActions.searchCompanies({\n gridKey: 'outreachDetails',\n data: { searchKey, shouldResetPageNumber: true },\n })\n );\n };\n\n return (\n <SingleSelectDateRanges\n value={(value as [string, null]) || [null, null]}\n data={options}\n onChange={handleChange}\n />\n );\n};\n\nexport default FilterSingleSelectDateRanges;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport queryString from 'query-string';\nimport { Tooltip } from 'antd';\nimport { ArrowLeftOutlined } from '@ant-design/icons';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router';\n// models\nimport { SourcingOutreachColumnNamesKey } from '@optx/features/sourcing-outreach-summary/models/SourcingOutreach';\nimport { SelectOption } from '@optx/models/Option';\nimport { TableGridQuery } from './interface';\n// constants\nimport { LIST_OF_COLUMN_NAMES } from '@constants/sourcingOutReachColumnNames';\nimport appRoutes from '@constants/routes';\nimport { HTML } from '@constants/fullScreen';\n// utils\nimport { getAnalystNames } from '@optx/utils/utils';\n// redux\nimport { selectors as viewTypeSelectors } from '@features/grid/view-type';\nimport {\n selectors as fullscreenSelectors,\n actions as fullScreenActions,\n} from '@redux/ui/settings/fullscreen';\nimport { selectors as outreachSearchSelectors } from '@redux/company-outreach/search';\nimport { actions as searchActions, selectors as searchSelectors } from '@features/grid/search';\nimport {\n actions as filtersActions,\n selectors as filtersSelectors,\n} from '@redux/company-outreach/filters';\nimport { selectors as userInformationSelectors } from '@redux/user/information';\n// hooks\nimport { useInject as useInjectCompanyCard } from '@features/long-card/company-card';\nimport { useReduxFullScreen } from '@optx/common/hooks/fullscreen';\nimport { useInject as useInjectCompanyGraphs } from '@features/company/graphs';\nimport {\n useInitialFetchEditOptions,\n useInject as useInjectCompanyIndividualEdit,\n} from '@optx/components/feature/company-individual-edit';\nimport { useInject as useInjectTouches } from '@features/company-touches';\nimport { useShouldFetch } from '@optx/common/hooks/fetch';\nimport { useInjectEditFields } from '@optx/features/company/edit-fields';\nimport { useInjectCompanySavedSearches } from '@optx/common/hooks/inject';\nimport { shouldFetchCompaniesOutReach } from './selectors';\nimport { useFetchSavedSearches, useFetchUserList, useInitFavorites } from '@optx/common/hooks/init';\nimport { useInjectAddCompany } from '@features/company/add-company';\n// components\nimport SearchGridControls from './components/SearchGridControls';\nimport { SourcingOutReachContext } from './components/SearchGridControls/SourcingOutReachContext';\nimport {\n BackButtonText,\n CompanyCardInfo,\n ContainerAnalystName,\n AnalystName,\n CompanyCardContainer,\n FilterContainer,\n FilterSelectContainer,\n FilterDateContainer,\n Container,\n} from './CompanyListSourcingOutReach.styled';\nimport ReportBreadcrumb from './components/ReportBreadcrumb';\nimport CompanySearchDisplay from './components/CompanySearchDisplay';\nimport SearchHeader from './components/SearchHeader';\nimport PageLoader from './PageLoader';\nimport { SourcingOutReachFilters } from './components/styled';\nimport CompanyNotes from '@optx/components/CompanyNotes';\nimport CompanyTouches from '@features/add-touch/components';\nimport FilterSingleSelectDateRanges from './components/FilterSingleSelectDateRanges';\nimport Styled from '@features/sourcing-outreach-summary/components/FilterSingleSelectDateFilter.styled';\nimport FiltersModal from '@optx/features/grid/filter/components';\nimport EditAllDialog from '@optx/features/edit-all-info/components/EditAllDialog';\nimport DocumentUploadModal from '@optx/features/add-touch/components/DocumentUploadModal';\n\nconst CompanyListSourcingOutReach: React.FC = () => {\n useInjectCompanyCard();\n useInjectCompanyGraphs();\n useInjectCompanySavedSearches();\n useInjectEditFields();\n useInjectCompanyIndividualEdit();\n useFetchUserList();\n useInitialFetchEditOptions();\n useFetchSavedSearches();\n useInjectTouches();\n useInitFavorites();\n useInjectCompanyIndividualEdit();\n useInjectAddCompany();\n\n const dispatch = useDispatch();\n const filter = useSelector(outreachSearchSelectors.getFilters);\n const persistedTableGridQuery = useSelector(searchSelectors.getTableGridQuery('outreachDetails'));\n const shouldUpdateSourcingOutReachAnalystInfo = useSelector(\n searchSelectors.shouldUpdateSourcingOutReachAnalystInfo\n );\n const [selectedData, setSelectedData] = useState<SelectOption[] | string | boolean>([]);\n const [hasSelectViewChanged, setHasSelectViewChanged] = useState<boolean>(false);\n const [rationaleValue, setRationaleValue] = useState<string>();\n const selectedColumnName = useSelector(\n filtersSelectors.getSourcingOptitonsFilterValues('column_name')\n );\n const selectedAnalystIds = useSelector(\n filtersSelectors.getSourcingOptitonsFilterValues('analyst_id')\n );\n const listOfAnalystIds = useSelector(filtersSelectors.getSourcingFiltersOptions('analyst_id'));\n const fullscreen = useSelector(fullscreenSelectors.isFullscreen);\n const toggle = useCallback(() => dispatch(fullScreenActions.toggleFullScreen()), [dispatch]);\n const keySearch = useSelector(searchSelectors.getSearchKey('outreachDetails'));\n const searchView = useSelector(viewTypeSelectors.searchView('outreachDetails'));\n const shouldFetchCompanies = useSelector(shouldFetchCompaniesOutReach);\n const sessionSettings = useSelector(userInformationSelectors.getSessionSettings);\n const isFirstRender = useRef<boolean>(true);\n const { location, replace } = useHistory();\n\n const { isFullscreen } = useReduxFullScreen({ dom: HTML, fullscreen, toggle });\n\n const analystNamesList = listOfAnalystIds.map((analyst: { label: string }) => analyst.label);\n\n const analystNameSelected = (selectedAnalystIds as unknown as SelectOption<string>[])?.map(\n (analyst: { label: string }) => analyst.label\n );\n\n const listOfAnalystNamesSelected = analystNamesList.filter((analystName: string) =>\n analystNameSelected?.includes(analystName)\n );\n\n const query: TableGridQuery | undefined | null = location.state as\n | TableGridQuery\n | undefined\n | null;\n\n const columnName = `&column_name=${query?.column_name}`;\n\n const payload = query?.filters?.concat(columnName);\n\n const tableGridQuery = payload as string;\n\n const parsed = queryString.parse(sessionSettings.sourcing_outreach_detail_filters!);\n\n const sessionTableGridQuery = `analyst_id=${parsed.analyst_id}&column_name=${\n parsed.column_name\n }&${sessionSettings.sourcing_outreach_filters?.replace(/analyst_id=[\\d,]+&/, '')}`;\n\n const fetchCompaniesList = useCallback(() => {\n if (shouldUpdateSourcingOutReachAnalystInfo) {\n if (query?.panel_filters) {\n dispatch(\n filtersActions.updateSourcingOutReachFilters({ panelFiltersQuery: query.panel_filters })\n );\n }\n\n dispatch(\n searchActions.updateSourcingOutReachAnalystInfo({\n tableGridQuery: tableGridQuery || persistedTableGridQuery || sessionTableGridQuery,\n })\n );\n\n dispatch(\n searchActions.initialCompaniesSearch({\n gridKey: 'outreachDetails',\n data: {\n tableGridQuery: tableGridQuery || persistedTableGridQuery || sessionTableGridQuery,\n },\n })\n );\n }\n }, [\n dispatch,\n persistedTableGridQuery,\n sessionTableGridQuery,\n tableGridQuery,\n shouldUpdateSourcingOutReachAnalystInfo,\n query?.panel_filters,\n ]);\n\n useEffect(() => {\n if (persistedTableGridQuery && isFirstRender.current) {\n fetchCompaniesList();\n }\n\n isFirstRender.current = false;\n }, [persistedTableGridQuery, fetchCompaniesList]);\n\n useShouldFetch(shouldFetchCompanies && !persistedTableGridQuery, () => fetchCompaniesList());\n\n // function created to handle when user press the back arrow on browser\n useEffect(() => {\n return () => {\n dispatch(filtersActions.resetSessionFilter());\n };\n }, [dispatch]);\n\n const handleGoBack = () => {\n replace(appRoutes.defaultReports.sourcingOutreachSummary);\n dispatch(filtersActions.resetSessionFilter());\n isFullscreen && dispatch(fullScreenActions.toggleFullScreen());\n };\n\n const handleColumnName = useCallback(() => {\n const columnName = selectedColumnName as SelectOption<string> | undefined;\n\n const columnNameValue = columnName?.value;\n\n return LIST_OF_COLUMN_NAMES[columnNameValue as SourcingOutreachColumnNamesKey];\n }, [selectedColumnName]);\n\n return (\n <SourcingOutReachContext.Provider\n value={{\n selectedData,\n setSelectedData,\n gridName: 'outreachDetails',\n hasSelectViewChanged,\n setHasSelectViewChanged,\n rationaleValue,\n setRationaleValue,\n }}\n >\n <Container>\n <PageLoader />\n <SearchHeader />\n <CompanyCardInfo\n style={{\n position: 'sticky',\n top: '62px',\n zIndex: 1,\n }}\n >\n <CompanyCardContainer isLongCard={searchView === 'long-card'}>\n <ReportBreadcrumb\n onClick={() => isFullscreen && dispatch(fullScreenActions.toggleFullScreen())}\n hasSourcingOutReach\n reportPage=\"Report Details\"\n />\n <ContainerAnalystName>\n <ArrowLeftOutlined style={{ fontSize: '25px' }} onClick={() => handleGoBack()} />\n <BackButtonText onClick={() => handleGoBack()}>Back</BackButtonText>\n <Tooltip\n overlayStyle={{ maxWidth: '500px' }}\n title={`Number of ${\n handleColumnName() ||\n LIST_OF_COLUMN_NAMES[query?.column_name as SourcingOutreachColumnNamesKey]\n } by ${getAnalystNames(listOfAnalystNamesSelected)}`}\n >\n <AnalystName>\n {`| Number of ${\n handleColumnName() ||\n LIST_OF_COLUMN_NAMES[query?.column_name as SourcingOutreachColumnNamesKey]\n } by ${getAnalystNames(listOfAnalystNamesSelected)}`}\n </AnalystName>\n </Tooltip>\n </ContainerAnalystName>\n <FilterContainer>\n <FilterSelectContainer>\n <SourcingOutReachFilters filterKey=\"analyst_id\" allowSelectAll />\n <SourcingOutReachFilters filterKey=\"column_name\" />\n </FilterSelectContainer>\n <FilterDateContainer>\n <Styled.StyledSelect>\n <FilterSingleSelectDateRanges filterKey=\"ddate\" />\n </Styled.StyledSelect>\n </FilterDateContainer>\n </FilterContainer>\n <SearchGridControls />\n <div style={{ marginTop: isFullscreen && searchView === 'table' ? '2rem' : '0' }}>\n {searchView === 'table' && <CompanySearchDisplay />}\n </div>\n <CompanyNotes />\n <CompanyTouches />\n <EditAllDialog />\n </CompanyCardContainer>\n <FiltersModal\n filter={filter}\n keySearch={keySearch}\n gridName=\"Companies OutReach\"\n gridKey={'outreachDetails'}\n />\n </CompanyCardInfo>\n {searchView === 'long-card' && <CompanySearchDisplay />}\n </Container>\n <DocumentUploadModal />\n </SourcingOutReachContext.Provider>\n );\n};\n\nexport default CompanyListSourcingOutReach;\n","import React, { lazy, Suspense } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { Switch, Redirect, RouteProps, matchPath } from 'react-router-dom';\nimport { ToastContainer, toast } from 'react-toastify';\nimport { ThemeProvider } from 'styled-components';\n// core\nimport { defaultTheme } from '@optx/core/theme';\n// constants\nimport appRoutes from '@constants/routes';\nimport { NOTES_ENABLED } from '@constants/notes';\n// hooks\nimport useUserRole from '@hooks/useUserRole';\nimport { useInject } from './useInject';\n// components\nimport Loader from '@components/feature/loader/GlobalLoader';\nimport { CustomGlobalLoader } from '@features/custom-global-loader/components';\nimport PrivateRoute from '@optx/components/common/route/PrivateRoute';\nimport PublicRoute from '@optx/components/common/route/PublicRoute';\nimport MainLayout from '@optx/core/layout';\nimport FixedLoader from '@optx/components/common/loader/FixedLoader';\nimport CompanyListSourcingOutReach from './AllReports/CompanyListSourcingOutReach';\n// styles\nimport 'react-toastify/dist/ReactToastify.css';\n\nconst Notes = lazy(() => import('@components/pages/Notes'));\nconst CompanyProfile = lazy(() => import('@components/pages/CompanyProfile'));\nconst Login = lazy(() => import('@optx/components/pages/Login/Login'));\nconst CompanyList = lazy(() => import('@components/pages/CompanyList'));\nconst MyCompanies = lazy(() => import('@components/pages/MyCompanies'));\nconst Contacts = lazy(() => import('@components/pages/Contacts'));\nconst AddToEquityTouch = lazy(() => import('@components/pages/EquityTouch'));\nconst Salesloft = lazy(() => import('@components/pages/SalesLoft/Salesloft'));\nconst UserManagement = lazy(() => import('@components/pages/UserManagement'));\nconst AnalystsLeaderboard = lazy(() => import('@components/pages/AnalystsLeaderboard'));\nconst UserLists = lazy(() => import('@components/pages/UserLists'));\nconst ErrorComponent = lazy(() => import('@optx/components/common/ErrorComponent'));\nconst HomePage = lazy(() => import('@optx/components/pages/Home'));\nconst SourcingOutreachSummary = lazy(() => import('./SourcingOutreachSummary'));\nconst UserProfile = lazy(() => import('./UserProfile'));\nconst PipelineReport = lazy(() => import('./PipelineReport'));\nconst ChromeExtension = lazy(() => import('../ChromeExtension/ChromeExtension'));\nconst ScheduledTouches = lazy(() => import('./ScheduledTouches'));\nconst EquityTouchIntegration = lazy(() => import('./EquityTouchIntegration'));\nconst ChecklistResearchInsights = lazy(\n () => import('./ChecklistResearchInsights/ChecklistResearchInsights')\n);\nconst EquityTouchBulk = lazy(() => import('./EquityTouchBulk'));\nconst SalesloftBulk = lazy(() => import('./SalesloftBulk'));\nconst AllReports = lazy(() => import('./AllReports/AllReports'));\nconst AnalystHome = lazy(() => import('./AnalystHome'));\nconst AdminHome = lazy(() => import('./AdminHome'));\n\nconst MainContent = () => {\n const { isAnalyst, advancedSearchPathname, isAdmin } = useUserRole();\n\n return (\n <Suspense fallback={<FixedLoader loading={true} />}>\n <Switch>\n <PrivateRoute exact path={advancedSearchPathname} component={HomePage} />\n <PrivateRoute\n exact\n path={isAnalyst ? appRoutes.home : appRoutes.analystHome}\n component={AnalystHome}\n />\n <PrivateRoute\n exact\n path={isAdmin ? appRoutes.home : appRoutes.adminHome}\n component={AdminHome}\n />\n <PrivateRoute path={appRoutes.myCompanies} component={MyCompanies} />\n <PrivateRoute path={appRoutes.lists.myWatchList} component={CompanyList} />\n {NOTES_ENABLED && <PrivateRoute exact path={appRoutes.notes} component={Notes} />}\n <PrivateRoute path={appRoutes.userLists.list} component={UserLists} />\n <PrivateRoute path={appRoutes.userLists.sourceScrubLists} component={UserLists} />\n <PrivateRoute exact path={appRoutes.scheduledTouches} component={ScheduledTouches} />\n <PrivateRoute exact path=\"/profile/:id\" component={CompanyProfile} />\n <PrivateRoute exact path={appRoutes.user.profile} component={UserProfile} />\n <PrivateRoute exact path={appRoutes.contacts} component={Contacts} />\n <PrivateRoute exact path={appRoutes.admin.users} component={UserManagement} />\n <PrivateRoute exact path={appRoutes.reports.allReports} component={AllReports} />\n <PrivateRoute\n exact\n path={appRoutes.reports.equityTouchIntegration}\n component={EquityTouchIntegration}\n />\n <PrivateRoute path={appRoutes.reports.pipelineReport} component={PipelineReport} />\n <PrivateRoute\n path={appRoutes.reports.checklistResearchInsights}\n component={ChecklistResearchInsights}\n />\n <PrivateRoute exact path={appRoutes.addToEquityTouch} component={AddToEquityTouch} />\n <PrivateRoute\n path={appRoutes.reports.sourcingOutreachSummary}\n component={SourcingOutreachSummary}\n />\n <PrivateRoute\n path={appRoutes.reports.sourcingOutreachSummaryCompanies}\n component={CompanyListSourcingOutReach}\n />\n <PrivateRoute exact path={appRoutes.chromeExtension} component={ChromeExtension} />\n <PrivateRoute\n exact\n path=\"/equity-touch-bulk/step-:step/:grid\"\n component={EquityTouchBulk}\n />\n <PrivateRoute exact path=\"/salesloft-bulk/:grid\" component={SalesloftBulk} />\n <PrivateRoute path={appRoutes.addToSalesloft} component={Salesloft} />\n <PrivateRoute\n path={appRoutes.reports.sourcingAnalystsLeaderboard}\n component={AnalystsLeaderboard}\n />\n <PrivateRoute component={ErrorComponent} />\n <PublicRoute\n path=\"\"\n component={() => null}\n render={() => <Redirect to={appRoutes.login} />}\n />\n </Switch>\n </Suspense>\n );\n};\n\nconst headContent = (\n <>\n <Helmet titleTemplate=\"OPTX Dashboard\" defaultTitle=\"OPTX Dashboard\">\n <meta name=\"description\" content=\"OPTX Dashboard application\" />\n </Helmet>\n <ToastContainer autoClose={3000} position={toast.POSITION.TOP_CENTER} theme=\"light\" />\n <Loader />\n <CustomGlobalLoader />\n </>\n);\n\nconst App = () => {\n useInject();\n\n return (\n <ThemeProvider theme={defaultTheme}>\n {headContent}\n <Suspense fallback={<FixedLoader loading={true} />}>\n <Switch>\n <PublicRoute path={appRoutes.login} component={Login} />\n <PrivateRoute\n component={(props: RouteProps) => {\n return (\n <MainLayout\n extensionLayout={\n matchPath(props.location?.pathname as string, '/chrome-extension-new')?.isExact\n }\n >\n {<MainContent />}\n </MainLayout>\n );\n }}\n />\n </Switch>\n </Suspense>\n </ThemeProvider>\n );\n};\n\nexport default App;\n","import { useInject as useInjectRequest } from '@optx/features/request';\n\n/**\n * Global redux/saga injector.\n */\nexport const useInject = () => {\n useInjectRequest();\n};\n","import { createBrowserHistory } from 'history';\n\nconst history = createBrowserHistory();\n\nexport default history;\n","/**\n * Combine all reducers in this file and export the combined reducers.\n */\n\nimport { AnyAction, CombinedState, combineReducers, Reducer } from 'redux';\nimport { connectRouter } from 'connected-react-router';\nimport history from './utils/history';\n\nexport interface InjectedReducers {\n [key: string]: Reducer<any, AnyAction>;\n}\n\nexport interface CreateReducerFunc {\n (injectedReducers: InjectedReducers): Reducer<CombinedState<any>>;\n}\n\n/**\n * Merges the main reducer with the router state and dynamically injected reducers\n */\nexport default function createReducer(\n injectedReducers: InjectedReducers = {}\n): Reducer<CombinedState<any>> {\n const rootReducer = combineReducers({\n router: connectRouter(history),\n ...injectedReducers,\n });\n\n // Wrap the root reducer and return a new root reducer with router state\n return rootReducer as Reducer<any, AnyAction>;\n}\n","import { Middleware } from 'redux';\nimport { middleware as notficationMiddeware } from './notifications';\n\nconst middlewares: Array<Middleware> = [notficationMiddeware];\n\nexport default middlewares;\n","/**\n * Create the store with dynamic reducers\n */\n\nimport { createStore, applyMiddleware, AnyAction, Store } from 'redux';\nimport { History } from 'history';\nimport { routerMiddleware } from 'connected-react-router';\nimport createSagaMiddleware, { Saga, Task } from 'redux-saga';\nimport { createInjectorsEnhancer } from 'redux-injectors';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport createReducer, { InjectedReducers } from './reducers';\nimport coreMiddlewares from './core/middlewares';\n\ninterface EnhancedStore extends Store<any, AnyAction> {\n injectedReducers: InjectedReducers;\n runSaga: <S extends Saga<any[]>>(saga: S, ...args: Parameters<S>) => Task;\n injectedSagas: {\n [key: string]: Saga<any[]>;\n };\n}\n\nconst sagaMiddleware = createSagaMiddleware();\n\nexport default function configureStore(initialState = {}, history: History<any>) {\n // Create the store with two middlewares\n // 1. sagaMiddleware: Makes redux-sagas work\n // 2. routerMiddleware: Syncs the location/URL path to the state\n const middlewares = [...coreMiddlewares, sagaMiddleware, routerMiddleware(history)];\n\n const runSaga = sagaMiddleware.run;\n const enhancers = [\n applyMiddleware(...middlewares),\n createInjectorsEnhancer({\n createReducer,\n runSaga,\n }),\n ];\n\n const store = createStore(\n createReducer(),\n initialState,\n composeWithDevTools(...enhancers)\n ) as EnhancedStore;\n\n // Extensions\n store.runSaga = sagaMiddleware.run;\n store.injectedReducers = {}; // Reducer registry\n store.injectedSagas = {}; // Saga registry\n\n // Make reducers hot reloadable, see http://mxs.is/googmo\n // @ts-ignore\n if (module.hot) {\n // @ts-ignore\n module.hot.accept('./reducers', () => {\n store.replaceReducer(createReducer(store.injectedReducers));\n });\n }\n\n return store;\n}\n","/* eslint-disable */\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\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n\n if (installingWorker == null) {\n return;\n }\n\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .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\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 React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { ConnectedRouter } from 'connected-react-router';\nimport './assets/styles/app.scss';\nimport './modules';\nimport App from './screens';\nimport history from './utils/history';\nimport configureStore from './configureStore';\nimport * as serviceWorker from './serviceWorker';\n\nconst initialState = {};\nexport const store = configureStore(initialState, history);\nconst MOUNT_NODE = document.getElementById('root');\n\nReactDOM.render(\n <Provider store={store}>\n <ConnectedRouter history={history}>\n <App />\n </ConnectedRouter>\n </Provider>,\n MOUNT_NODE\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\n\nserviceWorker.unregister();\n"],"sourceRoot":""}