{"version":3,"sources":["../node_modules/@aws-amplify/ui-components/dist/esm-es5 lazy /^/.//.*/.entry/.js$/ include: //.entry/.js$/ exclude: //.system/.entry/.js$/ groupOptions: {} namespace object","img/VA_Logo_New_1.svg","auth/signOut.ts","auth/authSlice.ts","routes/routes.ts","components/Svg/Svg.tsx","img/search-filter-arrow-up.svg","img/search-filter-arrow-down.svg","components/CollapsibleArrow/CollapsibleArrow.tsx","routes/routeService.ts","components/NavBar/VaNavbar.tsx","components/CategoryLabel/CategoryLabel.tsx","components/CategoryExpansionToggle/CategoryExpansionToggle.tsx","components/CriteriaLabel/FilterLabel.tsx","filtering/pinnedFilterSlice.ts","utility/utility.ts","filtering/filterStateLogic.ts","api/requestUtility.ts","api/requests.ts","utility/numberFormatter.ts","api/filterCountRequest.ts","filtering/selectedFilterSlice.ts","filtering/filterStateTypes.ts","components/Criterion/Criterion.tsx","components/CriteriaList/CriteriaList.tsx","components/FilterCategory/FilterCategoryExpandable.tsx","components/FilterCategory/FilterCategoryNonExpandable.tsx","utility/constants.ts","components/CriteriaCategoryContainer/CriteriaCategoryContainer.tsx","img/search-bar-icon.svg","components/CriteriaSearchBar/CriteriaSearchBar.tsx","filtering/filter.ts","filtering/filterSlice.ts","components/FilterFlap/FilterFlap.tsx","components/SearchCriteriaContainer/SearchCriteriaContainer.tsx","components/Loader/Loader.tsx","webpack:///./src/img/document.svg?63e1","components/Button/Button.tsx","filtering/savedFilterSlice.ts","utility/dates.ts","filtering/sicCodeState.ts","filtering/sectorSlice.ts","components/SavedFilterContainer/SavedFilterContainer.tsx","img/trash.svg","filtering/filterTableSlice.ts","components/Utility/InfoTip.tsx","components/FilterContainer/FilterStateContainer.tsx","components/Checkbox/Checkbox.tsx","components/FilterContainer/FilterStateNumericRange.tsx","components/FilterPicker/FilterPickerChild.tsx","filterPicker/filterPickerUtility.ts","components/FilterPickerSicCodes/FilterPickerIndustry.tsx","components/FilterPicker/BxsArrow.tsx","components/FilterPicker/FilterPickerParent.tsx","components/FilterPickerSicCodes/FilterPickerIndustryGroup.tsx","filterPicker/filterStatePickerLogic.ts","components/FilterPickerSicCodes/FilterPickerSector.tsx","components/FilterContainer/FilterSearchBar.tsx","components/FilterPicker/FilterPickerWithSearch.tsx","components/FilterPickerSicCodes/FilterPickerSicCodes.tsx","components/SaveWithNameButton/SaveWithNameButton.tsx","components/Container/Container.tsx","components/FilterContainer/FilterContainer.tsx","components/FilterPicker/FilterPicker.tsx","components/FilterPickerRegular/FilterPickerRegular.tsx","components/FilterContainer/FilterKeywordSearch.tsx","components/FilterContainer/SelectedFiltersContainer.tsx","components/Table/Table.tsx","components/FilterTable/FilterTable.tsx","comps/compsTickerPickerSlice.ts","comps/compsGroupSlice.ts","comps/compsTableSlice.ts","comps/savedCompsSets.ts","components/CompsSelectedCompsGroup/CompsSelectedCompsGroup.tsx","components/CompsTab/CompsTab.tsx","components/Modal/Modal.tsx","components/List/List.tsx","components/SortArrows/SortArrows.tsx","components/TableColumnEditor/TableColumnEditorSelectedColumn.tsx","components/TableColumnEditor/TableColumnEditorColumnOptions.tsx","components/TableColumnEditor/TableColumnEditor.tsx","components/Utility/SmallScreenAlert.tsx","table/filterTable.ts","components/FilterPage/FilterPage.tsx","aws-exports.js","config.ts","aws-exports-configure.js","components/SignupPage/Feature.tsx","components/FormInput/FormInputTyped.tsx","img/va-logo.svg","img/valueanalytics.svg","data/va-documents.ts","img/companyfilteringicon.svg","img/smartsearchicon.svg","img/templateicon.svg","img/statisticsicon.svg","img/piecharticon.svg","components/SignupPage/SignUpPage.tsx","constants.tsx","signup/signUpSlice.ts","components/PlanOptionsPage/PlanOption.tsx","components/FormInput/FormInput.tsx","components/SignupForm/OrderSummary.tsx","components/TermsConditions/Terms.tsx","components/SignupForm/CheckoutForm.tsx","components/SignupForm/SignupForm.tsx","components/PlanOptionsPage/SubscriptionUpdaterModal.tsx","components/AccountCreation/AccountCreation.tsx","components/CompsPage/CompsSavedCompsGroups.tsx","components/Table/TableTab.tsx","components/Table/TableTabContainer.tsx","components/Table/TableToolBar.tsx","components/CompsTable/CompsTableContainer.tsx","components/InputBox/InputBox.tsx","components/Input/InputMoney.tsx","components/DateSelector/DateSelector.tsx","components/CompsTable/ValuationDate.tsx","components/CompsTable/CompsTableInput.tsx","components/CompsTable/CompsConclusionTable.tsx","components/CompsTable/CompsMultiplesTable.tsx","components/CompsTable/FinancialHighlightsTable.tsx","components/CompsTable/RanksTable.tsx","components/CompsTable/BusinessDescriptionTable.tsx","exportProcess/exportUtilities.ts","exportProcess/exporterMappings.ts","exportProcess/exporter.ts","components/TickerPicker/TickerPicker.tsx","components/CompsPage/CompsTickerPicker.tsx","components/CompsPage/CompsPage.tsx","components/Utility/ConditionalWrapper.ts","img/document.svg","components/Document/Document.tsx","img/youtube-play.png","components/PadLock/PadLockModal.tsx","components/PadLock/WithActiveSubscription.tsx","components/Card/Card.tsx","components/DocumentationPage/DocumentationPage.tsx","components/AccountPage/ResetPassword.tsx","components/AccountPage/AccountInformation.tsx","billing/billingSlice.ts","components/AccountPage/UpdateCard.tsx","components/AccountPage/BillingHistory.tsx","components/AccountPage/AddNewUser.tsx","components/AccountPage/UserOptions.tsx","components/AccountPage/TeamManagement.tsx","components/AccountPage/OwnerUserOptions.tsx","components/AccountPage/OwnerTeamManagement.tsx","components/AccountPage/Billing.tsx","components/AccountPage/InvoiceForm/UseInvoiceLogic.tsx","components/AccountPage/InvoiceForm/OrderSummary.tsx","components/AccountPage/InvoiceForm/OrderInfo.tsx","components/AccountPage/InvoiceForm/ReSubscribeManager.tsx","components/AccountPage/InvoiceForm/ReSubscribeManagerInvoice.tsx","components/AccountPage/InvoiceForm/SubscribeUserInvoice.tsx","components/AccountPage/InvoiceForm/ReSubscribeUserInvoice.tsx","components/AccountPage/InvoiceForm/CancelManagerInvoice.tsx","components/AccountPage/InvoiceForm/CancelUserInvoice.tsx","components/AccountPage/InvoiceForm/DeleteUserInvoice.tsx","components/AccountPage/InvoiceForm/MonthlyUpgradeInvoice.tsx","components/AccountPage/InvoiceForm/InvoiceForm.tsx","components/AccountPage/AccountPage.tsx","components/Checkbox/InputCheckbox.tsx","compAssist/compAssitSlice.ts","components/CompAssistPage/CompAssist.tsx","components/Utility/Utility.tsx","components/ExcelPluginDocumentation/Figure.tsx","components/ExcelPluginDocumentation/boldColor.tsx","img/instructions_figures/Figure_1_login.png","img/instructions_figures/Figure_2_login.png","img/instructions_figures/Figure_1_fn.png","img/instructions_figures/Figure_2_fn.png","img/instructions_figures/Figure_3_fn.png","img/instructions_figures/Figure_4_fn.png","img/instructions_figures/Figure_1_desc.png","img/instructions_figures/Figure_2_desc.png","img/instructions_figures/Figure_1_rf.png","img/instructions_figures/Figure_2_rf.png","img/instructions_figures/Figure_1_ts.png","img/instructions_figures/Figure_1_ins.png","img/instructions_figures/Figure_2_ins.png","img/instructions_figures/Figure_3_ins.png","img/instructions_figures/Figure_4_ins.png","img/instructions_figures/Figure_2_reinstall.png","img/excel_icons/ts_icon.png","img/excel_icons/install_icon.png","components/ExcelPluginDocumentation/ExcelPluginDocumentationPage.tsx","img/excel_icons/login80x80.png","img/excel_icons/build80x80.png","img/excel_icons/description80x80.png","img/excel_icons/refresh80x80.png","components/TermsConditions/Privacy.tsx","img/va-2.svg","components/Footer/Footer.tsx","img/landingpage_figures/formula_builder_preview.png","img/landingpage_figures/filter_preview.png","img/landingpage_figures/documentation_preview.png","img/landingpage_figures/VABIGLOGO.png","img/landingpage_figures/CompAssist.png","img/landingpage_figures/Comps.png","components/HomePage/HomePage.tsx","components/Utility/ScrollToTop.tsx","hooks/hooks.ts","components/AuthEventListener.tsx","components/SizePremiumsPage/Premiums.tsx","api/preSignedUrlRequest.ts","documentationSlice/documentationSlice.ts","documentation/documentation.ts","components/SizePremiumsPage/Methodology.tsx","sizePremiums/sizePremium.ts","sizePremiums/sizePremiumsSlice.ts","components/SizePremiumsPage/SizePremiumsPage.tsx","App.tsx","components/NavBar/UseSignOutButtonLogic.tsx","table/columnEditor.ts","store.ts","index.tsx"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","Object","module","exports","signOutAction","createAction","resetStateOnSignOut","builder","initialState","addCase","state","refreshUserSessionInformation","createAsyncThunk","bypassCache","thunkApi","a","getCurrentUserInformation","currentUser","attributes","decodedIdToken","isLoggedIn","undefined","claims","getUserClaims","updateUserSession","arg","authState","AuthState","SignedIn","authData","initClaims","thunkAPI","getState","authSlice","params","stripeCustomerId","seats","clientMetadata","manager","cognito_username","Auth","signUp","fullName","email","currentPassword","newPassword","active_subscription","role","customer_id","has_subscribed_before","is_trialing","initAttributes","createSlice","name","reducers","onAuthStateChanged","action","payload","extraReducers","fulfilled","rejected","selectIsLoggedIn","selectHasSubscribed","selectIsTrialing","selectAttributes","selectClaims","getRole","key","getBoolClaim","getStringClaim","currentAuthenticatedUser","getUserAttributes","getDecodedToken","currentSession","session","getIdToken","decodePayload","Routes","methodology","baselineSizePremiums","equityRiskPremium","normalizedRiskFreeRates","equallyWeightedReturns","geometricAverageReturns","fiveYearTreasuryRateAsRiskFreeRate","historicalERP","fortyYearEstimationWindow","bloomAdjustedBeta","ExportIconSvg","width","height","viewBox","fill","xmlns","d","EditColumnsSvg","BxsMoveFilterDownArrow","BxsMoveFilterUpArrow","DatePickerIcon","MoneyIcon","UserPortrait","PadLock","stroke","strokeWidth","strokeLinecap","strokeLinejoin","SaveIconSvg","EditIconSvg","EyeOpen","EyeClosed","CollapsibleArrow","props","className","src","isExpanded","searchFilterUpArrow","searchFilterDownArrow","RouteService","parentRoute","values","length","result","value","push","childRoutes","this","getChildRoutes","concat","DropDownMenuItemDivider","DropdownItem","divider","style","color","borderTopColor","VaLink","history","useHistory","VaNavItem","collapsed","onClick","classNames","routes","route","activeRoutes","includes","location","pathname","isActiveLink","to","displayName","NavItem","children","PortraitItem","backgroundColor","textAlign","Portrait","useSelector","UncontrolledDropdown","DropdownToggle","border","borderRadius","DropdownMenu","marginTop","signOut","VaNavBar","useState","isOpen","setIsOpen","hasSubscribed","handleOnLinkClicked","Navbar","expand","light","NavbarBrand","href","alt","logo","NavbarToggler","Collapse","navbar","Nav","justified","handlePortraitClicked","CategoryLabel","category","CategoryExpansionToggle","handleIsExpanded","FilterLabel","style_class","bold","label","filters","pinnedFilterSlice","addPinnedFilter","removePinnedFilter","actions","selectPinnedFilters","swapIndexes","list","index1","index2","swap","getUid","filter","type","filterType","postRequest","apiName","path","data","getHeaders","initialData","body","addBody","initData","API","post","getRequest","headers","get","getJwtToken","getAuthorizationHeader","token","createManagedUser","getInvoicePreview","invoice_preview","invoice_preview_params","reSubscribe","cancelSubscription","getNearestBusinesses","deleteCompSet","saveCompSet","compset","checkToken","catch","status","error","createPaymentIntent","createStripeCustomer","createStripeSubscription","postDefaultPayment","formatNumber","toString","numeral","format","number","multiply","normalizeNumber","divide","toFilterCount","filterState","filter_type","sector_id","industry_group_id","sic_code","toSicCodeCount","range","min","max","normalizeMin","displayType","normalizeMax","Infinity","column","toNumericFilterCount","toKeywordSearchFilterCount","getFilterCountsRequest","selectedFilters","saveSelectedFilter","filterName","selectedFilterSlice","filterId","selectedFilterState","saveFilter","filterStates","isoString","moment","utc","toISOString","validateFilterValues","bad_filters","forEach","isNaN","filter_checker","getSelectedFilterCounts","nothing","rejectWithValue","request","isSaving","isCounting","errors","addSelectedFilterState","index","filterCount","ordinal","initNumericFilter","initPickerFilter","initSicCodePicker","initKeywordSearch","initFilterState","_","loadSavedFilter","savedFilter","removeSelectedFilterState","splice","i","clearSelectedFilterState","moveDownSelectedFilterState","moveUpSelectedFilterState","updateSelectedFilterState","updateSelectedFilterName","pending","counts","error_message","plural","join","selectSelectedFilterState","selectIsSaving","selectErrors","selectIsCounting","selectFilterName","selectSelectedFilterId","Criterion","isSelected","setShowPin","dispatch","useDispatch","useEffect","CriteriaList","criteria","prop","FilterCategoryExpandable","setIsExpanded","isSearchingForText","table","FilterCategoryNonExpandable","YF_LABEL","CriteriaCategoryContainer","cssClass","show","ordered_filters","quant_order","qual_order","quant_item","expandableCategories","x","qual_item","nonExpandableCategories","Math","get_ordered_filters","CriteriaSearchBar","searchIcon","placeholder","onChange","handleOnSearchForText","target","getExpandableFilterCategoriesFrom","isExpandableFilter","groupBy","filterList","getNonExpandableFilterCategoriesFrom","isNonExpandableFilter","getSearchableFilters","filterResponse","flatMap","j","pageData","filter_values","filter_category","getNumericFilters","getPickerFilter","getKeywordSearchFilter","getPageDataFilter","fetchFilters","searchableFilters","filterPageData","isFetchingFilters","filterSlice","selectFilterList","selectSicCodes","selectStateHq","selectYearsOfData","selectExchanges","selectIsFetchingFilters","FilterFlap","hasShadow","handleFlapClicked","isFilterFlapOpen","SearchCriteriaContainer","pinnedFilters","isFiltersOpened","setIsFiltersOpened","setExpandableCategories","setNonExpandableCategories","setIsSearchingForText","searchText","setSearchText","hasPinnedFilters","updateSearchFilters","text","filteredFilterList","toLowerCase","getFiltersWithName","isOpened","Loader","hidden","isLoading","_extends","assign","arguments","source","prototype","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_ref7","SvgDocument","_ref","svgRef","title","titleId","ref","ForwardRef","Button","buttonProps","isEnabled","isPrimary","disabled","PrimaryButton","SecondaryButton","MinusButton","IconLeftButton","outlined","icon","button","IconButton","inputs","CircleButton","ExportButton","EditColumnsButton","SaveButton","isEditing","DocumentButton","fetchUserFilters","deleteFilter","isRemovingFilter","savedFilters","isFetchingUserFilters","savedFilterSlice","selectSavedFilters","selectIsRemovingFilter","selectIsFetchingUserFilters","getLocalMonthDayYear","getMomentFromIsoString","local","ISO_8601","getDateFromIsoString","toDate","getUtcNowIsoString","getUtcYearDayMonth","getSectorsFromSicCodes","sicCodes","sector","isChildSelected","industry_groups","getAllSectorsSelectedIndustryGroupIds","industries","getAllSectorsSelectedSicCodes","isAnySectorChildrenSelected","createIndustryGroups","createSectorState","getSectorFromSectors","sicCodeState","find","getIndustryGroupFromIndustryGroups","industryGroups","industry_id","isAnyIndustryGroupOrChildrenSelected","industryGroup","isParentSelected","getAllIndustryGroupSelectedSicCodes","sector_name","createIndustryStates","createIndustryGroupState","industry","industry_group_name","createIndustryState","cleared","sectors","sectorSlice","sectorFilterClicked","industryGroupSectorClicked","industryClicked","sic_codes","industry_name","isAnyIndustrySelected","setSectors","sicCodesData","clearSectors","selectSicCodeState","selectCleared","SavedFilterContainer","SavedFilter","selectedFilterId","isDeleting","unwrapResult","getSelectedFilterResults","filterResults","filterDictionary","page","filterTableSlice","addColumn","removeColumn","moveDownColumn","moveUpColumn","clearErrorMessage","reduce","row","uid","obj","objProps","columnData","selectFilterTableHeaders","columns","header","highlight","getTableHeaders","selectFilterTableRows","getTableRows","selectFilterTableLoading","selectFilterTableError","selectAllColumns","InfoTip","size","UncontrolledTooltip","innerClassName","placement","message","FilterStateContainer","isClosed","setIsClosed","editText","setEditText","onDeleteFilter","trash","CheckboxState","useNumericRageLogic","minInput","setMinInput","maxInput","setMaxInput","handleOnMinChange","getNumericFilterStateWithMin","handleOnMaxChange","getNumericFilterStateWithMax","handleOnMinBlur","handleOnMaxBlur","NumericInput","isFocused","setIsFocused","onBlur","handleOnBlur","formatType","onFocus","readOnly","NumericRangeInputs","formatLeft","formatRight","NumericRangeFactory","FilterStateNumericRange","CheckboxChecked","transform","CheckboxUnchecked","CheckboxChildChecked","CheckboxNotClickable","CheckboxFactory","checkboxType","Checked","checkboxImgProps","Unchecked","ChildChecked","NotClickable","Checkbox","imgProps","FilterPickerChild","checkboxState","handleOnClick","getCheckboxState","includesString","aString","isValueSelected","getPickerSelector","pickerType","FilterPickerIndustry","onIndustryPicked","BxsDownArrow","BxsRightArrow","FilterPickerParent","expand_on_init","onCheckBoxClicked","FilterPickerIndustryGroup","onIndustryGroupPicked","industrySearchFilter","FilterPickerSector","onSectorPicked","industryGroupSearchFilter","FilterSearchBar","searchBarIcon","handleSearch","FilterPickerWithSearch","FilterPickerSicCodes","codes","sectorsCleared","handleOnSectorPicked","handleOnIndustryGroupPicked","handleOnIndustryPicked","sicCodeStates","getSicCodePickerState","SaveWithNameButton","isSaveButtonClicked","setSaveButtonClicked","saveButtonClassName","clickable","getInputContainerCss","placeHolder","onNameChange","onSave","Container","FilterContainer","isGeneratingData","filterTableError","isActive","FilterPicker","getParent","parent","isAnyValueSelected","isAllValuesSelected","getChild","child","getPickerCheckboxState","FilterPickerRegular","stateSelector","pickerState","getPickerState","handleOnParentCheckBoxClicked","addPickerValues","handleOnChildCheckBoxClicked","new_state","addPickerValue","FilterKeywordSearch","getKeywordSearchState","FilterContainerInactive","FilterContainerActive","FilterStateComponentFactory","SelectedFiltersContainer","TableSortDownSvg","onSort","TableSortUpSvg","TableSortableHeader","TableHeader","ascending","thStyle","TableCell","FilterTableToolbar","FilterTableContainer","rows","subHeaders","onAddToCompsGroup","EditableFilterTableContainer","onEditColumns","AddToCompsButton","tooltipOpen","setTooltipOpen","Tooltip","trigger","toggle","FilterTable","sortOptions","setSortOptions","prevState","handleOnSort","sort","row1","row2","row1Value","row2Value","isBigger","fetchTickers","condition","compsTickerPickerSlice","tickers","selectTickers","selectIsFetchingTickers","getCompSetFromCompanyGroup","companyGroup","saveUserCompSet","selectedCompsGroupSlice","valuationDate","companyGroupName","valuation_date","update_date","compset_name","loadUserCompSet","tickerDict","keyBy","item","ticker","isLoadingUserCompSet","addCompsToGroup","company","removeCompsFromGroup","setValuationDate","setCompanyGroupName","clearCompsGroup","compsetId","compSet","selectSelectedCompsGroup","selectCompsGroupName","selectValuationDate","selectIsSavingUserCompSet","selectCompsGroupId","selectCompSet","date","getCompSetRequest","year","String","getFullYear","month","getMonth","padStart","day","getDate","format_compset_date","fetchCompSet","localValuationDate","tableData","fh_comps","multiples","ranks","descriptions","results","data_found","companyNetDebt","rowsDictionary","isFetchingCompset","compsTableSlice","setSubjectCompanyNetDebt","updateRowsDictionary","companyResults","setRowsDictionary","multiplesDictionary","median","oldCompanyResult","measureOfPerformance","heading","selectedMultiples","initRowsDictionary","selectMultiples","selectFhComps","fhComps","selectRanks","selectDescriptions","selectTableData","selectCompsetTableResults","selectCompanyNetDebt","selectRowDictionary","selectIsFetchingCompset","fetchUserCompSets","deleteUserCompSet","isFetchingUserCompSets","isDeletingUserCompSet","savedUserCompSets","savedUserCompSetSlice","compsets","selectIsFetchingUserCompSets","selectSavedUserCompSets","selectIsDeleteingUserCompSet","CompsSelectedCompsGroup","companyList","companies","isCompsGroupEmpty","isSavingCompSet","compsGroupId","EmptyCompsGroupText","Company","comp","onRemoveCompany","handleOnRemoveCompany","buttonText","CompsTab","comps","Modal","hideCloseButton","onCloseModal","List","items","SortArrows","onMoveUp","onMoveDown","TableColumnEditorSelectedColumn","ListItem","onColumnRemoved","onMoveColumnDown","onMoveColumnUp","TableColumnEditorColumnOptions","onColumnSelected","TableColumnEditor","columnsNotShowing","allColumns","selectedColumns","selectedColumnIds","getColumnsNotShowing","onRemoveColumn","onAddColumn","SmallScreenAlert","Alert","getValueFromDictionary","dictionary","getNumberFromDictionary","parseInt","getCompany","toDictionary","FilterPage","showColumnEditor","setShowColumnEditor","toggleShowColumnEditor","useColumnEditor","isCompsTabExpanded","setIsCompsTabExpanded","filterPageClassName","awsmobile","config","process","currentConfig","endpoints","endpoint","Feature","FormInputTyped","htmlFor","for","defaultValue","onError","ValueAnalyticsDocuments","desc","url","SignUpPage","Row","Col","md","icon1","icon2","icon3","icon4","icon5","handleAuthError","LoginPage","federated","initialAuthState","SignIn","usernameAlias","handleAuthStateChange","headerText","slot","formFields","inputProps","required","autocomplete","greeting_logo","hideSignUp","submitButtonText","MANAGER_ROLE","USER_ROLE","OWNER_ROLE","BVR_ROLE","WEEKLY_NAME","MONTHLY_NAME","TRIAL_NAME","EXPIRED_TERM","postStripeCustomer","postStripeSubscription","fetchPlanOptions","planOptions","plan","selected_plan","checkPromoCode","tokenToCheck","token_name","planDetails","coupon_name","token_value","promoCode","tokenResults","priceId","price_id","user","password","planType","paymentIntentSecret","signUpSuccess","isLoadingOptions","selectedPlan","signUpSlice","updateSeats","updatePlanType","updateEmail","updateName","updatePlanOptions","customerId","coupon_applied","promo_secret","token_secret","promo_attempt_failed","selectPlan","selectPlanOptions","ordered_options","option","selectPlanDetails","selectIsLoadingOptions","PlanOption","optionClassName","best_value","trial_period","trial_period_days","display_price","sub_period","billing_frequency","selected","onFormToggle","FormInput","toUpperCase","TrialOrderSummary","PaidOrderSummary","pops","setPromoCode","leftHeader","rightHeader","coupon_display_name","coupon_price","display_due_now","description","coupon_available","OrderSummary","Terms","TermsPage","getCheckoutStatus","confirmCardSetup","stripe","card","clientSecret","payment_method","setupIntentResult","confirmCardPayment","setup_future_usage","confirmCardPaymentResult","CheckoutForm","isUpgrading","getSubscription","sub","planId","quantity","toInteger","referredBy","clearErrors","handleCardPayment","response","elements","getElement","CardElement","client_secret","secret","handleCheckoutComplete","checkoutStatus","onUpdatingSubscription","handleChange","event","setCardIsReady","complete","UpgradeCheckoutForm","useStripe","useElements","cardIsReady","handleSubmit","preventDefault","acceptedTerms","onSubmit","options","base","padding","fontSize","NoTrialCheckoutForm","TrialCheckoutForm","stripePromise","loadStripe","SignupForm","setAcceptedTerms","setReferredBy","setError","CSSTransition","appear","in","timeout","lg","checked","SubscriptionUpdaterModal","shouldRefresh","setRefresh","refreshToggle","setRefreshToggle","setTimeout","clearTimeout","onSubscriptionActivated","CreateCognitoAccount","PlanOptions","toggleShowSignupForm","setDirection","setStep","planOptionsComponent","exit","direction","AccountCreationFlow","isUpdatingSubscription","setIsUpdatingSubscription","step","asyncDispatch","blur","createAccountClassName","selectPlanClassName","selectPaymentCLassName","SignUp","CompsSavedCompsGroups","savedCompSets","isFetchingUserCompSet","selectedCompsGroupId","handleOnLoad","userCompSet","handleOnDelete","CompsSavedGroup","savedComps","onLoad","onDelete","TableTab","TableTabContainer","tabNames","activeTabName","setActiveTabName","onTabChange","TableTitle","TableToolBar","left","right","LeftToolBar","RightToolBar","onExportButtonClicked","isExporting","CompsTableContainer","compsetResults","tabs","currentTab","setCurrentTab","onEditColumnsButtonClicked","onShowColumnEditor","InputBox","InputMoney","DateSelector","onDateChange","Array","isArray","todayButton","ValuationDate","useValuationDate","handleValuationDate","CompsTable","tableInputChildren","netDebtHeader","enterpriseValueHeader","selectedMultiplesHeader","equityValueHeader","CompsConclusionTable","subjectCompanyNetDebt","inputEnterpriseValue","setInputEnterpriseValue","calculationsDictionary","enterpriseValue","onEnterpriseValueChange","handleRowUpdate","Table","getEquityValue","mop","companyResultsNumber","float","parseFloat","getNumber","NaN","getEnterpriseValue","netDebtValue","Number","companyValue","multipleValue","getGoodEVValues","getAverage","good_values","sum","getMedian","math","getNetDebt","debt","getOperator","colSpan","getMaximum","perc","percentile","getUpperQuartile","getLowerQuartile","getMinimum","average","getCoefficientOfVariation","enterprise_value","getFairMarketValue","tmp","partition","start","end","n","k","pos","findK","ceil","CompsMultiplesTable","rowFilter","allRows","companyName","getAllRows","nonFixedRows","getNonFixedRows","fixedRows","getFixedRows","getRow","sizeAdjustment","pop","getSizeAdjustment","sizeAdjustedMultiples","calculation","getSizeAdjustedMultiples","coefficientOfVariation","averages","numberOfRows","numberOfColumns","avg","std","datatype","rowindex","columnindex","CalculatedRow","showBorder","rowName","FinancialHighlightsTable","sectionDictionary","section","max_idx","h","idx","FHtable","RanksTable","mapToCard","RanksCard","BusinessDescriptionTable","cellAlphaMap","cellNumberFormat","cellDecimalFormat","getAlphaFromCellRef","cellRef","match","getNumericFromCellRef","moveRight","sourceCell","count","newRef","moveDown","setCellValue","sheet","cellFormat","t","v","w","z","alphaNumericSort","arr","b","isNumber","aPart","bPart","len","localeCompare","insertRows","worksheet","startingRow","front","split","back","currentKeys","reverse","modifiedKeys","replace","JSON","parse","stringify","fhCompsRowMap","multiplesColumnMap","ranksSheetMap","valuationDateMap","FHcomps","Multiples","Ranks","Conc","get_format","exportFromCompSet","companyCount","exportData","userInputDictionary","fetch","res","ok","arrayBuffer","buffer","workBook","ab","Uint8Array","xlsx","read","cellStyles","xlfn","convertBufferToWorkbook","fillFhComps","fixFormulasFHComps","c","fillMultiples","fixFormulasMultiples","fillRanks","fixFormulasConc","fillDescriptions","fillValuationDate","insertUserData","cleanExtraColumns","populateWorkBook","wbData","linkSource","downloadLink","document","createElement","Date","fileName","toLocaleDateString","download","click","exportWorkbook","write","writeWorkbook","console","log","wb","conclusion","Sheets","row_indices","cell","workbook","startingCol","charCodeAt","char0indexed","newCharCode","fromCharCode","substring","insertColumns","currentCell","currentDataCellRef","valueName","dataFrame","dataType","val","cells","startsWith","f","formula","newRange","cellCounter","dataCompany","rangeFormula","references","reference","ranksSheet","rowInsertPosition","rowInsertPostionIncrement","ranksCurrentCell","columnRef","rowRef","ranksData","dataValue","tickerCell","exchange","descCell","dformat","s","lastCol","lastIndex","slice","TickerPickerItem","onTickerPicked","company_name","TickerPicker","tickerList","filteredTickers","excludeTickers","filterTickers","CompsTickerPicker","handleOnTickerPickerClosed","CompsPage","showTickerPicker","setShowTickerPicker","setIsExporting","companyId","compsPageClassName","finally","ConditionalWrapper","wrapper","Document","video","documentIcon","new_tab","PadLockModal","hasSubscribedBefore","isTrialing","fullscreen","WithActiveSubscription","showPadLock","setShowPadLock","Card","docs","protected","DocumentationCol","DocumentationCard","documentation","documents","subtitle","DocumentationPage","terms","gpc_method","tutorials","excel_templates","ShowPassword","eyeOpen","ResetPassword","curPassword","setCurPassword","setNewPassword","showCurPassword","setShowCurPassword","showNewPassword","setShowNewPassword","newPasswordError","setNewPasswordError","curPasswordError","setCurPasswordError","completionMessage","setCompletionMessage","setIsLoading","changePassword","err","updatePassword","AccountInformation","userAttributes","setFullName","setEmail","Form","fetchInvoicePreview","fetchBillingData","fetchSubMgmtData","setDefaultPayment","invoicePreview","users","billingPageData","next_payment","billing_history","card_details","billingSlice","setUser","setInvoicePreview","sub_details","sub_options","account_rows","format_date","utc_date","hour_minute","proper_date","hour","minute","toLocaleString","format_amount_dollars","amount","toFixed","getNextPayment","fmt_payment_date","next_payment_date","fmt_amount_due","amount_due","getHistory","payment_date","invoice_url","getCardDetails","getIsLoading","getPlanType","getPlanOptions","getInvoice","getLineItems","next_invoice","preview","discounts","line_items","discount_description","getUsers","renew_date","expires_date","active","sub_name","addPaymentMethod","handleCardSetup","UpdateCard","isUpdatingCard","setIsUpdatingCard","setMessage","handleCardFailure","setupIntent","setupIntentResults","payment_id","BillingHistory","nextPayment","cardDetails","billingHistoryItems","brand","last4","exp_month","exp_year","AddNewUser","setName","confirmEmail","setConfirmEmail","setIsloading","setIsEnabled","enableButton","disableButton","handleInviteUser","setShowAddNewUserForm","TrialingManagerButton","buttonIsEnabled","ActiveWeeklyManagerButton","monthly_option","invoice_preview_payload","subscription_id","sub_id","user_id","setButtonIsEnabled","setInvoiceAction","setShowInvoicePreview","ActiveMonthlyManagerButton","number_of_active_users","invoice_action","invoiced_now","next_invoice_date","subtotal","total","proration_date","typical_monthly","CancelledMonthlyManagerButton","ExpiredMonthlyManagerButton","setCategory","resubscribe_to_choice","CancelledTeamMemberButton","active_manager","ActiveTeamMemberButton","UserOptions","trialing_manager","active_weekly_manager","active_monthly_manager","trialing","cancelled_monthly_manager","expired_manager","active_user","cancelled_user","TeamManagement","showAddNewUserForm","ACTIVE_MANAGER","USER_MESSAGE","ADD_MEMBER_ENABLED","userList","align","teamMgmtError","OwnerTeamMemberButton","OwnerUserOptions","OwnerTeamManagement","Billing","activeClassName","useInvoiceLogic","errorMessage","performAction","onFailure","descText1","descText2","orderInfo","actionButton","updateError","OrderInfo","lineItems","dueText","ReSubscribeManager","desc_text_1","desc_text_2","monthly_plan","invoice","upgradeAccount","ReSubscribeManagerInvoice","OwnerSubscribeUserInvoice","newUserName","newUserEmail","inviteManagedUser","SubscribeUserInvoice","ReSubscribeUserInvoice","user_info","resubscribeUser","CancelManagerInvoice","invoiceAction","cancelManagerSubscriptionWithUsers","CancelUserInvoice","cancelUserSubscription","DeleteUserInvoice","deleteUser","MonthlyUpgradeInvoice","InvoiceForm","showInvoice","AccountPage","setNewUserName","setNewUserEmail","showInvoicePreview","setTeamMgmtError","displayInvoicePreview","generateNewUserInvoice","showAddUserForm","InputCheckbox","FormGroup","check","Input","isChecked","Label","getTableRow","business","fetchDistancingOptions","compAssistSlice","isFetchingDistancingOptions","availableColumns","fetchNearestBussiness","column_name","isFetchingNearestBusinesses","nearestBusinesses","availableTickers","selectDefaultColumns","default","setTicker","setColumn","resetSelections","distancing_options","available_columns","available_tickers","selectSelectableColumnGroups","selectable","acc","group","selectTicker","display_name","selectIsFetchingDistancingOptions","selectIsFetchingNearestBusinesses","selectCanSearchForCompanies","selectAvailableTickers","CompAssistColumnCheckbox","CompAssistColumnGroup","sm","groupName","CompAssist","columnGroups","isFetchingNearestBusiness","canFindCompanies","fluid","InputGroup","useFixElementOnDocumentScrollLeft","navRef","useRef","handleScroll","scrollLeft","documentElement","current","addEventListener","passive","removeEventListener","Figure","fig_cont_style","paddingLeft","floatRight","margin","image","figure_idx","caption","Bc","fontWeight","ExcelPluginDocumentationPage","install","login","fields","refresh","troubleshoot","reInstall","get_default","anchor","window","hash","default_open","getElementById","scrollIntoView","Accordion","defaultActiveKey","Item","eventKey","Header","install_icon","Body","figure_1_ins","figure_2_ins","figure_3_ins","figure_1","figure_4_ins","figure_2","figure_1_fn","figure_2_fn","figure_3_fn","figure_4_fn","display","figure_1_desc","figure_2_desc","figure_1_rf","figure_2_rf","ts_icon","figure_1_ts","figure_2_reins","Privacy","Footer","currentYear","xs","Image","LandingRow","SmallPaddingLandingRow","HomePage","goTo","va_log_big","formula_builder_preview","comp_assist_preview","comps_tab_preview","filter_preview","documentation_preview","ScrollToTop","useLocation","scrollTo","useAppDispatch","AuthEventListener","authEvent","setAuthEvent","authCallback","Hub","listen","remove","Premiums","getPreSignedUrl","file","filePath","encodeURIComponent","isPreSignedUrlExpired","fetchPreSignedDocumentationLink","s3Prefix","documentationSlice","selectDocuments","preSignedUrlDocuments","DownloadButton","preSignedUrl","open","Methodology","bordered","createEmptyPremium","createEmptySizePremiums","baselineSizePremium","blumeAdjustedBeta","fetchSizePremiums","isLoadingSizePremiums","sizePremiums","whitePaperLink","sizePremiumsSlice","selectSizePremiumsSlice","sizePremiumSlice","PremiumNavItem","handleClick","PremiumGroup","premium","onClickHandler","PremiumRoute","SizePremiumsPage","premiums","group1","group2","closeNav","xl","vertical","exact","configure","Amplify","App","showSignOut","setShowSignOut","useSignOutButtonLogic","footerRef","appPageClassNames","columnEditorSlice","setColumns","store","configureStore","reducer","ReactDOM","render"],"mappings":"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","file":"static/js/main.bcab0ae6.chunk.js","sourcesContent":["var map = {\n\t\"./amplify-amazon-button_5.entry.js\": [\n\t\t669,\n\t\t16\n\t],\n\t\"./amplify-auth-container.entry.js\": [\n\t\t670,\n\t\t17\n\t],\n\t\"./amplify-auth-fields_9.entry.js\": [\n\t\t671,\n\t\t18\n\t],\n\t\"./amplify-authenticator.entry.js\": [\n\t\t672,\n\t\t5\n\t],\n\t\"./amplify-button_3.entry.js\": [\n\t\t673,\n\t\t19\n\t],\n\t\"./amplify-chatbot.entry.js\": [\n\t\t674,\n\t\t4\n\t],\n\t\"./amplify-checkbox.entry.js\": [\n\t\t675,\n\t\t20\n\t],\n\t\"./amplify-confirm-sign-in_7.entry.js\": [\n\t\t676,\n\t\t6\n\t],\n\t\"./amplify-container.entry.js\": [\n\t\t677,\n\t\t21\n\t],\n\t\"./amplify-federated-buttons_2.entry.js\": [\n\t\t678,\n\t\t22\n\t],\n\t\"./amplify-federated-sign-in.entry.js\": [\n\t\t679,\n\t\t23\n\t],\n\t\"./amplify-form-field_4.entry.js\": [\n\t\t680,\n\t\t24\n\t],\n\t\"./amplify-greetings.entry.js\": [\n\t\t681,\n\t\t25\n\t],\n\t\"./amplify-icon-button.entry.js\": [\n\t\t682,\n\t\t26\n\t],\n\t\"./amplify-icon.entry.js\": [\n\t\t683,\n\t\t7\n\t],\n\t\"./amplify-link.entry.js\": [\n\t\t684,\n\t\t27\n\t],\n\t\"./amplify-nav_2.entry.js\": [\n\t\t685,\n\t\t28\n\t],\n\t\"./amplify-photo-picker.entry.js\": [\n\t\t686,\n\t\t29\n\t],\n\t\"./amplify-picker.entry.js\": [\n\t\t687,\n\t\t30\n\t],\n\t\"./amplify-radio-button_3.entry.js\": [\n\t\t688,\n\t\t8\n\t],\n\t\"./amplify-s3-album.entry.js\": [\n\t\t689,\n\t\t9\n\t],\n\t\"./amplify-s3-image-picker.entry.js\": [\n\t\t690,\n\t\t10\n\t],\n\t\"./amplify-s3-image.entry.js\": [\n\t\t691,\n\t\t11\n\t],\n\t\"./amplify-s3-text-picker.entry.js\": [\n\t\t692,\n\t\t12\n\t],\n\t\"./amplify-s3-text.entry.js\": [\n\t\t693,\n\t\t13\n\t],\n\t\"./amplify-select-mfa-type.entry.js\": [\n\t\t694,\n\t\t31\n\t],\n\t\"./amplify-sign-in-button.entry.js\": [\n\t\t695,\n\t\t14\n\t],\n\t\"./amplify-tooltip.entry.js\": [\n\t\t696,\n\t\t32\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 564;\nmodule.exports = webpackAsyncContext;","export default __webpack_public_path__ + \"static/media/VA_Logo_New_1.d4a61afb.svg\";","import {ActionReducerMapBuilder, createAction} from \"@reduxjs/toolkit\";\n\nexport const signOutAction = createAction('logout');\n\nexport function resetStateOnSignOut(builder: ActionReducerMapBuilder, initialState: T) {\n return builder.addCase(signOutAction, (state) => initialState)\n}\n","import {createAsyncThunk, createSlice} from '@reduxjs/toolkit'\nimport {Auth} from 'aws-amplify';\nimport {RootState} from \"../store\";\nimport {AuthState} from \"@aws-amplify/ui-components\";\nimport {resetStateOnSignOut} from \"./signOut\";\n\nexport type UserRole = 'MANAGER' | 'USER' | 'OWNER' | 'BVR_USER' | 'DEMO_USER' | undefined;\n\nexport interface IUserAttributes {\n fullName: string;\n email: string;\n}\n\nexport interface IUserClaims {\n active_subscription: boolean;\n cognito_username: string;\n role: UserRole;\n customer_id: string;\n has_subscribed_before: boolean;\n is_trialing: boolean;\n}\n\nexport interface IAuthentication {\n isLoggedIn: boolean;\n claims: IUserClaims;\n attributes: IUserAttributes;\n}\n\nexport interface IAuthenticationState {\n authSlice: IAuthentication;\n}\n\nexport const refreshUserSessionInformation = createAsyncThunk(\n 'authSlice/refreshUserSessionInformation',\n async (bypassCache, thunkApi) =>\n {\n const {currentUser, attributes, decodedIdToken} = await getCurrentUserInformation(bypassCache);\n return {\n isLoggedIn: currentUser !== undefined,\n claims: getUserClaims(decodedIdToken),\n attributes: attributes\n }\n }\n);\n\nexport const updateUserSession = createAsyncThunk(\n 'authSlice/updateUserSession',\n async (arg, thunkApi) => {\n const {attributes, decodedIdToken} = await getCurrentUserInformation(false);\n\n return {\n isLoggedIn: arg.authState === AuthState.SignedIn && arg.authData !== undefined,\n claims: getUserClaims(decodedIdToken),\n attributes: attributes\n }\n }\n);\n\nexport const signUpUserWithStripe = createAsyncThunk(\n 'authSlice/signUpUser',\n async (arg, thunkAPI) => {\n const claims = thunkAPI.getState().authSlice.claims;\n const params: any = {\n attributes: {\n stripeCustomerId: arg.stripeCustomerId,\n seats: arg.seats\n },\n clientMetadata: {\n manager: claims.cognito_username\n },\n }\n const result = await Auth.signUp(params);\n }\n);\n\nexport const updateAccountInformation = createAsyncThunk(\n 'authSlice/updateAccountInformation',\n async (arg) => {\n // TODO API CALL\n const accountInformation: any = {\n fullName: arg.fullName,\n email: arg.email,\n currentPassword: arg.currentPassword,\n newPassword: arg.newPassword\n }\n }\n)\n\nconst initClaims: IUserClaims = {\n active_subscription: false,\n cognito_username: '',\n role: undefined,\n customer_id: '',\n has_subscribed_before: false,\n is_trialing: false\n};\n\nconst initAttributes: IUserAttributes = {\n email: '',\n fullName: ''\n}\n\nconst initialState: IAuthentication = {\n isLoggedIn: false,\n claims: initClaims,\n attributes: initAttributes\n}\n\nexport const authSlice = createSlice({\n name: 'authSlice',\n initialState,\n reducers: {\n onAuthStateChanged: (state, action) => {\n state.isLoggedIn = action.payload;\n }\n },\n extraReducers: builder => {\n builder.addCase(refreshUserSessionInformation.fulfilled, (state, action) => {\n state.isLoggedIn = action.payload.isLoggedIn;\n state.claims = action.payload.claims;\n state.attributes = action.payload.attributes;\n });\n builder.addCase(refreshUserSessionInformation.rejected, (state, action) => {\n state.isLoggedIn = false;\n state.claims = initClaims;\n state.attributes = initAttributes;\n });\n builder.addCase(updateUserSession.fulfilled, (state, action) => {\n state.isLoggedIn = true;\n state.claims = action.payload.claims\n state.attributes = action.payload.attributes;\n });\n builder.addCase(updateUserSession.rejected, (state, action) => {\n state.isLoggedIn = false;\n state.claims = initClaims;\n state.attributes = initAttributes;\n });\n\n resetStateOnSignOut(builder, initialState);\n }\n});\n\nexport default authSlice.reducer;\n\nexport function selectIsLoggedIn(state: IAuthenticationState): boolean {\n return state.authSlice.isLoggedIn;\n}\n\nexport function selectHasSubscribed(state: IAuthenticationState): boolean {\n return state.authSlice.claims.has_subscribed_before;\n}\n\nexport function selectIsTrialing(state: IAuthenticationState): boolean {\n return state.authSlice.claims.is_trialing;\n}\n\nexport function selectAttributes(state: IAuthenticationState): IUserAttributes {\n return state.authSlice.attributes;\n}\n\nexport function selectClaims(state: IAuthenticationState): IUserClaims {\n return state.authSlice.claims;\n}\n\nfunction getRole(decodedIdToken: { [key: string]: any }, key: string): UserRole {\n return decodedIdToken[key];\n}\n\nfunction getUserClaims(decodedIdToken: { [key: string]: any }): IUserClaims {\n return {\n active_subscription: getBoolClaim(decodedIdToken, 'valueanalytics:active_subscription'),\n cognito_username: getStringClaim(decodedIdToken, 'cognito:username'),\n role: getRole(decodedIdToken, 'valueanalytics:role'),\n customer_id: getStringClaim(decodedIdToken, 'valueanalytics:customer_id'),\n has_subscribed_before: getBoolClaim(decodedIdToken, 'valueanalytics:has_subscribed_before'),\n is_trialing: getBoolClaim(decodedIdToken, 'valueanalytics:trialing')\n }\n}\n\nfunction getStringClaim(decodedIdToken: { [key: string]: any }, key: string): string {\n return decodedIdToken[key] === undefined\n ? ''\n : decodedIdToken[key];\n}\n\nfunction getBoolClaim(\n decodedIdToken: { [key: string]: any },\n key: string\n): boolean {\n return decodedIdToken[key] === undefined\n ? false\n : decodedIdToken[key] === 'true'\n}\n\nfunction createRequestThrottleChecker() {\n let lastCheck = new Date().getMilliseconds();\n let count = 0;\n return () => {\n let currentTime = new Date().getMilliseconds();\n if (count < 5) {\n count += 1;\n return true;\n }\n if (currentTime - lastCheck > 1000) {\n lastCheck = currentTime;\n count = 0;\n return true;\n }\n return false;\n }\n}\n\n\n\nasync function getCurrentUserInformation(bypassCache: boolean) {\n const currentUser = await Auth.currentAuthenticatedUser({bypassCache: bypassCache});\n const attributes = await getUserAttributes();\n const decodedIdToken = await getDecodedToken();\n return {currentUser, attributes, decodedIdToken};\n}\n\nasync function getDecodedToken() {\n const session = await Auth.currentSession();\n return session.getIdToken().decodePayload();\n}\n\nasync function getUserAttributes(): Promise {\n const {attributes} = await Auth.currentAuthenticatedUser();\n if (!attributes) {\n return {\n fullName: '',\n email: ''\n }\n }\n const fullName = attributes['custom:fullname'] ? attributes['custom:fullname'] : '';\n const email = attributes['email'];\n return {\n fullName: fullName,\n email: email\n };\n}\n","export const Routes = {\n main: '/main',\n comps: '/comps',\n filtering: '/filtering',\n documentation: '/documentation',\n login: '/login',\n signUp: '/signup',\n createAccount: '/create-account',\n account: '/account',\n excelDocumentation: '/excel',\n privacy: '/privacy',\n terms: '/terms',\n upgradeAccount: '/upgrade-account',\n homePage: '/home',\n compAssist: '/comp-assist',\n sizePremiums:{\n methodology: '/size-premiums/methodology',\n baselineSizePremiums: '/size-premiums/baseline-size-premiums',\n equityRiskPremium: '/size-premiums/equity-risk-premiums',\n normalizedRiskFreeRates: '/size-premiums/normalized-risk-free-rates',\n equallyWeightedReturns: '/size-premiums/equally-weighted-returns',\n geometricAverageReturns: '/size-premiums/geometric-average-returns',\n fiveYearTreasuryRateAsRiskFreeRate : '/size-premiums/five-year-treasury-rate-as-risk-free-rate',\n historicalERP: '/size-premiums/historical-erp',\n fortyYearEstimationWindow: '/size-premiums/forty-year-estimation-window',\n bloomAdjustedBeta: '/size-premiums/bloom-adjusted-beta',\n }\n}\n\nexport const ActiveSubscriptionRequiredRoutes = [\n Routes.filtering,\n Routes.comps,\n Routes.compAssist\n]\n","import React from \"react\";\n\nexport function ExportIconSvg() {\n return \n \n \n ;\n}\n\nexport function EditColumnsSvg() {\n return \n \n \n \n \n\n}\n\nexport function BxsMoveFilterDownArrow() {\n return (\n \n \n \n );\n}\n\nexport function BxsMoveFilterUpArrow() {\n return (\n \n \n \n )\n}\n\nexport function DatePickerIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport function MoneyIcon() {\n return (\n \n \n \n )\n}\n\nexport function CircleCheckError() {\n return (\n \n \n \n )\n}\n\nexport function UserPortrait() {\n return (\n \n \n \n )\n}\n\nexport function PadLock() {\n return (\n \n \n \n )\n}\n\nexport function SaveIconSvg() {\n return (\n \n \n \n )\n}\n\nexport function EditIconSvg() {\n return (\n \n \n \n );\n}\n\nexport function EyeOpen(){\n return (\n \n )\n}\n\nexport function EyeClosed(){\n return (\n \n )\n}\n","export default __webpack_public_path__ + \"static/media/search-filter-arrow-up.46ee62f4.svg\";","export default __webpack_public_path__ + \"static/media/search-filter-arrow-down.d2e031a4.svg\";","import searchFilterUpArrow from \"../../img/search-filter-arrow-up.svg\";\nimport searchFilterDownArrow from \"../../img/search-filter-arrow-down.svg\";\nimport './CollapsibleArrow.scss';\nimport React from \"react-dom\";\n\nexport function CollapsibleArrow(props: { isExpanded: boolean }) {\n return ;\n}\n\nexport default CollapsibleArrow;\n","export default class RouteService {\n\n public static getChildRoutes(parentRoute: string | object): string[] {\n if (typeof (parentRoute) === 'string') {\n return []\n }\n\n const values: (string | object)[] = Object.values(parentRoute)\n\n if (values.length === 0) {\n return []\n }\n\n let result: string[] = []\n for (let value of values) {\n if (typeof (value) === 'string') {\n result.push(value)\n } else {\n const childRoutes = this.getChildRoutes(value)\n result = result.concat(childRoutes)\n }\n }\n return result\n }\n}\n","import React, {useState} from 'react'\nimport \"./VaNavbar.scss\"\nimport logo from \"../../img/VA_Logo_New_1.svg\"\nimport { useSelector} from \"react-redux\";\nimport {selectAttributes, selectHasSubscribed, selectIsLoggedIn} from \"../../auth/authSlice\";\nimport {Routes} from \"../../routes/routes\";\nimport {UserPortrait} from \"../Svg/Svg\";\nimport CollapsibleArrow from \"../CollapsibleArrow/CollapsibleArrow\";\nimport {Link, useHistory} from \"react-router-dom\";\nimport {\n Collapse, DropdownItem, DropdownMenu, DropdownToggle,\n Nav, Navbar, NavbarBrand, NavbarToggler, NavItem,\n UncontrolledDropdown\n} from \"reactstrap\";\nimport classNames from \"classnames\";\nimport { Auth } from 'aws-amplify';\nimport RouteService from \"../../routes/routeService\";\n\n\nfunction DropDownMenuItemDivider() {\n return (\n \n )\n}\n\nfunction VaLink(props: { route: string, displayName: string, activeRoutes?: string[], collapsed?: boolean, className?: string, onClick: () => void }) {\n const history = useHistory();\n\n function isActiveLink(){\n let routes: string[] = [props.route]\n if(props.activeRoutes){\n routes = routes.concat(RouteService.getChildRoutes(props.activeRoutes))\n }\n return routes.includes(history.location.pathname);\n }\n\n return (\n \n \n {props.displayName}\n \n \n );\n}\n\nfunction VaNavItem(props: { collapsed?: boolean, children: React.ReactNode }) {\n return \n {props.children}\n \n}\n\nfunction PortraitItem(props: { children: React.ReactNode }) {\n return \n {props.children}\n \n}\n\nfunction Portrait(props: { onClick: () => void }) {\n const attributes = useSelector(selectAttributes)\n const name = attributes.fullName ? attributes.fullName : attributes.email;\n const email = attributes.fullName ? attributes.email : '';\n\n return (\n \n \n
\n \n
\n
{name}
\n
{email}
\n
\n \n
\n
\n \n \n Account\n \n \n \n Auth.signOut()}>Sign Out\n \n \n \n \n );\n}\n\nfunction VaNavBar(props: { showSignOut: boolean, handlePortraitClicked: () => void }) {\n const [isOpen, setIsOpen] = useState(false);\n const toggle = () => setIsOpen(!isOpen);\n const isLoggedIn = useSelector(selectIsLoggedIn)\n const hasSubscribed = useSelector(selectHasSubscribed)\n\n function handleOnLinkClicked() {\n setIsOpen(false);\n }\n\n return (\n
\n \n \n \"company\n \n \n \n \n {\n isLoggedIn && hasSubscribed ? (\n \n ) : (\n \n )\n }\n \n \n
\n )\n}\n\nexport default VaNavBar;\n","import React from \"react\";\nimport './CategoryLabel.scss'\nimport '../../style/style.scss'\n\nexport interface CategoryLabelProps {\n category: string;\n}\n\nexport function CategoryLabel(props: CategoryLabelProps) {\n return (\n {props.category}\n );\n}\n","import React from 'react-dom'\nimport './CategoryExpansionToggle.scss'\nimport minus from '../../img/minus.svg'\nimport plus from '../../img/plus.svg'\nimport '../../style/style.scss'\nimport searchFilterUpArrow from \"../../img/search-filter-arrow-up.svg\";\nimport searchFilterDownArrow from \"../../img/search-filter-arrow-down.svg\";\n\nexport interface CategoryExpansionToggleProps {\n isExpanded: boolean;\n handleIsExpanded: (isExpanded: boolean) => void;\n}\n\nfunction CategoryExpansionToggle(props: CategoryExpansionToggleProps) {\n const isExpanded = props.isExpanded;\n const handleIsExpanded = props.handleIsExpanded;\n\n return (\n handleIsExpanded(!isExpanded)}>\n {\"image\"}\n \n )\n}\n\nexport default CategoryExpansionToggle;\n","import React from 'react-dom';\nimport './CriteriaLabel.scss'\nimport '../../style/style.scss'\n\nfunction FilterLabel(props: {label: string, bold?: boolean}) {\n\n let style_class;\n if (props.bold){\n style_class = 'roboto-gold-16'\n } else {\n style_class = 'roboto-regular-12'\n }\n\n return (\n {props.label}\n );\n}\n\nexport default FilterLabel;\n","import {createSlice, PayloadAction} from \"@reduxjs/toolkit\";\nimport {IFilter, IFilterDictionary} from \"./filter\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\n\ninterface IPinnedFiltersSlice {\n filters: IFilterDictionary,\n}\n\ninterface IPinnedFiltersSliceState {\n pinnedFilterSlice: IPinnedFiltersSlice;\n}\n\nconst initialState: IPinnedFiltersSlice = {\n filters: {} as IFilterDictionary\n};\n\nexport const pinnedFilterSlice = createSlice({\n name: 'pinnedFilterSlice',\n initialState,\n reducers: {\n addPinnedFilter: (state, action: PayloadAction) => {\n if (state.filters[action.payload.value] === undefined) {\n state.filters[action.payload.value] = action.payload;\n }\n },\n removePinnedFilter: (state, action: PayloadAction) => {\n delete state.filters[action.payload.value];\n },\n },\n extraReducers: builder => {\n resetStateOnSignOut(builder, initialState);\n }\n});\n\n\nexport const {\n addPinnedFilter,\n removePinnedFilter\n} = pinnedFilterSlice.actions;\n\nexport const selectPinnedFilters = (state: IPinnedFiltersSliceState) =>\n state.pinnedFilterSlice.filters;\n\nexport const selectIsFilterPinned = (name: string) => (state: IPinnedFiltersSliceState): boolean =>\n state.pinnedFilterSlice.filters[name] !== undefined;\n\nexport default pinnedFilterSlice;\n\n\n","export function swapIndexes(list: T[], index1: number, index2: number) {\n const swap = list[index1];\n list[index1] = list[index2];\n list[index2] = swap;\n}\n\nexport type Dictionary = { [index: string]: T };\n\nexport function filterList(list: T[], filterList: T[]): T[] {\n let result: T[] = [];\n for(let item of list) {\n let index = filterList.indexOf(item);\n if(index < 0) {\n result.push(item);\n }\n }\n return result;\n}\n","import {IFilter} from \"./filter\";\nimport {ISectorState} from \"./sicCodeState\";\nimport {\n FilterState,\n IKeywordSearchFilter,\n INumericFilter,\n IPickerFilter,\n ISicCodePicker,\n KeywordSearchFilters,\n RegularFilterPickers\n} from \"./filterStateTypes\";\nimport * as _ from 'lodash';\nimport {FilterKeywordSearchProps} from \"../components/FilterContainer/FilterKeywordSearch\";\nimport numeral from \"numeral\";\n\nfunction initNumericFilter(index: number, filter: IFilter): INumericFilter {\n return {\n type: \"numeric\",\n column: filter.category,\n filterType: filter.value,\n range: [0, Infinity],\n displayName: filter.name,\n filterCount: 0,\n ordinal: index,\n displayType: filter.displayType\n };\n}\n\nfunction initSicCodePicker(index: number, filter: IFilter): ISicCodePicker {\n return {\n type: \"sicCodePicker\",\n sic_code: [],\n industry_group_id: [],\n sector_id: [],\n displayName: filter.name,\n filterCount: 0,\n ordinal: index,\n displayType: filter.displayType\n };\n}\n\nfunction initPickerFilter(index: number, filter: IFilter): IPickerFilter {\n return {\n type: \"picker\",\n displayName: filter.name,\n filterType: filter.category as RegularFilterPickers,\n value: [],\n filterCount: 0,\n ordinal: index,\n displayType: filter.displayType\n }\n}\n\nfunction initKeywordSearch(index: number, filter: IFilter): IKeywordSearchFilter {\n return {\n type: \"keywordsearch\",\n displayName: filter.name,\n filterType: filter.category as KeywordSearchFilters,\n value: \"\",\n filterCount: 0,\n ordinal: index,\n displayType: filter.displayType\n }\n}\n\nexport function initFilterState(index: number, filter: IFilter): FilterState {\n switch (filter.type) {\n case \"numeric\":\n return initNumericFilter(index, filter);\n case \"picker\":\n return initPickerFilter(index, filter);\n case \"sicCodePicker\":\n return initSicCodePicker(index, filter);\n case \"keywordsearch\":\n return initKeywordSearch(index, filter);\n }\n}\n\nexport function getUid(filter: FilterState): string {\n switch (filter.type) {\n case \"numeric\":\n case \"keywordsearch\":\n case \"picker\":\n return filter.filterType;\n case \"sicCodePicker\":\n return filter.type;\n }\n}\n\nexport function getSicCodePickerState(\n filterState: ISicCodePicker,\n sicCodeStates: ISectorState[]\n): FilterState {\n let sectors: string[] = [];\n let industryGroups: string[] = [];\n let industries: string[] = [];\n\n for (let sector of sicCodeStates) {\n if (sector.isSelected) {\n sectors.push(sector.sector_id);\n continue;\n }\n if (!sector.isChildSelected) {\n continue;\n }\n for (let industryGroup of sector.industry_groups) {\n if (industryGroup.isSelected) {\n industryGroups.push(industryGroup.industry_group_id);\n continue;\n }\n if (!industryGroup.isChildSelected) {\n continue;\n }\n for (let industry of industryGroup.industries) {\n if (industry.isSelected) {\n industries.push(industry.sic_code);\n }\n }\n }\n }\n\n return {\n ...filterState,\n sic_code: industries,\n industry_group_id: industryGroups,\n sector_id: sectors,\n };\n}\n\nexport function getNumericFilterStateWithMin(min: string, filter: INumericFilter): INumericFilter {\n const value = numeral(min).value();\n return {\n ...filter,\n range: [value === null ? 0 : value, filter.range[1]]\n }\n}\n\nexport function getNumericFilterStateWithMax(max: string, filter: INumericFilter): INumericFilter {\n const value = numeral(max).value();\n return {\n ...filter,\n range: [filter.range[0], value === null ? Infinity : value]\n }\n}\n\nexport function removePickerValues(filter: IPickerFilter, values: string[]): IPickerFilter {\n return {\n ...filter,\n value: _.without(filter.value, ...values)\n };\n}\n\nexport function removePickerValue(filter: IPickerFilter, value: string): IPickerFilter {\n return {\n ...filter,\n value: _.without(filter.value, value)\n };\n}\n\nexport function addPickerValues(filter: IPickerFilter, values: string[]): IPickerFilter {\n return {\n ...filter,\n value: _.union(filter.value, values)\n };\n}\n\nexport function addPickerValue(filter: IPickerFilter, value: string): IPickerFilter {\n return {\n ...filter,\n value: _.union(filter.value, [value])\n };\n}\n\nexport function getKeywordSearchState(props: FilterKeywordSearchProps, value: string) {\n return {\n ...props.filter,\n value: value\n };\n}\n","import {API, Auth} from \"aws-amplify\";\nimport {IAuthHeaders} from \"./requestsTypes\";\n\nfunction addBody(data: T): (initialData: any) => any {\n return (initialData: any) => ({\n ...initialData,\n body: data\n });\n}\n\nexport function postRequest(apiName: string, path: string, data: T) {\n return getHeaders()\n .then(addBody(data))\n .then(initData => API.post(apiName, path, initData))\n}\n\nexport function getRequest(apiName: string, path: string) {\n return getHeaders()\n .then(headers => API.get(apiName, path, headers))\n}\n\nfunction getHeaders(): Promise {\n return getJwtToken()\n .then(getAuthorizationHeader)\n .then(headers => ({\n \"headers\": {...headers}\n }));\n}\n\nfunction getJwtToken(): Promise {\n return Auth.currentSession()\n .then(session => session.getIdToken().getJwtToken())\n}\n\nfunction getAuthorizationHeader(token: string) {\n return {\n \"Authorization\": `Bearer ${token}`\n }\n}\n","import {API} from \"aws-amplify\";\nimport {IFilterPageData} from \"../filtering/filterPageData\";\nimport {\n CreateManagedUserResponse,\n CreateStripeCustomerResponse,\n CreateStripeSubscriptionResponse,\n DeleteFilterResponse,\n FilterCountsResponse,\n GetUserFiltersResponse,\n ICancelSubscription,\n ICompSetRequest,\n ICompSetResponse,\n ICreateManagedUser,\n ICreatePaymentIntent,\n ICreateStripeCustomer,\n ICreateStripeSubscription,\n IDeleteUser,\n IDistancingOptionsResponse,\n IGetBillingPageData,\n IGetInvoicePreview,\n INearestBusinessesRequest,\n INearestBusinessesResponse,\n InvoicePreview,\n ISavedFilter,\n PaymentIntentResponse,\n SavedFilterResponse,\n SetDefaultResponse,\n SetupIntentResponse,\n SubMgmtData\n} from \"./requestsTypes\";\nimport {IFilterCountsRequest} from \"./filterCountRequest\";\nimport {FilterResults, ITicker} from \"../types\";\nimport {ISizePremiums} from \"../sizePremiums/sizePremium\";\nimport {getRequest, postRequest} from \"./requestUtility\";\n\nexport function createManagedUser(data: ICreateManagedUser): Promise {\n return postRequest('Api', '/create_managed_user', data)\n}\n\nexport function getBillingPageData(): Promise {\n return getRequest('Api', '/get_billing_information');\n}\n\nexport async function getInvoicePreview(data: IGetInvoicePreview): Promise{\n const invoice_preview = await postRequest('Api', '/get_invoice_preview', data)\n invoice_preview.invoice_preview_params = data // here we add the invoice preview params to response\n return invoice_preview\n}\n\nexport function reSubscribe(data: IGetInvoicePreview){\n return postRequest('Api', '/re_subscribe', data)\n}\n\n\nexport function deleteManagedUser(data: IDeleteUser){\n return postRequest('Api', '/delete_managed_user', data)\n}\n\nexport function cancelSubscription(data: ICancelSubscription){\n return postRequest('Api', '/cancel_subscription', data)\n}\n\n\nexport function getSubMgmtData(): Promise {\n return getRequest('Api', '/get_sub_mgmt_data');\n}\n\nexport function getFilterPageData(): Promise {\n return getRequest('Api', '/get_filter_page_data');\n}\n\nexport function getFilterCounts(data: IFilterCountsRequest): Promise {\n return postRequest('Api', '/get_filter_count', data);\n}\n\nexport function getFilterResults(data: IFilterCountsRequest): Promise {\n return postRequest('Api', '/get_filter_results', data);\n}\n\nexport function getDistancingOptions(): Promise{\n return postRequest('Api', '/get_distancing_options', {});\n}\n\nexport function getNearestBusinesses(data: INearestBusinessesRequest): Promise{\n return postRequest('Api', '/get_nearest_businesses', data);\n}\n\nexport function getUserFilters(): Promise {\n return getRequest('Api', '/get_user_filters');\n}\n\nexport function saveUserFilter(data: ISavedFilter): Promise {\n return postRequest('Api', '/save_user_filter', data);\n}\n\nexport function deleteUserFilter(data: ISavedFilter): Promise {\n return postRequest('Api', '/delete_user_filter', data);\n}\n\nexport function getCompSet(data: ICompSetRequest): Promise {\n return postRequest('Api', '/get_compset', data);\n}\n\nexport function getSizePremiums(): Promise{\n return getRequest('Api', '/sub/size-premiums');\n}\n\nexport interface IUserCompSetResponse {\n status: 'success' | 'error';\n compsets: IUserCompSet[]\n}\n\nexport interface IUserCompSet {\n id: number;\n compset: number[];\n valuation_date: string;\n update_date: string;\n compset_name: string;\n}\n\nexport function getUserCompSets(): Promise {\n return getRequest('Api', '/get_user_compset');\n}\n\nexport interface IDeleteCompSetRequest {\n id: number;\n}\n\nexport interface IDeleteUserCompSetResponse {\n status: 'success' | 'error',\n deleted?: number\n}\n\nexport function deleteCompSet(data: IDeleteCompSetRequest): Promise {\n return postRequest('Api', '/delete_user_compset', data);\n}\n\nexport interface ISaveUserCompSetResult {\n status: string,\n compsetId: number\n}\n\nexport function saveCompSet(compset: IUserCompSet): Promise {\n return postRequest('Api', '/save_user_compset', compset);\n}\n\nexport interface ICheckTokenRequest {\n token_name: string;\n token_value: string;\n}\n\nexport interface ICheckTokenSuccess {\n status: 'success';\n token_name: string;\n token_secret: string;\n}\n\nexport interface ICheckTokenError {\n status: 'error';\n error: string;\n}\n\n\nexport type CheckTokenResponse = ICheckTokenSuccess | ICheckTokenError\n\nexport function checkToken(data: ICheckTokenRequest): Promise {\n return API.post('Api', '/check_token', {body: data})\n .catch(() => {\n return {\n status: 'error',\n error: 'Something went wrong'\n } as ICheckTokenError\n });\n}\n\nexport function getTickers(): Promise {\n return getRequest('Api', '/get_tickers');\n}\n\nexport function createPaymentIntent(data: ICreatePaymentIntent): Promise {\n return postRequest('Api', '/create_payment_intent', data);\n}\n\nexport function createStripeCustomer(data: ICreateStripeCustomer): Promise {\n return postRequest('Api', '/create_customer', data);\n}\n\n\nexport function createStripeSubscription(data: ICreateStripeSubscription): Promise {\n return postRequest('Api', '/create_subscription', data);\n}\n\nexport interface IPlanOption {\n best_value: boolean\n billing_frequency: string,\n cancel_at_period_end: boolean,\n description: string,\n display_due_now: string,\n display_price: string,\n price_id: string,\n sub_period: string,\n title: string,\n trial_period: boolean,\n trial_period_days: number,\n selected_plan: boolean,\n coupon_applied: boolean,\n coupon_available: boolean,\n coupon_display_name: string,\n coupon_name: string,\n coupon_price: string,\n promo_attempt_failed: boolean,\n promo_secret: string\n}\n\nexport interface ISetDefault {\n payment_id: string\n}\n\nexport function postDefaultPayment(data: ISetDefault): Promise {\n return postRequest('Api', '/set_default_payment', data)\n}\n\n\nexport function getSetupIntent(): Promise {\n return getRequest('Api', '/get_setup_intent')\n}\n\nexport function getPlanOptions(): Promise {\n return getRequest('Api', '/get_plan_options');\n}\n\n\n","import numeral from 'numeral';\n\ntype NumberFormat\n = 'integer'\n | 'integer_m'\n | 'text'\n | 'decimal'\n | 'percentage'\n | 'Infinity'\n | 'NYSE MKT'\n | 'blank'\n | 'integer_m_f'\n | 'money'\n | 'decimal_2'\n | any;\n\nexport function formatNumber(value: string | number, type: NumberFormat): string {\n if (value === 'Infinity') {\n return 'Inf';\n }\n\n if (value === 'NYSE MKT') {\n return 'AMEX'\n }\n\n if(type === 'text') {\n return value.toString();\n }\n\n if (value === 'blank') {\n return ''\n }\n\n if (type === \"integer_m_f\") {\n\n if (value < 0.05 && value > -0.05){\n return \"< 0.05\"\n } else {\n const number = numeral(value);\n return number.format('0,0.0')\n }\n\n }\n\n if (!value || value === '-' ) {\n return '-';\n }\n\n const number = numeral(value);\n\n if(number.value() === null){\n return '-';\n }\n\n switch (type) {\n case \"integer_m\":\n return number.format('0,0.0')\n case \"integer\":\n return number.format('0,0');\n case \"decimal\":\n return number.format('0,0.0');\n case \"decimal_2\":\n return number.format('0,0.00');\n case \"percentage\":\n return number.multiply(.01).format('0.0%');\n case \"money\":\n return number.format('$0,0');\n }\n\n return value.toString();\n}\n\nexport function normalizeNumber(value: string | number | null, type: NumberFormat): number {\n let result: number | null = 0;\n switch (type) {\n case \"integer_m\":\n result = numeral(value).multiply(1000000).value();\n break;\n case \"percentage\":\n result = numeral(value).divide(100).value();\n break;\n case \"decimal\":\n case \"integer\":\n result = numeral(value).value();\n break;\n default:\n result = 0;\n }\n\n if (result === null) {\n return 0;\n }\n\n return result;\n}\n\n\n","import {\n FilterState, IKeywordSearchFilter,\n INumericFilter,\n IPickerFilter,\n ISicCodePicker, KeywordSearchFilters,\n RegularFilterPickers\n} from \"../filtering/filterStateTypes\";\nimport {normalizeNumber} from \"../utility/numberFormatter\";\n\nexport interface IFilterCountsRequest {\n filters: FilterCount[]\n}\n\ntype FilterCount\n = INumericFilterCount\n | ISicCodeCount\n | IRegularPickerCount\n | IKeywordSearchFilterCount\n\ninterface INumericFilterCount {\n filter_type: 'numeric_filters';\n column: string;\n value: [number, number]\n}\n\ninterface ISicCodeCount {\n filter_type: 'sic_codes';\n sector_id: string[];\n industry_group_id: string[];\n sic_code: string[]\n}\n\ninterface IRegularPickerCount {\n filter_type: RegularFilterPickers,\n value: string[]\n}\n\ninterface IKeywordSearchFilterCount {\n filter_type: KeywordSearchFilters;\n value: string\n}\n\nfunction toSicCodeCount(filterState: ISicCodePicker) : ISicCodeCount {\n return {\n filter_type: 'sic_codes',\n sector_id: filterState.sector_id,\n industry_group_id: filterState.industry_group_id,\n sic_code: filterState.sic_code,\n }\n}\n\nfunction toNumericFilterCount(filterState: INumericFilter) : INumericFilterCount {\n const [min, max] = filterState.range;\n const normalizeMin = normalizeNumber(min, filterState.displayType);\n const normalizeMax = normalizeNumber(max === null ? Infinity : max, filterState.displayType);\n\n return {\n filter_type: 'numeric_filters',\n column: filterState.filterType,\n value: [normalizeMin, normalizeMax]\n };\n}\n\nfunction toPickerFilterCount(filterState: IPickerFilter) : IRegularPickerCount {\n return {\n filter_type: filterState.filterType,\n value: filterState.value\n }\n}\n\nfunction toKeywordSearchFilterCount(filterState: IKeywordSearchFilter) : IKeywordSearchFilterCount {\n return {\n filter_type: filterState.filterType,\n value: filterState.value\n }\n}\n\nfunction toFilterCount(filterState: FilterState) : FilterCount {\n switch(filterState.type) {\n case 'sicCodePicker':\n return toSicCodeCount(filterState);\n case 'numeric':\n return toNumericFilterCount(filterState);\n case 'picker':\n return toPickerFilterCount(filterState);\n case 'keywordsearch':\n return toKeywordSearchFilterCount(filterState);\n }\n}\n\nexport function getFilterCountsRequest(selectedFilters: FilterState[]) : IFilterCountsRequest {\n return {\n filters: selectedFilters.map(toFilterCount)\n }\n}\n","import {createAsyncThunk, createSlice, PayloadAction} from '@reduxjs/toolkit'\nimport {swapIndexes} from \"../utility/utility\";\nimport {getUid, initFilterState} from './filterStateLogic';\nimport * as _ from 'lodash';\nimport {FilterState} from \"./filterStateTypes\";\nimport {getFilterCounts, saveUserFilter} from \"../api/requests\";\nimport {RootState} from '../store';\nimport {FilterCountsResponse, ISavedFilter, SavedFilterResponse} from \"../api/requestsTypes\";\nimport {getFilterCountsRequest} from '../api/filterCountRequest';\nimport moment from 'moment';\nimport {IFilter} from './filter';\nimport {filter_checker} from './filterStateTypes'\nimport {normalizeNumber} from \"../utility/numberFormatter\";\nimport {resetStateOnSignOut, signOutAction} from '../auth/signOut';\n\ninterface ISelectedFilterSlice {\n filterId: number;\n filterName: string;\n selectedFilterState: FilterState[];\n isSaving: boolean;\n isCounting: boolean;\n errors: string[];\n}\n\ninterface ISelectedFilterSliceState {\n selectedFilterSlice: ISelectedFilterSlice\n}\n\nexport const saveSelectedFilter = createAsyncThunk(\n 'filter/saveSelectedFilters',\n async (filterName, thunkAPI) => {\n const {filterId, selectedFilterState} = thunkAPI.getState().selectedFilterSlice;\n const saveFilter: ISavedFilter = {\n filterId: filterId,\n filterName: filterName,\n filterStates: selectedFilterState,\n isoString: moment.utc().toISOString()\n }\n return await saveUserFilter(saveFilter);\n }\n);\n\nexport const validateFilterValues = (filterState: FilterState[]): string[] => {\n let bad_filters: string[] = []\n filterState.forEach(filter=>{\n let good_filter = filter_checker(filter)\n if (!good_filter){\n bad_filters.push(filter.displayName)\n }\n })\n\n return bad_filters\n\n}\n\n\n\nexport const getSelectedFilterCounts = createAsyncThunk(\n 'filter/getSelectedFilterCounts',\n async (nothing, thunkAPI) => {\n const {selectedFilterState} = thunkAPI.getState().selectedFilterSlice;\n\n let bad_filters = validateFilterValues(selectedFilterState)\n\n if(selectedFilterState.length <= 0) {\n return [];\n }\n\n if (bad_filters.length > 0){\n return thunkAPI.rejectWithValue(bad_filters)\n }\n\n\n const request = getFilterCountsRequest(selectedFilterState)\n return await getFilterCounts(request);\n }\n);\n\nconst initialState: ISelectedFilterSlice = {\n filterId: 0,\n filterName: '',\n selectedFilterState: [],\n isSaving: false,\n isCounting: false,\n errors: []\n};\n\nexport const selectedFilterSlice = createSlice({\n name: 'selectedFilterSlice',\n initialState,\n reducers: {\n addSelectedFilterState: (state, action: PayloadAction) => {\n const index = state.selectedFilterState.length;\n const filterState = initFilterState(index, action.payload);\n const uidIsInList = _\n .some(state.selectedFilterState,\n filter => getUid(filter) === getUid(filterState)\n );\n if (!uidIsInList) {\n state.selectedFilterState.push(filterState);\n }\n },\n loadSavedFilter: (state, action: PayloadAction) => {\n const savedFilter = action.payload;\n state.filterId = savedFilter.filterId;\n state.filterName = savedFilter.filterName;\n state.selectedFilterState = savedFilter.filterStates;\n state.isSaving = false;\n state.isCounting = false;\n state.errors = [];\n },\n removeSelectedFilterState: (state, action: PayloadAction) => {\n state.selectedFilterState.splice(action.payload.ordinal, 1);\n for (let i = action.payload.ordinal; i < state.selectedFilterState.length; i++) {\n state.selectedFilterState[i].ordinal = i;\n }\n },\n clearSelectedFilterState: (state) => {\n return initialState;\n },\n moveDownSelectedFilterState: (state, action: PayloadAction) => {\n let filters = state.selectedFilterState;\n let index = action.payload.ordinal;\n\n if (index >= filters.length - 1) {\n return;\n }\n\n swapIndexes(filters, index, index + 1);\n filters[index].ordinal = index;\n filters[index + 1].ordinal = index + 1;\n },\n moveUpSelectedFilterState: (state, action: PayloadAction) => {\n let index = action.payload.ordinal;\n\n if (index <= 0) {\n return;\n }\n\n swapIndexes(state.selectedFilterState, index, index - 1);\n state.selectedFilterState[index].ordinal = index;\n state.selectedFilterState[index - 1].ordinal = index - 1;\n },\n updateSelectedFilterState: (state, action: PayloadAction) => {\n state.selectedFilterState[action.payload.ordinal] = action.payload;\n },\n updateSelectedFilterName: (state, action: PayloadAction) => {\n state.filterName = action.payload;\n }\n },\n extraReducers: builder => {\n builder.addCase(saveSelectedFilter.rejected, (state, action) => {\n state.isSaving = false;\n state.errors = [\"failed to save filter\"];\n });\n builder.addCase(saveSelectedFilter.pending, (state, action) => {\n state.isSaving = true;\n });\n builder.addCase(saveSelectedFilter.fulfilled, (state, action) => {\n state.isSaving = false;\n switch (action.payload.status) {\n case \"success\":\n state.filterId = action.payload.filterId;\n state.errors = [];\n break;\n case \"error\":\n state.errors = action.payload.errors;\n break;\n }\n });\n builder.addCase(getSelectedFilterCounts.fulfilled, (state, action) => {\n const counts = action.payload;\n for (let i = 0; i < counts.length; i++) {\n state.selectedFilterState[i].filterCount = counts[i];\n }\n state.isCounting = false;\n state.errors = [];\n });\n builder.addCase(getSelectedFilterCounts.pending, (state, action) => {\n state.isCounting = true;\n });\n builder.addCase(getSelectedFilterCounts.rejected, (state, action:any) => {\n // wrap this in a try/catch block since we can't\n // guarantee action will contain our bad_filters payload\n let error_message : string;\n try {\n\n let plural: string = action.payload.length > 1 ? 's' : ''\n error_message = `No value provided for filter${plural}: ${action.payload.join(', ')}.\n Please provide value${plural} or remove filter${plural}.`\n } catch(error){\n error_message = \"\"\n }\n state.isCounting = false;\n state.errors = [error_message];\n });\n\n resetStateOnSignOut(builder, initialState);\n }\n});\n\nexport const {\n addSelectedFilterState,\n loadSavedFilter,\n removeSelectedFilterState,\n clearSelectedFilterState,\n moveDownSelectedFilterState,\n moveUpSelectedFilterState,\n updateSelectedFilterState,\n updateSelectedFilterName\n} = selectedFilterSlice.actions;\n\nexport const selectSelectedFilterState = (state: ISelectedFilterSliceState): FilterState[] =>\n state.selectedFilterSlice.selectedFilterState;\n\nexport const selectIsSaving = (state: ISelectedFilterSliceState): boolean =>\n state.selectedFilterSlice.isSaving;\n\nexport const selectErrors = (state: ISelectedFilterSliceState): string[] =>\n state.selectedFilterSlice.errors;\n\nexport const selectIsCounting = (state: ISelectedFilterSliceState): boolean =>\n state.selectedFilterSlice.isCounting;\n\nexport const selectFilterName = (state: ISelectedFilterSliceState): string =>\n state.selectedFilterSlice.filterName;\n\nexport const selectSelectedFilterId = (state: ISelectedFilterSliceState): number =>\n state.selectedFilterSlice.filterId;\n\nexport default selectedFilterSlice.reducer\n","export type FilterState\n = INumericFilter\n | ISicCodePicker\n | IKeywordSearchFilter\n | IPickerFilter;\n\nexport interface IFilterStateDisplayInfo {\n ordinal: number;\n displayName: string;\n filterCount: number;\n displayType: string;\n}\n\nexport interface INumericFilter extends IFilterStateDisplayInfo {\n type: \"numeric\";\n column: string;\n filterType: string;\n range: [number, number | null];\n}\n\nexport type RegularFilterPickers = \"exchanges\" | \"state_hq\" | \"years_of_data\";\nexport type KeywordSearchFilters = 'business_description';\n\nexport interface IPickerFilter extends IFilterStateDisplayInfo {\n type: \"picker\";\n filterType: RegularFilterPickers;\n value: string[];\n}\n\nexport interface ISicCodePicker extends IFilterStateDisplayInfo {\n type: \"sicCodePicker\";\n sector_id: string[];\n industry_group_id: string[];\n sic_code: string[];\n}\n\nexport interface IKeywordSearchFilter extends IFilterStateDisplayInfo {\n type: \"keywordsearch\";\n filterType: KeywordSearchFilters;\n value: string;\n}\n\nexport function filter_checker(filter: FilterState): boolean {\n\n switch (filter.type) {\n\n case \"numeric\": {\n return !isNaN(filter.range[0]) && !isNaN(filter.range[0])\n }\n case \"picker\": {\n return filter.value.length > 0\n }\n case \"sicCodePicker\": {\n return filter.sector_id.length > 0 || filter.industry_group_id.length > 0 || filter.sic_code.length > 0\n }\n case \"keywordsearch\": {\n return filter.value != \"\"\n\n }\n\n }\n\n}\n\n","import React from 'react-dom'\nimport {useEffect, useState} from \"react\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {FilterType, IFilter} from \"../../filtering/filter\";\nimport FilterPin from \"../CriteriaPin/FilterPin\";\nimport FilterLabel from \"../CriteriaLabel/FilterLabel\";\nimport './Criterion.scss';\nimport {addPinnedFilter, removePinnedFilter, selectIsFilterPinned} from '../../filtering/pinnedFilterSlice';\nimport { addSelectedFilterState } from '../../filtering/selectedFilterSlice';\n\nfunction Criterion(props: IFilter) {\n const isSelected = useSelector(selectIsFilterPinned(props.value));\n const [showPin, setShowPin] = useState(isSelected);\n const dispatch = useDispatch();\n\n useEffect(() => {\n setPinState(isSelected);\n }, [isSelected])\n\n function setPinState(value: boolean) {\n if (isSelected) {\n setShowPin(true);\n } else {\n setShowPin(value);\n }\n }\n\n function toggleCriterion(value: string) {\n if (isSelected) {\n dispatch(removePinnedFilter(props));\n } else {\n dispatch(addPinnedFilter(props));\n }\n }\n\n function handleOnClick() {\n dispatch(addSelectedFilterState(props));\n }\n\n return (\n <>\n {/* setPinState(true)}*/}\n {/* onMouseLeave={() => setPinState(false)}*/}\n {/* onClick={() => {*/}\n {/* toggleCriterion(props.value);*/}\n {/* }}*/}\n {/*>*/}\n {/* {showPin ? : <> }*/}\n {/**/}\n setPinState(true)}\n // onMouseLeave={() => setPinState(false)}\n onClick={handleOnClick}\n >\n \n \n \n )\n}\n\nexport default Criterion;\n","import \"./CriteriaList.scss\"\nimport Criterion from \"../Criterion/Criterion\";\nimport {IFilter} from \"../../filtering/filter\";\n\nexport interface CriteriaListProps {\n criteria: IFilter[]\n}\n\nexport function CriteriaList(props: CriteriaListProps) {\n return (\n <>\n {\n props.criteria\n .map(prop => )\n }\n \n )\n}\n\n","import React, {useEffect, useState} from \"react\";\nimport {CategoryLabel} from \"../CategoryLabel/CategoryLabel\";\nimport CategoryExpansionToggle from \"../CategoryExpansionToggle/CategoryExpansionToggle\";\nimport {CriteriaList} from \"../CriteriaList/CriteriaList\";\nimport \"./CriteriaCategory.scss\"\nimport {IFilterCategoryExpandable} from \"../../filtering/filter\";\n\nexport interface FilterCategoryProps {\n category: IFilterCategoryExpandable;\n isSearchingForText: boolean;\n}\n\nexport function FilterCategoryExpandable(props: FilterCategoryProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n function handleIsExpanded(expand: boolean) {\n setIsExpanded(props.isSearchingForText ? true : expand);\n }\n\n useEffect(() => {\n handleIsExpanded(isExpanded);\n }, [props.isSearchingForText])\n\n return (\n
\n
\n \n
\n
\n \n
\n {\n isExpanded ?\n \n : null\n }\n
\n );\n}\n\n","import {FilterType, IFilter, IFilterCategoryNonExpandable} from \"../../filtering/filter\";\nimport Criterion from \"../Criterion/Criterion\";\nimport React from \"react\";\nimport \"./CriteriaCategory.scss\"\n\ninterface FilterCategoryNonExpandableProps {\n category: IFilterCategoryNonExpandable\n}\n\nfunction FilterCategoryNonExpandable(props: FilterCategoryNonExpandableProps) {\n return (\n
\n \n
\n );\n}\n\nexport default FilterCategoryNonExpandable;\n","type numeric_categories = 'Income Statement' | 'Cash Flow Statement' | 'Balance Sheet' | 'Value'\n | 'Performance' | 'Employee Count'\n\ntype qualatative_categories = 'Business Description' | 'SIC Codes' | 'Exchange' |\n 'Years of Financial Data' | 'Corporate HQ'\n\nlet IS: numeric_categories = 'Income Statement'\nlet CF: numeric_categories = 'Cash Flow Statement'\nlet BS: numeric_categories = 'Balance Sheet'\nlet V: numeric_categories = 'Value'\nlet P: numeric_categories = 'Performance'\nlet EC: numeric_categories = 'Employee Count'\n\nlet BD: qualatative_categories = 'Business Description'\nlet SC: qualatative_categories = 'SIC Codes'\nlet EX: qualatative_categories = 'Exchange'\nlet YF: qualatative_categories = 'Years of Financial Data'\nlet HQ: qualatative_categories = 'Corporate HQ'\n\nlet ME_LABEL = 'Major Exchanges'\nlet YF_LABEL = 'Years of Financial Data'\nlet HQ_LABEL = 'Location of Corporate HQ'\n\nexport {IS, CF, BS, V, P, EC, BD, SC, EX, YF, HQ, ME_LABEL, YF_LABEL, HQ_LABEL}","import React from \"react\";\nimport './CriteriaCategoryContainer.scss'\nimport {IFilterCategoryExpandable, IFilterCategoryNonExpandable} from \"../../filtering/filter\";\nimport {FilterCategoryExpandable} from \"../FilterCategory/FilterCategoryExpandable\";\nimport FilterCategoryNonExpandable from \"../FilterCategory/FilterCategoryNonExpandable\";\nimport {IS, CF, BS, V, P, EC, BD, SC, EX, YF, HQ} from \"../../utility/constants\"\nexport interface CriteriaCategoryContainerProps {\n show: boolean;\n expandableCategories: IFilterCategoryExpandable[];\n nonExpandableCategories: IFilterCategoryNonExpandable[];\n isSearchingForText: boolean;\n}\n\nfunction get_ordered_filters(props: CriteriaCategoryContainerProps, quant_order: string[], qual_order: string[]){\n let ordered_filters = []\n for (let i=0; i < Math.max(quant_order.length, qual_order.length); i++) {\n\n if (i x.table == quant_order[i])[0]\n if (quant_item) {\n ordered_filters.push(quant_item)\n }\n }\n if (i x.filter.name == qual_order[i])[0]\n if (qual_item) {\n ordered_filters.push(qual_item)\n }\n }\n\n }\n return ordered_filters\n}\n\nfunction CriteriaCategoryContainer(props: CriteriaCategoryContainerProps) {\n const cssClass = props.show ? \"show\" : \"hide\";\n let quant_order = [IS, CF, BS, V, P, EC]\n let qual_order = [BD, SC, EX, YF, HQ]\n\n let ordered_filters = get_ordered_filters(props, quant_order, qual_order)\n return (\n
\n {\n props.show\n ?
\n {\n ordered_filters.map((prop) => {\n\n // @ts-ignore\n if (prop.filter) {\n // @ts-ignore\n return \n // @ts-ignore\n } else if (prop.table) {\n // @ts-ignore\n return \n }\n\n })\n }\n\n
\n : null\n }\n
\n );\n}\n\nexport default CriteriaCategoryContainer;\n","export default __webpack_public_path__ + \"static/media/search-bar-icon.e305074f.svg\";","import searchIcon from \"../../img/search-bar-icon.svg\";\nimport React from \"react-dom\";\nimport './CriteriaSearchBar.scss';\n\nfunction CriteriaSearchBar(props: { handleOnSearchForText: (searchText: string) => void }) {\n return (\n
\n
\n \n props.handleOnSearchForText(e.target.value)}\n />\n
\n
\n )\n}\n\nexport default CriteriaSearchBar;\n","import {IFilterPageData, IFilterData} from \"./filterPageData\";\nimport * as _ from 'lodash';\n\nexport interface IFilterDictionary {\n [column: string]: IFilter\n}\n\nexport interface IFilterCategoryExpandable {\n table: string;\n filters: IFilter[];\n}\n\nexport interface IFilterCategoryNonExpandable {\n filter: IFilter;\n}\n\nexport interface IFilter {\n type: FilterType;\n category: string;\n value: string;\n name: string;\n displayType: string;\n bold?: boolean;\n}\n\nexport type FilterType = \"numeric\" | \"picker\" | \"sicCodePicker\" | \"keywordsearch\";\n\nexport function getExpandableFilterCategoriesFrom(filters: IFilter[]): IFilterCategoryExpandable[] {\n return _\n .chain(filters)\n .filter(isExpandableFilter)\n .groupBy(filter => filter.category)\n .map((filterList, table) => ({table: table, filters: filterList}))\n .value();\n}\n\nexport function getNonExpandableFilterCategoriesFrom(filters: IFilter[]): IFilterCategoryNonExpandable[] {\n return _\n .chain(filters)\n .filter(isNonExpandableFilter)\n .map(filter => ({\n filter: filter\n }))\n .value();\n}\n\nfunction isNonExpandableFilter(filter: IFilter) {\n return filter.type === \"sicCodePicker\" ||\n filter.type === \"picker\" ||\n filter.type === \"keywordsearch\";\n}\n\nfunction isExpandableFilter(filter: IFilter) {\n return filter.type === \"numeric\";\n}\n\nexport interface IFilterCounter {\n filterCount: number;\n}\n\nexport function getSearchableFilters(filterResponse: IFilterPageData): IFilter[] {\n const sectorIndustryFilter: IFilter = {\n type: \"sicCodePicker\",\n value: \"sic_codes\",\n name: \"SIC Codes\",\n category: \"sic_codes_table\",\n displayType: 'text'\n };\n\n const exchangesFilter: IFilter = {\n category: 'exchanges',\n name: 'Exchange',\n type: 'picker',\n value: 'exchanges',\n displayType: 'text'\n }\n\n const yearsOfDataFilter: IFilter = {\n category: 'years_of_data',\n name: 'Years of Financial Data',\n type: 'picker',\n value: 'years_of_data',\n displayType: 'integer'\n }\n\n const stateHqFilter: IFilter = {\n category: 'state_hq',\n name: 'Corporate HQ',\n type: 'picker',\n value: 'state_hq',\n displayType: 'text'\n }\n\n const businessDescriptionFilter: IFilter = {\n category: 'business_description',\n name: 'Business Description',\n type: 'keywordsearch',\n value: 'business_description',\n displayType: 'text'\n }\n\n const filters: { name: string, value: IFilterData[] }[] = [\n {name: \"numeric_filters\", value: filterResponse['Numeric Filters']}\n ];\n\n return filters\n .flatMap(i => i.value\n .flatMap(\n j => getPageDataFilter(i.name, j)\n )\n )\n .concat(sectorIndustryFilter)\n .concat(exchangesFilter)\n .concat(yearsOfDataFilter)\n .concat(stateHqFilter)\n .concat(businessDescriptionFilter)\n}\n\nfunction getNumericFilters(pageData: IFilterData): IFilter[] {\n return pageData\n .filter_values\n .map(i => ({\n type: \"numeric\",\n value: i.value,\n name: i.name,\n category: pageData.filter_category,\n displayType: i.type\n }));\n}\n\nfunction getPickerFilter(name: string, pageData: IFilterData): IFilter {\n return {\n type: \"picker\",\n category: name,\n name: pageData.filter_category,\n value: pageData.filter_category,\n displayType: 'text'\n }\n}\n\nfunction getKeywordSearchFilter(name: string, pageData: IFilterData): IFilter {\n return {\n type: \"keywordsearch\",\n category: pageData.filter_category,\n name: name,\n value: pageData.filter_category,\n displayType: 'text'\n };\n}\n\nexport function getPageDataFilter(name: string, pageData: IFilterData): IFilter[] {\n switch (pageData.filter_type) {\n case \"numeric\":\n return getNumericFilters(pageData)\n case \"picker\":\n return [getPickerFilter(name, pageData)]\n case \"keywordsearch\":\n return [getKeywordSearchFilter(name, pageData)]\n default:\n return []\n }\n}\n\nexport function getFiltersWithName(filterList: IFilter[], name: string) {\n if (name === \"\") {\n return filterList;\n }\n\n return filterList\n .filter(i => i.name\n .toLowerCase()\n .includes(name.toLowerCase())\n );\n}\n","import {createAsyncThunk, createSlice} from \"@reduxjs/toolkit\";\nimport {getSearchableFilters, IFilter} from \"./filter\";\nimport {IFilterPageData, IFilterData} from \"./filterPageData\";\nimport {getFilterPageData} from \"../api/requests\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\n\ninterface IFilterSlice {\n searchableFilters: IFilter[];\n filterPageData: IFilterPageData;\n isFetchingFilters: boolean;\n}\n\nexport interface IFilterSliceState {\n filterSlice: IFilterSlice\n}\n\nexport const fetchFilters = createAsyncThunk(\n 'filter/fetchFilters',\n async (thunkAPI) => {\n return await getFilterPageData();\n }\n);\n\nconst initialState: IFilterSlice = {\n searchableFilters: [] as IFilter[],\n filterPageData: {} as IFilterPageData,\n isFetchingFilters: false\n};\n\nexport const filterSlice = createSlice({\n name: 'filterSlice',\n initialState,\n reducers: {},\n extraReducers: builder => {\n builder.addCase(fetchFilters.fulfilled, (state, action) => {\n state.filterPageData = action.payload;\n state.searchableFilters = getSearchableFilters(action.payload);\n state.isFetchingFilters = false;\n });\n\n builder.addCase(fetchFilters.pending, (state, action) => {\n state.isFetchingFilters = true;\n });\n\n builder.addCase(fetchFilters.rejected, (state, action) => {\n state.isFetchingFilters = false;\n });\n\n resetStateOnSignOut(builder, initialState);\n }\n});\n\n\nexport const selectFilterList = (state: IFilterSliceState) =>\n state.filterSlice.searchableFilters;\n\nexport const selectSicCodes = (state: IFilterSliceState) =>\n state.filterSlice.filterPageData['SIC Codes'];\n\nexport const selectStateHq = (state: IFilterSliceState): IFilterData[] =>\n state.filterSlice.filterPageData['Corporate HQ']\n\nexport const selectYearsOfData = (state: IFilterSliceState) =>\n state.filterSlice.filterPageData['Years of Financial Data']\n\nexport const selectExchanges = (state: IFilterSliceState) =>\n state.filterSlice.filterPageData['Exchange']\n\nexport const selectBusinessDescription = (state: IFilterSliceState) =>\n state.filterSlice.filterPageData[\"Business Description\"]\n\nexport const selectIsFetchingFilters = (state: IFilterSliceState) =>\n state.filterSlice.isFetchingFilters\n","import React from \"react-dom\";\nimport './FilterFlap.scss';\nimport '../../style/style.scss';\nimport '../../components/SearchCriteriaContainer/SearchCriteriaContainer.scss'\nimport CollapsibleArrow from \"../CollapsibleArrow/CollapsibleArrow\";\nimport {useSelector} from \"react-redux\";\nimport {selectIsFetchingFilters} from \"../../filtering/filterSlice\";\nimport {Loader} from \"../Loader/Loader\";\n\ninterface FilterFlapProps {\n handleFlapClicked: () => void;\n hasShadow: boolean;\n isFilterFlapOpen: boolean;\n}\n\nfunction FilterFlap(props: FilterFlapProps) {\n const isFetchingFilters = useSelector(selectIsFetchingFilters);\n const backgroundCssClass = props.hasShadow ? 'with-background' : '';\n\n return (\n \n );\n}\n\nexport default FilterFlap;\n","import React from 'react-dom';\nimport './SearchCriteriaContainer.scss'\nimport CriteriaCategoryContainer from \"../CriteriaCategoryContainer/CriteriaCategoryContainer\";\nimport CriteriaSearchBar from \"../CriteriaSearchBar/CriteriaSearchBar\";\nimport FilterFlap from \"../FilterFlap/FilterFlap\";\nimport PinnedCriteriaContainer from \"../PinnedCriteriaContainer/PinnedCriteriaContainer\";\nimport {useEffect, useState} from \"react\";\nimport {useSelector} from \"react-redux\";\nimport {selectPinnedFilters} from \"../../filtering/pinnedFilterSlice\";\nimport {selectFilterList} from \"../../filtering/filterSlice\";\nimport {\n getExpandableFilterCategoriesFrom,\n getFiltersWithName,\n getNonExpandableFilterCategoriesFrom\n} from \"../../filtering/filter\";\n\nfunction SearchCriteriaContainer() {\n const filterList = useSelector(selectFilterList);\n const pinnedFilters = useSelector(selectPinnedFilters);\n const [isFiltersOpened, setIsFiltersOpened] = useState(false);\n const [expandableCategories, setExpandableCategories] = useState(getExpandableFilterCategoriesFrom(filterList));\n const [nonExpandableCategories, setNonExpandableCategories] = useState(getNonExpandableFilterCategoriesFrom(filterList));\n const [isSearchingForText, setIsSearchingForText] = useState(false);\n const [searchText, setSearchText] = useState(\"\");\n const hasPinnedFilters = Object.keys(pinnedFilters).length > 0;\n const backgroundCssClass = hasPinnedFilters || isFiltersOpened ? 'with-background' : '';\n\n useEffect(() => {\n updateSearchFilters(searchText);\n }, [filterList])\n\n function updateSearchFilters(text: string) {\n setSearchText(text);\n const filteredFilterList = getFiltersWithName(filterList, text);\n setExpandableCategories(getExpandableFilterCategoriesFrom(filteredFilterList));\n setNonExpandableCategories(getNonExpandableFilterCategoriesFrom(filteredFilterList));\n }\n\n function toggleFilterFlap() {\n let isOpened = !isFiltersOpened;\n if (!isOpened) {\n setIsSearchingForText(false);\n }\n setIsFiltersOpened(isOpened);\n }\n\n function handleSearchForFilter(text: string) {\n if (text !== \"\") {\n setIsFiltersOpened(true);\n setIsSearchingForText(true);\n } else {\n setIsSearchingForText(false);\n setIsFiltersOpened(false);\n }\n\n updateSearchFilters(text);\n }\n\n return (\n
\n\n
\n \n {/**/}\n
\n \n\n \n
\n )\n}\n\nexport default SearchCriteriaContainer;\n","import './Loader.scss';\n\nexport function Loader(props: { isLoading: boolean, className?: string}) {\n return (\n \n )\n}\n","function _extends() { _extends = Object.assign || 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); }\n\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; }\n\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; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1.1875 25H17.8125C18.4672 25 19 24.4742 19 23.8281V7.42188C19 7.40859 18.9937 7.39766 18.9929 7.38516C18.9913 7.36719 18.9865 7.35156 18.9826 7.33437C18.9702 7.2801 18.9458 7.22917 18.9113 7.18516C18.9058 7.17812 18.9066 7.16953 18.901 7.1625L12.5677 0.13125C12.5653 0.128906 12.5622 0.128906 12.5598 0.126563C12.5115 0.0767269 12.4505 0.0405774 12.3833 0.021875C12.3682 0.0171875 12.3548 0.015625 12.3389 0.0132813C12.316 0.009375 12.2946 0 12.2708 0H1.1875C0.532792 0 0 0.525781 0 1.17188V23.8281C0 24.4742 0.532792 25 1.1875 25ZM12.6667 1.41797L17.723 7.03125H13.0625C12.8883 7.03125 12.6667 6.70312 12.6667 6.44531V1.41797ZM0.791667 1.17188C0.791667 1.06827 0.83337 0.968918 0.907604 0.895661C0.981837 0.822405 1.08252 0.78125 1.1875 0.78125H11.875V6.44531C11.875 7.07734 12.3935 7.8125 13.0625 7.8125H18.2083V23.8281C18.2083 23.9317 18.1666 24.0311 18.0924 24.1043C18.0182 24.1776 17.9175 24.2188 17.8125 24.2188H1.1875C0.965833 24.2188 0.791667 24.0469 0.791667 23.8281V1.17188Z\",\n fill: \"black\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.35421 10.9375H14.6459C14.7509 10.9375 14.8515 10.8963 14.9258 10.8231C15 10.7498 15.0417 10.6505 15.0417 10.5469C15.0417 10.4433 15 10.3439 14.9258 10.2707C14.8515 10.1974 14.7509 10.1562 14.6459 10.1562H4.35421C4.24923 10.1562 4.14854 10.1974 4.07431 10.2707C4.00008 10.3439 3.95837 10.4433 3.95837 10.5469C3.95837 10.6505 4.00008 10.7498 4.07431 10.8231C4.14854 10.8963 4.24923 10.9375 4.35421 10.9375Z\",\n fill: \"black\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.35421 14.0625H14.6459C14.7509 14.0625 14.8515 14.0213 14.9258 13.9481C15 13.8748 15.0417 13.7755 15.0417 13.6719C15.0417 13.5683 15 13.4689 14.9258 13.3957C14.8515 13.3224 14.7509 13.2812 14.6459 13.2812H4.35421C4.24923 13.2812 4.14854 13.3224 4.07431 13.3957C4.00008 13.4689 3.95837 13.5683 3.95837 13.6719C3.95837 13.7755 4.00008 13.8748 4.07431 13.9481C4.14854 14.0213 4.24923 14.0625 4.35421 14.0625Z\",\n fill: \"black\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.35421 7.8125H9.10421C9.20919 7.8125 9.30987 7.77135 9.3841 7.69809C9.45834 7.62483 9.50004 7.52548 9.50004 7.42188C9.50004 7.31827 9.45834 7.21892 9.3841 7.14566C9.30987 7.0724 9.20919 7.03125 9.10421 7.03125H4.35421C4.24923 7.03125 4.14854 7.0724 4.07431 7.14566C4.00008 7.21892 3.95837 7.31827 3.95837 7.42188C3.95837 7.52548 4.00008 7.62483 4.07431 7.69809C4.14854 7.77135 4.24923 7.8125 4.35421 7.8125Z\",\n fill: \"black\"\n});\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.35421 17.1875H14.6459C14.7509 17.1875 14.8515 17.1463 14.9258 17.0731C15 16.9998 15.0417 16.9005 15.0417 16.7969C15.0417 16.6933 15 16.5939 14.9258 16.5207C14.8515 16.4474 14.7509 16.4062 14.6459 16.4062H4.35421C4.24923 16.4062 4.14854 16.4474 4.07431 16.5207C4.00008 16.5939 3.95837 16.6933 3.95837 16.7969C3.95837 16.9005 4.00008 16.9998 4.07431 17.0731C4.14854 17.1463 4.24923 17.1875 4.35421 17.1875Z\",\n fill: \"black\"\n});\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.35421 20.3125H14.6459C14.7509 20.3125 14.8515 20.2713 14.9258 20.1981C15 20.1248 15.0417 20.0255 15.0417 19.9219C15.0417 19.8183 15 19.7189 14.9258 19.6457C14.8515 19.5724 14.7509 19.5312 14.6459 19.5312H4.35421C4.24923 19.5312 4.14854 19.5724 4.07431 19.6457C4.00008 19.7189 3.95837 19.8183 3.95837 19.9219C3.95837 20.0255 4.00008 20.1248 4.07431 20.1981C4.14854 20.2713 4.24923 20.3125 4.35421 20.3125Z\",\n fill: \"black\"\n});\n\nfunction SvgDocument(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 19,\n height: 25,\n viewBox: \"0 0 19 25\",\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, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDocument);\nexport default __webpack_public_path__ + \"static/media/document.010d5327.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\nimport './Button.scss';\nimport '../../style/style.scss';\nimport {\n EditColumnsSvg, EditIconSvg,\n ExportIconSvg,\n SaveIconSvg,\n} from \"../Svg/Svg\";\nimport {Loader} from \"../Loader/Loader\";\nimport classNames from 'classnames';\nimport {ReactComponent as DocumentSvg} from '../../img/document.svg'\n\ninterface ButtonInputs {\n text: string;\n onClick: (e:any | null) => void;\n isEnabled: boolean;\n isLoading?: boolean;\n type?: 'button' | 'submit' | 'reset' | undefined;\n className?: string;\n id?: string;\n}\n\ninterface IButtonProps {\n buttonProps: ButtonInputs;\n isPrimary: boolean;\n isLoading?: boolean;\n type?: 'button' | 'submit' | 'reset' | undefined;\n children?: React.ReactNode;\n id?: string;\n}\n\nfunction Button(props: IButtonProps) {\n\n function handleClick(e:any) {\n if (props.buttonProps.isEnabled) {\n props.buttonProps.onClick(e);\n }\n }\n\n const className = classNames(props.buttonProps.className, {\n 'disabled': !props.buttonProps.isEnabled,\n 'primary': props.isPrimary,\n 'secondary': !props.isPrimary,\n 'button': true,\n 'robot-regular-12': true,\n });\n\n return (\n \n {props.buttonProps.isLoading ?\n : props.buttonProps.text}\n {props.children}\n \n );\n}\n\nfunction PrimaryButton(props: ButtonInputs) {\n return \n )\n\n}\n\nfunction IconLeftButton(props: {\n outlined?: boolean;\n icon: React.ReactNode, button: React.ReactNode }) {\n const className= classNames('icon-left-button', {\n outlined: props.outlined\n })\n\n return (\n
\n {props.icon}\n {props.button}\n
\n );\n}\n\nfunction IconButton(props: { icon: React.ReactNode, inputs: ButtonInputs }) {\n const className = classNames(props.inputs.className, {\n 'icon-button': true\n });\n\n return (\n \n )\n}\n\nexport function CircleButton(props: ButtonInputs) {\n const className =classNames(props.className, {\n 'circle-button': true\n });\n\n return (\n \n 1 ? 'filter-move-arrow-down clickable' : 'Disabled'}\n onClick={handleOnMoveDown}\n >\n \n \n \n {props.filter.displayName}\n
\n \n {props.filter.filterCount} Matches\n\n\n\n \n \n
\n\n\n \n\n \n \n \n \n \n \n {\n isClosed ? null :\n
\n {props.children}\n
\n }\n \n )\n}\n","import React from \"react\";\n\ninterface CheckboxImgProps {\n className: string;\n onClick: () => void;\n}\n\nfunction CheckboxChecked(props: CheckboxImgProps) {\n return (\n \n \n \n \n \n \n );\n}\n\nfunction CheckboxUnchecked(props: CheckboxImgProps) {\n return (\n \n \n \n \n );\n}\n\nfunction CheckboxChildChecked(props: CheckboxImgProps) {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction CheckboxNotClickable(props: CheckboxImgProps) {\n return (\n \n \n \n \n \n \n )\n}\n\nexport enum CheckboxState {\n Checked,\n Unchecked,\n ChildChecked,\n NotClickable\n}\n\ninterface CheckboxProps {\n checkboxType: CheckboxState,\n className: string,\n onClick: () => void\n}\n\nfunction CheckboxFactory(props: { checkboxType: CheckboxState, checkboxImgProps: CheckboxImgProps }) {\n switch (props.checkboxType) {\n case CheckboxState.Checked:\n return \n case CheckboxState.Unchecked:\n return \n case CheckboxState.ChildChecked:\n return \n case CheckboxState.NotClickable:\n return \n }\n}\n\nfunction Checkbox(props: CheckboxProps) {\n const imgProps: CheckboxImgProps = {\n className: props.className,\n onClick: props.onClick\n }\n\n return \n}\n\nexport default Checkbox;\n","import React, {ChangeEvent, useState} from \"react\";\nimport {FilterStateContainer} from \"./FilterStateContainer\";\nimport './FilterStateNumericRange.scss';\nimport {\n getNumericFilterStateWithMax,\n getNumericFilterStateWithMin\n} from \"../../filtering/filterStateLogic\";\nimport {useDispatch} from \"react-redux\";\nimport {updateSelectedFilterState} from \"../../filtering/selectedFilterSlice\";\nimport {INumericFilter} from \"../../filtering/filterStateTypes\";\nimport {formatNumber} from \"../../utility/numberFormatter\";\nimport numeral from \"numeral\";\nimport {InfoTip} from \"../Utility/InfoTip\";\n\n\nfunction useNumericRageLogic(filter: INumericFilter) {\n const dispatch = useDispatch();\n const[min, max] = filter.range;\n const [minInput, setMinInput] = useState(\n isNaN(min)\n ? '0'\n : filter.range[0].toString()\n );\n const [maxInput, setMaxInput] = useState(\n max === null || isNaN(max)\n ? Infinity.toString()\n : max.toString()\n );\n\n function handleOnMinChange(min: string) {\n setMinInput(min);\n dispatch(\n updateSelectedFilterState(\n getNumericFilterStateWithMin(min, filter)))\n }\n\n function handleOnMaxChange(max: string) {\n setMaxInput(max);\n dispatch(\n updateSelectedFilterState(\n getNumericFilterStateWithMax(max, filter)))\n }\n\n function handleOnMinBlur(min: string) {\n if(numeral(min).value() === null) {\n setMinInput('0');\n }\n }\n\n function handleOnMaxBlur(max: string) {\n if(numeral(max).value() === null) {\n setMaxInput('Infinity');\n }\n }\n\n\n\n\n return {\n handleOnMinChange,\n handleOnMaxChange,\n handleOnMinBlur,\n handleOnMaxBlur,\n minInput,\n maxInput\n }\n}\n\ninterface NumericInputProps {\n value: string;\n onChange: (e: ChangeEvent) => void;\n formatType: string;\n onBlur: (e: React.FocusEvent) => void;\n}\n\nfunction NumericInput(props: NumericInputProps) {\n const [isFocused, setIsFocused] = useState(false);\n\n function handleOnBlur(e: React.FocusEvent){\n setIsFocused(false);\n props.onBlur(e);\n }\n\n return <>\n {\n isFocused ?\n props.onChange(e)}\n onBlur={(e) => handleOnBlur(e)}\n />\n : setIsFocused(true)}\n readOnly\n />\n }\n ;\n}\n\nfunction NumericRangeInputs(props: { filter: INumericFilter, formatLeft: string, formatRight: string }) {\n const {\n handleOnMinChange,\n handleOnMaxChange,\n handleOnMinBlur,\n handleOnMaxBlur,\n minInput,\n maxInput\n } = useNumericRageLogic(props.filter);\n\n return (\n <>\n \n
\n {props.formatLeft}\n
\n handleOnMinChange(e.target.value)}\n formatType={props.filter.displayType}\n onBlur={e => handleOnMinBlur(e.target.value)}\n />\n
\n {props.formatRight}\n
\n
\n \n
\n {props.formatLeft}\n
\n handleOnMaxChange(e.target.value)}\n formatType={props.filter.displayType}\n onBlur={e => handleOnMaxBlur(e.target.value)}\n />\n
\n {props.formatRight}\n
\n
\n \n );\n}\n\nfunction NumericRangeFactory(props: { filter: INumericFilter }) {\n\n switch (props.filter.displayType) {\n case 'integer':\n return \n case 'integer_m':\n return \n case 'percentage':\n return \n case 'decimal':\n return \n default:\n return null;\n }\n}\n\nexport function FilterStateNumericRange(props: { filter: INumericFilter }) {\n return (\n null}>\n
\n Min\n
\n Max\n \n
\n \n
\n
\n )\n}\n","import Checkbox, {CheckboxState} from \"../Checkbox/Checkbox\";\nimport React from \"react\";\n\nimport './FilterPicker.scss';\nimport {PickerLevel} from \"../../filterPicker/filterPickerUtility\";\n\ninterface FilterPickerChildProps {\n className: PickerLevel\n checkboxState: CheckboxState\n handleOnClick: () => void\n label: string\n}\n\nexport function FilterPickerChild(props: FilterPickerChildProps) {\n return (\n
\n
\n \n \n {props.label}\n \n
\n
\n );\n}\n","import {CheckboxState} from \"../components/Checkbox/Checkbox\";\nimport {IFilterSliceState, selectExchanges, selectStateHq, selectYearsOfData} from \"../filtering/filterSlice\";\nimport {IFilterData} from \"../filtering/filterPageData\";\nimport {IPickerFilter, RegularFilterPickers} from \"../filtering/filterStateTypes\";\nimport * as _ from 'lodash';\n\nexport type PickerLevel = \"picker-level-1\" | \"picker-level-2\" | \"picker-level-3\";\n\nexport interface ISelectableState {\n isSelected: boolean,\n isChildSelected: boolean\n}\n\nexport interface FilterPickerRegularState extends ISelectableState {\n name: string;\n value: string;\n handleOnClick: () => void;\n}\n\nexport function getCheckboxState(state: ISelectableState): CheckboxState {\n if (state.isChildSelected) {\n return CheckboxState.ChildChecked;\n }\n\n return state.isSelected\n ? CheckboxState.Checked\n : CheckboxState.Unchecked;\n}\n\nexport function includesString(aString: string, value: string) {\n if (aString === \"\") {\n return true;\n }\n\n return value\n .toLowerCase()\n .includes(aString.toLowerCase());\n}\n\nexport function isAnyValueSelected(filter: IPickerFilter, values: string[]) {\n return _.intersection(filter.value, values).length > 0;\n}\n\nexport function isAllValuesSelected(filter: IPickerFilter, values: string[]) {\n const result = _.intersectionWith(values, filter.value, _.isEqual);\n return result.length === values.length;\n}\n\nexport function isValueSelected(filter: IPickerFilter, value: string) {\n return _.includes(filter.value, value);\n}\n\nexport function isChildValueSelected(filter: IPickerFilter) {\n return filter.value.length > 0;\n}\n\nexport function getPickerSelector(pickerType: RegularFilterPickers): (state: IFilterSliceState) => IFilterData[] {\n switch (pickerType) {\n case \"exchanges\":\n return selectExchanges\n case \"state_hq\":\n return selectStateHq\n case \"years_of_data\":\n return selectYearsOfData\n }\n}\n","import React from \"react\";\nimport {FilterPickerIndustryProps} from \"../../filterPicker/filterStatePickerTypes\";\nimport {FilterPickerChild} from \"../FilterPicker/FilterPickerChild\";\nimport {getCheckboxState} from \"../../filterPicker/filterPickerUtility\";\n\nexport function FilterPickerIndustry(props: FilterPickerIndustryProps) {\n const checkboxState = getCheckboxState(props.industry);\n\n function handleOnClick() {\n props.onIndustryPicked(props.industry);\n }\n\n return (\n \n )\n}\n","import React from \"react\";\n\nexport function BxsDownArrow() {\n return (\n \n \n \n );\n}\n\nexport function BxsRightArrow() {\n return (\n \n \n \n );\n}\n\n","import React, {ReactNode, useEffect, useState} from \"react\";\nimport {BxsDownArrow, BxsRightArrow} from \"./BxsArrow\";\nimport Checkbox, {CheckboxState} from \"../Checkbox/Checkbox\";\nimport {ME_LABEL, HQ_LABEL, YF_LABEL} from \"../../utility/constants\";\nimport './FilterPicker.scss';\nimport {PickerLevel} from \"../../filterPicker/filterPickerUtility\";\n\ninterface FilterPickerParentProps {\n className: PickerLevel\n onCheckBoxClicked: () => void\n searchText: string\n checkboxState: CheckboxState\n label: string\n children: ReactNode\n}\n\nexport function FilterPickerParent(props: FilterPickerParentProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const expand_on_init = [ // these filters are expanded initially\n ME_LABEL,\n YF_LABEL,\n HQ_LABEL\n ]\n useEffect(() => {\n if (props.searchText !== \"\" || expand_on_init.includes(props.label) ) {\n setIsExpanded(true);\n } else {\n setIsExpanded(false);\n }\n }, [props.searchText])\n\n return (\n <>\n
\n
\n
setIsExpanded(!isExpanded)} className={\"picker-arrow clickable\"}>\n {\n isExpanded\n ? \n : \n }\n
\n \n {props.label}\n
\n
\n {\n isExpanded\n ? props.children\n : null\n }\n \n )\n}\n","import React from \"react\";\nimport {FilterPickerIndustry} from \"./FilterPickerIndustry\";\nimport {industrySearchFilter} from \"../../filterPicker/filterStatePickerLogic\";\nimport {FilterPickerIndustryGroupProps} from \"../../filterPicker/filterStatePickerTypes\";\nimport {FilterPickerParent} from \"../FilterPicker/FilterPickerParent\";\nimport {getCheckboxState} from \"../../filterPicker/filterPickerUtility\";\n\nexport function FilterPickerIndustryGroup(props: FilterPickerIndustryGroupProps) {\n const checkboxState = getCheckboxState(props.industryGroup)\n\n function handleOnIndustryGroupPicked() {\n props.onIndustryGroupPicked(props.industryGroup);\n }\n\n function getFilterPickerIndustries() {\n return props.industryGroup.industries\n .filter(industrySearchFilter(props))\n .map((industry, index) =>\n \n );\n }\n\n return (\n \n );\n}\n","import {IIndustryGroupState, IIndustryState} from \"../filtering/sicCodeState\";\nimport {FilterPickerIndustryGroupProps, FilterPickerSectorProps} from \"./filterStatePickerTypes\";\nimport * as _ from \"lodash\";\nimport {includesString} from \"./filterPickerUtility\";\n\nexport function industrySearchFilter(props: FilterPickerIndustryGroupProps) {\n return (i: IIndustryState) =>\n includesString(props.searchText, i.industry_name) ||\n includesString(props.searchText, i.sic_code);\n}\n\nexport function industryGroupSearchFilter(props: FilterPickerSectorProps) {\n return (i: IIndustryGroupState) =>\n includesString(props.searchText, i.industry_group_name) ||\n _.some(i.industries, i => includesString(props.searchText, i.industry_name));\n}\n","import React from \"react\";\nimport {FilterPickerIndustryGroup} from \"./FilterPickerIndustryGroup\";\nimport {industryGroupSearchFilter} from \"../../filterPicker/filterStatePickerLogic\";\nimport {FilterPickerSectorProps} from \"../../filterPicker/filterStatePickerTypes\";\nimport {FilterPickerParent} from \"../FilterPicker/FilterPickerParent\";\nimport {getCheckboxState} from \"../../filterPicker/filterPickerUtility\";\n\nexport function FilterPickerSector(props: FilterPickerSectorProps) {\n const checkboxState = getCheckboxState(props.sector);\n\n function handleOnSectorPicked() {\n props.onSectorPicked(props.sector);\n }\n\n function getPickerIndustryGroups() {\n return props.sector.industry_groups\n .filter(industryGroupSearchFilter(props))\n .map(industryGroup =>\n \n );\n }\n\n return (\n \n );\n}\n","import searchBarIcon from \"../../img/search-bar-icon.svg\";\nimport React from \"react\";\nimport './FilterSearchBar.scss'\n\ninterface IFilterSearchBarProps {\n handleSearch: (text: string) => void;\n searchText?: string;\n placeholder?: string;\n}\n\nfunction FilterSearchBar(props: IFilterSearchBarProps) {\n return (\n
\n \n props.handleSearch(e.target.value)}\n />\n
\n );\n}\n\nexport default FilterSearchBar;\n","import './FilterPicker.scss';\nimport '../../style/style.scss';\n\nimport {FilterStateContainer} from \"../FilterContainer/FilterStateContainer\";\nimport FilterSearchBar from \"../FilterContainer/FilterSearchBar\";\nimport React from \"react\";\nimport {FilterPickerProps} from \"./FilterPicker\";\n\n\ninterface FilterPickerWithSearchProps extends FilterPickerProps {\n handleSearch: (searchText: string) => void;\n}\n\nexport function FilterPickerWithSearch(props: FilterPickerWithSearchProps) {\n\n return (\n \n
\n \n
\n {props.children}\n
\n
\n
\n );\n}\n\n\n","import React, {useEffect, useState} from \"react\";\nimport {FilterPickerSector} from \"./FilterPickerSector\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {selectSicCodes} from \"../../filtering/filterSlice\";\nimport {\n clearSectors,\n industryClicked,\n industryGroupSectorClicked,\n sectorFilterClicked, selectCleared,\n selectSicCodeState,\n setSectors\n} from \"../../filtering/sectorSlice\";\nimport {getSicCodePickerState} from \"../../filtering/filterStateLogic\";\nimport {IIndustryGroupState, IIndustryState, ISectorState} from \"../../filtering/sicCodeState\";\nimport {updateSelectedFilterState} from \"../../filtering/selectedFilterSlice\";\nimport {FilterPickerWithSearch} from \"../FilterPicker/FilterPickerWithSearch\";\nimport {ISicCodePicker} from \"../../filtering/filterStateTypes\";\n\nexport function FilterPickerSicCodes(props: { filter: ISicCodePicker }) {\n const [searchText, setSearchText] = useState(\"\");\n const dispatch = useDispatch();\n const codes = useSelector(selectSicCodes);\n const sectors = useSelector(selectSicCodeState);\n const sectorsCleared = useSelector(selectCleared);\n\n useEffect(() => {\n const data = {\n filterState: props.filter,\n sicCodesData: codes\n };\n dispatch(setSectors(data));\n }, [codes, sectorsCleared])\n\n useEffect(() => {\n dispatch(\n updateSelectedFilterState(\n getSicCodePickerState(props.filter, sectors)))\n }, [sectors]);\n\n function handleOnDeleteFilter() {\n dispatch(clearSectors())\n }\n\n function handleOnSectorPicked(sector: ISectorState) {\n dispatch(sectorFilterClicked(sector));\n }\n\n function handleOnIndustryGroupPicked(industryGroup: IIndustryGroupState) {\n dispatch(industryGroupSectorClicked(industryGroup));\n }\n\n function handleOnIndustryPicked(industry: IIndustryState) {\n dispatch(industryClicked(industry));\n }\n\n function getSectors() {\n return sectors.map(sector =>\n \n );\n }\n\n return (\n \n {getSectors()}\n \n )\n}\n","import './SaveWithNameButton.scss';\nimport {SaveButton, SecondaryButton} from \"../Button/Button\";\nimport React, {useState} from \"react\";\nimport classNames from \"classnames\";\n\ninterface ContainerSaveButtonProps {\n text: string;\n onNameChange: (value: string) => void;\n onSave: () => void;\n isEnabled: boolean;\n placeHolder: string;\n isLoading: boolean;\n isEditing: boolean;\n}\n\nexport function SaveWithNameButton(props: ContainerSaveButtonProps) {\n const [isSaveButtonClicked, setSaveButtonClicked] = useState(false);\n\n function getInputContainerCss(isSaveButtonClicked: boolean): string {\n return isSaveButtonClicked\n ? 'container-save-clicked'\n : 'container-save-not-clicked';\n }\n\n function handleSaveButtonClicked() {\n if (!props.isEnabled) {\n return;\n }\n\n setSaveButtonClicked(true)\n }\n\n const saveButtonClassName = classNames({\n clickable: props.isEnabled && !isSaveButtonClicked\n })\n\n\n return
\n {\n
\n \n {\n isSaveButtonClicked || props.text !== \"\"\n ? <>\n props.onNameChange(e.target.value)}\n />\n \n \n : null\n }\n
\n }\n
;\n}\n","import './Container.scss';\nimport React from \"react\";\nimport classNames from \"classnames\";\n\nexport function Container(props: { children?: React.ReactNode, className?: string }) {\n const className = classNames(props.className, {\n 'va-container': true\n });\n\n return (\n
\n {props.children}\n
\n )\n}\n","import './FilterContainer.scss';\nimport './FilterStateContainer.scss';\nimport './FilterStateNumericRange.scss';\nimport '../../style/style.scss';\nimport React, {ReactNode} from \"react\";\nimport '../SaveWithNameButton/SaveWithNameButton.scss';\nimport {PrimaryButton, SecondaryButton} from \"../Button/Button\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {Action, ThunkDispatch} from \"@reduxjs/toolkit\";\nimport {\n clearSelectedFilterState,\n saveSelectedFilter,\n selectErrors,\n selectFilterName,\n selectIsSaving, selectSelectedFilterId,\n updateSelectedFilterName\n} from \"../../filtering/selectedFilterSlice\";\nimport {fetchUserFilters} from \"../../filtering/savedFilterSlice\";\nimport {RootState} from \"../../store\";\nimport {\n clearErrorMessage,\n getSelectedFilterResults,\n selectFilterTableError,\n selectFilterTableLoading\n} from \"../../filtering/filterTableSlice\";\nimport {SaveWithNameButton} from \"../SaveWithNameButton/SaveWithNameButton\";\nimport {Container} from \"../Container/Container\";\nimport { clearSectors } from '../../filtering/sectorSlice';\n\ninterface FilterContainerProps {\n children?: ReactNode\n isActive: boolean\n}\n\n\nexport function FilterContainer(props: FilterContainerProps) {\n const errors = useSelector(selectErrors)\n const isSaving = useSelector(selectIsSaving)\n const filterName = useSelector(selectFilterName)\n const isGeneratingData = useSelector(selectFilterTableLoading);\n const selectedFilterId = useSelector(selectSelectedFilterId);\n const dispatch = useDispatch>();\n const filterTableError = useSelector(selectFilterTableError);\n\n\n function handleOnNameChange(name: string) {\n if (!props.isActive) {\n return;\n }\n\n dispatch(updateSelectedFilterName(name));\n }\n\n function handleOnSaveFilter() {\n if (!props.isActive) {\n return;\n }\n\n if (filterName === \"\") {\n return;\n }\n\n dispatch(saveSelectedFilter(filterName))\n .then(i => dispatch(fetchUserFilters()))\n }\n\n function handleOnClearFilter() {\n if (!props.isActive) {\n return;\n }\n\n dispatch(clearSectors());\n dispatch(clearSelectedFilterState());\n dispatch(clearErrorMessage());\n }\n\n function handleOnGenerateData() {\n if (!props.isActive ||\n isGeneratingData) {\n return;\n }\n\n dispatch(getSelectedFilterResults())\n }\n\n function getErrors() {\n if(errors.length) {\n return errors.map(error =>
  • {error}
  • )\n }\n\n if(filterTableError.length) {\n return
  • {filterTableError}
  • \n }\n\n return null;\n }\n\n return (\n \n
    \n
    \n {isSaving ? 'Saving Your Filter...' : ''}\n
    \n
    \n
      \n {getErrors()}\n
    \n
    \n 0}\n />\n
    \n
    \n {props.children}\n
    \n
    \n
    \n \n \n
    \n
    \n
    \n );\n}\n\n\n\n","import './FilterPicker.scss';\nimport '../../style/style.scss';\n\nimport React, {ReactNode} from \"react\";\nimport {FilterStateContainer} from \"../FilterContainer/FilterStateContainer\";\nimport {FilterState} from \"../../filtering/filterStateTypes\";\n\nexport interface FilterPickerProps {\n filter: FilterState;\n onDeleteFilter: () => void;\n children: ReactNode;\n}\n\nexport function FilterPicker(props: FilterPickerProps) {\n return (\n \n
    \n
    \n {props.children}\n
    \n
    \n
    \n );\n}\n","import React from 'react'\nimport {FilterPicker} from '../FilterPicker/FilterPicker';\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {IFilterSliceState} from \"../../filtering/filterSlice\";\nimport {\n isAllValuesSelected,\n isAnyValueSelected,\n ISelectableState,\n isValueSelected\n} from \"../../filterPicker/filterPickerUtility\";\nimport {FilterPickerChild} from \"../FilterPicker/FilterPickerChild\";\nimport {updateSelectedFilterState} from \"../../filtering/selectedFilterSlice\";\nimport {IFilterData, IFilterValues} from \"../../filtering/filterPageData\";\nimport {IPickerFilter} from \"../../filtering/filterStateTypes\";\nimport {addPickerValue, addPickerValues, removePickerValue, removePickerValues} from \"../../filtering/filterStateLogic\";\nimport {FilterPickerParent} from \"../FilterPicker/FilterPickerParent\";\nimport {CheckboxState} from \"../Checkbox/Checkbox\";\nimport {YF_LABEL} from \"../../utility/constants\";\n\ninterface FilterPickerRegularProps {\n filter: IPickerFilter;\n stateSelector: (state: IFilterSliceState) => IFilterData[];\n}\n\ninterface ParentPickerState extends ISelectableState {\n name: string;\n filter_values: string[];\n}\n\ninterface ChildPickerState extends ISelectableState {\n name: string;\n value: string;\n}\n\ninterface FilterPickerRegularState2 {\n parent: ParentPickerState;\n children: ChildPickerState[];\n}\n\nfunction getParent(\n filter: IPickerFilter,\n parent: IFilterData\n) {\n const values = parent.filter_values.map(i => i.value);\n const isAnySelected = isAnyValueSelected(filter, values);\n const isAllSelected = isAllValuesSelected(filter, values);\n\n return {\n isChildSelected: isAnySelected,\n isSelected: isAllSelected,\n name: parent.filter_category,\n filter_values: values\n };\n}\n\nfunction getChild(\n filter: IPickerFilter,\n child: IFilterValues\n) {\n return {\n isChildSelected: false,\n isSelected: isValueSelected(filter, child.value),\n name: child.name,\n value: child.value\n };\n}\n\nfunction getPickerCheckboxState(state: ISelectableState, name:string): CheckboxState {\n const unclickable_parents = [YF_LABEL]\n\n if (unclickable_parents.includes(name)) {\n return CheckboxState.NotClickable;\n }\n if (state.isSelected) {\n return CheckboxState.Checked;\n }\n\n return state.isChildSelected\n ? CheckboxState.ChildChecked\n : CheckboxState.Unchecked;\n}\n\nexport function FilterPickerRegular(props: FilterPickerRegularProps) {\n const data = useSelector(props.stateSelector)\n const dispatch = useDispatch()\n const pickerState = getPickerState(data);\n\n function getPickerState(data: IFilterData[]): FilterPickerRegularState2[] {\n let result: FilterPickerRegularState2[] = [];\n\n for (let parent of data) {\n let state = {} as FilterPickerRegularState2;\n state.parent = getParent(props.filter, parent);\n state.children = [];\n for (let child of parent.filter_values) {\n state.children.push(getChild(props.filter, child))\n }\n result.push(state);\n }\n\n return result;\n }\n\n function handleOnParentCheckBoxClicked(parent: ParentPickerState) {\n const filterState = parent.isSelected\n ? removePickerValues(props.filter, parent.filter_values)\n : addPickerValues(props.filter, parent.filter_values);\n dispatch(updateSelectedFilterState(filterState))\n }\n\n function handleOnChildCheckBoxClicked(child: ChildPickerState, pickerState: FilterPickerRegularState2) {\n const exclusive_pickers = ['Years of Financial Data']\n // logic for filters that can only select one child at a time\n if (exclusive_pickers.includes(pickerState.parent.name)) {\n let new_state = {...props.filter}\n\n if (child.isSelected) {\n new_state.value = []\n } else {\n new_state.value = [child.value]\n }\n\n dispatch(updateSelectedFilterState(new_state))\n }\n else {\n const filterState = child.isSelected\n ? removePickerValue(props.filter, child.value)\n : addPickerValue(props.filter, child.value);\n dispatch(updateSelectedFilterState(filterState));\n }\n }\n\n return (\n null}\n >\n {\n pickerState\n .map(pickerState =>\n handleOnParentCheckBoxClicked(pickerState.parent)}\n searchText={''}\n checkboxState={getPickerCheckboxState(pickerState.parent, pickerState.parent.name)}\n label={pickerState.parent.name}\n >\n {\n pickerState.children.map(child =>\n handleOnChildCheckBoxClicked(child, pickerState)}\n label={child.name}\n />\n )\n }\n \n )\n }\n \n )\n}\n","import './FilterKeywordSearch.scss'\nimport React from 'react-dom';\nimport {FilterStateContainer} from \"./FilterStateContainer\";\nimport {IKeywordSearchFilter} from \"../../filtering/filterStateTypes\";\nimport {useDispatch} from \"react-redux\";\nimport {\n updateSelectedFilterState\n} from '../../filtering/selectedFilterSlice';\nimport {getKeywordSearchState} from \"../../filtering/filterStateLogic\";\nimport FilterSearchBar from \"./FilterSearchBar\";\n\nexport interface FilterKeywordSearchProps {\n filter: IKeywordSearchFilter;\n}\n\nfunction FilterKeywordSearch(props: FilterKeywordSearchProps) {\n const dispatch = useDispatch();\n function handleOnChange(value: string) {\n dispatch(\n updateSelectedFilterState(\n getKeywordSearchState(props, value)));\n }\n\n return (\n null}>\n
    \n \n
    \n
    \n )\n}\n\nexport default FilterKeywordSearch;\n","import React, {ReactNode} from \"react\";\nimport {useSelector} from \"react-redux\";\nimport {\n selectSelectedFilterState\n} from \"../../filtering/selectedFilterSlice\";\nimport {FilterStateNumericRange} from \"./FilterStateNumericRange\";\nimport {FilterPickerSicCodes} from \"../FilterPickerSicCodes/FilterPickerSicCodes\";\nimport {FilterContainer} from \"./FilterContainer\";\nimport {getUid} from \"../../filtering/filterStateLogic\";\nimport {FilterPickerRegular} from \"../FilterPickerRegular/FilterPickerRegular\";\nimport {getPickerSelector} from \"../../filterPicker/filterPickerUtility\";\nimport {FilterState} from \"../../filtering/filterStateTypes\";\nimport FilterKeywordSearch from \"./FilterKeywordSearch\";\n\nfunction FilterContainerInactive() {\n return (\n \n
    \n Select Criteria From Filter List\n
    \n
    \n )\n}\n\nfunction FilterContainerActive(props: { children: ReactNode }) {\n return (\n \n {props.children}\n \n )\n}\n\nfunction FilterStateComponentFactory(filter: FilterState) {\n const key = getUid(filter);\n switch (filter.type) {\n case \"numeric\":\n return \n case \"sicCodePicker\":\n return \n case \"picker\":\n return \n case \"keywordsearch\":\n return \n }\n}\n\nexport function SelectedFiltersContainer() {\n const filters: FilterState[] = useSelector(selectSelectedFilterState);\n const hasFilters = filters.length > 0;\n\n return hasFilters ?\n \n {\n filters\n .map(FilterStateComponentFactory)\n }\n \n : \n}\n\nexport default SelectedFiltersContainer;\n","import './Table.scss';\n\nimport React from 'react';\n\nexport function TableSortDownSvg(props: { onSort?: () => void, className?: string }) {\n return (\n \n \n \n )\n}\n\nexport function TableSortUpSvg(props: { onSort?: () => void }) {\n return (\n \n \n \n )\n}\n\n\n","import './FilterTable.scss'\nimport React, {ReactNode, useState} from 'react';\nimport {formatNumber} from \"../../utility/numberFormatter\";\nimport {TableSortDownSvg, TableSortUpSvg} from '../Table/Table';\nimport {EditColumnsButton, CircleButton} from \"../Button/Button\";\nimport {Tooltip} from \"reactstrap\";\n\nimport {FilterResultColumn, FilterResultRow, FilterResults, IHighlightable, ITableHeader} from \"../../types\";\nimport classNames from \"classnames\";\n\ninterface TableValueProps {\n value: string;\n}\n\ninterface TableSortableHeaderProps extends IHighlightable{\n value: string;\n onSort?: () => void;\n ascending: boolean;\n}\n\ninterface TableHeaderProps extends IHighlightable{\n children: ReactNode;\n value: string;\n}\n\nfunction TableSortableHeader(props: TableSortableHeaderProps) {\n return (\n \n {\n props.ascending\n ? \n : \n }\n \n )\n}\n\nfunction TableHeader(props: TableHeaderProps) {\n const thStyle = classNames({\n 'highlight': props.highlight\n })\n\n return (\n \n {props.value}\n {props.children}\n \n );\n}\n\nfunction TableCell(props: TableValueProps) {\n return (\n {props.value}\n );\n}\n\nfunction FilterTableToolbar(props: { title: string, children?: React.ReactNode | React.ReactNodeArray}) {\n return (\n
    \n
    \n {props.title}\n
    \n {props.children}\n
    \n );\n}\n\ninterface FilterTableContainerParams {\n onAddToCompsGroup: (row: FilterResultRow) => () => void;\n headers: ITableHeader[];\n rows: FilterResults;\n subHeaders?: ITableHeader[][]\n}\n\ninterface EditableFilterTableContainerParams extends FilterTableContainerParams {\n onEditColumns: () => void;\n}\n\nexport function FilterTableContainer(props: FilterTableContainerParams) {\n const hasRows = props.rows.length > 0;\n\n\n return hasRows ? (\n
    \n \n \n
    \n )\n : null;\n}\n\nexport function EditableFilterTableContainer(props: EditableFilterTableContainerParams) {\n const hasRows = props.rows.length > 0;\n\n\n return hasRows ? (\n
    \n \n \n \n \n
    \n )\n : null;\n}\n\nconst sortByColumn = (column: string) =>\n (ascending: boolean) =>\n (row1: FilterResultColumn[], row2: FilterResultColumn[]) => {\n const row1Value = row1.filter(i => i.column === column)[0]?.value;\n const row2Value = row2.filter(i => i.column === column)[0]?.value;\n\n if(row1Value === row2Value) {\n return 0;\n }\n\n const isBigger = row1Value > row2Value;\n\n if (ascending) {\n return isBigger ? 1 : -1;\n }\n return isBigger ? -1 : 1;\n }\n\nfunction AddToCompsButton(props: { onClick: () => void, index: number }) {\n const [tooltipOpen, setTooltipOpen] = useState(false);\n const toggle = () => setTooltipOpen(!tooltipOpen);\n\n return <>\n \n \n Add to comps group\n \n ;\n}\n\ninterface FilterTableParams {\n subHeaders?: ITableHeader[][];\n headers: ITableHeader[];\n rows: FilterResults;\n onAddToCompsGroup: (row: FilterResultRow) => () => void;\n}\n\nfunction FilterTable(props: FilterTableParams) {\n const [sortOptions, setSortOptions] = useState<{ id: string, ascending: boolean }>({\n id: '',\n ascending: true\n });\n\n\n function handleOnSort(header: string) {\n setSortOptions((prevState) => {\n if (prevState.id === header) {\n return {\n id: header,\n ascending: !prevState.ascending\n }\n }\n return {\n id: header,\n ascending: true\n }\n });\n }\n\n return (\n \n \n \n \n {\n props.headers\n .filter(header => header.id !== 'uid')\n .map(header => handleOnSort(header.id)}\n ascending={header.id === sortOptions.id ? sortOptions.ascending : true}\n highlight={header.highlight}\n />)\n }\n \n {\n props.subHeaders\n ?(\n \n \n {\n props.subHeaders ?\n\n props.subHeaders\n .map(headers =>\n headers\n .filter(header => header.id !== 'uid')\n .map(header =>\n \n <>\n ))\n : null\n }\n \n )\n : null\n }\n\n \n \n {\n props.rows\n .sort(sortByColumn(sortOptions.id)(sortOptions.ascending))\n .map((row, index) =>\n \n \n {\n row\n .filter(column => column.name !== 'uid')\n .map(column =>\n \n )\n }\n \n )\n }\n \n
    \n
    \n \n
    \n
    \n )\n}\n\nexport default EditableFilterTableContainer;\n\n\n","import {createAsyncThunk, createSlice} from \"@reduxjs/toolkit\";\nimport {getTickers} from \"../api/requests\";\nimport {RootState} from \"../store\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\nimport {ITicker} from \"../types\";\n\ninterface ITickerPickerSlice {\n tickers: ITicker[],\n isLoading: boolean\n}\n\ninterface ITickerPickerSliceState {\n compsTickerPickerSlice: ITickerPickerSlice;\n}\n\nexport const fetchTickers = createAsyncThunk(\n 'compsTickerPickerSlice/fetchTickers',\n async (thunkAPI) => {\n return await getTickers();\n },\n {\n condition: ({bypassCache}, {getState}) => {\n const {isLoading, tickers} = getState().compsTickerPickerSlice;\n if(isLoading) {\n return false;\n }\n\n if(bypassCache){\n return true;\n }\n\n return tickers.length <= 0;\n }\n }\n);\n\nconst initialState = {\n tickers: [] as ITicker[],\n isLoading: false\n};\n\nexport const compsTickerPickerSlice = createSlice({\n name: 'compsTickerPickerSlice',\n initialState,\n reducers: {\n },\n extraReducers: builder => {\n builder.addCase(fetchTickers.fulfilled, (state, action) => {\n state.tickers = action.payload;\n state.isLoading = false;\n });\n\n builder.addCase(fetchTickers.rejected, state => {\n state.tickers = [] as ITicker[];\n state.isLoading = false;\n });\n\n builder.addCase(fetchTickers.pending, state => {\n state.isLoading = true;\n });\n\n resetStateOnSignOut(builder, initialState);\n },\n});\n\n\nexport default compsTickerPickerSlice.reducer;\n\nexport const selectTickers = (state: ITickerPickerSliceState) =>\n state.compsTickerPickerSlice.tickers;\n\nexport const selectIsFetchingTickers = (state: ITickerPickerSliceState) =>\n state.compsTickerPickerSlice.isLoading;\n","import {createAsyncThunk, createSlice, PayloadAction} from \"@reduxjs/toolkit\";\nimport {ICompSetRequest} from \"../api/requestsTypes\";\nimport {getUtcNowIsoString, getUtcYearDayMonth} from \"../utility/dates\";\nimport {\n ISaveUserCompSetResult,\n IUserCompSet,\n saveCompSet\n} from \"../api/requests\";\nimport {RootState} from \"../store\";\nimport _ from 'lodash';\nimport {fetchTickers} from \"./compsTickerPickerSlice\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\n\nexport interface ICompany {\n ticker: string;\n uid: number;\n}\n\nexport type CompanyGroup = { [ticker: string]: ICompany };\n\ninterface ISelectedCompsGroupSlice {\n companyGroup: CompanyGroup;\n valuationDate: string;\n id: number;\n companyGroupName: string;\n isLoadingUserCompSet: boolean;\n}\n\ninterface ISelectedCompsGroupSliceState {\n selectedCompsGroupSlice: ISelectedCompsGroupSlice\n}\n\nfunction getCompSetFromCompanyGroup(companyGroup: CompanyGroup): number[] {\n return Object.keys(companyGroup).map(key => companyGroup[key].uid);\n}\n\nexport const saveUserCompSet = createAsyncThunk(\n 'savedUserCompSetSlice/saveUserCompSet',\n async (arg, {getState, rejectWithValue}) => {\n const {id, companyGroup, valuationDate, companyGroupName} = getState().selectedCompsGroupSlice;\n const compset = getCompSetFromCompanyGroup(companyGroup)\n\n if (!compset.length) {\n rejectWithValue('Your compset is empty.');\n }\n\n return await saveCompSet({\n id: id,\n compset: compset,\n valuation_date: valuationDate,\n update_date: getUtcNowIsoString(),\n compset_name: companyGroupName\n });\n }\n);\n\ninterface ILoadCompSetResult {\n id: number;\n companyGroup: CompanyGroup;\n valuation_date: string;\n compset_name: string;\n}\n\nexport const loadUserCompSet = createAsyncThunk(\n 'savedUserCompSetSlice/loadUserCompSet',\n async (arg, thunkAPI) => {\n await thunkAPI.dispatch(fetchTickers({bypassCache: false}));\n const tickers = thunkAPI.getState().compsTickerPickerSlice.tickers;\n if (!tickers) {\n thunkAPI.rejectWithValue('No tickers');\n }\n const tickerDict = _.keyBy(tickers, i => i.uid);\n return {\n id: arg.id,\n compset_name: arg.compset_name,\n companyGroup: arg.compset\n .reduce((result, i) => {\n if (tickerDict[i]) {\n const item = tickerDict[i];\n return {\n ...result,\n [item.ticker]: item\n }\n }\n\n return result;\n }, {}),\n valuation_date: arg.valuation_date\n }\n }\n);\n\nconst initialState: ISelectedCompsGroupSlice = {\n companyGroup: {} as CompanyGroup,\n valuationDate: getUtcNowIsoString(),\n companyGroupName: '',\n id: 0,\n isLoadingUserCompSet: false,\n};\n\n\nexport const selectedCompsGroupSlice = createSlice({\n name: 'selectedCompsGroupSlice',\n initialState,\n reducers: {\n addCompsToGroup: (state, action: PayloadAction) => {\n const company = action.payload;\n if (state.companyGroup[company.ticker] === undefined) {\n state.companyGroup[company.ticker] = company;\n }\n },\n removeCompsFromGroup: (state, action: PayloadAction) => {\n delete state.companyGroup[action.payload.ticker];\n },\n setValuationDate: (state, action: PayloadAction) => {\n state.valuationDate = action.payload;\n },\n setCompanyGroupName: (state, action: PayloadAction) => {\n state.companyGroupName = action.payload;\n },\n clearCompsGroup: (state) => {\n const initData= initialState;\n state.valuationDate = initData.valuationDate;\n state.companyGroup = initData.companyGroup;\n state.isLoadingUserCompSet = initData.isLoadingUserCompSet;\n state.companyGroupName = initData.companyGroupName;\n state.id = initData.id;\n }\n },\n extraReducers: builder => {\n builder.addCase(saveUserCompSet.pending, (state, action) => {\n state.isLoadingUserCompSet = true;\n });\n\n builder.addCase(saveUserCompSet.fulfilled, (state, action) => {\n state.isLoadingUserCompSet = false;\n\n if (action.payload.status === 'error') {\n return;\n }\n\n state.id = action.payload.compsetId;\n });\n\n builder.addCase(saveUserCompSet.rejected, (state, action) => {\n state.isLoadingUserCompSet = false;\n });\n\n builder.addCase(loadUserCompSet.rejected, (state, action) => {\n const initData = initialState;\n state.valuationDate = initData.valuationDate;\n state.companyGroup = initData.companyGroup;\n state.isLoadingUserCompSet = initData.isLoadingUserCompSet;\n state.companyGroupName = initData.companyGroupName;\n state.id = initData.id;\n });\n\n builder.addCase(loadUserCompSet.pending, (state, action) => {\n state.isLoadingUserCompSet = true;\n });\n\n builder.addCase(loadUserCompSet.fulfilled, (state, action) => {\n const compSet = action.payload;\n state.companyGroupName = compSet.compset_name;\n state.companyGroup = compSet.companyGroup;\n state.valuationDate = compSet.valuation_date;\n state.id = compSet.id;\n state.isLoadingUserCompSet = false;\n });\n\n resetStateOnSignOut(builder, initialState);\n }\n});\n\nexport default selectedCompsGroupSlice.reducer;\n\nexport const {\n addCompsToGroup,\n removeCompsFromGroup,\n setValuationDate,\n setCompanyGroupName,\n clearCompsGroup\n} = selectedCompsGroupSlice.actions;\n\nexport const selectSelectedCompsGroup = (state: ISelectedCompsGroupSliceState): CompanyGroup =>\n state.selectedCompsGroupSlice.companyGroup;\n\nexport const selectCompsGroupName = (state: ISelectedCompsGroupSliceState): string =>\n state.selectedCompsGroupSlice.companyGroupName;\n\nexport const selectValuationDate = (state: ISelectedCompsGroupSliceState): string =>\n state.selectedCompsGroupSlice.valuationDate;\n\nexport const selectIsSavingUserCompSet = (state: ISelectedCompsGroupSliceState): boolean =>\n state.selectedCompsGroupSlice.isLoadingUserCompSet;\n\nexport const selectCompsGroupId = (state: ISelectedCompsGroupSliceState): number =>\n state.selectedCompsGroupSlice.id;\n\nexport const selectCompSet = (state: ISelectedCompsGroupSliceState): ICompSetRequest => {\n const {valuationDate, companyGroup} = state.selectedCompsGroupSlice;\n const compSet = Object\n .keys(companyGroup)\n .map(key => companyGroup[key].uid);\n\n return {\n compset: compSet,\n date: getUtcYearDayMonth(valuationDate)\n }\n}\n","import {createAsyncThunk, createSlice, PayloadAction} from \"@reduxjs/toolkit\";\nimport {ICompSetResponse, ICompSetRequest, IMultiples} from \"../api/requestsTypes\";\nimport {getCompSet} from \"../api/requests\";\nimport {RootState} from \"../store\";\nimport {CompanyGroup} from \"./compsGroupSlice\";\nimport _ from \"lodash\";\nimport {getDateFromIsoString} from \"../utility/dates\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\n\ninterface ICalculatedCell {\n id: number;\n measureOfPerformance: string;\n companyResults: string;\n selectedMultiples: number | '-';\n}\n\nexport type RowDictionary = {[key: number]: ICalculatedCell}\n\ninterface ICompsTableSlice {\n tableData: ICompSetResponse,\n companyNetDebt: string,\n rowsDictionary: RowDictionary,\n isFetchingCompset: boolean\n}\n\ninterface ICompsTableSliceState {\n compsTableSlice: ICompsTableSlice,\n}\nfunction format_compset_date(date:Date){\n let year = String(date.getFullYear())\n let month = String(date.getMonth() + 1).padStart(2, '0')\n let day = String(date.getDate()).padStart(2, '0')\n let date_str = `${year}-${month}-${day}`\n return date_str\n}\nfunction getCompSetRequest(companyGroup: CompanyGroup, valuationDate: Date) {\n\n const uids = Object.keys(companyGroup).map(i => companyGroup[i].uid);\n const date_str = format_compset_date(valuationDate)\n const request: ICompSetRequest = {\n compset: uids,\n date: date_str\n }\n return request;\n}\n\nexport const fetchCompSet = createAsyncThunk(\n 'compsTable/fetchCompSet',\n async ( _, {getState}) => {\n const {companyGroup, valuationDate } = getState().selectedCompsGroupSlice;\n const localValuationDate = getDateFromIsoString(valuationDate)\n const request = getCompSetRequest(companyGroup, localValuationDate);\n return await getCompSet(request);\n },\n {\n condition: (_, {getState}) => {\n const {companyGroup, valuationDate} = getState().selectedCompsGroupSlice;\n const localValuationDate = getDateFromIsoString(valuationDate)\n const request = getCompSetRequest(companyGroup, localValuationDate);\n if(!request.compset.length) {\n return false;\n }\n\n return true;\n }\n }\n);\n\nconst initialState: ICompsTableSlice = {\n tableData: {\n fh_comps: {columns: [], values: []},\n multiples: {type: \"\", multiples: [], values: []},\n ranks: {},\n descriptions: [],\n results: { message: '', data_found: 'none'}\n },\n companyNetDebt: '',\n rowsDictionary: {},\n isFetchingCompset: false\n}\n\nfunction initRowsDictionary(multiples: IMultiples, rowsDictionary: RowDictionary): _.Dictionary {\n const multiplesDictionary = multiples.values.reduce((obj, row) => {\n const key = Object.keys(row)[0];\n const data = row[key];\n return {\n ...obj,\n [key]: data\n }\n }, {});\n const rows: ICalculatedCell[] = multiples.multiples\n .map((i, index) => {\n const median = multiplesDictionary['Median'][index]\n const oldCompanyResult = rowsDictionary[index]?.companyResults;\n return {\n id: index,\n measureOfPerformance: `${i.name} ${i.heading}`,\n companyResults: oldCompanyResult ? oldCompanyResult : '',\n selectedMultiples: median\n }\n });\n return _.keyBy(rows, 'id');\n}\n\nexport const compsTableSlice = createSlice({\n name: 'compsTableSlice',\n initialState,\n reducers: {\n setSubjectCompanyNetDebt: (state, action) => {\n state.companyNetDebt = action.payload\n },\n updateRowsDictionary: (state, action:PayloadAction<{key: number, value: string}>) => {\n state.rowsDictionary[action.payload.key].companyResults = action.payload.value;\n },\n setRowsDictionary: (state, action: PayloadAction) => {\n state.rowsDictionary = action.payload;\n }\n },\n extraReducers: builder => {\n builder.addCase(fetchCompSet.fulfilled, (state, action) => {\n state.tableData = action.payload;\n state.rowsDictionary = initRowsDictionary(action.payload.multiples, state.rowsDictionary);\n state.isFetchingCompset = false;\n });\n\n builder.addCase(fetchCompSet.rejected, (state, action) => {\n state.isFetchingCompset = false;\n });\n\n builder.addCase(fetchCompSet.pending, (state, action) => {\n state.isFetchingCompset = true;\n });\n\n resetStateOnSignOut(builder, initialState);\n }\n});\n\nexport const {setSubjectCompanyNetDebt, updateRowsDictionary, setRowsDictionary} = compsTableSlice.actions;\nexport default compsTableSlice.reducer;\n\nexport const selectMultiples = (state: ICompsTableSliceState): IMultiples => {\n const multiples = state.compsTableSlice?.tableData?.multiples;\n if (multiples === undefined) {\n return {\n multiples: [],\n values: [],\n type: ''\n }\n }\n\n return multiples;\n}\n\nexport const selectFhComps = (state: ICompsTableSliceState) => {\n const fhComps = state.compsTableSlice?.tableData?.fh_comps;\n\n if(fhComps === undefined) {\n return {\n columns: [],\n values: []\n }\n }\n\n return fhComps;\n}\n\nexport const selectRanks = (state: ICompsTableSliceState) => {\n const ranks = state.compsTableSlice?.tableData?.ranks;\n\n if(ranks === undefined) {\n return {}\n }\n\n return ranks;\n}\n\nexport const selectDescriptions = (state: ICompsTableSliceState) =>\n state.compsTableSlice?.tableData?.descriptions\n\nexport const selectTableData = (state: ICompsTableSliceState) =>\n state.compsTableSlice?.tableData;\n\nexport const selectCompsetTableResults = (state: ICompsTableSliceState) =>\n state.compsTableSlice?.tableData?.results;\n\nexport const selectCompanyNetDebt = (state: ICompsTableSliceState) =>\n state.compsTableSlice.companyNetDebt;\n\nexport const selectRowDictionary = (state: ICompsTableSliceState) =>\n state.compsTableSlice.rowsDictionary;\n\nexport const selectIsFetchingCompset = (state: ICompsTableSliceState) =>\n state.compsTableSlice.isFetchingCompset;\n","import {createAsyncThunk, createSlice} from \"@reduxjs/toolkit\";\nimport {\n deleteCompSet,\n getUserCompSets,\n IDeleteUserCompSetResponse,\n IUserCompSet,\n IUserCompSetResponse\n} from \"../api/requests\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\n\ninterface ISavedUserCompSetSlice {\n savedUserCompSets: IUserCompSet[];\n isFetchingUserCompSets: boolean;\n isDeletingUserCompSet: boolean;\n}\n\ninterface ISavedUserCompSetSliceState {\n savedUserCompSetSlice: ISavedUserCompSetSlice\n}\n\nexport const fetchUserCompSets = createAsyncThunk(\n 'savedUserCompSetSlice/getUserCompSet',\n async (arg, thunkAPI) => {\n return await getUserCompSets();\n }\n)\n\nexport const deleteUserCompSet = createAsyncThunk(\n 'savedUserCompSetSLice/deleteUserCompSet',\n async(arg, thunkAPI) => {\n const data = {\n id: arg.id\n };\n\n return await deleteCompSet(data);\n }\n)\n\nconst initialState: ISavedUserCompSetSlice = {\n isFetchingUserCompSets: false,\n isDeletingUserCompSet: false,\n savedUserCompSets: [] as IUserCompSet[]\n}\n\nexport const savedUserCompSetSlice = createSlice({\n name: 'savedUserCompSetSlice',\n initialState,\n reducers: {},\n extraReducers: builder => {\n builder.addCase(fetchUserCompSets.pending, (state, action) => {\n state.isFetchingUserCompSets = true;\n });\n\n builder.addCase(fetchUserCompSets.fulfilled, (state, action) => {\n const {compsets, status} = action.payload;\n state.isFetchingUserCompSets = false;\n\n if(status === 'error') {\n return;\n }\n\n state.savedUserCompSets = compsets;\n });\n\n builder.addCase(fetchUserCompSets.rejected, (state, action) => {\n state.isFetchingUserCompSets = false;\n });\n\n builder.addCase(deleteUserCompSet.fulfilled, (state, action) => {\n state.isDeletingUserCompSet = false;\n });\n\n builder.addCase(deleteUserCompSet.pending, (state, action) => {\n state.isDeletingUserCompSet = true;\n });\n\n builder.addCase(deleteUserCompSet.rejected, (state, action) => {\n state.isDeletingUserCompSet = false;\n });\n\n resetStateOnSignOut(builder, initialState);\n }\n});\n\nexport default savedUserCompSetSlice.reducer;\n\n\nexport const selectIsFetchingUserCompSets = (state: ISavedUserCompSetSliceState): boolean =>\n state.savedUserCompSetSlice.isFetchingUserCompSets;\n\nexport const selectSavedUserCompSets = (state: ISavedUserCompSetSliceState): IUserCompSet[] =>\n state.savedUserCompSetSlice.savedUserCompSets;\n\nexport const selectIsDeleteingUserCompSet = (state: ISavedUserCompSetSliceState): boolean =>\n state.savedUserCompSetSlice.isDeletingUserCompSet;\n","import './CompsSelectedCompsGroup.scss';\nimport React from \"react\";\nimport {MinusButton, PrimaryButton, SecondaryButton} from \"../Button/Button\";\nimport {SaveWithNameButton} from \"../SaveWithNameButton/SaveWithNameButton\";\nimport {Container} from \"../Container/Container\";\nimport {\n clearCompsGroup,\n CompanyGroup,\n ICompany,\n removeCompsFromGroup,\n saveUserCompSet, selectCompsGroupId, selectCompsGroupName,\n selectIsSavingUserCompSet,\n setCompanyGroupName\n} from \"../../comps/compsGroupSlice\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {fetchCompSet} from \"../../comps/compsTableSlice\";\nimport {Action, ThunkDispatch} from \"@reduxjs/toolkit\";\nimport {RootState} from \"../../store\";\nimport {fetchUserCompSets} from \"../../comps/savedCompsSets\";\n\nexport default CompsSelectedCompsGroup;\n\nexport interface ICompsSelectedCompsGroupProps {\n onClick: () => void;\n buttonText: string;\n companies: CompanyGroup;\n}\n\nfunction CompsSelectedCompsGroup(props: ICompsSelectedCompsGroupProps) {\n const companyList = Object.keys(props.companies).map(i => props.companies[i]);\n const isCompsGroupEmpty = companyList.length === 0;\n const isSavingCompSet = useSelector(selectIsSavingUserCompSet);\n const companyGroupName = useSelector(selectCompsGroupName);\n const compsGroupId = useSelector(selectCompsGroupId);\n const dispatch = useDispatch>();\n\n const handleOnRemoveCompany = (company: ICompany) => {\n dispatch(removeCompsFromGroup(company));\n dispatch(fetchCompSet());\n }\n\n function handleOnSaveCompSet() {\n dispatch(saveUserCompSet())\n .then(i => dispatch(fetchUserCompSets()));\n }\n\n function handleOnNameChange(text: string) {\n dispatch(setCompanyGroupName(text));\n }\n\n\n function handleOnClear() {\n dispatch(clearCompsGroup());\n }\n\n return (\n \n
    Selected Comps
    \n {\n isCompsGroupEmpty\n ? \n :
    \n handleOnNameChange(name)}\n onSave={handleOnSaveCompSet}\n text={companyGroupName}\n placeHolder={'give your comps group a name'}\n isLoading={isSavingCompSet}\n isEditing={compsGroupId > 0}\n />\n
    \n {\n companyList.map(company =>\n handleOnRemoveCompany(company)}/>\n )\n }\n
    \n
    \n }\n
    \n \n \n
    \n
    \n )\n}\n\nfunction EmptyCompsGroupText() {\n return (\n
    \n Your comps group is empty.\n
    \n );\n}\n\n\nfunction Company(props: { comp: ICompany, onRemoveCompany: () => void }) {\n return (\n <>\n
    \n \n
    \n
    \n {props.comp.ticker}\n
    \n \n )\n}\n","import './CompsTab.scss';\nimport React from 'react';\nimport CollapsibleArrow from \"../CollapsibleArrow/CollapsibleArrow\";\nimport CompsSelectedCompsGroup from '../CompsSelectedCompsGroup/CompsSelectedCompsGroup';\nimport {useHistory} from 'react-router-dom';\nimport {Routes} from \"../../routes/routes\";\nimport {useSelector} from \"react-redux\";\nimport {selectSelectedCompsGroup} from \"../../comps/compsGroupSlice\";\n\nfunction CompsTab(props: { isExpanded: boolean, onClick: () => void }) {\n const history = useHistory();\n const comps = useSelector(selectSelectedCompsGroup);\n\n function handleOnClick() {\n props.onClick();\n }\n\n function handleOnViewInComps() {\n history.push(Routes.comps)\n }\n\n return (\n
    \n
    \n
    \n
    \n Comps Group\n \n
    \n
    \n
    \n {\n props.isExpanded\n ? \n : null\n }\n
    \n
    \n
    \n )\n}\n\nexport default CompsTab;\n\n","import './Modal.scss';\nimport React from 'react';\nimport {PrimaryButton, SecondaryButton} from \"../Button/Button\";\nimport {Container} from \"../Container/Container\";\n\nexport function Modal(props: { children: React.ReactNode, onCloseModal: () => void, hideCloseButton?: boolean }) {\n return (\n
    \n \n
    \n \n
    \n {props.children}\n
    \n
    \n
    \n
    \n );\n}\n","import './List.scss';\nimport React from 'react';\n\nimport {IdObj} from \"../../types\";\n\nexport interface IListProps {\n children: (item: T) => React.ReactNode;\n items: T[];\n headers: string[];\n}\n\nexport function List(props: IListProps) {\n return (\n
    \n \n \n \n {props.headers.map(i => )}\n \n \n \n {props.items.map(i =>\n props.children(i)\n )}\n \n
    {i}
    \n
    \n )\n}\n","import './SortArrows.scss';\nimport React from 'react';\nimport {BxsMoveFilterDownArrow, BxsMoveFilterUpArrow} from \"../Svg/Svg\";\n\nexport interface ISortArrowProps {\n onMoveUp: () => void;\n onMoveDown: () => void;\n}\n\nexport function SortArrows(props: ISortArrowProps) {\n return (\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n )\n}\n","import './TableColumnEditorSelectedColumn.scss'\nimport {List} from \"../List/List\";\nimport {SortArrows} from \"../SortArrows/SortArrows\";\nimport {SecondaryButton} from \"../Button/Button\";\nimport {IColumnData} from \"../../table/filterTable\";\n\nexport default TableColumnEditorSelectedColumn;\n\ninterface ListItemProps {\n id: number | string;\n value: string;\n onClick?: () => void;\n onMoveColumnDown: () => void;\n onMoveColumnUp: () => void;\n}\n\nfunction ListItem(props: ListItemProps) {\n return (\n
    \n
    \n \n
    \n \n {props.value}\n \n
    \n null}\n isEnabled={true}\n />\n
    \n
    \n );\n}\n\ninterface TableColumnEditorSelectedColumnProps {\n columns: IColumnData[]\n onColumnRemoved: (data: IColumnData) => void;\n onMoveColumnDown: (data: IColumnData) => void;\n onMoveColumnUp: (data: IColumnData) => void;\n}\n\nfunction TableColumnEditorSelectedColumn(props: TableColumnEditorSelectedColumnProps) {\n const items = props.columns\n .map(column => (\n {\n id: column.id,\n name: column.name\n }\n ));\n\n const mapper = (item: { id: string, name: string }) =>\n props.onColumnRemoved({\n id: item.id,\n name: item.name\n })}\n onMoveColumnDown={() => props.onMoveColumnDown(item)}\n onMoveColumnUp={() => props.onMoveColumnUp(item)}\n />\n\n\n return \n}\n","import './TableColumnEditorColumnOptions.scss'\nimport {List} from \"../List/List\";\nimport {IColumnData} from \"../../table/filterTable\";\n\nexport default TableColumnEditorColumnOptions;\n\ninterface ListItemProps {\n id: number | string;\n value: string;\n onClick: () => void;\n}\n\nfunction ListItem(props: ListItemProps) {\n return
    {props.value}
    \n}\n\ninterface TableColumnEditorColumnOptionsProps {\n columns: IColumnData[];\n onColumnSelected: (column: IColumnData) => void;\n}\n\nfunction TableColumnEditorColumnOptions(props: TableColumnEditorColumnOptionsProps) {\n\n const items = props.columns\n .map(column => (\n {\n id: column.id,\n name: column.name\n }\n ));\n\n const mapper = (item: { id: string, name: string }) =>\n props.onColumnSelected(\n {\n id: item.id,\n name: item.name\n }\n )}\n />\n\n return \n}\n","import './TableColumnEditor.scss';\nimport React from 'react';\nimport TableColumnEditorSelectedColumn from \"./TableColumnEditorSelectedColumn\";\nimport TableColumnEditorColumnOptions from \"./TableColumnEditorColumnOptions\";\nimport {EditColumnsSvg} from \"../Svg/Svg\";\nimport {IColumnData} from \"../../table/filterTable\";\n\ninterface TableColumnEditorParams {\n columns: IColumnData[];\n selectedColumns: IColumnData[];\n onAddColumn: (column: IColumnData) => void;\n onRemoveColumn: (column: IColumnData) => void;\n onMoveColumnDown: (column: IColumnData) => void;\n onMoveColumnUp: (column: IColumnData) => void;\n}\n\nexport function TableColumnEditor(props: TableColumnEditorParams) {\n const columnsNotShowing = getColumnsNotShowing(props.columns, props.selectedColumns);\n\n function getColumnsNotShowing(allColumns: IColumnData[], selectedColumns: IColumnData[]) {\n const selectedColumnIds = selectedColumns.map(i => i.id);\n return allColumns.filter(i => selectedColumnIds.indexOf(i.id) < 0);\n }\n\n function handleColumnSelected(column: IColumnData) {\n props.onAddColumn(column);\n }\n\n function handleColumnRemoved(column: IColumnData) {\n props.onRemoveColumn(column);\n }\n\n function handleMoveColumnDown(column: IColumnData) {\n props.onMoveColumnDown(column);\n }\n\n function handleMoveColumnUp(column: IColumnData) {\n props.onMoveColumnUp(column);\n }\n\n\n return (\n
    \n
    \n \n
    Edit Columns
    \n
    \n
    \n
    Selected Columns
    \n
    Column Options
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n )\n}\n","import React from 'react'\nimport {Alert} from 'reactstrap'\n\nfunction SmallScreenAlert() {\n return (\n \n This page is intended for a larger screen.\n \n )\n}\n\nexport default SmallScreenAlert\n","import {Dictionary} from \"../utility/utility\";\nimport * as _ from \"lodash\";\nimport {ICompany} from \"../comps/compsGroupSlice\";\nimport {FilterResultColumn, FilterResultRow} from \"../types\";\n\nfunction toDictionary(row: FilterResultColumn[]): { [index: string]: FilterResultColumn } {\n return _.keyBy(row, 'column');\n}\n\nfunction emptyFilterResultColumn(): FilterResultColumn {\n return {\n column: \"\",\n name: \"\",\n value: \"\",\n type: \"\"\n };\n}\n\nfunction getValueFromDictionary(key: string, dictionary: Dictionary): FilterResultColumn {\n let value = dictionary[key];\n if (value === undefined) {\n return emptyFilterResultColumn()\n } else {\n return value;\n }\n}\n\nfunction getNumberFromDictionary(key: string, dictionary: Dictionary): number {\n let result = parseInt(getValueFromDictionary('uid', dictionary).value);\n return result === undefined ? 0 : result;\n}\n\nexport function getCompany(row: FilterResultRow): ICompany | null {\n const data = toDictionary(row);\n\n if (data === undefined) {\n return null;\n }\n\n return {\n ticker: getValueFromDictionary('ticker', data).value,\n uid: getNumberFromDictionary('uid', data)\n };\n}\n\nexport interface IColumnData {\n id: string;\n name: string;\n}\n\n","import React, {useEffect, useState} from \"react\";\nimport './FilterPage.scss'\nimport SearchCriteriaContainer from \"../SearchCriteriaContainer/SearchCriteriaContainer\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {SavedFilterContainer} from \"../SavedFilterContainer/SavedFilterContainer\";\nimport SelectedFiltersContainer from \"../FilterContainer/SelectedFiltersContainer\";\nimport {fetchFilters} from \"../../filtering/filterSlice\";\nimport {fetchUserFilters} from \"../../filtering/savedFilterSlice\";\nimport {EditableFilterTableContainer} from \"../FilterTable/FilterTable\";\nimport CompsTab from \"../CompsTab/CompsTab\";\nimport {Modal} from \"../Modal/Modal\";\nimport {TableColumnEditor} from \"../TableColumnEditor/TableColumnEditor\";\nimport classNames from \"classnames\";\nimport {\n addColumn,\n moveDownColumn,\n moveUpColumn,\n removeColumn,\n selectAllColumns,\n selectFilterTableHeaders,\n selectFilterTableRows\n} from \"../../filtering/filterTableSlice\";\nimport SmallScreenAlert from \"../Utility/SmallScreenAlert\";\nimport {addCompsToGroup} from \"../../comps/compsGroupSlice\";\nimport {getCompany} from \"../../table/filterTable\";\nimport {FilterResultRow} from \"../../types\";\n\nfunction useColumnEditor() {\n const [showColumnEditor, setShowColumnEditor] = useState(false);\n\n function handleShowColumnEditor() {\n return setShowColumnEditor(!showColumnEditor);\n }\n\n return {showColumnEditor, toggleShowColumnEditor: handleShowColumnEditor};\n}\n\nfunction FilterPage() {\n const dispatch = useDispatch();\n const {showColumnEditor, toggleShowColumnEditor} = useColumnEditor();\n const [isCompsTabExpanded, setIsCompsTabExpanded] = useState(false);\n const columns = useSelector(selectAllColumns);\n const headers = useSelector(selectFilterTableHeaders);\n const rows = useSelector(selectFilterTableRows);\n\n useEffect(() => {\n dispatch(fetchFilters());\n dispatch(fetchUserFilters());\n }, []);\n\n const handleOnAddToCompsGroup = (row: FilterResultRow) => () => {\n const company = getCompany(row);\n if (company === null) {\n return;\n }\n dispatch(addCompsToGroup(company));\n setIsCompsTabExpanded(true);\n }\n\n function handleOnCompsTabClicked() {\n setIsCompsTabExpanded(!isCompsTabExpanded);\n }\n\n const filterPageClassName =\n classNames({\n 'blur': showColumnEditor\n });\n\n return (\n <>\n \n
    \n
    \n
    \n \n

    New to Value Analytics? Watch our\n tutorial video!\n

    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {\n showColumnEditor\n ? (\n \n dispatch(addColumn(column))}\n onRemoveColumn={(column) => dispatch(removeColumn(column))}\n onMoveColumnDown={(column) => dispatch(moveDownColumn(column))}\n onMoveColumnUp={(column) => dispatch(moveUpColumn(column))}\n />\n \n )\n : null\n }\n \n );\n}\n\nexport default FilterPage;\n","/* eslint-disable */\n// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten.\n\nconst awsmobile = {\n \"aws_project_region\": \"us-east-2\",\n \"aws_cognito_region\": \"us-east-2\",\n \"aws_user_pools_id\": \"us-east-2_SEnKWYBz2\",\n \"aws_user_pools_web_client_id\": \"btnv66b74alfqkrdqqhhvq2ot\",\n \"oauth\": {\n \"domain\": \"value-analytics-api-prod.auth.us-east-2.amazoncognito.com\",\n \"scope\": [\n \"email\",\n \"openid\"\n ],\n \"redirectSignIn\": \"https://valueanalytics.org\",\n \"redirectSignOut\": \"https://valueanalytics.org\",\n \"responseType\": \"code\"\n },\n \"federationTarget\": \"COGNITO_USER_POOLS\",\n \"aws_cognito_username_attributes\": [\n \"EMAIL\"\n ],\n \"aws_cognito_social_providers\": [],\n \"aws_cognito_signup_attributes\": [\n \"EMAIL\"\n ],\n \"aws_cognito_mfa_configuration\": \"OFF\",\n \"aws_cognito_mfa_types\": [],\n \"aws_cognito_password_protection_settings\": {\n \"passwordPolicyMinLength\": 8,\n \"passwordPolicyCharacters\": []\n },\n \"aws_cognito_verification_mechanisms\": [\n \"EMAIL\"\n ]\n};\n\n\nexport default awsmobile;\n","// TODO update this for how we really want to do configuration\n\nexport const config = {\n stripe_pk: process.env.REACT_APP_STRIPE_PK as string,\n api_endpoint: process.env.REACT_APP_API_ENDPOINT as string\n};\n","import awsmobile from \"./aws-exports\";\nimport {config} from './config';\n\nconst currentConfig = {\n ...awsmobile,\n API: {\n endpoints: [\n {\n name: \"Api\",\n endpoint:config.api_endpoint\n },\n ]\n }\n};\n\nexport default currentConfig;\n","import React from 'react';\n\n\ninterface FeatureProps {\n heading: string\n children: React.ReactNode\n src: string\n}\n\nfunction Feature(props: FeatureProps) {\n return (\n
    \n {\n props.src\n ?
    \"\"
    \n : \"\"\n }\n

    {props.heading}

    \n

    {props.children}

    \n
    \n );\n}\n\nexport default Feature;","import \"../SignupForm/SignupForm.scss\";\nimport React, {ChangeEvent} from \"react\";\n\ninterface FormInputProps {\n for: string;\n value: string;\n onChange?: (event: ChangeEvent) => void;\n children?: React.ReactNode;\n className?: string;\n type?: string;\n placeholder?: string;\n name?: string;\n id?: string;\n onError?: React.ReactNode;\n}\n\nexport function FormInputTyped(props: FormInputProps) {\n return (\n \n );\n}\n","export default __webpack_public_path__ + \"static/media/va-logo.3dba0c8d.svg\";","export default __webpack_public_path__ + \"static/media/valueanalytics.778f70e4.svg\";","export const ValueAnalyticsDocuments = {\n privacyPolicy: {\n name: 'Privacy Policy',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/terms/Value-Analytics-Privacy-Policy-3-2021.docx'\n },\n termsAndConditions: {\n name: 'Terms and Conditions',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/terms/Value-Analytics-Terms-and-Conditions-3-2021.docx'\n }\n}\n","export default __webpack_public_path__ + \"static/media/companyfilteringicon.abb2736d.svg\";","export default __webpack_public_path__ + \"static/media/smartsearchicon.72553f95.svg\";","export default __webpack_public_path__ + \"static/media/templateicon.a17b86af.svg\";","export default __webpack_public_path__ + \"static/media/statisticsicon.c670736f.svg\";","export default __webpack_public_path__ + \"static/media/piecharticon.b7b46be1.svg\";","import '../../style/style.scss';\nimport '../LoginPage/LoginPage.scss'\nimport './SignupPage.scss';\nimport './SignUpWithCoupon.scss';\nimport Feature from \"./Feature\";\nimport {FormInputTyped} from \"../FormInput/FormInputTyped\";\nimport React, {useEffect, useState} from \"react\";\nimport {useSelector} from \"react-redux\";\nimport {IUserClaims, selectClaims} from \"../../auth/authSlice\";\nimport {Auth} from \"aws-amplify\";\nimport {useHistory} from \"react-router-dom\";\nimport {Routes} from \"../../routes/routes\";\nimport logo from '../../img/va-logo.svg';\nimport greeting_logo from '../../img/valueanalytics.svg';\nimport {ValueAnalyticsDocuments} from \"../../data/va-documents\";\nimport {PrimaryButton} from \"../Button/Button\";\nimport {\n AmplifyAuthenticator, AmplifySignUp, AmplifyConfirmSignUp,\n AmplifySignIn, AmplifyForgotPassword\n} from \"@aws-amplify/ui-react\";\nimport {AuthState} from '@aws-amplify/ui-components';\nimport {Container, Row, Col} from 'react-bootstrap';\nimport icon1 from \"../../img/companyfilteringicon.svg\";\nimport icon2 from \"../../img/smartsearchicon.svg\";\nimport icon3 from \"../../img/templateicon.svg\";\nimport icon4 from \"../../img/statisticsicon.svg\";\nimport icon5 from \"../../img/piecharticon.svg\";\n\nfunction SignUpPage() {\n\n const history = useHistory();\n\n function routeChange() {\n let path = '/create-account';\n history.push(path);\n }\n\n return (\n
    \n \n \n \n \n

    The most affordable platform for high quality market data!

    \n
    \n \n

    \n Stop over paying for data! Join Value Analytics today\n

    \n
    \n \n \n \n \n \n
    \n \n \n
    \n \n
    \n \n

    Your Subscription Access

    \n
    \n \n \n \n \n Filter public companies using financial characteristics,\n equity values, and company profiles\n \n \n \n \n Access financial data directly from Microsoft Excel to support\n custom analysis and financial modeling\n \n \n \n \n Summarize performance and pricing analysis using guided reporting templates that\n are directly exportable to Microsoft Excel\n \n \n \n \n \n Compare performance across companies using industry standard financial metrics\n and pricing multiples\n \n \n \n \n Gain access to financial, equity, and company profile data for U.S.\n exchange-traded companies\n \n \n \n \n \n
    \n
    \n\n )\n}\n\n\ninterface ICreateNewUserInfo {\n email: string;\n fullName: string;\n password: string;\n}\n\n\ninterface ISignUpSuccess {\n status: \"success\";\n message: string;\n}\n\ninterface ISignUpError {\n status: \"error\";\n message: string;\n}\n\ntype SignUpResult = ISignUpSuccess | ISignUpError;\n\nfunction handleAuthError(message: any) {\n}\n\nfunction LoginPage() {\n\n\n return (\n
    \n \n \n \n \n
    \n \n
    \n {\"Create Account\"}\n
    \n \n\n \n
    \n
    \n
    \n \n
    \n {\"Welcome!\"}\n
    \n \n\n \n \n \n \n \n
    \n )\n}\n\nfunction signUpUser(newUser: ICreateNewUserInfo, claims: IUserClaims): Promise {\n const params: any = {\n attributes: {\n email: newUser.email,\n 'custom:fullname': newUser.fullName\n },\n clientMetadata: {\n manager: claims.cognito_username\n },\n password: newUser.password,\n username: newUser.email\n }\n\n return Auth\n .signUp(params)\n .then(response => {\n return {\n status: \"success\",\n message: 'You account has been created. You can now login.'\n } as ISignUpSuccess\n })\n .catch(error => {\n return {\n status: \"error\",\n message: error.message\n } as ISignUpError\n });\n}\n\nfunction useCreateAccountLogic() {\n const [fullName, setFullName] = useState('');\n const [emailAddress, setEmailAddress] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [formSubmitted, setFormSubmitted] = useState(false);\n const claims = useSelector(selectClaims);\n const [errorMessage, setErrorMessage] = useState('');\n const [redirectToLogin, setRedirectToLogin] = useState(false);\n const [acceptedTerms, setAcceptedTerms] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const history = useHistory();\n\n const handleChange = (dispatch: React.Dispatch>) =>\n (event: React.ChangeEvent) =>\n dispatch(event.target.value);\n\n const handleCheckBoxChange = (dispatch: React.Dispatch>) =>\n (event: React.ChangeEvent) =>\n dispatch(event.target.checked);\n\n function handleFormSubmitted(event: React.FormEvent) {\n event.preventDefault();\n if (!acceptedTerms) {\n setErrorMessage('You must agree to terms of service');\n return;\n }\n if (password !== confirmPassword) {\n setErrorMessage('The passwords you entered do not match.');\n return;\n }\n if (password.length < 8) {\n setErrorMessage('Your password must be at least 8 characters.');\n return;\n }\n\n setFormSubmitted(true);\n }\n\n useEffect(() => {\n if (formSubmitted) {\n const newUser: ICreateNewUserInfo = {\n email: emailAddress,\n fullName: fullName,\n password: password\n }\n setIsLoading(true);\n signUpUser(newUser, claims)\n .then(result => {\n switch (result.status) {\n case \"error\":\n setErrorMessage(result.message)\n break;\n case \"success\":\n setRedirectToLogin(true)\n break;\n }\n })\n .finally(() => setIsLoading(false));\n }\n\n setFormSubmitted(false);\n }, [formSubmitted]);\n\n useEffect(() => {\n if (redirectToLogin) {\n history.push(Routes.login);\n }\n\n setRedirectToLogin(false);\n }, [redirectToLogin]);\n\n return {\n fullName,\n setFullName,\n emailAddress,\n setEmailAddress,\n password,\n setPassword,\n confirmPassword,\n setConfirmPassword,\n errorMessage,\n acceptedTerms,\n setAcceptedTerms,\n handleChange,\n handleFormSubmitted,\n handleCheckBoxChange,\n isLoading\n };\n}\n\nfunction CreateAccount() {\n const {\n fullName,\n setFullName,\n emailAddress,\n setEmailAddress,\n password,\n setPassword,\n confirmPassword,\n setConfirmPassword,\n handleFormSubmitted,\n errorMessage,\n acceptedTerms,\n setAcceptedTerms,\n handleChange,\n handleCheckBoxChange,\n isLoading\n } = useCreateAccountLogic();\n\n return (\n
    \n
    \n

    Create Account

    \n
    \n
    \n {errorMessage}\n
    \n
    handleFormSubmitted(event)}>\n \n Full Name*\n \n \n Email Address*\n \n \n Password\n \n \n Confirm Password\n \n null}\n type={'submit'}\n isLoading={isLoading}\n isEnabled={!isLoading && acceptedTerms}\n />\n\n
    \n

    TERMS & CONDITIONS

    \n
    \n

    Last modified 3/31/2021

    \n
    \n

    PLEASE READ THESE TERMS CAREFULLY.

    \n

    \n These Terms and Conditions of Use (the “Terms”) govern your use of and access to\n ValueAnalytics.org\n and its sub-domains and affiliated sites, as well as Value Analytics, LLC’s (“Value Analytics”)\n pages and accounts\n on Facebook®, Twitter®, LinkedIn®, Google Plus®, YouTube®, and any other social media website\n (collectively the “Sites)\n and its Services (as hereinafter defined). Please read both these Terms and Value Analytics’\n Privacy Policy carefully, which is\n incorporated into these Terms. You may not use the Sites or the Services until you have read the\n Terms. By using any or all\n of the Sites or the Services, you accept and agree to be bound by these Terms. If you do not\n want to agree to be bound by these\n Terms, do not use the Sites or the Services. Value Analytics may modify these Terms at any time,\n and any modifications\n will be effective immediately unless otherwise stated. You are responsible for reviewing any\n modified terms.\n All modifications will be posted at ValueAnalytics.org/documentation. Your continued use of a\n Site or the\n Services following any changes means you accept and agree to any changes. For your convenience\n and future reference,\n the date of the most recent revision of these Terms is listed above so that you may compare\n different versions\n to determine what, if any, changes have been made. As used in these Terms, the terms \"you\",\n \"your\" or\n \"user\" all refer to both the person using the Sites or the Services in any way, including those\n registered as, for,\n or on behalf of a corporate entity, such as a company, business, affiliated entities,\n corporation, government agency,\n or other business entity and its employees, subcontractors, affiliates, and all other persons or\n entities permitted\n to access and use the Sites or the Services.\n

    \n
    \n

    SITE CONTENT.

    \n

    \n Value Analytics exclusively owns and controls the Sites, which, among other things, provides\n information about\n products and services and access to a variety of materials and content (the “Services”). You\n agree that use or\n access to any or all of the Sites or the Services does not create any sort of representation or\n future promise.\n Value Analytics does not warrant or make any representation of accuracy regarding the\n information or data contained,\n described in, or related to the Services. Value Analytics shall own any feedback,\n recommendations,\n or suggestions that you may provide to Value Analytics and may use the results of such feedback\n for any purpose,\n including but not limited to in its marketing and promotional materials. The unauthorized\n reproduction, sublicensing,\n sharing, use of, or theft of any content, written, photographic, video or otherwise, is\n expressly prohibited.\n Any use of the Sites or Services in violation of these terms will constitute infringement of\n Value Analytics’ intellectual property rights.\n

    \n
    \n

    FEES.

    \n

    \n You agree to pay all fees for the Services you select. Fees shall be due and payable to Value\n Analytics by credit card,\n via a third-party payment processor, prior to Services being rendered by Value Analytics.\n Services can be cancelled by\n you at any time and will be effective at the end of the paid period in which Value Analytics\n receives notice of cancellation.\n In the event a payment is not received for any reason, Value Analytics may suspend your access\n to the applicable Services or\n terminate your Services. Refunds shall not be given in the event any or all of the Sites become\n non-operational, in the event\n information in the Services is incorrect or inaccurate, or for any other reason. All payments\n are non-refundable.\n Value Analytics reserves the right to adjust fees at any time at its discretion.\n

    \n
    \n

    INTELLECTUAL PROPERTY.

    \n

    \n Unless explicitly stated otherwise, as between you and Value Analytics, Value Analytics owns and\n retains all right,\n title, and interest in and to (a) the Services; (b) its Sites; and (c) all associated content,\n materials, graphics,\n logos, slogans, product and service names, information, and other intellectual property. All\n other names, logos,\n product and service names, designs and slogans on the Sites are the trademarks of their\n respective owners and should\n not be used without those respective owners’ permission. You are granted a limited,\n non-exclusive, non-transferable,\n revocable license to access and use the Sites and the Services therein, including the resources\n available for download\n or streaming strictly in accordance with these Terms and solely for your personal purposes.\n

    \n
    \n

    THIRD PARTY RIGHTS.

    \n

    \n Content and materials posted to the Sites may be the copyrighted content of others (“Third Party\n Content”) that\n is used by Value Analytics either by permission or under Section 107 of the Copyright Act as\n “fair use” for\n purposes such as education and research. Users must obtain permission from the owners of any\n Third-Party Content before\n copying, distributing or otherwise using those materials. Except as otherwise expressly\n permitted under copyright law,\n no copying, redistribution, retransmission, publication, or commercial exploitation of\n downloaded material will be\n permitted without the express permission of the copyright owner.\n

    \n
    \n

    \n If you believe that your work has been copied on one or more of the Sites in a way that\n constitutes copyright\n infringement or otherwise violates your intellectual property rights, please contact us via\n email at the contact\n information listed below and provide the following: (i) identification of what is claimed to\n have been infringed;\n (ii) identification of what is claimed to be infringing; (iii) your contact information (or the\n contact information\n of the person we need to contact about the infringement); (iv) a statement that the person\n submitting the complaint\n is doing so with a good faith belief that use of the material in the manner complained of is not\n authorized by the\n owner, its agent, or the law; (v) a statement that the information provided is accurate, and\n under penalty of perjury;\n (vi) a physical or electronic signature of the person submitting the complaint; and (vii) if\n that person is not the\n owner of the content at issue, a statement that the person submitting the complaint is\n authorized to act on the owner’s behalf.\n

    \n
    \n

    LINKING TO OUR SITES.

    \n

    \n Anyone linking to the Sites must comply with all applicable laws and must not: (i) misrepresent\n its relationship\n with Value Analytics; (ii) present false or misleading information about Value Analytics; or\n (iii) contain content\n that is reasonably considered profanity, offensive, defamatory, vulgar, or unlawful.\n

    \n
    \n

    ADVERTISEMENTS AND LINKS.

    \n

    \n Value Analytics may at times include advertisements on the Sites. Your correspondence or\n business dealings with,\n or participation in promotions of, advertisers found on or through the Sites are solely between\n you and such\n advertiser. Any opinions, advice, statements, services, offers, or other information or content\n expressed or\n made available by advertisers, including information providers, or any other end users are those\n of the\n respective author(s) and not our own. You agree that Value Analytics shall not be responsible or\n liable\n for any loss or damage of any sort incurred as a result of any such dealings or as the result of\n the presence of\n such advertisers. Any affiliate links on the Sites will be clearly marked; however, you may\n reach out to Value Analytics\n using the contact information listed below with any questions you may have regarding affiliate\n links.\n

    \n
    \n

    \n You may find links to other websites on a Site. These links are provided solely as a convenience\n to you and\n not as an endorsement by Value Analytics of the contents on such third-party sites, and Value\n Analytics expressly\n disclaims any representations regarding the content or accuracy of materials on such third-party\n websites.\n You acknowledge and agree that Value Analytics shall not be responsible or liable, directly or\n indirectly,\n for any damage or loss caused or alleged to be caused by or in connection with use of or\n reliance on any such content,\n goods or products available on or through any such linked site. You agree that it is your\n responsibility to evaluate\n the accuracy, completeness, or usefulness of any information, opinion, advice, etc., or other\n content available\n through such third-party sites.\n

    \n
    \n

    DISCLAIMER AND LIMITATION OF LIABILITY.

    \n

    \n THE SITES AND THE SERVICES ARE PROVIDED ON AN “AS IS” AND “AS AVAILABLE” BASIS, WITHOUT WARRANTY\n OF ANY KIND.\n VALUE ANALYTICS, TOGETHER WITH ITS AFFILIATES, LICENSORS, SERVICE PROVIDERS, EMPLOYEES, AGENTS,\n OFFICERS OR DIRECTORS\n (THE “RELEASED PARTIES”), SPECIFICALLY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING,\n BUT NOT LIMITED TO,\n WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT AND\n WARRANTIES THAT\n MAY ARISE OUT OF COURSE OF DEALING, COURSE OF PERFORMANCE, USAGE OR TRADE PRACTICE. THE RELEASED\n PARTIES DO NOT GUARANTEE\n THE RELIABILITY, ACCURACY, COMPLETENESS, SAFETY, TIMELINESS, LEGALITY, USEFULNESS, ADEQUACY OR\n SUITABILITY OF ANY OF THE INFORMATION OR CONTENT ON THE SITES. VALUE ANALYTICS AND THE RELEASED\n PARTIES DO NOT\n WARRANT THAT THE SERVICE OR SITES WILL BE ERROR FREE, FREE FROM ANY VIRUS, MALWARE, OR HARMFUL\n CODE, FREE FROM\n INTERRUPTIONS, WILL NOT INFRINGE THE INTELLECTUAL PROPERTY RIGHTS OF ANY THIRD PARTY, OR\n ACCOMPLISH ANY PARTICULAR RESULT.\n ACCORDINGLY, YOU AGREE TO EXERCISE CAUTION, DISCRETION AND COMMON SENSE WHEN USING THE SITES.\n THE ENTIRE RISK FOR\n USE OF THE SITE AND/OR SERVICES IS BORNE BY YOU. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE\n LAW, IN NO EVENT SHALL\n THE RELEASED PARTIES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR\n PUNITIVE DAMAGES\n ARISING OUT OF THE USE OF OR INABILITY TO ACCESS THE SITES, INCLUDING, WITHOUT LIMITATION,\n DAMAGES FOR LOSS OF\n GOODWILL, WORK DISRUPTIONS, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER PERSONAL OR\n COMMERCIAL DAMAGES OR\n LOSSES, EVEN IF ADVISED OF THE POSSIBILITY THEREOF, AND REGARDLESS OF THE LEGAL OR EQUITABLE\n THEORY\n (CONTRACT, TORT, BREACH OF WARRANTY OR OTHERWISE) UPON WHICH THE CLAIM IS BASED. THE RELEASED\n PARTIES ARE NOT RESPONSIBLE\n FOR ANY LIABILITY ARISING OUT OF THE POSTINGS OR ANY MATERIAL LINKED THROUGH THE SITES. YOUR\n SOLE REMEDY WITH RESPECT\n TO ANY CLAIM ARISING OUT OF YOUR USE OF THE SITES AND SERVICES IS TO CEASE USING THE SITES AND\n SERVICES. IN NO EVENT SHALL\n VALUE ANALYTICS’ TOTAL LIABILITY EXCEED AN AMOUNT EQUAL TO THE LESSOR OF ACTUAL DAMAGES INCURRED\n OR THE FEES PAID BY YOU IN\n HE TWELVE (12) MONTH PERIOD PROCEEDING THE EVENT GIVING RISE TO SUCH LIABILITY FOR THE SERVICES\n GIVING RISE TO SUCH LIABILITY.\n

    \n
    \n

    INDEMNIFICATION.

    \n

    \n YOU AGREE TO INDEMNIFY, DEFEND, AND HOLD VALUE ANALYTICS HARMLESS FROM AND AGAINST ANY DAMAGES,\n CLAIMS OR LOSSES\n ARISING FROM YOUR: (A) BREACH OF THESE TERMS; (B) INFRINGEMENT OF ANY THIRD-PARTY INTELLECTUAL\n PROPERTY; AND (C)\n NEGLIGENCE, WILLFUL MISCONDUCT, OR VIOLATION OF LAW. VALUE ANALYTICS SHALL NOT BE LIABLE FOR ANY\n SPECIAL, INCIDENTAL,\n CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES, ARISING OUT OF OR RELATED TO THIS AGREEMENT,\n WHETHER OR NOT A PARTY HAS\n BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, AND WHETHER BASED UPON BREACH OF CONTRACT,\n WARRANTY, OR STATUTORY DUTY,\n NEGLIGENCE, STRICT LIABILITY OR OTHER TORT, PRINCIPLES OF INDEMNITY OR CONTRIBUTION, OR\n OTHERWISE.\n YOU AGREE THAT VALUE ANALYTICS WILL NOT MAKE ANY COURT APPEARANCES ON YOUR BEHALF WITHOUT A\n SUBPOENA AND\n IF VALUE ANALYTICS IS REQUIRED TO MAKE A COURT APPEARANCE DUE TO A SUBPOENA BY YOU, THEN YOU\n SHALL INDEMNIFY AND\n REIMBURSE VALUE ANALYTICS FOR ALL RELATED LOSSES AND EXPENSES.\n

    \n
    \n

    CHOICE OF LAW AND VENUE.

    \n

    \n These Terms are governed by the laws of the Commonwealth of Pennsylvania without regard to any\n conflict of laws.\n For any dispute regarding these Terms, the Sites, or the Services, you agree to submit to the\n personal and exclusive\n jurisdiction and venue of the federal and state courts located in Butler County, PA.\n

    \n
    \n

    MISCELLANEOUS.

    \n

    \n Should any provision of these Terms be found unenforceable, the remainder of these Terms shall\n remain in full force and effect.\n These Terms (and any policies linked or attached to it, including but not limited to the Privacy\n Policy) constitute the\n entire agreement between you and Value Analytics and supersedes any oral or written\n communications between us.\n In the event of conflict between these Terms and any other agreement or understanding between\n the parties, these Terms shall govern.\n

    \n
    \n

    YOUR COMMENTS AND CONCERNS.

    \n

    \n All feedback, comments, requests for technical support and other communications relating to the\n Sites or the Services should be\n directed to: Derek@ValueAnalytics.org or Adam@ValueAnalytics.org or to Value Analytics, PO Box\n 993, Mars, PA 16046.\n

    \n\n
    \n
    \n \n \n
    \n \n
    \n );\n}\n\nexport {\n SignUpPage,\n LoginPage,\n}\n\n\n\n","export const MANAGER_ROLE = \"Account Manager\"\nexport const USER_ROLE = \"Team Member\"\nexport const OWNER_ROLE = \"Owner\"\nexport const BVR_ROLE = \"BVR_USER\"\nexport const DEMO_ROLE = \"DEMO_USER\"\n\nexport const WEEKLY_NAME = \"Week Pass\"\nexport const MONTHLY_NAME = \"Monthly Plan\"\nexport const TRIAL_NAME = \"One Week Trial\"\n\nexport const EXPIRED_TERM = \"Expired\"","import {createAsyncThunk, createSlice} from \"@reduxjs/toolkit\";\nimport {MONTHLY_NAME, WEEKLY_NAME, TRIAL_NAME} from \"../constants\";\nimport {\n PaymentIntentResponse,\n ICreatePaymentIntent,\n ICreateStripeCustomer,\n CreateStripeCustomerResponse,\n ICreateStripeSubscription,\n CreateStripeSubscriptionResponse\n} from \"../api/requestsTypes\";\nimport {\n createPaymentIntent,\n createStripeCustomer,\n createStripeSubscription,\n getPlanOptions,\n IPlanOption,\n checkToken,\n ICheckTokenRequest\n} from \"../api/requests\";\nimport {RootState} from \"../store\";\nimport {refreshUserSessionInformation} from \"../auth/authSlice\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\n\nexport interface IUser {\n fullName: string\n email: string,\n password: string,\n stripeCustomerId: string\n}\n\nexport interface IPlan {\n seats: string\n planType: string,\n}\n\ninterface ISignupSlice {\n user: IUser,\n paymentIntentSecret: string,\n plan: IPlan,\n signUpSuccess: boolean,\n planOptions: IPlanOption[],\n selectedPlan: IPlanOption,\n isLoadingOptions: boolean\n}\n\nexport interface ISignupSliceState {\n signUpSlice: ISignupSlice\n}\n\nexport const postPaymentIntent = createAsyncThunk(\n 'signUpSlice/CreatePaymentIntent',\n async (data, thunkAPI) => {\n return await createPaymentIntent(data)\n }\n);\n\nexport const postStripeCustomer = createAsyncThunk(\n 'signUpSlice/CreateStripeCustomer',\n async (data, thunkAPI) => {\n return await createStripeCustomer(data)\n }\n);\n\nexport const postStripeSubscription = createAsyncThunk(\n 'signUpSlice/CreateStripeSubscription',\n async (data, thunkAPI) => {\n return await createStripeSubscription(data)\n }\n);\n\nexport const fetchPlanOptions = createAsyncThunk(\n 'signUpSlice/fetchPlanOptions',\n async (arg, thunkAPI) => {\n const planOptions = await getPlanOptions();\n // explicitly set the selected_plan attribute to false when before rendering the options\n planOptions.forEach(plan=> {\n plan.selected_plan = false\n })\n await thunkAPI.dispatch(refreshUserSessionInformation(true));\n return planOptions;\n\n }\n);\n\nexport const checkPromoCode = createAsyncThunk(\n 'signUpSlice/checkPromoCode',\n async(data:any, thunkAPI) =>{\n const tokenToCheck : ICheckTokenRequest = {\n token_name: data.planDetails.coupon_name,\n token_value: data.promoCode\n\n }\n const tokenResults = await checkToken(tokenToCheck)\n return {\n priceId: data.planDetails.price_id,\n tokenResults: tokenResults\n }\n\n\n }\n\n)\n\nconst initialState: ISignupSlice = {\n user: {email: \"\", fullName: \"\", password: \"\", stripeCustomerId: \"\"} as IUser,\n plan: {planType: \"\", seats: \"\"} as IPlan,\n paymentIntentSecret: \"\" as string,\n signUpSuccess: false,\n planOptions: [],\n isLoadingOptions: false,\n selectedPlan: {} as IPlanOption\n};\n\nexport const signUpSlice = createSlice({\n name: 'signUpSlice',\n initialState,\n reducers: {\n updateSeats: (state, action) => {\n state.plan.seats = action.payload;\n },\n updatePlanType: (state, action) => {\n state.plan.planType = action.payload;\n },\n updateEmail: (state, action) => {\n state.user.email = action.payload;\n },\n updateName: (state, action) => {\n state.user.fullName = action.payload;\n },\n updatePlanOptions: (state, action) => {\n state.planOptions.forEach(plan => {\n if (plan.price_id === action.payload){\n plan.selected_plan = true;\n state.selectedPlan = plan;\n } else {\n plan.selected_plan = false;\n }\n })\n }\n },\n extraReducers: builder => {\n builder.addCase(postStripeCustomer.fulfilled, (state, action) => {\n switch(action.payload.status) {\n case 'success':\n state.user.stripeCustomerId = action.payload.customerId;\n break;\n case 'error':\n break;\n }\n });\n\n builder.addCase(fetchPlanOptions.fulfilled, (state, action) => {\n state.planOptions = action.payload;\n state.isLoadingOptions = false;\n });\n\n builder.addCase(fetchPlanOptions.pending, (state, action) => {\n state.isLoadingOptions = true;\n });\n\n builder.addCase(checkPromoCode.fulfilled, (state, action) => {\n if (action.payload.tokenResults.status == \"success\"){\n // update the coupon_applied prop to true for the selected plan\n state.selectedPlan.coupon_applied = true\n // store the secret for creating the subscription\n state.selectedPlan.promo_secret = action.payload.tokenResults.token_secret\n state.selectedPlan.promo_attempt_failed = false\n }\n else{\n state.selectedPlan.promo_attempt_failed = true\n }\n\n });\n\n resetStateOnSignOut(builder, initialState);\n }\n});\n\n\nexport const {\n updateSeats,\n updatePlanType,\n updateEmail,\n updateName,\n updatePlanOptions,\n} = signUpSlice.actions;\nexport const selectUser = (state: ISignupSliceState) => state.signUpSlice.user;\nexport const selectPlan = (state: ISignupSliceState) => {\n return state.signUpSlice.plan;\n}\nexport const selectPlanOptions = function (state: ISignupSliceState)\n{\n let order = [TRIAL_NAME, MONTHLY_NAME, WEEKLY_NAME]\n let ordered_options:IPlanOption[] = []\n order.forEach(plan=>{\n state.signUpSlice.planOptions.forEach(option=>{\n if (plan==option.title) {\n ordered_options.push(option)\n }\n })\n })\n return ordered_options\n};\nexport const selectPlanDetails = (state: ISignupSliceState) => state.signUpSlice.selectedPlan;\nexport const selectIsLoadingOptions = (state: ISignupSliceState) => state.signUpSlice.isLoadingOptions;\nexport default signUpSlice.reducer;\n\n","import React from 'react';\nimport classNames from \"classnames\";\nimport './PlanOptionsPage.scss'\nimport { PrimaryButton } from '../Button/Button';\nimport {IPlanOption} from \"../../api/requests\";\n\n\ninterface PlanOptionProps {\n option: IPlanOption;\n onFormToggle: (id: string) => void;\n selected: boolean;\n}\n\nfunction PlanOption(props: PlanOptionProps) {\n const optionClassName = classNames( {\n 'option': true,\n 'best-value': props.option.best_value,\n })\n\n return (\n
    \n

    {props.option.title}

    \n\n {\n props.option.trial_period ?\n

    {`${props.option.trial_period_days} days free,\n no commitment!`}

    \n :
    \n

    {props.option.display_price}

    \n

    {props.option.sub_period}

    \n

    {props.option.billing_frequency}

    \n
    \n }\n\n\n\n
    \n {\n props.onFormToggle(props.option.price_id)\n }\n }\n isEnabled={true}\n />\n
    \n
    \n )\n}\n\nexport default PlanOption;\n","import React from 'react';\nimport \"../SignupForm/SignupForm.scss\";\n\nexport default function FormInput(props: any) {\n return (\n \n );\n}\n\n","import React, {useState} from 'react';\nimport FormInput from '../FormInput/FormInput';\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {selectPlanDetails, checkPromoCode} from \"../../signup/signUpSlice\";\nimport {Action, ThunkDispatch} from \"@reduxjs/toolkit\";\nimport {RootState} from \"../../store\";\nimport classNames from \"classnames\"\n\n\n\nfunction TrialOrderSummary(props: any) {\n const planDetails = useSelector(selectPlanDetails);\n const dispatch = useDispatch>();\n\n return (\n
    \n
    \n
    \n {\n `${planDetails.title} Free Trial`\n }\n
    \n
    \n

    \n

    \n
    \n
    \n

    Total due now

    \n
    \n
    \n

    {'$0.00'}

    \n
    \n\n
    \n

    \n {planDetails.title} Free Trial will expire after {planDetails.trial_period_days} days

    \n
    \n )\n}\n\nfunction PaidOrderSummary(pops: any) {\n\n const [promoCode, setPromoCode] = useState('');\n const planDetails = useSelector(selectPlanDetails);\n const dispatch = useDispatch>();\n\n function handleChange(code: string) {\n setPromoCode(code)\n }\n\n function applyPromo() {\n dispatch(checkPromoCode(\n {\n promoCode:promoCode,\n planDetails:planDetails\n }\n ))\n\n }\n\n const leftHeader = classNames({\n 'left': true,\n 'coupon-applied': planDetails.coupon_applied\n })\n\n const rightHeader = classNames({\n 'right': true,\n 'coupon-applied': planDetails.coupon_applied\n })\n\n return (\n
    \n
    \n
    \n {\n planDetails.coupon_applied ?\n planDetails.coupon_display_name:\n planDetails.title\n }\n
    \n
    \n

    {\n planDetails.coupon_applied ?\n planDetails.coupon_price + ' ' + planDetails.sub_period.toLowerCase():\n planDetails.display_price + ' ' + planDetails.sub_period.toLowerCase()\n }\n

    \n
    \n
    \n

    Total due now

    \n

    {planDetails.trial_period ?\n `Total due after ${planDetails.trial_period_days} days` : ''}

    \n

    {planDetails.billing_frequency}

    \n
    \n
    \n

    {planDetails.coupon_applied ?\n planDetails.coupon_price:\n planDetails.display_due_now}

    \n

    {\n planDetails.billing_frequency.includes('once') ? '' :\n planDetails.coupon_applied ?\n planDetails.coupon_price:\n planDetails.display_price\n }

    \n\n
    \n\n
    \n

    {planDetails.description}

    \n { planDetails.coupon_available &&\n
    \n

    Promo

    \n
    \n \n Apply\n
    \n

    \n
    \n\n }\n {\n 'promo_attempt_failed' in planDetails ?\n planDetails.promo_attempt_failed ?\n

    Incorrect Promo Code

    :\n

    Promo Code Applied!

    :\n \"\"\n }\n
    \n );\n\n}\n\n\nfunction OrderSummary(props: any) {\n\n const planDetails = useSelector(selectPlanDetails);\n\n return (\n planDetails.trial_period ? : \n )\n}\n\nexport default OrderSummary;","import React from 'react';\nimport './TermsConditions.scss';\nimport '../../App.scss'\nimport {Container} from 'reactstrap';\n\nfunction Terms() {\n return (\n
    \n

    TERMS & CONDITIONS

    \n

    Last modified 5/27/2022

    \n

    PLEASE READ THESE TERMS CAREFULLY.

    \n

    These Terms and Conditions of Use (the “Terms”) govern your use of and access to ValueAnalytics.org and\n its sub-domains and affiliated sites, as well as Value Analytics, LLC’s (“Value Analytics”) pages and\n accounts on Facebook®, Twitter®, LinkedIn®, Google Plus®, YouTube®, and any other social media website\n (collectively the “Sites), and its Services (as hereinafter defined). Please read both these Terms and\n Value Analytics’ Privacy Policy carefully,\n which is incorporated into these Terms. You may not use the Sites or the Services until you have read\n the Terms. By using any or all of the Sites or the Services, you accept and agree to be bound by these\n Terms. If you do not want to agree to be bound by these Terms, do not use the Sites or the Services.\n Value Analytics may modify these Terms at any time, and any modifications will be effective immediately\n unless otherwise stated. You are responsible for reviewing any modified terms. All modifications will be\n posted at ValueAnalytics.org/terms. Your continued use of a Site or the Services following any changes\n means you accept and agree to any changes. For your convenience and future reference, the date of the\n most recent revision of these Terms is listed above so that you may compare different versions to\n determine what, if any, changes have been made. As used in these Terms, the terms \"you\", \"your\" or\n \"user\" all refer to both the person using the Sites or the Services in any way, including those\n registered as, for, or on behalf of a corporate entity, such as a company, business, affiliated\n entities, corporation, government agency, or other business entity and its employees, subcontractors,\n affiliates, and all other persons or entities permitted to access and use the Sites or the Services.

    \n

    SITE CONTENT.

    \n

    Value Analytics exclusively owns and controls the Sites, which, among other things, provides information\n about products and services and access to a variety of materials and content, as well as the Value\n Analytics Excel Add-In (the “Services”). You agree that use or access to any or all of the Sites or the\n Services does not create any sort of representation or future promise. Value Analytics does not warrant\n or make any representation of accuracy regarding the information or data contained, described in, or\n related to the Services. Value Analytics shall own any feedback, recommendations, or suggestions that\n you may provide to Value Analytics and may use the results of such feedback for any purpose, including\n but not limited to in its marketing and promotional materials. The unauthorized reproduction,\n sublicensing, sharing, use of, or theft of any content, written, photographic, video or otherwise, is\n expressly prohibited. Any use of the Sites or Services in violation of these terms will constitute\n infringement of Value Analytics’ intellectual property rights.

    \n

    FEES.

    \n

    You agree to pay all fees for the Services you select. Fees shall be due and payable to Value Analytics\n by credit card, via a third-party payment processor, prior to Services being rendered by Value\n Analytics. Fees for monthly or annual subscriptions will be automatically initiated on the respective\n monthly or annual anniversary date. Services can be cancelled by you at any time and will be effective\n at the end of the paid period in which Value Analytics receives notice of cancellation. In the event a\n payment is not received for any reason, Value Analytics may suspend your access to the applicable\n Services or terminate your Services. Refunds shall not be given in the event any or all of the Sites\n become non-operational, in the event information in the Services is incorrect or inaccurate, or for any\n other reason. All payments are non-refundable. Value Analytics reserves the right to adjust fees at any\n time at its discretion.

    \n

    INTELLECTUAL PROPERTY.

    \n

    Unless explicitly stated otherwise, as between you and Value Analytics, Value Analytics owns and retains\n all right, title, and interest in and to (a) the Services; (b) its Sites; and (c) all associated\n content, materials, graphics, logos, slogans, product and service names, information, and other\n intellectual property. All other names, logos, product and service names, designs and slogans on the\n Sites are the trademarks of their respective owners and should not be used without those respective\n owners’ permission. You are granted a limited, non-exclusive, non-transferable, revocable license to\n access and use the Sites and the Services therein, including the resources available for download or\n streaming strictly in accordance with these Terms and solely for your personal purposes.

    \n

    THIRD PARTY RIGHTS.

    \n

    Content and materials posted to the Sites may be the copyrighted content of others (“Third Party\n Content”) that is used by Value Analytics either by permission or under Section 107 of the Copyright Act\n as “fair use” for purposes such as education and research. Users must obtain permission from the owners\n of any Third-Party Content before copying, distributing or otherwise using those materials. Except as\n otherwise expressly permitted under copyright law, no copying, redistribution, retransmission,\n publication, or commercial exploitation of downloaded material will be permitted without the express\n permission of the copyright owner.

    \n

    If you believe that your work has been copied on one or more of the Sites in a way that constitutes\n copyright infringement or otherwise violates your intellectual property rights, please contact us via\n email at the contact information listed below and provide the following: (i) identification of what is\n claimed to have been infringed; (ii) identification of what is claimed to be infringing; (iii) your\n contact information (or the contact information of the person we need to contact about the\n infringement); (iv) a statement that the person submitting the complaint is doing so with a good faith\n belief that use of the material in the manner complained of is not authorized by the owner, its agent,\n or the law; (v) a statement that the information provided is accurate, and under penalty of perjury;\n (vi) a physical or electronic signature of the person submitting the complaint; and (vii) if that person\n is not the owner of the content at issue, a statement that the person submitting the complaint is\n authorized to act on the owner’s behalf.

    \n

    LINKING TO OUR SITES.

    \n

    Anyone linking to the Sites must comply with all applicable laws and must not: (i) misrepresent its\n relationship with Value Analytics; (ii) present false or misleading information about Value Analytics;\n or (iii) contain content that is reasonably considered profanity, offensive, defamatory, vulgar, or\n unlawful.

    \n

    ADVERTISEMENTS AND LINKS.

    \n

    Value Analytics may at times include advertisements on the Sites. Your correspondence or business\n dealings with, or participation in promotions of, advertisers found on or through the Sites are solely\n between you and such advertiser. Any opinions, advice, statements, services, offers, or other\n information or content expressed or made available by advertisers, including information providers, or\n any other end users are those of the respective author(s) and not our own. You agree that Value\n Analytics shall not be responsible or liable for any loss or damage of any sort incurred as a result of\n any such dealings or as the result of the presence of such advertisers. Any affiliate links on the Sites\n will be clearly marked; however, you may reach out to Value Analytics using the contact information\n listed below with any questions you may have regarding affiliate links.

    \n

    You may find links to other websites on a Site. These links are provided solely as a convenience to you\n and not as an endorsement by Value Analytics of the contents on such third-party sites, and Value\n Analytics expressly disclaims any representations regarding the content or accuracy of materials on such\n third-party websites. You acknowledge and agree that Value Analytics shall not be responsible or liable,\n directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with\n use of or reliance on any such content, goods or products available on or through any such linked site.\n You agree that it is your responsibility to evaluate the accuracy, completeness, or usefulness of any\n information, opinion, advice, etc., or other content available through such third-party sites.

    \n

    DISCLAIMER AND LIMITATION OF LIABILITY.

    \n

    THE SITES AND THE SERVICES ARE PROVIDED ON AN “AS IS” AND “AS AVAILABLE” BASIS, WITHOUT WARRANTY OF ANY\n KIND. VALUE ANALYTICS, TOGETHER WITH ITS AFFILIATES, LICENSORS, SERVICE PROVIDERS, EMPLOYEES, AGENTS,\n OFFICERS OR DIRECTORS (THE “RELEASED PARTIES”), SPECIFICALLY DISCLAIM ALL WARRANTIES, EXPRESS OR\n IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,\n AND NON-INFRINGEMENT AND WARRANTIES THAT MAY ARISE OUT OF COURSE OF DEALING, COURSE OF PERFORMANCE,\n USAGE OR TRADE PRACTICE. THE RELEASED PARTIES DO NOT GUARANTEE THE RELIABILITY, ACCURACY, COMPLETENESS,\n SAFETY, TIMELINESS, LEGALITY, USEFULNESS, ADEQUACY OR SUITABILITY OF ANY OF THE INFORMATION OR CONTENT\n ON THE SITES. VALUE ANALYTICS AND THE RELEASED PARTIES DO NOT WARRANT THAT THE SERVICE OR SITES WILL BE\n ERROR FREE, FREE FROM ANY VIRUS, MALWARE, OR HARMFUL CODE, FREE FROM INTERRUPTIONS, WILL NOT INFRINGE\n THE INTELLECTUAL PROPERTY RIGHTS OF ANY THIRD PARTY, OR ACCOMPLISH ANY PARTICULAR RESULT. ACCORDINGLY,\n YOU AGREE TO EXERCISE CAUTION, DISCRETION AND COMMON SENSE WHEN USING THE SITES. THE ENTIRE RISK FOR USE\n OF THE SITE AND/OR SERVICES IS BORNE BY YOU. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO\n EVENT SHALL THE RELEASED PARTIES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL\n OR PUNITIVE DAMAGES ARISING OUT OF THE USE OF OR INABILITY TO ACCESS THE SITES, INCLUDING, WITHOUT\n LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK DISRUPTIONS, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND\n ALL OTHER PERSONAL OR COMMERCIAL DAMAGES OR LOSSES, EVEN IF ADVISED OF THE POSSIBILITY THEREOF, AND\n REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT, BREACH OF WARRANTY OR OTHERWISE) UPON WHICH\n THE CLAIM IS BASED. THE RELEASED PARTIES ARE NOT RESPONSIBLE FOR ANY LIABILITY ARISING OUT OF THE\n POSTINGS OR ANY MATERIAL LINKED THROUGH THE SITES. YOUR SOLE REMEDY WITH RESPECT TO ANY CLAIM ARISING\n OUT OF YOUR USE OF THE SITES AND SERVICES IS TO CEASE USING THE SITES AND SERVICES. IN NO EVENT SHALL\n VALUE ANALYTICS’ TOTAL LIABILITY EXCEED AN AMOUNT EQUAL TO THE LESSOR OF ACTUAL DAMAGES INCURRED OR THE\n FEES PAID BY YOU IN THE TWELVE (12) MONTH PERIOD PROCEEDING THE EVENT GIVING RISE TO SUCH LIABILITY FOR\n THE SERVICES GIVING RISE TO SUCH LIABILITY.

    \n

    INDEMNIFICATION.

    \n

    YOU AGREE TO INDEMNIFY, DEFEND, AND HOLD VALUE ANALYTICS HARMLESS FROM AND AGAINST ANY DAMAGES, CLAIMS OR\n LOSSES ARISING FROM YOUR: (A) BREACH OF THESE TERMS; (B) INFRINGEMENT OF ANY THIRD-PARTY INTELLECTUAL\n PROPERTY; AND (C) NEGLIGENCE, WILLFUL MISCONDUCT, OR VIOLATION OF LAW. VALUE ANALYTICS SHALL NOT BE\n LIABLE FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES, ARISING OUT OF OR\n RELATED TO THIS AGREEMENT, WHETHER OR NOT A PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES,\n AND WHETHER BASED UPON BREACH OF CONTRACT, WARRANTY, OR STATUTORY DUTY, NEGLIGENCE, STRICT LIABILITY OR\n OTHER TORT, PRINCIPLES OF INDEMNITY OR CONTRIBUTION, OR OTHERWISE. YOU AGREE THAT VALUE ANALYTICS WILL\n NOT MAKE ANY COURT APPEARANCES ON YOUR BEHALF WITHOUT A SUBPOENA AND IF VALUE ANALYTICS IS REQUIRED TO\n MAKE A COURT APPEARANCE DUE TO A SUBPOENA BY YOU, THEN YOU SHALL INDEMNIFY AND REIMBURSE VALUE ANALYTICS\n FOR ALL RELATED LOSSES AND EXPENSES.

    \n

    CHOICE OF LAW AND VENUE.

    \n

    These Terms are governed by the laws of the Commonwealth of Pennsylvania without regard to any conflict\n of laws. For any dispute regarding these Terms, the Sites, or the Services, you agree to submit to the\n personal and exclusive jurisdiction and venue of the federal and state courts located in Butler County,\n PA.

    \n

    MISCELLANEOUS.

    \n

    Should any provision of these Terms be found unenforceable, the remainder of these Terms shall remain in\n full force and effect. These Terms (and any policies linked or attached to it, including but not limited\n to the Privacy Policy ) constitute the\n entire agreement between you and Value Analytics and supersedes any oral or written communications\n between us. In the event of conflict between these Terms and any other agreement or understanding\n between the parties, these Terms shall govern.

    \n

    YOUR COMMENTS AND CONCERNS.

    \n

    All feedback, comments, requests for technical support and other communications relating to the Sites or\n the Services should be directed to: Derek@ValueAnalytics.org or Adam@ValueAnalytics.org or to Value\n Analytics, PO Box 993, Mars, PA 16046.

    \n
    \n )\n}\n\nfunction TermsPage() {\n return (\n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n )\n}\n\nexport {\n Terms,\n TermsPage\n}\n\n","import {CardElement, ElementsConsumer, useElements, useStripe} from \"@stripe/react-stripe-js\";\nimport {useDispatch} from \"react-redux\";\nimport {Action, ThunkDispatch, unwrapResult} from \"@reduxjs/toolkit\";\nimport {RootState} from \"../../store\";\nimport {CreateStripeSubscriptionResponse, ICreateStripeSubscription} from \"../../api/requestsTypes\";\nimport {postStripeSubscription} from \"../../signup/signUpSlice\";\nimport React, {useState} from \"react\";\nimport {toInteger} from \"lodash\";\nimport {Stripe, StripeCardElement, StripeCardElementChangeEvent, StripeError} from \"@stripe/stripe-js\";\nimport {IPlanOption} from \"../../api/requests\";\nimport '../Button/Button.scss'\nimport stripeJs from \"@stripe/stripe-js\";\nimport {addPaymentMethod, handleCardSetup} from \"../AccountPage/UpdateCard\";\nimport {getSetupIntent} from \"../../api/requests\";\nimport {setDefaultPayment} from \"../../billing/billingSlice\";\n\n\ninterface CheckoutFormProps {\n onUpdatingSubscription: (isUpdatingSubscription: boolean) => void;\n onError: (message: string) => void;\n planId: string;\n customerId: string;\n acceptedTerms: boolean;\n planDetails: IPlanOption;\n referredBy: string;\n isUpgrading: boolean;\n}\n\ninterface CheckoutStatusSuccess {\n status: 'success'\n message: string\n}\n\ninterface CheckoutStatusError {\n status: 'error'\n message: string\n}\n\ntype CheckoutStatus\n = CheckoutStatusSuccess\n | CheckoutStatusError\n\nfunction getCheckoutStatus(error: undefined | StripeError): CheckoutStatus {\n if (!error) {\n return {\n status: 'success',\n message: 'Card was processed successfully.'\n }\n }\n\n if (error &&\n error.type === 'card_error' &&\n error.message) {\n\n return {\n status: 'error',\n message: error.message\n }\n }\n\n return {\n status: 'error',\n message: 'Something went wrong.'\n }\n}\n\nasync function confirmCardSetup(\n stripe: Stripe,\n card: StripeCardElement,\n clientSecret: string): Promise {\n // need to test if this will actually charge the default card when the trial period is over\n const setupIntentResult = await stripe.confirmCardSetup(\n clientSecret,\n {\n payment_method: {\n card: card\n }\n });\n\n return getCheckoutStatus(setupIntentResult.error);\n}\n\nasync function confirmCardPayment(\n stripe: Stripe,\n card: StripeCardElement,\n clientSecret: string): Promise {\n\n const confirmCardPaymentResult = await stripe.confirmCardPayment(\n clientSecret,\n {\n payment_method: {\n card: card\n },\n setup_future_usage: 'off_session'\n });\n\n return getCheckoutStatus(confirmCardPaymentResult.error);\n}\n\nexport const CheckoutForm = (props: CheckoutFormProps) => {\n\n\n function getCheckoutForm(){\n\n if (props.isUpgrading) { // user is upgrading from a trial period\n return \n } else if (!props.planDetails.trial_period && !props.isUpgrading) { // user has selected a plan without a trial\n return \n } else if (props.planDetails.trial_period && !props.isUpgrading) { // user has selected a trial plan\n return \n } else { // should not make it here\n return

    \n }\n\n }\n\n return (\n getCheckoutForm()\n );\n}\n\n// breaking out these functions since they are used by multiple forms\nfunction getSubscription(props: CheckoutFormProps) {\n const sub: ICreateStripeSubscription = {\n priceId: props.planId,\n customerId: props.customerId,\n quantity: toInteger('1'),\n referredBy: props.referredBy\n }\n\n if (props.planDetails.coupon_applied && 'promo_secret' in props.planDetails) {\n sub['coupon'] = props.planDetails.promo_secret\n }\n return sub;\n }\n\nfunction clearErrors(props: CheckoutFormProps) {\n props.onError('');\n }\n\nasync function handleCardPayment(\n response: CreateStripeSubscriptionResponse,\n elements: stripeJs.StripeElements | null,\n stripe: Stripe | null\n ): Promise {\n\n const card = elements!.getElement(CardElement);\n if (response.status === 'error') {\n return {\n status: 'error',\n message: response.errors.join(',')\n }\n }\n\n if (stripe === null ||\n card === null) {\n return {\n status: 'error',\n message: 'Something went wrong.'\n };\n }\n\n switch (response.client_secret.type) {\n case 'setup_intent':\n return await confirmCardSetup(stripe, card, response.client_secret.secret);\n case 'payment_intent':\n return await confirmCardPayment(stripe, card, response.client_secret.secret);\n case 'None':\n return {\n status: 'error',\n message: 'Something went wrong.'\n };\n }\n }\n\nasync function handleCheckoutComplete(checkoutStatus: CheckoutStatus, props: CheckoutFormProps) {\n switch (checkoutStatus.status) {\n case 'error':\n props.onError(checkoutStatus.message);\n props.onUpdatingSubscription(false);\n }\n }\n\n\nconst handleChange = async (\n event: StripeCardElementChangeEvent,\n props: CheckoutFormProps,\n setCardIsReady: (arg:boolean) => void\n ) => {\n // Listen for changes in the CardElement\n // and display any errors as the customer types their card details\n if (event.complete) {\n setCardIsReady(true);\n clearErrors(props);\n return;\n }\n\n if (event.error) {\n props.onError(event.error.message);\n props.onUpdatingSubscription(false);\n setCardIsReady(false);\n return;\n }\n\n props.onError('');\n};\n\n\nexport const UpgradeCheckoutForm = (props: CheckoutFormProps) => {\n\n const stripe = useStripe();\n const elements = useElements();\n\n const dispatch = useDispatch>();\n const [cardIsReady, setCardIsReady] = useState(false);\n\n\n const handleSubmit: React.FormEventHandler = async (event) => {\n event.preventDefault();\n\n if (!cardIsReady) {\n props.onError('Enter your card details.');\n return;\n }\n\n clearErrors(props);\n\n if (!props.acceptedTerms) {\n props.onError('You must accept the terms.');\n return;\n }\n\n\n const sub = getSubscription(props);\n props.onUpdatingSubscription(true);\n\n dispatch(postStripeSubscription(sub))\n .then(unwrapResult)\n .then((response)=>handleCardPayment(response, elements, stripe))\n .then((response) => handleCheckoutComplete(response, props))\n .catch(error => {\n props.onUpdatingSubscription(false);\n props.onError('Something went wrong.')\n });\n\n };\n\n\n return (\n \n {({stripe, elements}) => (\n
    \n\n
    \n

    Card

    \n
    \n handleChange(event, props, setCardIsReady)}\n options={{\n style: {\n base: {\n padding: '14px 18px',\n fontSize: '12px',\n }\n }\n }}\n />\n
    \n
    \n \n
    \n )}\n
    \n )\n}\n\nexport const NoTrialCheckoutForm = (props: CheckoutFormProps) => {\n\n const stripe = useStripe();\n const elements = useElements();\n\n const dispatch = useDispatch>();\n const [cardIsReady, setCardIsReady] = useState(false);\n\n\n const handleSubmit: React.FormEventHandler = async (event) => {\n event.preventDefault();\n\n if (!cardIsReady) {\n props.onError('Enter your card details.');\n return;\n }\n\n clearErrors(props);\n\n if (!props.acceptedTerms) {\n props.onError('You must accept the terms.');\n return;\n }\n\n if (props.referredBy == '') {\n props.onError('You must provide a referral. Enter \"none\" if you found us on your own.');\n return;\n }\n\n const sub = getSubscription(props);\n props.onUpdatingSubscription(true);\n\n\n dispatch(postStripeSubscription(sub))\n .then(unwrapResult)\n .then((response)=>handleCardPayment(response, elements, stripe))\n .then((response) => handleCheckoutComplete(response, props))\n .catch(error => {\n props.onUpdatingSubscription(false);\n props.onError('Something went wrong.')\n });\n\n };\n\n\n\n return (\n \n {({stripe, elements}) => (\n
    \n\n
    \n

    Card

    \n
    \n handleChange(event, props, setCardIsReady)}\n options={{\n style: {\n base: {\n padding: '14px 18px',\n fontSize: '12px',\n }\n }\n }}\n />\n
    \n
    \n \n
    \n )}\n
    \n )\n\n}\n\nexport const TrialCheckoutForm = (props: CheckoutFormProps) => {\n\n const dispatch = useDispatch>();\n const handleSubmit: React.FormEventHandler = async (event) => {\n\n event.preventDefault();\n clearErrors(props);\n\n if (!props.acceptedTerms) {\n props.onError('You must accept the terms.');\n return;\n }\n\n if (props.referredBy == '') {\n props.onError('You must provide a referral. Enter \"none\" if you found us on your own.');\n return;\n }\n\n const sub = getSubscription(props);\n props.onUpdatingSubscription(true);\n\n\n // if there is a trial period, then we create a subscription without requiring card information\n dispatch(postStripeSubscription(sub)).catch(error => {\n props.onUpdatingSubscription(false);\n props.onError('Something went wrong.')\n });\n\n };\n\n return (\n
    \n \n
    \n )\n\n}\n\n\n","import React, {useState} from 'react';\nimport {useSelector} from \"react-redux\";\nimport {selectClaims} from '../../auth/authSlice';\nimport {config} from '../../config';\nimport {loadStripe} from '@stripe/stripe-js';\nimport {Elements} from '@stripe/react-stripe-js';\nimport {\n selectPlan,\n selectPlanDetails\n} from \"../../signup/signUpSlice\";\nimport OrderSummary from './OrderSummary';\nimport {Terms} from '../TermsConditions/Terms';\nimport './SignupForm.scss';\nimport {CheckoutForm} from \"./CheckoutForm\";\nimport {CSSTransition} from \"react-transition-group\";\nimport {Col, Container, Row} from \"reactstrap\";\n\nconst stripePromise = loadStripe(config.stripe_pk);\n\ninterface SignupFormProps {\n onUpdatingSubscription: (isUpdatingSubscription: boolean) => void;\n isUpgrading: boolean\n}\n\nexport function SignupForm(props: SignupFormProps) {\n const [acceptedTerms, setAcceptedTerms] = useState(false);\n const [referredBy, setReferredBy] = useState('')\n const [error, setError] = useState('');\n const plan = useSelector(selectPlan);\n const claims = useSelector(selectClaims);\n const planDetails = useSelector(selectPlanDetails);\n return (\n \n
    \n\n \n \n \n
    \n

    Order Summary

    \n \n
    \n \n \n \n {props.isUpgrading ? \"\" :\n \n
    \n

    Referral

    \n setReferredBy(e.target.value)}\n placeholder='Referred By'/>\n \n
    \n \n }\n \n

    User Agreement

    \n \n \n
    \n \n
    \n \n \n
    \n setAcceptedTerms(e.target.checked)}/>\n \n
    \n \n \n
    \n {\n error &&
    {error}
    \n }\n \n \n \n
    \n \n
    \n \n
    \n
    \n
    \n\n
    \n );\n}\n","import './SubscriptionUpdaterModal.scss';\nimport {useDispatch, useSelector} from \"react-redux\";\nimport React, {useEffect, useState} from \"react\";\nimport {\n refreshUserSessionInformation,\n selectClaims\n} from \"../../auth/authSlice\";\nimport {Modal} from \"../Modal/Modal\";\nimport {Loader} from \"../Loader/Loader\";\n\ninterface SubscriptionUpdaterModalProps {\n onSubscriptionActivated: () => void;\n isUpgrading: boolean\n}\n\nexport function SubscriptionUpdaterModal(props: SubscriptionUpdaterModalProps) {\n const dispatch = useDispatch();\n const [shouldRefresh, setRefresh] = useState(true);\n const [refreshToggle, setRefreshToggle] = useState(false);\n const claims = useSelector(selectClaims);\n\n // returns true when time to break from updating status\n // when we are upgrading a trial, we check for trialing status to be false\n // when selecting plan for first time, we check for active subscription\n function get_active_flag() {\n if (props.isUpgrading){\n return !claims.is_trialing\n } else {\n return claims.active_subscription\n }\n }\n\n useEffect(() => {\n if (!shouldRefresh) {\n return;\n }\n dispatch(refreshUserSessionInformation(true));\n const timeout = setTimeout(() => {\n if (shouldRefresh) {\n triggerRefresh();\n }\n }, 2000);\n return () => clearTimeout(timeout);\n }, [refreshToggle]);\n\n useEffect(() => {\n\n if(get_active_flag()){\n setRefresh(false);\n props.onSubscriptionActivated();\n }\n else{\n setRefresh(true);\n }\n\n }, [claims]);\n\n function triggerRefresh() {\n setRefreshToggle(!refreshToggle);\n }\n\n return (\n
    \n null} hideCloseButton={true}>\n \n
    Updating Subscription...
    \n
    \n
    \n );\n}\n","import {CSSTransition} from \"react-transition-group\";\nimport {AmplifyAuthenticator, AmplifyForgotPassword, AmplifySignIn, AmplifySignUp} from \"@aws-amplify/ui-react\";\nimport {AuthState} from \"@aws-amplify/ui-components\";\nimport greeting_logo from \"../../img/valueanalytics.svg\";\nimport React, {useEffect, useState} from \"react\";\nimport './AccountCreation.scss'\nimport {Container, Row} from \"react-bootstrap\";\nimport classNames from \"classnames\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {\n fetchPlanOptions,\n selectIsLoadingOptions,\n selectPlanOptions,\n updatePlanOptions,\n updatePlanType\n} from \"../../signup/signUpSlice\";\nimport {Action, ThunkDispatch} from \"@reduxjs/toolkit\";\nimport {RootState} from \"../../store\";\nimport PlanOption from \"../PlanOptionsPage/PlanOption\";\nimport {Loader} from \"../Loader/Loader\";\nimport {SignupForm} from \"../SignupForm/SignupForm\";\nimport {SubscriptionUpdaterModal} from \"../PlanOptionsPage/SubscriptionUpdaterModal\";\nimport {IPlanOption} from \"../../api/requests\";\nimport {Col} from \"reactstrap\";\n\n\nfunction handleAuthError(message: any) {\n}\n\ninterface CreateCognitoAccountProps {\n initialState: AuthState.SignUp | AuthState.SignIn\n}\n\nexport function CreateCognitoAccount(props: CreateCognitoAccountProps) {\n\n return (\n \n
    \n \n \n
    \n \n
    \n {\"Create Account\"}\n
    \n \n\n \n
    \n
    \n
    \n \n
    \n {\"Welcome!\"}\n
    \n \n\n \n \n \n
    \n \n )\n}\n\ninterface planOptionsProps {\n planOptions: IPlanOption[]\n setStep: (step: flowStep) => void\n direction: 'from-right' | 'from-left'\n setDirection: (d: direction) => void\n}\n\nfunction PlanOptions(props: planOptionsProps) {\n const dispatch = useDispatch>();\n\n function toggleShowSignupForm(planId: string) {\n dispatch(updatePlanType(planId));\n dispatch(updatePlanOptions(planId))\n props.setDirection('from-right')\n props.setStep(3)\n }\n\n\n const planOptionsComponent = props.planOptions.map(option =>\n \n \n \n )\n\n return (\n \n
    \n \n {\n planOptionsComponent\n }\n \n
    \n
    \n )\n}\n\ntype flowStep = 1 | 2 | 3\ntype direction = 'from-left' | 'from-right'\n\ninterface AccountCreationProps {\n isLoggedIn: boolean,\n isUpgrading: boolean\n}\n\nexport function AccountCreationFlow(props: AccountCreationProps) {\n const dispatch = useDispatch()\n const planOptions = useSelector(selectPlanOptions)\n const [direction, setDirection] = useState('from-right')\n const [isUpdatingSubscription, setIsUpdatingSubscription] = useState(false);\n const [step, setStep] = useState(1);\n const isLoading = useSelector(selectIsLoadingOptions)\n\n\n async function asyncDispatch() {\n return dispatch(fetchPlanOptions())\n }\n\n // if they are logged in, switch to step 2\n useEffect(() => {\n if (props.isLoggedIn) {\n asyncDispatch().then(() => {\n setStep(2)\n })\n\n }\n\n }, [props.isLoggedIn])\n\n function handleOnSubscriptionActivated() {\n setIsUpdatingSubscription(false);\n }\n\n const blur = classNames({\n 'blur': isUpdatingSubscription\n });\n\n\n const createAccountClassName = classNames({\n 'flow-state-text': true,\n 'selected': step === 1,\n 'left': true,\n\n })\n\n const selectPlanClassName = classNames({\n 'flow-state-text': true,\n 'selected': step === 2\n\n })\n\n const selectPaymentCLassName = classNames({\n 'flow-state-text': true,\n 'selected': step === 3,\n 'right': true\n\n })\n\n function getFlowStepComponent() {\n\n if (step === 1) {\n return \n } else if (step === 2) {\n return \n return

    not implemented

    \n } else if (step == 3) {\n return \n } else {\n return

    \n }\n\n }\n\n function goBack() {\n setStep(2)\n setDirection('from-left')\n }\n\n return (\n\n
    \n \n \n \n
    \n {step === 3 ?\n
    \n \n
    \n : \"\"}\n
    \n Account\n Plan\n Payment\n
    \n \n
    \n
    \n \n {getFlowStepComponent()}\n \n\n
    \n
    \n {\n isUpdatingSubscription\n ? \n : null\n }\n
    \n )\n\n\n}\n","import './CompsSavedCompsGroups.scss';\nimport React, {useEffect} from \"react\";\nimport {SecondaryButton} from \"../Button/Button\";\nimport {Container} from \"../Container/Container\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport { Loader } from '../Loader/Loader';\nimport {IUserCompSet} from \"../../api/requests\";\nimport {getLocalMonthDayYear} from \"../../utility/dates\";\nimport {\n deleteUserCompSet, fetchUserCompSets,\n selectIsDeleteingUserCompSet,\n selectIsFetchingUserCompSets,\n selectSavedUserCompSets\n} from \"../../comps/savedCompsSets\";\nimport {clearCompsGroup, loadUserCompSet, selectCompsGroupId} from \"../../comps/compsGroupSlice\";\nimport {fetchCompSet} from \"../../comps/compsTableSlice\";\nimport {Action, ThunkDispatch} from \"@reduxjs/toolkit\";\nimport {RootState} from \"../../store\";\n\nexport default CompsSavedCompsGroups;\n\nfunction CompsSavedCompsGroups() {\n const savedCompSets = useSelector(selectSavedUserCompSets);\n const isFetchingUserCompSet = useSelector(selectIsFetchingUserCompSets);\n const isDeletingUserCompSet = useSelector(selectIsDeleteingUserCompSet);\n const selectedCompsGroupId = useSelector(selectCompsGroupId);\n const dispatch = useDispatch>();\n\n function handleOnLoad(userCompSet: IUserCompSet) {\n dispatch(loadUserCompSet(userCompSet))\n .then(i => dispatch(fetchCompSet()));\n }\n\n function handleOnDelete(userCompSet: IUserCompSet) {\n if(userCompSet.id === selectedCompsGroupId) {\n dispatch(clearCompsGroup());\n }\n dispatch(deleteUserCompSet(userCompSet))\n .then(i => dispatch(fetchUserCompSets()));\n }\n\n return (\n \n
    Saved Comps
    \n
    \n Last Updated\n Name\n Valuation Date\n \n \n {savedCompSets.map(i =>\n )\n }\n
    \n \n
    \n );\n}\n\n\ninterface CompsSavedGroupParams {\n savedComps: IUserCompSet;\n onLoad: (compSet: IUserCompSet) => void;\n onDelete: (compSet: IUserCompSet) => void;\n}\n\nfunction CompsSavedGroup(props: CompsSavedGroupParams) {\n return (\n <>\n
    \n {getLocalMonthDayYear(props.savedComps.update_date)}\n
    \n
    \n {props.savedComps.compset_name}\n
    \n
    \n {getLocalMonthDayYear(props.savedComps.valuation_date)}\n
    \n
    \n props.onLoad(props.savedComps)} isEnabled={true}/>\n
    \n
    \n props.onDelete(props.savedComps)} isEnabled={true}/>\n
    \n \n );\n}\n","import './TableTab.scss';\n\nimport React from 'react';\nimport { Loader } from '../Loader/Loader';\n\ninterface TableTabProps {\n name: string;\n isActive: boolean;\n isLoading: boolean;\n}\n\nexport function TableTab(props: TableTabProps) {\n const className = props.isActive\n ? 'table-tab tab-active'\n : 'table-tab tab-inactive';\n\n return (\n
    \n
    \n { props.isLoading ? : props.name }\n\n
    \n
    \n )\n}\n","import './TableTabContainer.scss';\nimport {TableTab} from \"./TableTab\";\nimport {useState} from \"react\";\n\nexport function TableTabContainer(\n props: {\n tabNames: string[],\n onTabChange: (tabName: string) => void,\n isLoading: boolean\n }) {\n\n const [activeTabName, setActiveTabName] = useState(props.tabNames[0]);\n\n const handleOnTabChange = (name: string) => () => {\n props.onTabChange(name);\n setActiveTabName(name);\n }\n\n return (\n
    \n {\n props.tabNames\n .map(i =>\n
    \n \n
    \n )\n }\n
    \n )\n}\n","import './TableToolBar.scss';\nimport React from 'react';\n\nexport function TableTitle(props: {\n title: string;\n}) {\n function add_subtitle(title:string){\n if (title.toLowerCase().includes('highlights')){\n return 'Balance Sheet and Income Statement items from most recent annual report prior to Valuation Date'\n } else if (title.toLowerCase().includes('ranking')){\n return 'Rankings based on LFY performance, unless otherwise specified'\n } else {\n return ''\n }\n }\n\n\n return (\n
    \n
    \n {props.title}\n
    \n {add_subtitle(props.title)}\n
    \n\n
    \n );\n}\n\nexport function TableToolBar(props: {\n left: React.ReactNode,\n right: React.ReactNode\n}) {\n return (\n
    \n
    \n {props.left}\n
    \n
    \n {props.right}\n
    \n
    \n );\n}\n","import './CompsTableContainer.scss'\nimport React, {useState} from 'react';\nimport {TableTabContainer} from \"../Table/TableTabContainer\";\nimport {Container} from \"../Container/Container\";\nimport {TableTitle, TableToolBar} from \"../Table/TableToolBar\";\nimport {ExportButton} from \"../Button/Button\";\nimport {selectCompsetTableResults, selectIsFetchingCompset} from \"../../comps/compsTableSlice\";\nimport {useSelector} from \"react-redux\";\n\nfunction LeftToolBar(props: {\n title: string;\n}) {\n return ;\n}\n\ninterface RightToolBarProps {\n onEditColumnsButtonClicked: () => void;\n onExportButtonClicked: () => void;\n isEnabled: boolean;\n isExporting: boolean;\n}\n\nfunction RightToolBar(props: RightToolBarProps) {\n return (\n \n )\n}\n\ninterface CompsTableContainerProps {\n tabs: {\n [key: string]: {\n title: string,\n table: () => JSX.Element\n }\n };\n onShowColumnEditor: () => void;\n onExportButtonClicked: () => void;\n isExporting: boolean;\n}\n\nexport function CompsTableContainer(props: CompsTableContainerProps) {\n const isFetchingCompset = useSelector(selectIsFetchingCompset)\n const compsetResults = useSelector(selectCompsetTableResults)\n const tabNames = Object.keys(props.tabs);\n const [currentTab, setCurrentTab] = useState(tabNames[0]);\n\n function handleOnTabChange(name: string) {\n setCurrentTab(name);\n }\n\n function handleOnColumnEditorButtonClicked() {\n props.onShowColumnEditor();\n }\n\n function handleOnExportButtonClicked() {\n props.onExportButtonClicked();\n }\n\n function isExportButtonEnabled() {\n return !isFetchingCompset && compsetResults.data_found !== 'none'\n }\n\n return (\n
    \n
    \n \n
    \n \n
    \n }\n right={\n }\n />\n
    \n
    \n {props.tabs[currentTab].table()}\n
    \n
    \n
    \n\n )\n\n}\n\n","import './InputBox.scss';\nimport React, {ReactNode} from 'react';\n\nexport function InputBox(props: { children: ReactNode }) {\n return (\n
    \n
    \n {props.children}\n
    \n
    \n )\n}\n","import React from 'react'\nimport {InputBox} from \"../InputBox/InputBox\";\nimport {MoneyIcon} from \"../Svg/Svg\";\n\ninterface InputMoneyProps {\n onChange: (text: string) => void;\n value: string;\n}\n\nexport function InputMoney(props: InputMoneyProps) {\n return (\n \n \n props.onChange(e.target.value)}\n />\n \n )\n}\n\n","import \"react-datepicker/dist/react-datepicker.css\";\nimport './DateSelector.scss'\nimport React from 'react';\nimport DatePicker from 'react-datepicker';\nimport {DatePickerIcon} from \"../Svg/Svg\";\nimport {InputBox} from \"../InputBox/InputBox\";\n\n\n\nexport type DateChange = Date | [Date, Date] | null;\n\nexport function DateSelector(props: {date: Date, onDateChange: (date: Date | null) => void}) {\n\n function handleChange(date: DateChange) {\n if (date === null) {\n props.onDateChange(null);\n } else if (Array.isArray(date)) {\n props.onDateChange(date[0])\n } else {\n props.onDateChange(date);\n }\n }\n\n return (\n \n \n \n \n )\n}\n","import './ValuationDate.scss';\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {selectValuationDate, setValuationDate} from \"../../comps/compsGroupSlice\";\nimport {getDateFromIsoString} from \"../../utility/dates\";\nimport {DateSelector} from \"../DateSelector/DateSelector\";\nimport React from \"react\";\nimport {fetchCompSet} from \"../../comps/compsTableSlice\";\n\nexport function useValuationDate(): [date: Date, updateDateFunc: (date: Date | null) => void] {\n const valuationDateIsoString = useSelector(selectValuationDate);\n const valuationDate = getDateFromIsoString(valuationDateIsoString);\n const dispatch = useDispatch();\n\n function handleValuationDateChange(date: Date | null): void {\n if (date === null) {\n return;\n }\n\n\n dispatch(setValuationDate(date.toISOString()))\n dispatch(fetchCompSet());\n }\n\n return [valuationDate, handleValuationDateChange];\n}\n\nexport function ValuationDate() {\n const [valuationDate, handleValuationDate] = useValuationDate();\n return (\n
    \n Enter Valuation Date\n \n
    \n );\n}\n","import './CompsTableInput.scss';\nimport React, {ReactNode, ReactNodeArray} from \"react\";\nimport {ValuationDate} from \"./ValuationDate\";\nimport {useSelector} from \"react-redux\";\nimport {selectCompsetTableResults} from \"../../comps/compsTableSlice\";\nimport classNames from \"classnames\";\n\ninterface CompsTableParams {\n className?: string;\n tableInputChildren?: ReactNode | ReactNodeArray;\n children?: ReactNode | ReactNodeArray;\n}\n\nexport function CompsTable(props: CompsTableParams) {\n const results = useSelector(selectCompsetTableResults);\n const className = classNames('comps-table', props.className);\n\n return (\n
    \n
    \n \n {props.tableInputChildren}\n
    \n <>\n {\n results.data_found !== 'all'\n ?

    {results.message}

    \n : null\n }\n {results.data_found !== 'none' ? props.children : null}\n \n
    \n )\n}\n","import './CompsConclusionTable.scss';\nimport '../Table/Table.scss'\nimport React, {useState} from 'react';\nimport {InputMoney} from \"../Input/InputMoney\";\nimport {\n selectCompanyNetDebt,\n selectRowDictionary,\n setSubjectCompanyNetDebt,\n updateRowsDictionary\n} from \"../../comps/compsTableSlice\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {formatNumber} from \"../../utility/numberFormatter\";\nimport * as math from 'mathjs';\nimport {CompsTable} from \"./CompsTableInput\";\n\n\ninterface ICalculatedCell {\n id: number;\n measureOfPerformance: string;\n companyResults: string;\n selectedMultiples: number | '-';\n}\n\ninterface TableProps {\n calculationsDictionary: { [measureOfPerformance: string]: ICalculatedCell };\n headers: string[];\n subjectCompanyNetDebt: string;\n enterpriseValue: string;\n onEnterpriseValueChange: (value: string) => void;\n handleRowUpdate: (id: number, value: string) => void;\n}\n\nconst netDebtHeader = \"Net Debt (MM)\";\nconst enterpriseValueHeader = \"Enterprise Value (MM)\";\nconst selectedMultiplesHeader = 'Selected Multiples';\nconst equityValueHeader = 'Equity Value (MM)';\nconst blankOperator = 'blank';\n\nexport function CompsConclusionTable() {\n const subjectCompanyNetDebt = useSelector(selectCompanyNetDebt);\n const rowsDictionary = useSelector(selectRowDictionary);\n const [inputEnterpriseValue, setInputEnterpriseValue] = useState('');\n const headers = [\"Measure of Performance\", \"Company Results (MM)\", selectedMultiplesHeader, equityValueHeader, netDebtHeader, enterpriseValueHeader];\n const dispatch = useDispatch();\n\n function handleOnEnterpriseValueChange(value: string) {\n setInputEnterpriseValue(value);\n }\n\n function handleRowUpdate(key: number, value: string) {\n dispatch(updateRowsDictionary({key: key, value: value}))\n }\n\n function handleOnNetDebChange(text: string) {\n dispatch(setSubjectCompanyNetDebt(text));\n }\n\n return (\n \n Subject Company Net Debt (MM)\n \n
    \n }\n >\n \n \n );\n}\n\n\nfunction Table(props: TableProps) {\n const rows = Object\n .keys(props.calculationsDictionary)\n .map(key => props.calculationsDictionary[key]);\n\n function getEquityValue(companyResults: string, selectedMultiples: number | '-', mop: string): number | string {\n const companyResultsNumber = getNumber(companyResults);\n\n if (mop.includes('EV')) {\n return 'blank'\n } else if (companyResultsNumber === '-' || selectedMultiples === '-') {\n return NaN;\n }\n\n\n return companyResultsNumber * selectedMultiples;\n }\n\n function getEnterpriseValue(companyResults: string, selectedMultiples: number | '-', subjectCompanyNetDebt: string, mop: string): number {\n let netDebtValue = subjectCompanyNetDebt == '' ? 0 : Number(subjectCompanyNetDebt) // default netDebt to 0\n let companyValue = companyResults == '' ? NaN : Number(companyResults) // default companyValue to NaN\n let multipleValue = selectedMultiples == '-' ? NaN : Number(selectedMultiples)\n\n if (isNaN(companyValue) || isNaN(multipleValue)) {\n return NaN\n } else if (mop.includes('EV')) {\n return companyValue * multipleValue\n } else {\n return companyValue * multipleValue + netDebtValue\n }\n }\n\n function getGoodEVValues(rows: ICalculatedCell[]): number[] {\n let values = rows.map(row =>\n getEnterpriseValue(row.companyResults, row.selectedMultiples, props.subjectCompanyNetDebt, row.measureOfPerformance)\n );\n let good_values = values.filter(value => (!isNaN(value)))\n return good_values\n }\n\n function getMaximum(rows: ICalculatedCell[]): number {\n let good_values = getGoodEVValues(rows)\n if (good_values.length <= 0) {\n return NaN;\n }\n return Math.max(...good_values);\n }\n\n function getAverage(rows: ICalculatedCell[]): number {\n let good_values = getGoodEVValues(rows)\n if (good_values.length > 0) {\n let sum = 0;\n for (let i in good_values) {\n sum += good_values[i]\n }\n return sum / good_values.length\n } else {\n return NaN\n }\n }\n\n function getMedian(rows: ICalculatedCell[]): number {\n let good_values = getGoodEVValues(rows)\n if (good_values.length <= 0) {\n return NaN;\n }\n\n return math.median(good_values)\n }\n\n function getMinimum(rows: ICalculatedCell[]): number {\n let good_values = getGoodEVValues(rows)\n if (good_values.length <= 0) {\n return NaN;\n }\n\n return math.min(good_values);\n }\n\n function getCoefficientOfVariation(rows: ICalculatedCell[]) {\n let good_values = getGoodEVValues(rows)\n let average = getAverage(rows)\n\n if (average != 0 && good_values.length > 0) {\n return math.std(good_values) / average * 100;\n } else {\n return NaN;\n }\n }\n\n function getUpperQuartile(rows: ICalculatedCell[]) {\n let good_values = getGoodEVValues(rows)\n\n\n if (good_values.length > 0) {\n let perc = percentile(good_values, 75)\n if (perc === undefined) {\n return NaN\n }\n return perc\n } else {\n return NaN;\n }\n }\n\n function getLowerQuartile(rows: ICalculatedCell[]) {\n let good_values = getGoodEVValues(rows)\n\n\n if (good_values.length > 0) {\n let perc = percentile(good_values, 25)\n if (perc === undefined) {\n return NaN\n }\n return perc\n } else {\n return NaN;\n }\n }\n\n function getNetDebt(debt: number | string, mop: string): number | string {\n\n let netDebtValue: number | string;\n if (mop.includes('EV')) {\n netDebtValue = 'blank'\n } else if (debt == '') {\n netDebtValue = 0\n } else {\n netDebtValue = Number(debt)\n }\n return netDebtValue\n }\n\n function getFairMarketValue(subjectCompanyNetDebt: string, rows: ICalculatedCell[]) {\n let netDebtValue = subjectCompanyNetDebt == '' ? 0 : Number(subjectCompanyNetDebt) // default netDebt to 0\n const enterprise_value = getMedian(rows);\n\n if (isNaN(enterprise_value)) {\n return NaN;\n }\n\n return enterprise_value - netDebtValue;\n }\n\n return (\n \n \n \n {\n props.headers.map(header =>\n\n \n )\n }\n \n \n \n {\n rows.map((row) =>\n\n \n \n \n \n \n \n \n \n )\n }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {getOperator(header, 'N/A')}{header}
    {row.measureOfPerformance}$ props.handleRowUpdate(row.id, e.target.value)}/>\n {getOperator(selectedMultiplesHeader, row.measureOfPerformance)}\n {formatNumber(row.selectedMultiples, 'decimal')}{getOperator(equityValueHeader, row.measureOfPerformance)}\n {formatNumber(getEquityValue(row.companyResults, row.selectedMultiples, row.measureOfPerformance),\n 'integer_m')}{getOperator(netDebtHeader, row.measureOfPerformance)}\n {formatNumber(getNetDebt(props.subjectCompanyNetDebt, row.measureOfPerformance),\n 'integer_m')}{getOperator(enterpriseValueHeader, row.measureOfPerformance)}\n {formatNumber(getEnterpriseValue(row.companyResults, row.selectedMultiples, props.subjectCompanyNetDebt, row.measureOfPerformance),\n 'integer_m')}
    \n Maximum{getOperator(enterpriseValueHeader, 'N/A')}{formatNumber(getMaximum(rows), 'integer_m')}
    \n Upper Quartile{getOperator(enterpriseValueHeader, 'N/A')}{formatNumber(getUpperQuartile(rows), 'integer_m')}
    \n Average{getOperator(enterpriseValueHeader, 'N/A')}{formatNumber(getAverage(rows), 'integer_m')}
    \n Median{getOperator(enterpriseValueHeader, 'N/A')}{formatNumber(getMedian(rows), 'integer_m')}
    \n Lower Quartile{getOperator(enterpriseValueHeader, 'N/A')}{formatNumber(getLowerQuartile(rows), 'integer_m')}
    \n Minimum{getOperator(enterpriseValueHeader, 'N/A')}{formatNumber(getMinimum(rows), 'integer_m')}
    \n Coefficient Of Variation{getOperator(enterpriseValueHeader, 'N/A')}{formatNumber(getCoefficientOfVariation(rows), 'percentage')}
    \n Enterprise Value{getOperator(enterpriseValueHeader, 'N/A')}{formatNumber(getMedian(rows), 'integer_m')}
    \n Less: Net Debt{getOperator(enterpriseValueHeader, 'N/A')}{'(' + formatNumber(getNetDebt(props.subjectCompanyNetDebt, 'N/A'), 'integer_m') + ')'}
    \n Fair Market Value{getOperator(enterpriseValueHeader, 'N/A')}{formatNumber(getFairMarketValue(props.subjectCompanyNetDebt, rows), 'integer_m')}
    \n );\n}\n\n\nfunction getOperator(header: string, mop: string): React.ReactNode {\n switch (header) {\n case equityValueHeader:\n if (mop.includes(\"EV\")) {\n return ;\n } else {\n return =;\n }\n case selectedMultiplesHeader:\n return X;\n case netDebtHeader:\n if (mop.includes(\"EV\")) {\n return ;\n } else {\n return +;\n }\n case enterpriseValueHeader:\n return $;\n case blankOperator:\n default:\n return ;\n }\n}\n\nfunction getNumber(value: string | number): number | '-' {\n const float = parseFloat(value.toString());\n if (isNaN(float)) {\n return '-';\n }\n\n return float;\n}\n\nfunction swap(data: number[], i: number, j: number) {\n if (i === j) {\n return;\n }\n const tmp = data[j];\n data[j] = data[i];\n data[i] = tmp;\n}\n\nfunction partition(data: number[], start: number, end: number) {\n let i, j;\n for (i = start + 1, j = start; i < end; i++) {\n if (data[i] < data[start]) {\n swap(data, i, ++j);\n }\n }\n swap(data, start, j);\n return j;\n}\n\nfunction findK(data: number[], start: number, end: number, k: number): number | undefined {\n while (start < end) {\n const pos = partition(data, start, end);\n if (pos === k) {\n return data[k];\n }\n if (pos > k) {\n end = pos;\n } else {\n start = pos + 1;\n }\n }\n}\n\n// Calculate n-th percentile of 'data' using Nearest Rank Method\n// http://en.wikipedia.org/wiki/Percentile#The_Nearest_Rank_method\nfunction percentile(data: number[], n: number): number | undefined {\n return findK(data.concat(), 0, data.length, Math.ceil(data.length * n / 100) - 1);\n}\n\n","import './CompsMultiplesTable.scss'\nimport '../Table/Table.scss'\nimport React from 'react';\nimport {useSelector} from \"react-redux\";\nimport {selectMultiples} from \"../../comps/compsTableSlice\";\nimport {formatNumber} from \"../../utility/numberFormatter\";\nimport {std} from 'mathjs';\nimport classNames from \"classnames\";\nimport {CompsTable} from \"./CompsTableInput\";\n\n\nexport default CompsMultiplesTable;\n\n\nfunction CompsMultiplesTable() {\n const {multiples, values, type} = useSelector(selectMultiples);\n const rowFilter = ['Maximum', 'Upper Quartile', 'Average', 'Median', 'Lower Quartile', 'Minimum'];\n const headers = getHeaders(multiples);\n const allRows = getAllRows(values);\n const nonFixedRows = getNonFixedRows(allRows, rowFilter);\n const fixedRows = getFixedRows(allRows, rowFilter);\n const selectedMultiples = getRow('Median', values);\n const sizeAdjustment = getSizeAdjustment(headers);\n const sizeAdjustedMultiples = getSizeAdjustedMultiples(selectedMultiples, sizeAdjustment);\n const coefficientOfVariation = getCoefficientOfVariation(nonFixedRows, getRow('Average', values));\n\n return (\n \n
    \n \n
    \n
    \n )\n}\n\ninterface ITableProps {\n headers: string[];\n nonFixedRows: (string | number)[][];\n fixedRows: (string | number)[][];\n selectedMultiples: (string | number)[];\n sizeAdjustment: number[];\n sizeAdjustedMultiples: (string | number)[];\n coefficientOfVariation: (string | number)[];\n datatype: string;\n}\n\nfunction Table(props: ITableProps) {\n return (\n \n \n \n {\n props.headers.map(header =>\n \n )\n }\n \n \n \n {\n props.nonFixedRows.length > 0 ?\n <>\n {\n props.nonFixedRows\n .map((row, index) =>\n \n {\n row.map((i, index) =>\n \n )\n }\n \n )\n }\n \n : null\n }\n {\n props.fixedRows.length > 0 ?\n <>\n {\n props.fixedRows\n .map((row, rowindex) =>\n \n {\n row.map((i, columnindex) =>\n \n )\n }\n \n )\n }\n \n : null\n\n }\n {\n props.fixedRows.length > 0 ?\n <>\n \n \n \n : null\n }\n\n \n
    \n {header}\n
    \n
    {index === 0 ? i : formatNumber(i, props.datatype)}
    \n
    \n
    {columnindex === 0 ? i : formatNumber(i, props.datatype)}
    \n
    \n );\n}\n\ninterface ICalculatedRowProps {\n row: (string | number)[];\n datatype: string;\n title: string;\n border: boolean;\n}\n\nfunction CalculatedRow(props: ICalculatedRowProps) {\n const showBorder = classNames({\n 'line': props.border\n }) ;\n\n return (\n \n \n
    {props.title}
    \n \n {\n props.row.map((i, index) =>\n \n
    {formatNumber(i, props.datatype)}
    \n \n )\n }\n \n );\n}\n\n\nfunction getSizeAdjustment(headers: string[]) {\n const sizeAdjustment = headers.map(i => 0.03);\n sizeAdjustment.pop();\n return sizeAdjustment;\n}\n\nfunction getRow(rowName: string, values: any[] | { [p: string]: number[] }[]): number[] {\n return values\n .filter(i => i[rowName])\n .flatMap(i => i[rowName]);\n}\n\nfunction getFixedRows(allRows: any[][], rowFilter: string[]) {\n return allRows.filter(i => rowFilter.indexOf(i[0].toString()) >= 0);\n}\n\nfunction getNonFixedRows(allRows: any[][], rowFilter: string[]) {\n return allRows.filter(i => rowFilter.indexOf(i[0].toString()) === -1);\n}\n\nfunction getHeaders(multiples: { name: string, heading: string }[]) {\n const headers = [\n multiples.length > 0 ? 'Company' : '',\n ...multiples.map(i => i.name + ' ' + i.heading)\n ];\n return headers;\n}\n\nfunction getAllRows(values: { [p: string]: number[] }[]) {\n const allRows = values.map(i => {\n const companyName = Object.keys(i)[0];\n const data = i[companyName];\n return [companyName, ...data];\n });\n return allRows;\n}\n\n\nfunction getSizeAdjustedMultiples(selectedMultiples: number[], sizeAdjustment: number[]): (string | number)[] {\n let result = [];\n for (let i = 0; i < selectedMultiples.length; i++) {\n try {\n let calculation = 1 / ((1 / selectedMultiples[i]) + sizeAdjustment[i]);\n result.push(calculation);\n } catch {\n result.push('N/A');\n }\n }\n return result;\n}\n\nfunction getCoefficientOfVariation(nonFixedRows: any[][], averages: number[]): (string | number)[] {\n let result: (string | number)[] = [];\n const numberOfRows = nonFixedRows.length;\n const numberOfColumns = nonFixedRows[0]?.length;\n\n if (!numberOfColumns || !numberOfColumns) {\n return result;\n }\n for (let column = 1; column < numberOfColumns; column++) {\n let columns = [];\n for (let row = 0; row < numberOfRows; row++) {\n const value = nonFixedRows[row][column];\n if (value != 'N/A') {\n columns.push(value);\n }\n }\n\n if (columns.length > 0) {\n let sum = 0;\n for (let i in columns) {\n sum += columns[i]\n }\n let avg = sum / columns.length\n\n if (avg != 0)\n result.push(std(columns) / avg * 100)\n else {\n result.push('N/A');\n }\n } else {\n result.push('N/A')\n }\n\n\n }\n\n return result;\n}\n","import './FinancialHighlightsTable.scss';\nimport React from 'react';\nimport {Fragment} from \"react\";\nimport {useSelector} from \"react-redux\";\nimport {selectFhComps} from \"../../comps/compsTableSlice\";\nimport {formatNumber} from \"../../utility/numberFormatter\";\nimport _ from \"lodash\";\nimport {IFhCompSetRow} from \"../../api/requestsTypes\";\nimport {CompsTable} from './CompsTableInput';\n\nexport default FinancialHighlightsTable;\n\nfunction FHtable(props: any) {\n\n const rows = props.rows;\n const row = props.row;\n const idx = props.idx;\n const max_idx = props.max_idx;\n\n if (idx == 0 || rows[idx - 1].section != row.section) {\n return \n \n {row.section}\n {\n row.data.values.map((value: any, i: any) =>\n i == max_idx ?\n :\n \n )\n }\n \n \n {row.data.header}\n {\n row.data.values.map((value: any, i: any) =>\n i == max_idx ?\n {formatNumber(value, row.type)} :\n {formatNumber(value, row.type)}\n )\n }\n \n \n\n\n } else {\n return \n {row.data.header}\n {\n row.data.values.map((value: any, i: any) =>\n i == max_idx ?\n {formatNumber(value, row.type)} :\n {formatNumber(value, row.type)}\n )\n }\n \n }\n\n\n}\n\nfunction FinancialHighlightsTable() {\n const fhComps = useSelector(selectFhComps);\n const sectionDictionary = _.groupBy(fhComps.values, i => i.section);\n const sections = Object.keys(sectionDictionary);\n const headers = fhComps.columns;\n const headerIndexes = headers.map(header => fhComps.columns.indexOf(header));\n const headersPlusEmptyCell = ['', ...headers]\n let max_idx = 0;\n headers.forEach((h, i) => {\n if (h == 'Maximum') {\n max_idx = i\n }\n })\n\n return (\n \n \n \n \n \n {\n headers.map((header, i) =>\n i == max_idx ? :\n \n )\n }\n \n \n \n {\n fhComps.values.map((row, idx, rows) =>\n \n )\n }\n \n
    {header}{header}
    \n
    \n )\n}\n\n\ninterface ITableRows {\n headers: string[];\n rows: string[][];\n}\n\nfunction HeaderTables(props: { headers: string[] }) {\n return (\n \n \n \n {\n props.headers.map(i =>\n \n )\n }\n \n \n
    \n {i}\n
    \n )\n}\n\n\nfunction RowTables(props: ITableRows) {\n return (\n \n \n \n {\n props.headers.map((i) =>\n \n )\n }\n \n \n \n {\n props.rows.map((row, index) =>\n \n {\n row.map((column, i) => )\n }\n \n )\n }\n \n
    {column}
    \n )\n}\n\ninterface ISingleColumnTableProps {\n sectionName: string;\n sectionRows: IFhCompSetRow[];\n}\n\n\nfunction SingleColumnTable(props: ISingleColumnTableProps) {\n return (\n \n \n \n \n \n \n \n {\n props.sectionRows.map(i =>\n \n \n \n )\n }\n \n
    {props.sectionName}
    {i.data.header}
    \n );\n}\n\nfunction getRows(row: IFhCompSetRow, rowIndexes: number[]): string[] {\n let output = [row.data.header]\n rowIndexes.forEach(i => {\n output.push(formatNumber(row.data.values[i], row.type))\n })\n return output\n}\n","import './RanksTable.scss';\nimport React from 'react';\nimport {useSelector} from \"react-redux\";\nimport {selectRanks} from \"../../comps/compsTableSlice\";\nimport {formatNumber} from \"../../utility/numberFormatter\";\nimport {CompsTable} from \"./CompsTableInput\";\n\nexport default RanksTable;\n\ninterface IRanksCardProps {\n title: string,\n type: string,\n values: [string, number][],\n}\n\nfunction RanksCard(props: IRanksCardProps) {\n return (\n
    \n \n \n \n \n \n \n \n {\n props.values.map(i =>\n \n \n \n \n )\n }\n \n
    {props.title}
    {i[0]}{formatNumber(i[1], props.type)}
    \n
    \n );\n}\n\nfunction RanksTable() {\n const ranks = useSelector(selectRanks);\n const mapToCard = Object.keys(ranks).map(key =>\n \n );\n\n return (\n \n
    \n {mapToCard}\n
    \n
    \n )\n}\n","import './BusinessDescription.scss';\nimport React from 'react';\nimport {useSelector} from \"react-redux\";\nimport {selectDescriptions} from \"../../comps/compsTableSlice\";\nimport {CompsTable} from \"./CompsTableInput\";\n\nexport default BusinessDescriptionTable;\n\nfunction BusinessDescriptionTable() {\n const descriptions = useSelector(selectDescriptions);\n\n return (\n \n \n \n \n \n \n \n \n \n \n {\n descriptions.map(i =>\n \n \n \n \n \n )\n }\n \n
    CompanyTickerDescription
    {i.company}{i.ticker}{i.description}
    \n
    \n )\n}\n","import {RowDictionary} from \"../comps/compsTableSlice\";\n\nexport const cellAlphaMap = ['A','B','C','D','E','F','G','H','I','J','K',\n 'L','M','N','O','P','Q','R','S','T','U','V',\n 'W','X','Y','Z','AA','AB','AC','AD','AE','AF',\n 'AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP',\n 'AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'\n ];\n\n\nexport const cellNumberFormat = '$#,##0_);($#,##0)';\nexport const cellDecimalFormat = '0.0_) ;(0.0)';\nexport const cellPercentageFormat= '_(* #,##0.0%_);_(* (#,##0.0%);_(* \"-\"??_);_(@_)';\nexport const dateFormat = 'm/d/yy'\n\nexport const getAlphaFromCellRef = (cellRef: string) => {\n return (cellRef.match(/[A-Z]/g) ?? []).join('');\n}\n\nexport const getNumericFromCellRef = (cellRef: string) => {\n return (cellRef.match(/[0-9]/g) ?? []).join('');\n}\n\n// Returns a cell reference key\nexport const moveRight = (sourceCell: string, count: number) => {\n // Move right from the current cell for {count} positions\n let a = getAlphaFromCellRef(sourceCell);\n let newRef = cellAlphaMap.indexOf(a) + count;\n return `${cellAlphaMap[newRef]}${getNumericFromCellRef(sourceCell)}`;\n};\n\n// Returns a cell reference key\nexport const moveDown = (sourceCell: string, count: number) => {\n // Move down from the current cell for {count} positions\n return getAlphaFromCellRef(sourceCell) + (Number(getNumericFromCellRef(sourceCell)) + count);\n};\n\n// Sets the cell value directly\nexport const setCellValue = (sheet: any, cellRef: string, value: any, cellFormat?: string) => {\n if(sheet[cellRef] == undefined) {\n // Make new cell\n sheet[cellRef] = {\n t: \"n\",\n v: \"\"\n };\n }\n // Some values are either NaN or null, display 0 instead.\n sheet[cellRef].v = (value == \"NaN\" || value == null) ? '' : value;\n if(typeof(value) == 'number') {\n sheet[cellRef].t = 'n';\n } else {\n sheet[cellRef].t = 's';\n }\n if(sheet[cellRef].w != undefined) {\n delete(sheet[cellRef].w)\n }\n if(cellFormat != undefined) {\n sheet[cellRef].z = cellFormat;\n }\n}\n\nconst alphaNumericSort = (arr: Array) => {\n const sorter = (a: any, b: any) => {\n const isNumber = (v: any) => (+v).toString() === v;\n const aPart = a.match(/\\d+|\\D+/g);\n const bPart = b.match(/\\d+|\\D+/g);\n let i = 0; let len = Math.min(aPart.length, bPart.length);\n while (i < len && aPart[i] === bPart[i]) { i++; };\n if (i === len) {\n return aPart.length - bPart.length;\n };\n if (isNumber(aPart[i]) && isNumber(bPart[i])) {\n return aPart[i] - bPart[i];\n };\n return aPart[i].localeCompare(bPart[i]);\n };\n arr.sort(sorter);\n };\n \nexport const insertColumns = (worksheet: any, columns: number, startingCol: string) => {\n // update ref array with new max\n let front = worksheet['!ref'].split(':')[0];\n let back = worksheet['!ref'].split(':')[1];\n back = moveRight(back, columns);\n worksheet['!ref'] = `${front}:${back}`;\n\n const currentKeys: string[] = Object\n .keys(worksheet)\n .filter(key => key.charCodeAt(0) > startingCol.charCodeAt(0));\n alphaNumericSort(currentKeys);\n currentKeys.reverse();\n \n let modifiedKeys = currentKeys.map(key => {\n return key.replace(/[A-Z]+/, (match: string) => {\n let char0indexed = 'A'.charCodeAt(0) + 1;\n \n if (match.length === 1) {\n let charCode = match.charCodeAt(0);\n let newCharCode = charCode + columns;\n if (newCharCode - char0indexed > 26) {\n return 'A' + String.fromCharCode((newCharCode - char0indexed) % 26 + char0indexed)\n } else {\n return String.fromCharCode(newCharCode);\n }\n } else if (match.length === 2) {\n let charCode = match.substring(1).charCodeAt(0);\n let newCharCode = charCode + columns;\n if (newCharCode - char0indexed > 26) {\n return 'B' + String.fromCharCode((newCharCode - char0indexed) % 26 + char0indexed)\n } else {\n return 'A' + String.fromCharCode(newCharCode);\n }\n }\n return match;\n });\n });\n\n for (let i = 0; i < currentKeys.length; i++) {\n // JSON back and forth to make deep copy of cell\n worksheet[modifiedKeys[i]] = JSON.parse(JSON.stringify(worksheet[currentKeys[i]]));\n worksheet[currentKeys[i]] = {t: \"n\", v: \"\"};\n };\n}\n\nexport function insertRows(worksheet: any, rows: number, startingRow: number) {\n // update ref array with new max\n let front = worksheet['!ref'].split(':')[0];\n let back = worksheet['!ref'].split(':')[1];\n back = moveDown(back, rows);\n worksheet['!ref'] = `${front}:${back}`;\n\n const currentKeys: string[] = Object\n .keys(worksheet)\n .filter((key:string) => {\n return Number(key.match(/\\d+/)) > startingRow;\n });\n alphaNumericSort(currentKeys);\n currentKeys.reverse();\n\n const modifiedKeys = currentKeys.map(key => {\n return key.replace(/\\d+/, (match:string) => {\n return (Number(key.match(/\\d+/)) + rows).toString();\n });\n });\n\n for (let i = 0; i < currentKeys.length; i++) {\n worksheet[modifiedKeys[i]] = JSON.parse(JSON.stringify(worksheet[currentKeys[i]]));\n worksheet[currentKeys[i]] = {t: \"n\", v: \"\"};\n }\n}\n","export const fhCompsRowMap = [\n null,\n 'LFY Revenue (MM)',\n 'LFY EBITDA (MM)',\n 'Enterprise Value (MM)',\n 'Market Capitalization (MM)',\n 'Assets (MM)',\n 'Book Equity (MM)',\n 'Net Debt (MM)',\n 'Net Working Capital (MM)',\n null,\n null,\n 'LFY Revenue Growth Rate (%)',\n 'Revenue 3-Year CAGR (%)',\n 'LFY EBITDA Growth Rate (%)',\n 'EBITDA 3-Year CAGR (%)',\n null,\n null,\n 'Inventory Turnover',\n 'Asset Turnover',\n null,\n null,\n 'Current Ratio',\n 'Net Working Capital / Revenue (%)',\n null,\n 'Days in Accounts Receivable',\n 'Days in Inventories',\n 'Days in Accounts Payable',\n 'Net Trade Cycle',\n null,\n null,\n 'Debt Capitalization (%)',\n 'Equity Capitalization (%)',\n 'Liabilities / Equity',\n 'Assets / Equity',\n 'Times Interest Earned',\n null,\n null,\n 'Gross Profit Margin (%)',\n 'EBITDA Margin (%)',\n 'EBIT Margin (%)',\n 'Net Profit Margin (%)',\n 'Return on Assets (%)',\n 'Return on Equity (%)',\n null,\n null,\n 'Capital Expenditures / Revenue (%)',\n 'Income Tax Rate (%)',\n null,\n null,\n 'Net Profit Margin (%)',\n 'Assets / Equity',\n 'Asset Turnover',\n 'Return on Equity (%)'\n];\n\nexport const multiplesColumnMap = [\n 'Earnings MVE / LFY',\n 'Earnings MVE / 5-Year Avg.',\n 'Earnings MVE / 3-Year Avg.',\n 'Gross Cash Flow MVE / LFY',\n 'Gross Cash Flow MVE / 5-Year Avg.',\n 'Gross Cash Flow MVE / 3-Year Avg.',\n 'EBIT MVE / LFY',\n 'EBIT MVE / 5-Year Avg.',\n 'EBIT MVE / 3-Year Avg.',\n 'EBITDA MVE / LFY',\n 'EBITDA MVE / 5-Year Avg.',\n 'EBITDA MVE / 3-Year Avg.',\n 'Revenue MVE / LFY',\n 'Revenue MVE / 5-Year Avg.',\n 'Revenue MVE / 3-Year Avg.',\n 'Gross Profit MVE / LFY',\n 'Gross Profit MVE / 5-Year Avg.',\n 'Gross Profit MVE / 3-Year Avg.',\n 'Book Value MVE / LFY',\n 'Book Value MVE / 5-Year Avg.',\n 'Book Value MVE / 3-Year Avg.',\n];\n\nexport const ranksSheetMap = [\n [\n 'Revenue (MM)',\n 'Gross Margin (%)',\n 'EBITDA Margin (%)',\n '3-Year CAGR of Revenue (%)',\n '3-Year CAGR of EBITDA (%)'\n ],\n [\n 'Return on Assets (%)',\n 'Return on Equity (%)',\n 'Current Ratio',\n 'Net Working Capital / Revenue (%)',\n 'Times Interest Earned'\n ],\n [\n 'Capital Expenditures / Revenue (%)',\n 'Inventory Turnover',\n 'Assets (MM)',\n 'Debt Capitalization (%)',\n 'Equity Capitalization (%)'\n ],\n [\n 'Net Trade Cycle',\n 'Asset Turnover',\n 'Days in Accounts Receivable',\n 'Days in Inventory',\n 'Days in Accounts Payable'\n ]\n ];\n\ntype ValuationDateMap = {\n [key: string]: string\n}\nexport const valuationDateMap: ValuationDateMap = {\n FHcomps: 'E3',\n Multiples: 'C3',\n Ranks: 'C3',\n Conc: 'C3'\n};\n","import xlsx, {WorkBook} from 'xlsx';\nimport {\n cellAlphaMap,\n cellDecimalFormat,\n cellNumberFormat,\n cellPercentageFormat,\n dateFormat,\n getAlphaFromCellRef,\n getNumericFromCellRef,\n insertColumns,\n insertRows,\n moveDown,\n moveRight,\n setCellValue\n} from './exportUtilities'\nimport {fhCompsRowMap, multiplesColumnMap, ranksSheetMap, valuationDateMap} from './exporterMappings'\nimport {RowDictionary} from '../comps/compsTableSlice'\nimport {ICompSetResponse} from \"../api/requestsTypes\";\n\n\nconst wbTemplateUrl = 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/template_v6.xlsx';\n\nconst get_format = (type: string): string => {\n let format: string;\n\n if (type == 'percentage') {\n format = cellPercentageFormat\n } else if (type == 'decimal') {\n format = cellDecimalFormat\n } else {\n format = cellNumberFormat\n }\n\n return format\n}\n\nfunction fetchWorkbookTemplateBuffer(): Promise {\n return fetch(wbTemplateUrl)\n .then(function (res) {\n if (!res.ok) {\n throw new Error(\"Could not get the export template\");\n }\n return res.arrayBuffer();\n });\n}\n\n\nfunction convertBufferToWorkbook(ab: ArrayBuffer): WorkBook{\n let data = new Uint8Array(ab);\n return xlsx.read(data, {\n type: \"array\",\n cellStyles: true,\n // This property is not in the type, but required for formulas to survive round-tripping\n // @ts-ignore\n xlfn: true\n });\n}\n\nfunction writeWorkbook(workBook: WorkBook): any {\n // Write file (the xlsx write file method does\n // not work with the development server that runs in the local env)\n return xlsx.write(workBook, {\n type: 'base64'\n });\n}\n\nexport function populateWorkBook(\n workBook: WorkBook,\n exportData: any,\n companyCount: number,\n valuationDate: string,\n companyNetDebt: string,\n userInputDictionary: RowDictionary\n): void {\n if(companyCount === 0) {\n return;\n }\n\n // Insert the fh comps data\n fillFhComps(workBook, companyCount, exportData.fh_comps);\n fixFormulasFHComps(workBook, companyCount);\n // Insert the multiples data\n let companies = exportData.descriptions.map((c: any) => c.company);\n fillMultiples(workBook, companies, exportData.multiples);\n fixFormulasMultiples(workBook, companyCount);\n // Insert ranks data\n fillRanks(workBook, companyCount, exportData.ranks);\n // Fix Conc formulas\n fixFormulasConc(workBook, companyCount);\n // Insert the descriptions data\n fillDescriptions(workBook, exportData.descriptions);\n // Insert valuation date\n fillValuationDate(workBook, valuationDate);\n // Populate comps tab\n insertUserData(workBook, companyNetDebt, userInputDictionary)\n // Clean out the extra columns that the library adds to lower file size\n cleanExtraColumns(workBook);\n}\n\nfunction exportWorkbook(wbData: any) {\n const linkSource = `data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,${wbData}`;\n const downloadLink = document.createElement(\"a\");\n const d = new Date();\n const fileName = `export-${d.toLocaleDateString()}.xlsx`;\n downloadLink.href = linkSource;\n downloadLink.download = fileName;\n downloadLink.click();\n}\n\nexport const exportFromCompSet = (\n companyCount: number,\n exportData: ICompSetResponse,\n valuationDate: string,\n companyNetDebt: string,\n userInputDictionary: RowDictionary) => {\n\n return fetchWorkbookTemplateBuffer()\n .then((buffer) => {\n const workBook = convertBufferToWorkbook(buffer);\n populateWorkBook(\n workBook,\n exportData,\n companyCount,\n valuationDate,\n companyNetDebt,\n userInputDictionary\n );\n const wbData = writeWorkbook(workBook);\n exportWorkbook(wbData);\n })\n .catch(error => {\n console.log(error);\n });\n}\n\nconst insertUserData = (wb: any, companyNetDebt: string, userInputDictionary: RowDictionary) => {\n\n const conclusion = wb.Sheets['Conc']\n let results_column = \"D\"\n let starting_row = 9\n let row_indices = Object.keys(userInputDictionary)\n for (let i = starting_row; i < starting_row + row_indices.length; i++) {\n let cell = results_column + String(i)\n setCellValue(conclusion, cell, Number(userInputDictionary[i - starting_row].companyResults), cellNumberFormat)\n\n }\n setCellValue(conclusion, \"J5\", Number(companyNetDebt), cellNumberFormat);\n\n\n}\n\nconst fillFhComps = (workbook: any, companyCount: number, fhComps: any) => {\n var sheet = workbook.Sheets[\"FHcomps\"];\n var sourceCell = 'F6';\n\n insertColumns(sheet, companyCount - 1, getAlphaFromCellRef(sourceCell));\n\n for (let i = 0; i < companyCount; i++) {\n // Get cell for edit\n let currentCell = moveRight(sourceCell, i);\n // Set company title\n setCellValue(sheet, currentCell, fhComps.columns[i]);\n // Set the values\n let currentDataCellRef = currentCell;\n for (let v = 0; v < fhCompsRowMap.length; v++) {\n // Update the reference to one below where we are now\n currentDataCellRef = moveDown(currentDataCellRef, 1);\n const valueName = fhCompsRowMap[v];\n if (valueName == null) {\n continue;\n }\n // Find the value from the source data\n let dataFrame = fhComps.values.filter((item: any) => item.data.header == valueName);\n // Get value from that data in array\n if (dataFrame.length === 0) {\n } else {\n // Set the value in the spreadsheet at this reference.\n let data = dataFrame[0].data.values[i];\n let dataType = dataFrame[0].type;\n let format = get_format(dataType)\n let val = dataType == 'percentage' ? (isNaN(data) ? \"N/A\" : data / 100) : data;\n setCellValue(sheet, currentDataCellRef, val, format);\n }\n }\n }\n}\n\nconst fixFormulasFHComps = (workbook: any, companyCount: number) => {\n var sheet = workbook.Sheets[\"FHcomps\"];\n // Fix formulas on fhcomps page\n var cells = Object.keys(sheet).filter(ref => !ref.startsWith('!'))\n for (let i = 0; i < cells.length; i++) {\n const cell = sheet[cells[i]];\n // If cell contains formula\n if (cell.f != undefined) {\n // Find range and update it\n var formula = cell.f.match(/[A-Z]{1,3}[0-9]{1,7}:[A-Z]{1,3}[0-9]{1,7}/);\n if (formula != null && formula.length > 0) {\n let range = formula[0];\n let front = range.split(':')[0];\n let back = range.split(':')[1];\n // For fhcomps, adjust back reference by column\n back = moveRight(back, companyCount - 1);\n var newRange = `${front}:${back}`;\n\n cell.f = cell.f.replace(range, newRange);\n }\n }\n }\n}\n\nconst fillMultiples = (workbook: any, companyList: Array, multiples: any) => {\n var sheet = workbook.Sheets[\"Multiples\"];\n var sourceCell = 'B10';\n\n insertRows(sheet, companyList.length - 1, Number(getNumericFromCellRef(sourceCell)));\n\n let currentCell = sourceCell.toString();\n for (let i = 0; i < companyList.length; i++) {\n // Use current cell for edit\n currentCell = moveDown(sourceCell, i);\n // Set company title\n setCellValue(sheet, currentCell, companyList[i]);\n // Set the values\n let currentDataCellRef = currentCell;\n // Decopule cell counter from iteration because data does not contain empty values for LTM\n let cellCounter = 0;\n for (let v = 0; v < multiplesColumnMap.length; v++) {\n // Update the reference to one right of where we are now\n currentDataCellRef = moveRight(currentDataCellRef, 1);\n const valueName = multiplesColumnMap[v];\n if (valueName == null) {\n continue;\n }\n // Find the value from the source data\n // i = company, v = index in array\n let dataCompany = multiples.values[i];\n let dataFrame = dataCompany[Object.keys(dataCompany)[0]][cellCounter];\n // Increment cell counter to keep pace with data/heading mismatch\n cellCounter++;\n // Get value from that data in array\n if (dataFrame == undefined) {\n } else {\n // Set the value in the spreadsheet at this reference.\n setCellValue(sheet, currentDataCellRef, dataFrame, cellDecimalFormat);\n }\n }\n }\n}\n\nconst fixFormulasMultiples = (workbook: any, companyCount: number) => {\n var sheet = workbook.Sheets[\"Multiples\"];\n // Fix formulas on fhcomps page\n var cells = Object.keys(sheet).filter(ref => !ref.startsWith('!'))\n for (let i = 0; i < cells.length; i++) {\n const cell = sheet[cells[i]];\n // If cell contains formula\n if (cell.f != undefined) {\n // Complex formula or simple formula?\n // If we have more than 2 references we have a complex formula\n var references = cell.f.match(/[A-Z]{1,3}[0-9]{1,7}/g);\n if (references != null) {\n // Complex formula\n if (references.length > 2) {\n // Do we have a range?\n var rangeFormula = cell.f.match(/[A-Z]{1,3}[0-9]{1,7}:[A-Z]{1,3}[0-9]{1,7}/);\n if (rangeFormula != null) {\n // Update range\n let range = rangeFormula[0];\n let front = range.split(':')[0];\n let back = range.split(':')[1];\n // For multiples, adjust back reference by row\n back = moveDown(back, companyCount - 1);\n var newRange = `${front}:${back}`;\n // Second cell reference\n let reference = references[references.length - 1];\n // For multiples, adjust reference by row\n reference = moveDown(reference, companyCount - 1);\n // Replace the second reference first to prevent overwriting\n cell.f = cell.f.replace(references[references.length - 1], reference);\n // Now replace the range\n cell.f = cell.f.replace(range, newRange);\n }\n } else {\n // Find range and update it\n var rangeFormula = cell.f.match(/[A-Z]{1,3}[0-9]{1,7}:[A-Z]{1,3}[0-9]{1,7}/);\n if (rangeFormula != null && rangeFormula.length > 0) {\n let range = rangeFormula[0];\n let front = range.split(':')[0];\n let back = range.split(':')[1];\n // For multiples, adjust back reference by row\n back = moveDown(back, companyCount - 1);\n var newRange = `${front}:${back}`;\n\n cell.f = cell.f.replace(range, newRange);\n } else {\n // Non range formula\n var formula = cell.f.match(/[A-Z]{1,3}[0-9]{1,7}/g);\n if (formula != null && formula.length > 0) {\n let reference = formula[0];\n // For multiples, adjust reference by row\n reference = moveDown(reference, companyCount - 1);\n cell.f = cell.f.replace(formula[0], reference);\n }\n }\n }\n }\n }\n }\n}\n\nconst fillRanks = (workbook: any, companyCount: number, ranks: any) => {\n\n const ranksSheet = workbook.Sheets['Ranks'];\n const ranksSourceCell = 'B7';\n let rowInsertPosition = 7;\n // 5 is the number of rows between row insert positions in the template\n let rowInsertPostionIncrement = companyCount + 3;\n\n let ranksCurrentCell = ranksSourceCell.toString();\n let columnRef = ranksSourceCell.toString();\n let rowRef = columnRef;\n // Remove merges formatting\n for (let i = 0; i < ranksSheetMap.length; i++) {\n // Run first level insert on the whole row\n insertRows(ranksSheet, companyCount, rowInsertPosition);\n // Insert data\n for (let j = 0; j < ranksSheetMap[i].length; j++) {\n // Run insert on the actual data values in each box\n const ranksData = ranks[ranksSheetMap[i][j]];\n for (let k = 0; k < ranksData.values.length; k++) {\n ranksCurrentCell = moveDown(rowRef, k);\n setCellValue(ranksSheet, ranksCurrentCell, ranksData.values[k][0]);\n ranksCurrentCell = moveRight(ranksCurrentCell, 1);\n let format = get_format(ranksData.type)\n let dataValue = ranksData.values[k][1];\n let val = ranksData.type == 'percentage' ? (isNaN(dataValue) ? \"N/A\" : dataValue / 100) : dataValue;\n setCellValue(ranksSheet, ranksCurrentCell, val, format);\n }\n // Move to next box\n columnRef = moveRight(columnRef, 3);\n rowRef = columnRef;\n }\n // Move to next row\n rowInsertPosition += rowInsertPostionIncrement;\n columnRef = 'B' + rowInsertPosition.toString();\n rowRef = columnRef;\n ranksCurrentCell = columnRef;\n }\n ;\n}\n\n\nconst fixFormulasConc = (workbook: any, companyCount: number) => {\n var sheet = workbook.Sheets[\"Conc\"];\n // Fix formulas on fhcomps page\n var cells = Object.keys(sheet).filter(ref => !ref.startsWith('!'))\n for (let i = 0; i < cells.length; i++) {\n const cell = sheet[cells[i]];\n // If cell contains formula\n if (cell.f != undefined) {\n // Find formula and update it\n // Only formulas with another sheet reference\n var formula = cell.f.match(/[A-Z]{1,3}[0-9]{1,7}/);\n if (formula != null && formula.length > 0 && cell.f.indexOf('!') != -1) {\n let reference = formula[0];\n // For fhcomps, adjust back reference by column\n reference = moveDown(reference, companyCount - 1);\n cell.f = cell.f.replace(formula[0], reference);\n }\n }\n }\n}\n\nconst fillDescriptions = (workbook: any, descriptions: any) => {\n var sheet = workbook.Sheets[\"Desc\"];\n var sourceCell = 'B5';\n\n insertRows(sheet, descriptions.length * 2, 5);\n\n for (let i = 0; i < descriptions.length; i++) {\n const company = descriptions[i];\n // Company Name is source cell\n setCellValue(sheet, sourceCell, company.company)\n\n // Exchange ticker is 1 right from source\n var tickerCell = moveRight(sourceCell, 1);\n setCellValue(sheet, tickerCell, `${company.exchange}:${company.ticker}`)\n\n // Description is two right from source\n var descCell = moveRight(sourceCell, 2);\n setCellValue(sheet, descCell, company.description)\n\n // Set new sourceCell\n sourceCell = moveDown(sourceCell, 2);\n }\n}\n\nconst fillValuationDate = (workbook: any, valuationDate: string) => {\n var keys = [\"FHcomps\", \"Multiples\", \"Ranks\", \"Conc\"];\n\n for (let i = 0; i < keys.length; i++) {\n const key: string = keys[i];\n let sheet = workbook.Sheets[key];\n let d = new Date(valuationDate)\n let dformat = [d.getMonth() + 1,\n d.getDate(),\n d.getFullYear()].join('/')\n setCellValue(sheet, valuationDateMap[key], dformat, dateFormat);\n }\n}\n\nconst cleanExtraColumns = (workbook: any) => {\n for (let s = 0; s < Object.keys(workbook.Sheets).length; s++) {\n const sheet = workbook.Sheets[Object.keys(workbook.Sheets)[s]];\n if (sheet['!cols'] != undefined) {\n // Get the last cell in the column list that has data\n let lastCol = getAlphaFromCellRef(sheet['!ref'].split(':')[1]);\n let lastIndex = cellAlphaMap.indexOf(lastCol);\n // remove all items from !cols that are after that. xlsx defaults to 16k columns.\n sheet['!cols'] = sheet['!cols'].slice(0, lastIndex - 1);\n }\n }\n}\n","import './TickerPicker.scss';\nimport React, {useState} from \"react\";\nimport FilterSearchBar from \"../FilterContainer/FilterSearchBar\";\nimport {List} from \"../List/List\";\nimport {Loader} from '../Loader/Loader';\nimport {ITicker, TickerItem} from \"../../types\";\n\nfunction getTickerItems(tickers: ITicker[]) {\n return tickers.map(i => ({\n ...i,\n id: i.uid,\n key: i.uid\n }));\n}\n\ninterface TickerPickerItemProps {\n ticker: TickerItem;\n onTickerPicked: (ticker: TickerItem) => void;\n}\n\nexport function TickerPickerItem(props: TickerPickerItemProps) {\n return (\n props.onTickerPicked(props.ticker)}>\n \n {props.ticker.ticker}\n \n \n {props.ticker.company_name}\n \n \n );\n}\n\nexport function TickerPicker(props: {\n onTickerPicked: (ticker: TickerItem) => void,\n excludeTickers?: number[],\n tickers: ITicker[],\n isLoading: boolean\n}) {\n const tickerList = getTickerItems(props.tickers);\n const [searchText, setSearchText] = useState('');\n\n const mapper = (ticker: TickerItem) =>\n \n\n function filterTickers(): TickerItem[] {\n let filteredTickers = tickerList\n .sort((a, b) => (a.ticker > b.ticker) ? 1 : -1);\n\n if(props.excludeTickers &&\n props.excludeTickers.length > 0){\n filteredTickers = filteredTickers.filter(i => props.excludeTickers?.indexOf(i.uid) === -1)\n }\n\n if (searchText.length) {\n filteredTickers = filteredTickers\n .filter(i => i.ticker\n .toLowerCase()\n .includes(searchText.toLowerCase()))\n }\n\n return filteredTickers;\n }\n\n return (\n
    \n \n \n \n
    \n );\n}\n\n","import {useDispatch, useSelector} from \"react-redux\";\nimport {addCompsToGroup, selectCompSet} from \"../../comps/compsGroupSlice\";\nimport React, {useEffect} from \"react\";\nimport {TickerPicker} from \"../TickerPicker/TickerPicker\";\nimport {fetchCompSet} from \"../../comps/compsTableSlice\";\nimport {TickerItem} from \"../../types\";\nimport {fetchTickers, selectIsFetchingTickers, selectTickers} from \"../../comps/compsTickerPickerSlice\";\n\nexport function CompsTickerPicker() {\n const compset = useSelector(selectCompSet);\n const dispatch = useDispatch();\n const tickers = useSelector(selectTickers);\n const isLoading = useSelector(selectIsFetchingTickers);\n\n useEffect(() => {\n dispatch(fetchTickers({bypassCache: false}));\n\n return handleOnTickerPickerClosed;\n }, []);\n function handleOnTickerPicked (ticker: TickerItem) {\n dispatch(addCompsToGroup(ticker));\n }\n\n function handleOnTickerPickerClosed() {\n dispatch(fetchCompSet());\n }\n\n\n return (\n \n );\n}\n","import './CompsPage.scss';\nimport React, {useEffect, useState} from 'react'\nimport CompsSavedCompsGroups from './CompsSavedCompsGroups';\nimport CompsSelectedCompsGroup from \"../CompsSelectedCompsGroup/CompsSelectedCompsGroup\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {selectSelectedCompsGroup} from \"../../comps/compsGroupSlice\";\nimport {CompsTableContainer} from \"../CompsTable/CompsTableContainer\";\nimport {Modal} from '../Modal/Modal';\nimport classNames from 'classnames';\nimport {CompsConclusionTable} from \"../CompsTable/CompsConclusionTable\";\nimport CompsMultiplesTable from \"../CompsTable/CompsMultiplesTable\";\nimport FinancialHighlightsTable from \"../CompsTable/FinancialHighlightsTable\";\nimport RanksTable from '../CompsTable/RanksTable';\nimport BusinessDescriptionTable from '../CompsTable/BusinessDescriptionTable';\nimport {fetchCompSet, selectTableData, selectCompanyNetDebt, selectRowDictionary} from \"../../comps/compsTableSlice\";\nimport {selectValuationDate} from \"../../comps/compsGroupSlice\";\nimport { exportFromCompSet } from '../../exportProcess/exporter';\nimport {fetchUserCompSets} from \"../../comps/savedCompsSets\";\nimport SmallScreenAlert from \"../Utility/SmallScreenAlert\";\nimport {CompsTickerPicker} from \"./CompsTickerPicker\";\nimport {fetchTickers} from \"../../comps/compsTickerPickerSlice\";\n\nfunction CompsPage() {\n const companyGroup = useSelector(selectSelectedCompsGroup)\n const [showColumnEditor, setShowColumnEditor] = useState(false);\n const [showTickerPicker, setShowTickerPicker] = useState(false);\n const [isExporting, setIsExporting] = useState(false);\n\n const tableData = useSelector(selectTableData);\n const valuationDate = useSelector(selectValuationDate);\n const companyNetDebt = useSelector(selectCompanyNetDebt);\n const userInputDictionary = useSelector(selectRowDictionary);\n\n const companyList = Object.keys(companyGroup)\n .map(i => companyGroup[i])\n .map((comp, index) => ({\n companyId: index,\n ticker: comp.ticker\n }));\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(fetchCompSet());\n dispatch(fetchUserCompSets());\n dispatch(fetchTickers({bypassCache: true}));\n }, []);\n\n\n const tabs = {\n \"Conclusion\": {\n title: 'Indication of Value',\n table: () => \n },\n \"Multiples\": {\n title: \"Pricing Multiples\",\n table: () => \n },\n \"Financial Highlights\": {\n title: 'Financial Highlights and Ratio Analysis',\n table: () => \n },\n \"Ranks\": {\n title: 'Relative Ranking',\n table: () => \n },\n \"Desc\": {\n title: 'Business Description',\n table: () => \n },\n };\n const compsPageClassName =\n classNames({\n 'blur': showColumnEditor || showTickerPicker,\n });\n\n function handleOnShowColumnEditor() {\n return setShowColumnEditor(true);\n }\n\n function handleOnCloseColumnEditor() {\n return setShowColumnEditor(false);\n }\n\n function handleOnCloseTickerPicker() {\n return setShowTickerPicker(false);\n }\n\n function handleOnShowTickerPicker() {\n return setShowTickerPicker(true);\n }\n\n function handleOnExportButtonClicked() {\n setIsExporting(true);\n\n // currently there is no way to know which company failed to return data from the api\n // therefore we must use the tableData.descriptions to determine how many companies are\n // actually being exported.\n const companyCount = tableData?.descriptions\n ? tableData?.descriptions.length\n : 0\n\n exportFromCompSet(companyCount, tableData, valuationDate, companyNetDebt, userInputDictionary)\n .finally(() => {\n setIsExporting(false);\n });\n }\n\n return (\n <>\n \n
    \n
    \n \n
    \n
    \n \n
    \n {\n companyList.length > 0 ?\n
    \n \n
    \n : null\n }\n
    \n {\n showColumnEditor\n ? (\n \n \n )\n : null\n }\n {\n showTickerPicker\n ? (\n \n \n \n )\n : null\n }\n \n )\n}\n\nexport default CompsPage;\n","import React from 'react'\n\nfunction ConditionalWrapper(props: {\n condition: boolean,\n wrapper: (children: JSX.Element) => JSX.Element,\n children: JSX.Element}\n): JSX.Element {\n return props.condition\n ? props.wrapper(props.children)\n : props.children\n}\n\nexport default ConditionalWrapper\n","export default __webpack_public_path__ + \"static/media/document.010d5327.svg\";","import React from 'react';\nimport documentIcon from '../../img/document.svg';\nimport videoIcon from '../../img/youtube-play.png'\n\nfunction Document(props: any) {\n return (\n
    \n \n

    {props.name} {props.desc}

    \n
    \n )\n}\n\nexport default Document;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAACP0lEQVRoge3ZzW8NURjH8Y9yExKhJUWQqKRNy0bY+AcqYuOPsJHY2EosbKwl/hgWXtI/QEgjCCmCtA0qbQnqrWVx7iTT09GZ25n7QuabPMnMycx5nt+ZM895o6ampqampsamgs81MIwRHMA+7Mdu7EA/djavG813tmJbqo7P+Nm8XsKnlM3jPd5hGrN4ijcb0LSGIVzFQ/zA7y7YR0zgfLNhWuac0ILdCP5v9ghHWxFxFss9EHiWvcJgVtCbM+5vCX2+F+kXGvlu3oPHdL/V8+xlVuB90f1wntIe4LCQIVcRCznUmVhKMxoX/KtCjsQFsZChkg5OCWmy3YzFBbGQzNTWAndwXBjA5krWtR65PWdSuYySZheuC9OSqjPX7TwhUxUKSRjFjYqFTOYJmWmDkIRx4f+pQshMnpDFNgohzIwvYqGkn+9yZu5lZ7lFSf6fXyV8rRoU46zVKYqugzZcR9lPnkfStcp24WU5H2G6jULG8bhk/YnN5/jyrA1CxlSffjNnwGkeVCiknQPi/TjwLdH9lzylBWjgAq5goIL6sliMC2Ihb0s6OINrMiZ1FTMbF8RCnpd0cLPk+0V5ERfEKayskE6x5mf/b4U8wUpnYtkwK8IwsYpYyJyws9fLTCi4aDuBr6rP/VXYN5xsRfVpYUO524Gn7YOwC9oyg7iEe8LueTeCX2r6v4w96wVbdDrdJyz4R4TjhIPY27QB4TghseQooYHtqTrWO1ZYEHpA+lhhCq/1fvKpqampqanpHf4AGXx2NSiaKfwAAAAASUVORK5CYII=\"","import './PadLockModal.scss'\nimport {useSelector} from \"react-redux\";\nimport {selectClaims, selectHasSubscribed, selectIsLoggedIn, selectIsTrialing} from \"../../auth/authSlice\";\nimport {Link} from \"react-router-dom\";\nimport {Routes} from \"../../routes/routes\";\nimport {Modal} from \"../Modal/Modal\";\nimport {PadLock} from \"../Svg/Svg\";\nimport React from \"react\";\nimport classNames from \"classnames\";\nimport {BVR_ROLE} from \"../../constants\";\n\nexport function PadLockModal(props: { onCloseModal: () => null, children?: React.ReactNode, fullscreen: boolean }) {\n const isLoggedIn = useSelector(selectIsLoggedIn);\n const hasSubscribedBefore = useSelector(selectHasSubscribed)\n const isTrialing = useSelector(selectIsTrialing)\n const claims = useSelector(selectClaims);\n\n function getLinks() {\n if (!isLoggedIn) {\n return (\n <>\n Sign Up\n or \n Login\n \n )\n }\n else if (claims.role == BVR_ROLE) { // this means they are a bvr user and we block everything\n return Manage Account\n } else if (!hasSubscribedBefore) { // this means the user has not selected a plan\n return Select Plan\n } else if (isTrialing) { // this means the user is trialing and their trial is expired. Redirect to select plan page\n return Upgrade Plan\n } else { // if we make it here it means the user's previous subscription has expired\n return Resubscribe\n }\n }\n\n const className = classNames({\n 'fullscreen': props.fullscreen\n }\n )\n\n function getText() {\n if (claims.role == BVR_ROLE) {\n return \n Your plan only allows access to the Excel Add-in. Please contact your\n account administrator if you are interested in additional features.\n \n } else {\n return Subscribe to unlock data\n }\n }\n\n return (\n
    \n
    \n {props.children}\n
    \n
    \n \n
    \n \n
    \n {\n getText()\n }\n
    \n {\n getLinks()\n }\n
    \n
    \n
    \n
    \n );\n}\n","import React, {useEffect, useState} from \"react\";\nimport {useSelector} from \"react-redux\";\nimport {selectClaims, selectIsLoggedIn} from \"../../auth/authSlice\";\nimport {PadLockModal} from \"./PadLockModal\";\nimport {BVR_ROLE} from \"../../constants\";\n\nfunction WithActiveSubscription(props: { children: React.ReactNode, fullscreen: boolean }) {\n const isLoggedIn = useSelector(selectIsLoggedIn);\n const claims = useSelector(selectClaims);\n const [showPadLock, setShowPadLock] = useState(false);\n\n function hasActiveSubscription() {\n return isLoggedIn && claims.active_subscription && claims.role != BVR_ROLE;\n }\n\n useEffect(() => {\n setShowPadLock(!hasActiveSubscription());\n }, [isLoggedIn, claims]);\n\n return (\n showPadLock ?\n null} fullscreen={props.fullscreen}>\n {props.children}\n \n : <>{props.children}\n )\n}\n\nexport default WithActiveSubscription;\n","import React from 'react';\nimport './Card.scss';\nimport ConditionalWrapper from '../Utility/ConditionalWrapper';\n\nimport Document from '../Document/Document';\nimport WithActiveSubscription from \"../PadLock/WithActiveSubscription\";\n\nexport function Card(props: any) {\n const docs = [];\n for (let i = 0; i < props.docs.length; i++) {\n docs.push()\n }\n\n return (\n
    \n \n {children}}>\n <>\n

    {props.title}

    \n
    \n {docs}\n
    \n \n \n
    \n )\n}\n","import React from 'react';\nimport './DocumentationPage.scss';\nimport {ValueAnalyticsDocuments} from '../../data/va-documents';\nimport '../../App.scss'\nimport {Col, Container, Row} from 'reactstrap'\nimport {Card} from '../Card/Card';\nimport WithActiveSubscription from \"../PadLock/WithActiveSubscription\";\n\ninterface Documents {\n name: string,\n desc: string,\n url: string\n}\n\ninterface Documentation {\n title: string,\n subtitle: string,\n documents: Documents[]\n}\n\nfunction DocumentationCol(props: { children: React.ReactNode }) {\n return (\n {props.children}\n )\n}\n\nfunction DocumentationCard(props: { documentation: Documentation, protected: boolean }) {\n return (\n \n \n \n )\n}\n\n\nfunction DocumentationPage() {\n let docs = {\n terms: {\n title: 'Terms',\n subtitle: 'Brief description of the category',\n documents: [\n {\n name: ValueAnalyticsDocuments.privacyPolicy.name,\n desc: ValueAnalyticsDocuments.privacyPolicy.desc,\n url: ValueAnalyticsDocuments.privacyPolicy.url\n },\n {\n name: ValueAnalyticsDocuments.termsAndConditions.name,\n desc: ValueAnalyticsDocuments.termsAndConditions.desc,\n url: ValueAnalyticsDocuments.termsAndConditions.url\n }\n ]\n },\n data: {\n title: 'Data Methodology',\n subtitle: 'Brief description of the category',\n documents: [\n {\n name: 'Data Sourcing and Quality Assurance',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/data_methods/Data-Sourcing-and-Quality-Assurance.docx'\n },\n {\n name: 'Definitions and Pro-Forma Adjustments',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/data_methods/Definitions-and-Pro-Forma-Adjustments.docx'\n }\n ]\n },\n gpc_method: {\n title: 'Guideline Public Company Method',\n subtitle: 'Brief description of the category',\n documents: [\n {\n name: '1) Introduction',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/gpc_method/1GPCM-Introduction.docx'\n },\n {\n name: '2) Qualitative Assessment',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/gpc_method/2GPCM-Qualitative-Assessment.docx'\n },\n {\n name: '3) Quantitative Assessment',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/gpc_method/3GPCM-Quantitative-Assessment.docx'\n },\n {\n name: '4) Selection of Multiples',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/gpc_method/4GPCM-Selection-of-Multiples.docx'\n },\n {\n name: '5) Size Adjustment',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/gpc_method/5GPCM-Size-Adjustment.docx'\n },\n {\n name: '6) Capitalization Adjustment',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/gpc_method/6GPCM-Capitalization-Adjustment.docx'\n },\n {\n name: '1-6) Guideline Public Company Combined',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/gpc_method/Guideline-Public-Company-Method-(Combined).docx'\n }\n ]\n },\n tutorials: {\n title: 'Tutorials',\n subtitle: 'Brief description of the category',\n documents: [\n {\n name: '1) Functionality Overview',\n desc: '',\n url: 'https://www.youtube.com/watch?v=PXGrwGQhXns',\n new_tab: true,\n video: true\n },\n {\n name: '2) Excel Add-In',\n desc: '',\n url: 'https://www.youtube.com/watch?v=Nl2jL0O--JE&t=1s',\n new_tab: true,\n video: true\n }\n ]\n },\n excel_templates: {\n title: 'Excel Templates',\n subtitle: 'Brief description of the category',\n documents: [\n {\n name: '1) Valuation Template',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/excel/VA-Excel-Add-In-Valuation-Template.xlsx'\n },\n {\n name: '2) Financial Statement Template',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/excel/VA-Financial-Statement-Template.xlsx'\n },\n {\n name: '3) Beta Template',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/excel/VA-Beta-Template.xlsx'\n },\n {\n name: '4) Enterprise Value Calculation',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/excel/VA-EV-Calculation.xlsx'\n },\n {\n name: '5) Excel Add-In Field List',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/excel/VA-AddIn-Field-List.pdf'\n },\n {\n name: '6) Option-Pricing',\n desc: '',\n url: 'https://va-frontend-assets.s3.us-east-2.amazonaws.com/dev/documentation/excel/VA-Option-Pricing.xlsx'\n }\n ]\n }\n }\n return (\n
    \n \n \n
    \n

    Documentation

    \n

    \n For further support, contact us at support@valueanalytics.org\n

    \n
    \n
    \n \n \n \n \n \n \n \n
    \n
    \n )\n}\n\nexport default DocumentationPage;\n","import React, {ReactNode, useState} from \"react\";\nimport {PrimaryButton} from \"../Button/Button\";\nimport { Auth } from 'aws-amplify';\nimport {EyeOpen, EyeClosed} from '../Svg/Svg';\nimport {Loader} from '../Loader/Loader';\nimport '../Button/Button.scss'\n\nexport function ShowPassword(props:any){\n\n return (\n props.eyeOpen ?
    \n \n
    :\n
    \n \n\n
    \n )\n\n}\n\n\nexport function ResetPassword(props: any){\n const [curPassword, setCurPassword] = useState('')\n const [newPassword, setNewPassword] = useState('')\n\n const [showCurPassword, setShowCurPassword] = useState(false)\n const [showNewPassword, setShowNewPassword] = useState(false)\n\n const [newPasswordError, setNewPasswordError] = useState('')\n const [curPasswordError, setCurPasswordError] = useState('')\n\n const [completionMessage, setCompletionMessage] = useState('')\n const [isLoading, setIsLoading] = useState(false)\n\n\n function updatePassword(curPassword: string, newPassword: string){\n\n setIsLoading(true)\n Auth.currentAuthenticatedUser()\n .then(user => {\n return Auth.changePassword(user, curPassword, newPassword);\n })\n .then((data) => {\n setIsLoading(false)\n if (data=='SUCCESS') {\n setNewPasswordError('')\n setCurPasswordError('')\n setCompletionMessage('Password updated!')\n }\n })\n .catch((err) => {\n setIsLoading(false)\n if (err.code == 'NotAuthorizedException') {\n setCurPasswordError('Incorrect Password')\n } else if (err.code == 'LimitExceededException') {\n setNewPasswordError('')\n setCurPasswordError('')\n setCompletionMessage('Password change attempt limit exceeded. Try again in a few minutes.')\n }\n });\n\n }\n\n function toggleShowCurPassword(e:any){\n e.preventDefault()\n setShowCurPassword(!showCurPassword)\n\n }\n\n function toggleShowNewPassword(e:any){\n e.preventDefault()\n setShowNewPassword(!showNewPassword)\n }\n\n\n function handleCurPassword(e: any) {\n setCurPassword(e.target.value)\n }\n\n function handleNewPassword(e: any) {\n setNewPassword(e.target.value)\n }\n\n function submitNewPassword(e: any) {\n e.preventDefault()\n if (newPassword.length >= 8 && curPassword.length >= 8) {\n updatePassword(curPassword, newPassword)\n } else if (newPassword.length < 8) {\n setNewPasswordError('New password must be 8 characters or greater')\n } else if (curPassword.length < 8) {\n setCurPasswordError('Please provide current password')\n }\n }\n\n return (\n\n
    \n

    Change Password

    \n
    \n \n < ShowPassword eyeOpen={showCurPassword} onClick={toggleShowCurPassword}>\n
    \n
    \n \n < ShowPassword eyeOpen={showNewPassword} onClick={toggleShowNewPassword}>\n
    \n
    \n \n

    {completionMessage? completionMessage:''}

    \n
    \n\n
    \n\n\n )\n\n}\n\n\n\n\n","import React, {useState} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {updateAccountInformation} from '../../auth/authSlice';\nimport {FormInputTyped} from '../FormInput/FormInputTyped';\nimport {ResetPassword} from './ResetPassword'\nimport {Col, Form, Row} from 'reactstrap';\nimport './AccountInformation.scss'\n\n\nimport {selectAttributes} from '../../auth/authSlice';\n\nfunction AccountInformation() {\n const userAttributes = useSelector(selectAttributes);\n\n const [fullName, setFullName] = useState('');\n const [email, setEmail] = useState('');\n const [currentPassword, setCurrentPassword] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [confirmNewPassword, setConfirmNewPassword] = useState('');\n const [error, setError] = useState('');\n\n const dispatch = useDispatch();\n\n const saveChanges = (e: any) => {\n e.preventDefault();\n if (newPassword !== confirmNewPassword) {\n // Show error\n setError('Passwords do not match');\n } else {\n setError('');\n dispatch(updateAccountInformation({\n fullName: fullName,\n email: email,\n currentPassword: currentPassword,\n newPassword: newPassword\n }));\n }\n }\n\n return (\n
    \n

    Account Information

    \n setFullName(e.target.value)}\n >\n Full Name *\n \n setEmail(e.target.value)}\n >\n

    Email Address *

    \n \n

    * Contact support@valueanalytics to update name\n or email address.

    \n \n \n );\n}\n\nexport default AccountInformation;\n","import {createAsyncThunk, createSlice} from \"@reduxjs/toolkit\";\nimport {getBillingPageData,\n getSubMgmtData,\n postDefaultPayment,\n getInvoicePreview,\n IPlanOption,\n ISetDefault} from '../api/requests';\nimport {\n IGetBillingPageData,\n SetDefaultResponse,\n IUser,\n CurrentSubscription,\n SubMgmtData,\n InvoicePreview,\n IGetInvoicePreview, lineItem\n} from \"../api/requestsTypes\";\nimport { RootState } from \"../store\";\nimport {MANAGER_ROLE, USER_ROLE, OWNER_ROLE} from \"../constants\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\n\n\n\n\ninterface IBillingSlice {\n isLoading: boolean,\n invoicePreview: InvoicePreview\n planType: CurrentSubscription,\n planOptions: IPlanOption[],\n users: IUser[],\n billingPageData: IGetBillingPageData;\n}\n\n\nexport interface IBillingSliceState {\n billingSlice: IBillingSlice\n}\n\nexport const fetchInvoicePreview = createAsyncThunk(\n 'billing/fetchInvoicePreview',\n async (data, thunkAPI) => {\n return getInvoicePreview(data)\n }\n);\n\nexport const fetchBillingData = createAsyncThunk(\n 'billing/fetchData',\n async (thunkAPI) => {\n return getBillingPageData()\n }\n);\n\nexport const fetchSubMgmtData = createAsyncThunk(\n 'billing/fetchSubMgmtData',\n async (thunkAPI) => {\n return getSubMgmtData()\n }\n);\n\n\nexport const setDefaultPayment = createAsyncThunk(\n 'billing/setDefaultPayment',\n async (data, thunkAPI) => {\n return await postDefaultPayment(data)\n }\n)\n\nconst initialState: IBillingSlice= {\n isLoading: true,\n invoicePreview: {} as InvoicePreview,\n planType: {} as CurrentSubscription,\n planOptions: [] as IPlanOption[],\n users: [] as IUser[],\n billingPageData: {\n next_payment: {},\n billing_history: [],\n card_details: {}\n }\n}\n\nexport const billingSlice = createSlice({\n name: 'billing',\n initialState,\n reducers: {\n setUser: (state, action) => {\n state.users.push(action.payload);\n },\n setInvoicePreview: (state, action) => {\n state.invoicePreview = action.payload\n }\n },\n extraReducers: builder => {\n\n builder.addCase(fetchSubMgmtData.fulfilled, (state, action) => {\n state.planType = action.payload.sub_details\n state.planOptions = action.payload.sub_options\n state.users = action.payload.account_rows\n state.isLoading = false;\n });\n\n builder.addCase(fetchSubMgmtData.pending, (state, action) => {\n state.isLoading = true;\n });\n\n builder.addCase(fetchSubMgmtData.rejected, (state, action) => {\n state.isLoading = false;\n });\n\n builder.addCase(fetchInvoicePreview.fulfilled, (state, action) => {\n if (!('errors' in action.payload)) {\n state.invoicePreview = action.payload\n }\n state.isLoading = false;\n });\n\n builder.addCase(fetchInvoicePreview.rejected, (state, action) => {\n state.isLoading = false\n });\n\n\n builder.addCase(fetchBillingData.fulfilled, (state, action) => {\n state.billingPageData = action.payload\n state.isLoading = false;\n });\n\n builder.addCase(fetchBillingData.pending, (state, action) => {\n state.isLoading = true;\n });\n\n builder.addCase(fetchBillingData.rejected, (state, action) => {\n state.isLoading = false;\n });\n\n builder.addCase(setDefaultPayment.fulfilled, (state, action) => {\n state.billingPageData.card_details = action.payload.card\n });\n\n resetStateOnSignOut(builder, initialState);\n }\n });\n\n\n\nexport const inviteUser = createAsyncThunk(\n 'billing/inviteUser',\n async (arg) => {\n }\n);\n\nfunction format_date(utc_date:string|undefined, hour_minute:boolean) {\n\n if (typeof utc_date == 'string' && utc_date != 'N/A' && utc_date != 'Expired') {\n\n let proper_date = utc_date[utc_date.length - 1] == 'Z'\n ? utc_date : utc_date + 'Z'\n\n let localDate = new Date(proper_date)\n let options;\n if (hour_minute) {\n options = {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n year: 'numeric'\n }\n } else {\n options = {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n }\n }\n\n let fmt_date = localDate.toLocaleString(\n 'default',\n options\n )\n\n return fmt_date\n }\n else if (utc_date == 'N/A' || utc_date == 'Expired' ) {\n return utc_date\n }\n else {\n return ''\n }\n}\n\nfunction format_amount_dollars(amount:number|undefined){\n if (typeof amount == 'number') {\n return '$' + amount.toFixed(2)\n }\n else {\n return ''\n }\n}\n\nfunction format_user_type(role:number) : string {\n\n if (role == 1){\n return USER_ROLE\n }\n else if (role == 2){\n return MANAGER_ROLE\n }\n else {\n return OWNER_ROLE\n }\n\n}\n\n\nexport function getNextPayment(state: IBillingSliceState) {\n let fmt_payment_date = format_date(state.billingSlice.billingPageData.next_payment.next_payment_date, false)\n let fmt_amount_due = format_amount_dollars(state.billingSlice.billingPageData.next_payment.amount_due)\n\n if (fmt_amount_due && fmt_payment_date) {\n return {\n next_payment_date: fmt_payment_date,\n amount_due: fmt_amount_due\n }\n\n } else {\n return {}\n }\n\n}\n\nexport function getHistory(state: IBillingSliceState) {\n let display_items = state.billingSlice.billingPageData.billing_history.filter(\n item => item.amount > 0\n )\n let format_history = display_items.map(\n item=>{\n return {\n payment_date: format_date(item.payment_date, true),\n amount: format_amount_dollars(item.amount),\n invoice_url: item.invoice_url\n\n }\n })\n return format_history\n}\n\nexport function getCardDetails(state:IBillingSliceState ){\n return state.billingSlice.billingPageData.card_details\n}\n\nexport function getIsLoading(state: IBillingSliceState) {\n return state.billingSlice.isLoading\n}\n\nexport function getPlanType(state: IBillingSliceState) {\n return state.billingSlice.planType;\n}\n\nexport function getTrialing(state: IBillingSliceState) {\n return state.billingSlice.planType.trialing;\n}\n\nexport function getPlanOptions(state: IBillingSliceState){\n return state.billingSlice.planOptions\n}\n\nexport function getInvoice(state: IBillingSliceState){\n return state.billingSlice.invoicePreview\n}\n\n\n\nexport function getLineItems(state: IBillingSliceState): lineItem[]{\n\n if (state.billingSlice.invoicePreview.next_invoice != undefined) {\n\n const preview = state.billingSlice.invoicePreview\n let line_items;\n if (preview.next_invoice.discounts != '') {\n\n line_items = [...preview.next_invoice.line_items, {\n 'amount': preview.next_invoice.discounts,\n 'description': preview.next_invoice.discount_description\n }]\n\n } else {\n line_items = preview.next_invoice.line_items\n }\n return line_items\n } else {\n return []\n }\n\n}\n\nexport function getUsers(state: IBillingSliceState) {\n let formatted_users = state.billingSlice.users.map(\n user => {\n return {\n id: user.id,\n name: user.name,\n email: user.email,\n role: format_user_type(user.role),\n renew_date: format_date(user.renew_date, false),\n expires_date: format_date(user.expires_date, false),\n active: user.active,\n sub_name: user.sub_name\n }\n }\n )\n return formatted_users;\n}\n\nexport const { setUser, setInvoicePreview } = billingSlice.actions;\n\nexport default billingSlice.reducer;\n","import {CardElement, Elements, ElementsConsumer, useElements, useStripe} from \"@stripe/react-stripe-js\";\nimport React, {useState} from \"react\";\nimport {Stripe, StripeCardElementChangeEvent, StripeCardElement} from \"@stripe/stripe-js\";\nimport {config} from \"../../config\";\nimport '../SignupForm/SignupForm.scss'\nimport '../Button/Button.scss'\nimport {setDefaultPayment} from \"../../billing/billingSlice\";\nimport {Action, ThunkDispatch, unwrapResult} from \"@reduxjs/toolkit\";\nimport {useDispatch} from \"react-redux\";\nimport {RootState} from \"../../store\";\nimport {SetupIntentResponse} from \"../../api/requestsTypes\";\nimport {Loader} from \"../Loader/Loader\";\nimport {getSetupIntent} from '../../api/requests';\nimport stripeJs from \"@stripe/stripe-js\";\n\n\n\nexport async function addPaymentMethod(\n stripe: Stripe,\n card: StripeCardElement,\n clientSecret: string,\n\n ) {\n\n const setupIntentResult = await stripe.confirmCardSetup(\n clientSecret,\n {\n payment_method: {\n card: card\n }\n }\n )\n\n return setupIntentResult\n }\n\n\nexport async function handleCardSetup(\n response:SetupIntentResponse,\n stripe: Stripe | null,\n elements: stripeJs.StripeElements | null\n) {\n const card = elements!.getElement(CardElement);\n // returning undefined will cause us to end up in the catch block\n if (stripe === null ||\n card === null) {\n return undefined;\n }\n return await addPaymentMethod(stripe, card, response.client_secret)\n\n }\n\n\n\nexport function UpdateCard(){\n const stripe = useStripe();\n const dispatch = useDispatch>();\n const elements = useElements();\n const [isUpdatingCard, setIsUpdatingCard] = useState(false);\n const [message, setMessage] = useState('');\n const [error, setError] = useState('');\n const [cardIsReady, setCardIsReady] = useState(false);\n\n\n const handleChange = async (event: StripeCardElementChangeEvent) => {\n // Listen for changes in the CardElement\n // and display any errors as the customer types their card details\n setMessage('')\n if (event.complete) {\n setCardIsReady(true);\n setError('')\n return\n }\n\n if (event.error) {\n setError(event.error.message);\n setIsUpdatingCard(false);\n setCardIsReady(false);\n return\n }\n\n setError('')\n };\n\n const handleCardSuccess = () => {\n setIsUpdatingCard(false)\n setMessage('Payment Method Updated!')\n }\n\n const handleCardFailure = () => {\n setIsUpdatingCard(false)\n setError('Error Updating Card. Please try again later or contact support@valueanalytics.org')\n }\n\n const handleSubmit: React.FormEventHandler = async (event) => {\n event.preventDefault();\n setMessage(\"\")\n\n if (!cardIsReady) {\n setError('Enter new card details.');\n return;\n }\n\n setIsUpdatingCard(true)\n try {\n const setupIntent = await getSetupIntent()\n const setupIntentResults = await handleCardSetup(setupIntent, stripe, elements)\n\n if (setupIntentResults && setupIntentResults.setupIntent?.payment_method != null) {\n\n dispatch(setDefaultPayment({\n payment_id: setupIntentResults.setupIntent.payment_method\n })\n ).then(unwrapResult)\n .then(() => {\n handleCardSuccess()\n }).catch((error) => {\n handleCardFailure()\n })\n\n } else {\n throw 'SetupIntent not defined'\n }\n // this will only catch errors from getSetupIntent and handleCardSetup\n } catch (error) {\n handleCardFailure()\n }\n\n };\n\n\n\n return (\n\n \n {({stripe, elements}) => (\n
    \n
    \n
    \n \n
    \n {error?

    {error}

    : ''}\n {message?

    {message}

    : ''}\n
    \n \n
    \n )}\n
    \n )\n\n}","import React, { useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { getNextPayment,\n getHistory,\n getIsLoading,\n fetchBillingData,\n getCardDetails } from '../../billing/billingSlice';\nimport {UpdateCard} from \"./UpdateCard\"\nimport {Elements} from \"@stripe/react-stripe-js\";\nimport {loadStripe} from \"@stripe/stripe-js\";\nimport {config} from \"../../config\";\nimport {Loader} from \"../Loader/Loader\";\n\nconst stripePromise = loadStripe(config.stripe_pk);\n\nfunction BillingHistory() {\n const dispatch = useDispatch();\n const isLoading = useSelector(getIsLoading)\n const nextPayment = useSelector(getNextPayment);\n const history = useSelector(getHistory);\n const cardDetails = useSelector(getCardDetails)\n\n useEffect(() => {\n dispatch(fetchBillingData());\n }, []);\n\n const billingHistoryItems = history.map((item, index) => {\n return (\n
    \n

    {`${item.payment_date}`}

    \n

    {`${item.amount}`}

    \n View Statement\n
    \n );\n });\n\n const cardDetailsComponent = () => {\n return (\n
    \n {\n Object.keys(cardDetails).length == 0 ? 'No default payment method' :\n
    \n

    {`${typeof cardDetails.brand == 'string' ? cardDetails.brand.toUpperCase() : \"\"} **** **** **** ${cardDetails.last4}`}

    \n

    {`Expires ${cardDetails.exp_month}/${cardDetails.exp_year}`}

    \n
    \n }\n\n
    \n )\n }\n\n const nextBillingDateComponent = () => {\n return (\n
    \n {\n Object.keys(nextPayment).length == 0 ? 'No upcoming payments' :\n
    \n

    {`${nextPayment.amount_due} on ${nextPayment.next_payment_date}`}

    \n
    \n }\n\n
    \n )\n }\n\n return (\n
    \n
    \n

    Next Billing Date

    \n {\n isLoading? : nextBillingDateComponent()\n }\n
    \n
    \n

    Payment Method

    \n {\n isLoading ? : cardDetailsComponent()\n }\n \n \n \n
    \n
    \n

    Billing History

    \n
    \n {\n isLoading ? : billingHistoryItems.length > 0\n ? billingHistoryItems :

    No Billing History

    \n }\n
    \n
    \n
    \n );\n}\n\nexport default BillingHistory;\n","import React, {useState} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {selectClaims} from '../../auth/authSlice';\nimport {getPlanType} from '../../billing/billingSlice';\nimport {FormInputTyped} from '../FormInput/FormInputTyped';\nimport {PrimaryButton} from \"../Button/Button\";\nimport {Col, Form, Row} from \"reactstrap\";\nimport './AddNewUser.scss';\n\nfunction AddNewUser(props: any) {\n const [name, setName] = useState('');\n const [email, setEmail] = useState('');\n const [confirmEmail, setConfirmEmail] = useState('');\n const userClaims = useSelector(selectClaims);\n const planType = useSelector(getPlanType);\n\n const [isLoading, setIsloading] = useState(false)\n const [isEnabled, setIsEnabled] = useState(true)\n\n function enableButton() {\n setIsloading(false)\n setIsEnabled(true)\n }\n\n function disableButton() {\n setIsloading(true)\n setIsEnabled(false)\n }\n\n\n const handleChange = (dispatch: React.Dispatch>) =>\n (event: React.ChangeEvent) =>\n dispatch(event.target.value);\n\n const handleClick = () => {\n\n props.handleInviteUser(\n name,\n email,\n confirmEmail,\n enableButton,\n disableButton,\n props.setShowAddNewUserForm\n )\n\n }\n\n\n return (\n <>\n
    \n \n \n Team Member First and Last Name\n \n \n \n \n Team Member Email Address\n \n \n \n \n Confirm Email Address\n \n \n \n \n \n \n \n \n\n \n );\n}\n\nexport default AddNewUser;\n","import React, {useState} from 'react'\nimport {MANAGER_ROLE, USER_ROLE, WEEKLY_NAME, EXPIRED_TERM, MONTHLY_NAME, TRIAL_NAME} from \"../../constants\";\nimport { PrimaryButton } from '../Button/Button';\nimport {getPlanType, getPlanOptions, getUsers, setInvoicePreview} from \"../../billing/billingSlice\";\nimport { useSelector, useDispatch} from 'react-redux';\nimport {fetchInvoicePreview} from \"../../billing/billingSlice\";\nimport {Routes} from \"../../routes/routes\";\nimport {\n CurrentSubscription,\n IGetInvoicePreview,\n lineItem,\n TypicalMonthly,\n IUser,\n NextInvoice\n} from \"../../api/requestsTypes\";\nimport {IPlanOption} from \"../../api/requests\";\nimport {useHistory} from \"react-router-dom\";\n\ninterface UserOptionsProps{\n id: number\n role: string\n active: boolean\n trialing: boolean\n expires_date: string\n sub_name: string\n setShowInvoicePreview: (state: boolean) => void\n setInvoiceAction: (action: string) => void\n active_manager: boolean\n buttonIsEnabled: boolean\n setButtonIsEnabled: (state: boolean) => void\n}\n\ninterface TrialingManagerButtonProps {\n planOptions: IPlanOption[]\n planType: CurrentSubscription\n buttonIsEnabled: boolean\n setButtonIsEnabled: (state: boolean) => void\n}\n\nfunction TrialingManagerButton(props: TrialingManagerButtonProps){\n const history = useHistory();\n\n function handleOnClick() {\n history.push(Routes.upgradeAccount)\n }\n\n const click_text = 'Extend Access'\n return (\n \n \n \n )\n\n}\n\n\ninterface ActiveWeeklyButtonProps {\n planOptions: IPlanOption[]\n planType: CurrentSubscription\n id: number\n setInvoiceAction: (action:string) => void\n setShowInvoicePreview: (show:boolean) => void\n buttonIsEnabled: boolean\n setButtonIsEnabled: (state: boolean) => void\n}\n\n\nfunction ActiveWeeklyManagerButton(props: ActiveWeeklyButtonProps) {\n const dispatch = useDispatch()\n\n async function upgrade_to_monthly_preview(){\n let monthly_option = props.planOptions.filter(option=>{return option.title == MONTHLY_NAME})[0]\n let invoice_preview_payload = {\n subscription_id: props.planType.sub_id,\n price_id: monthly_option.price_id,\n type: 'update_manager',\n user_id: props.id\n }\n\n props.setButtonIsEnabled(false)\n await dispatch(fetchInvoicePreview(invoice_preview_payload))\n props.setInvoiceAction('monthly_upgrade')\n props.setShowInvoicePreview(true)\n props.setButtonIsEnabled(true)\n }\n\n const click_text = 'Upgrade to Monthly'\n\n return (\n \n \n \n )\n\n}\n\ninterface ActiveMonthlyButtonProps {\n users: any[]\n setInvoiceAction: (action:string) => void\n setShowInvoicePreview: (show:boolean) => void\n buttonIsEnabled: boolean\n setButtonIsEnabled: (state: boolean) => void\n}\n\nfunction ActiveMonthlyManagerButton(props: ActiveMonthlyButtonProps) {\n\n const dispatch = useDispatch()\n async function cancel_monthly(){\n\n let number_of_active_users = props.users.filter(user=>{return user.active}).length\n\n let invoice_action;\n if (number_of_active_users > 1) {\n invoice_action = 'cancel_with_active_users'\n } else {\n invoice_action = 'cancel_sole_manager'\n }\n\n let next_invoice = {\n invoiced_now: false,\n next_invoice: {\n discount_description: '',\n discounts: '',\n line_items: [{\n amount: '$0.00',\n description: '0 × VA Monthly'\n }],\n next_invoice_date: '',\n subtotal: '$0.00',\n total: '$0.00'\n },\n proration_date: -1,\n typical_monthly: {} as TypicalMonthly,\n invoice_preview_params: {} as IGetInvoicePreview\n }\n\n props.setButtonIsEnabled(false)\n await dispatch(setInvoicePreview(next_invoice))\n props.setInvoiceAction(invoice_action)\n props.setShowInvoicePreview(true)\n props.setButtonIsEnabled(true)\n }\n\n const click_text = 'Cancel Subscription'\n return (\n \n \n \n )\n}\n\ninterface CancelledMonthlyButtonProps {\n planOptions: IPlanOption[]\n planType: CurrentSubscription\n id: number\n setInvoiceAction: (action:string) => void\n setShowInvoicePreview: (show:boolean) => void\n buttonIsEnabled: boolean\n setButtonIsEnabled: (state: boolean) => void\n}\n\nfunction CancelledMonthlyManagerButton(props: CancelledMonthlyButtonProps) {\n const dispatch = useDispatch()\n\n async function resubscribe_to_monthly(){\n\n let monthly_option = props.planOptions.filter(option=>{return option.title == MONTHLY_NAME})[0]\n let invoice_preview_payload = {\n subscription_id: props.planType.sub_id,\n price_id: monthly_option.price_id,\n type: 'subscribe_manager',\n user_id: props.id\n }\n\n props.setButtonIsEnabled(false)\n await dispatch(fetchInvoicePreview(invoice_preview_payload))\n props.setInvoiceAction('re_subscribe_manager_monthly')\n props.setShowInvoicePreview(true)\n props.setButtonIsEnabled(true)\n }\n\n const click_text = 'Renew Subscription'\n return (\n \n \n \n )\n}\n\nfunction ExpiredMonthlyManagerButton(props: CancelledMonthlyButtonProps) {\n const dispatch = useDispatch()\n const [category, setCategory] = useState('default');\n\n async function resubscribe_to_choice(e: string) {\n let selected = props.planOptions.filter(option=>{return option.price_id == e})[0]\n let next_invoice = {\n invoiced_now: true,\n next_invoice: {\n discount_description: '',\n discounts: '',\n line_items: [{\n amount: selected.display_price,\n description: '1 × VA ' + selected.title\n }],\n next_invoice_date: '',\n subtotal: selected.display_price,\n total: selected.display_price\n },\n proration_date: -1,\n typical_monthly: {\n amount: selected.title == WEEKLY_NAME ? 'N/A' : selected.display_price,\n description: selected.title,\n discount_description: '',\n discounts: '',\n next_invoice_date: selected.billing_frequency\n },\n invoice_preview_params: {\n subscription_id: props.planType.sub_id,\n price_id: e,\n type: 'subscribe_manager',\n user_id: props.id\n }\n }\n props.setButtonIsEnabled(false)\n await dispatch(setInvoicePreview(next_invoice))\n props.setInvoiceAction('re_subscribe_manager')\n props.setShowInvoicePreview(true)\n props.setButtonIsEnabled(true)\n setCategory('default')\n\n\n }\n return (\n \n \n \n )\n}\n\n\ninterface CancelledTeamMemberButtonProps {\n planOptions: IPlanOption[]\n planType: CurrentSubscription\n id: number\n setInvoiceAction: (action:string) => void\n setShowInvoicePreview: (show:boolean) => void\n active_manager: boolean\n buttonIsEnabled: boolean\n setButtonIsEnabled: (state: boolean) => void\n}\n\nfunction CancelledTeamMemberButton(props: CancelledTeamMemberButtonProps) {\n\n const dispatch = useDispatch()\n\n async function resubscribe_to_monthly(){\n\n let monthly_option = props.planOptions.filter(option=>{return option.title == MONTHLY_NAME})[0]\n let invoice_preview_payload = {\n subscription_id: props.planType.sub_id,\n price_id: monthly_option.price_id,\n type: 'subscribe_user',\n user_id: props.id\n }\n\n props.setButtonIsEnabled(false)\n await dispatch(fetchInvoicePreview(invoice_preview_payload))\n props.setInvoiceAction('re_subscribe_user')\n props.setShowInvoicePreview(true)\n props.setButtonIsEnabled(true)\n }\n\n async function delete_user(){\n let next_invoice = {\n invoiced_now: false,\n next_invoice: {\n discount_description: '',\n discounts: '',\n line_items: [],\n next_invoice_date: '',\n subtotal: '',\n total: ''\n },\n proration_date: -1,\n typical_monthly: {} as TypicalMonthly,\n invoice_preview_params: {\n subscription_id: '',\n price_id: '',\n type: '',\n user_id: props.id\n }\n }\n props.setButtonIsEnabled(false)\n await await dispatch(setInvoicePreview(next_invoice))\n props.setInvoiceAction('delete_user')\n props.setShowInvoicePreview(true)\n props.setButtonIsEnabled(true)\n\n }\n\n const renew_text = 'Renew'\n const delete_text = 'Delete'\n return (\n \n \n\n \n \n )\n}\n\n\ninterface ActiveTeamMemberButtonProps {\n planOptions: IPlanOption[]\n planType: CurrentSubscription\n id: number\n setInvoiceAction: (action:string) => void\n setShowInvoicePreview: (show:boolean) => void\n buttonIsEnabled: boolean\n setButtonIsEnabled: (state: boolean) => void\n}\n\nfunction ActiveTeamMemberButton(props: ActiveTeamMemberButtonProps) {\n\n\n const dispatch = useDispatch()\n\n async function cancel_monthly(){\n\n let monthly_option = props.planOptions.filter(option=>{return option.title == MONTHLY_NAME})[0]\n let invoice_preview_payload = {\n subscription_id: props.planType.sub_id,\n price_id: monthly_option.price_id,\n type: 'cancel_user',\n user_id: props.id\n }\n\n props.setButtonIsEnabled(false)\n await dispatch(fetchInvoicePreview(invoice_preview_payload))\n props.setInvoiceAction('cancel_user')\n props.setShowInvoicePreview(true)\n props.setButtonIsEnabled(true)\n }\n\n async function delete_user(){\n }\n\n const cancel_text = 'Cancel'\n const delete_text = 'Delete'\n return (\n \n \n\n \n \n )\n}\n\n\nfunction UserOptions(props: UserOptionsProps){\n const planType=useSelector(getPlanType)\n const planOptions=useSelector(getPlanOptions)\n const users=useSelector(getUsers)\n\n // if this is true, the user is in a trial subscription\n // if the trial is expired or not, the user will have the same option to extend account\n const trialing_manager = props.role == MANAGER_ROLE &&\n props.sub_name == TRIAL_NAME\n\n\n // if this is true, the manager has the option to upgrade to monthly\n // cannot cancel since weekly accounts expire at period end\n const active_weekly_manager = props.role == MANAGER_ROLE &&\n props.sub_name == WEEKLY_NAME &&\n props.expires_date != EXPIRED_TERM\n\n\n // if this is true, the manager has the option to cancel his account\n // if there are managed users, this action will cancel all of their accounts as well\n const active_monthly_manager = props.role == MANAGER_ROLE &&\n props.sub_name == MONTHLY_NAME &&\n props.active &&\n !props.trialing\n\n // if this is true, the manager has the option to resubscribe to monthly\n // in this state, the manager has cancelled account but there is still time left\n // must wait until expired to resubscribe as monthly\n const cancelled_monthly_manager = props.role == MANAGER_ROLE &&\n props.sub_name == MONTHLY_NAME &&\n props.active == false &&\n props.expires_date != EXPIRED_TERM &&\n !props.trialing\n\n\n // if this is true, the manager has the option to resubscribe as weekly or monthly\n // do not hit invoice preview in this case since there are no future invoices\n const expired_manager = props.role == MANAGER_ROLE &&\n props.expires_date == EXPIRED_TERM &&\n !props.trialing\n\n // if this is true, the manager has the option to cancel this account\n const active_user = props.role == USER_ROLE &&\n props.active\n\n\n // if this is true, the manager has the option to resubscribe or delete this account\n const cancelled_user = props.role == USER_ROLE &&\n props.active == false\n\n\n function user_actions(){\n\n if (active_weekly_manager){\n return (\n \n )\n } else if (trialing_manager){\n return (\n \n )\n }\n else if (active_monthly_manager) {\n return (\n \n )\n } else if (cancelled_monthly_manager) {\n return \n } else if (cancelled_user) {\n return \n } else if (active_user) {\n return \n }\n\n\n else if (expired_manager){\n return \n }\n else\n {\n return No Actions\n }\n\n }\n\n\n return(\n user_actions()\n )}\n\nexport default UserOptions;","import React, {useEffect, useState} from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { PrimaryButton } from '../Button/Button';\nimport AddNewUser from './AddNewUser';\nimport {WEEKLY_NAME, MANAGER_ROLE, MONTHLY_NAME} from \"../../constants\";\nimport \"./AccountPage.scss\"\nimport { selectAttributes, selectClaims } from '../../auth/authSlice';\nimport {fetchSubMgmtData, getNextPayment, getPlanType, getUsers, getIsLoading} from '../../billing/billingSlice';\nimport UserOptions from './UserOptions'\nimport {Loader} from \"../Loader/Loader\";\n\n\nfunction TeamManagement(props: any) {\n const dispatch = useDispatch();\n const isLoading = useSelector(getIsLoading)\n const userAttributes = useSelector(selectAttributes);\n const userClaims = useSelector(selectClaims);\n const planType = useSelector(getPlanType);\n const users = useSelector(getUsers);\n const nextPayment = useSelector(getNextPayment);\n\n const [showAddNewUserForm, setShowAddNewUserForm] = useState(false);\n const [nextBillingDate, setNextBillingDate] = useState('Annual Plan $699.98 - renews May 9, 2022');\n const [buttonIsEnabled, setButtonIsEnabled] = useState(true)\n const MONTHLY_USER_MESSAGE = 'As an Account Manager with a monthly subscription, ' +\n 'you are able to add Team Members to your account. Press \"Add New User\" to get started. '\n\n const TRIALING_USER_MESSAGE = 'Please upgrade your trial account to a paid monthly subscription to add ' +\n 'Team Members.'\n\n const WEEKLY_USER_MESSAGE = 'As an Account Manager with a weekly subscription, you cannot add Team Members to your' +\n ' account. Please upgrade to a monthly subscription to add Team Members.'\n\n const INACTIVE_MONTHLY_MESSAGE = 'Please renew your Account Manager subscription to add Team Members to your account.'\n\n\n\n\n const ACTIVE_MANAGER = users.length > 0 ? users.filter(user => user.role==MANAGER_ROLE)[0].active : false\n\n let USER_MESSAGE = ''\n if (planType.sub_name == WEEKLY_NAME) {\n USER_MESSAGE = WEEKLY_USER_MESSAGE\n } else if (planType.trialing) { // catches trialing accounts, weather active or not\n USER_MESSAGE = TRIALING_USER_MESSAGE\n } else if (planType.sub_name == MONTHLY_NAME && ACTIVE_MANAGER == true && !planType.trialing) {\n USER_MESSAGE = MONTHLY_USER_MESSAGE\n } else if (planType.sub_name == MONTHLY_NAME && ACTIVE_MANAGER == false && !planType.trialing){\n USER_MESSAGE = INACTIVE_MONTHLY_MESSAGE\n }\n\n let ADD_MEMBER_ENABLED = false\n if (planType.sub_name == MONTHLY_NAME && ACTIVE_MANAGER == true && !planType.trialing) {\n ADD_MEMBER_ENABLED = true\n }\n\n useEffect(() => {\n dispatch(fetchSubMgmtData());\n }, []);\n\n function toggleShowAddNewUserForm() {\n setShowAddNewUserForm(!showAddNewUserForm);\n }\n\n\n const userList = users.map(user => {\n return (\n \n {user.name}\n {user.email}\n {user.role}\n {planType.trialing ? 'Trialing': user.sub_name}\n {user.renew_date}\n {user.expires_date}\n \n\n \n );\n })\n\n return (\n <>\n
    \n { isLoading ? :\n
    \n

    {USER_MESSAGE}

    \n \n
    \n }\n

    Users

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n {isLoading ? \"\" : userList}\n\n \n
    NameEmailRolePlan TypeRenew DateExpires DateActions
    \n {showAddNewUserForm ? : ''}\n

    {props.teamMgmtError ? props.teamMgmtError : ''}

    \n
    \n \n );\n}\n\nexport default TeamManagement;","import {useDispatch} from \"react-redux\";\nimport {TypicalMonthly} from \"../../api/requestsTypes\";\nimport {setInvoicePreview} from \"../../billing/billingSlice\";\nimport {PrimaryButton} from \"../Button/Button\";\nimport React from \"react\";\nimport {USER_ROLE} from \"../../constants\";\n\ninterface OwnerTeamMemberButtonProps {\n id: number\n setInvoiceAction: (action: string) => void\n setShowInvoicePreview: (show: boolean) => void\n buttonIsEnabled: boolean\n setButtonIsEnabled: (state: boolean) => void\n}\n\nfunction OwnerTeamMemberButton(props: OwnerTeamMemberButtonProps) {\n\n const dispatch = useDispatch()\n\n async function delete_user() {\n let next_invoice = {\n invoiced_now: false,\n next_invoice: {\n discount_description: '',\n discounts: '',\n line_items: [],\n next_invoice_date: '',\n subtotal: '',\n total: ''\n },\n proration_date: -1,\n typical_monthly: {} as TypicalMonthly,\n invoice_preview_params: {\n subscription_id: '',\n price_id: '',\n type: '',\n user_id: props.id\n }\n }\n props.setButtonIsEnabled(false)\n await await dispatch(setInvoicePreview(next_invoice))\n props.setInvoiceAction('delete_user')\n props.setShowInvoicePreview(true)\n props.setButtonIsEnabled(true)\n }\n\n return (\n \n \n \n )\n}\n\ninterface OwnerUserOptionsProps {\n id: number\n role: string\n active: boolean\n expires_date: string\n setShowInvoicePreview: (state: boolean) => void\n setInvoiceAction: (action: string) => void\n active_manager: boolean\n buttonIsEnabled: boolean\n setButtonIsEnabled: (state: boolean) => void\n}\n\nexport function OwnerUserOptions(props: OwnerUserOptionsProps) {\n const owner_user = props.role === USER_ROLE\n\n function user_actions() {\n if (owner_user) {\n return \n } else {\n return No Actions\n }\n }\n\n return (\n user_actions()\n )\n}\n","import {useDispatch, useSelector} from \"react-redux\";\nimport {fetchSubMgmtData, getIsLoading, getUsers} from \"../../billing/billingSlice\";\nimport React, {useEffect, useState} from \"react\";\nimport {OWNER_ROLE} from \"../../constants\";\nimport {OwnerUserOptions} from \"./OwnerUserOptions\";\nimport {Loader} from \"../Loader/Loader\";\nimport {PrimaryButton} from \"../Button/Button\";\nimport AddNewUser from \"./AddNewUser\";\n\nexport function OwnerTeamManagement(props: any) {\n const dispatch = useDispatch();\n const isLoading = useSelector(getIsLoading)\n const users = useSelector(getUsers);\n\n const [showAddNewUserForm, setShowAddNewUserForm] = useState(false);\n const [buttonIsEnabled, setButtonIsEnabled] = useState(true)\n\n const ACTIVE_MANAGER = users.length > 0 ? users.filter(user => user.role === OWNER_ROLE)[0].active : false\n const ADD_MEMBER_ENABLED = true\n\n useEffect(() => {\n dispatch(fetchSubMgmtData());\n }, []);\n\n function toggleShowAddNewUserForm() {\n setShowAddNewUserForm(!showAddNewUserForm);\n }\n\n\n const userList = users.map(user => {\n return (\n \n {user.name}\n {user.email}\n {user.role}\n {user.renew_date}\n {user.expires_date}\n \n \n );\n })\n\n return (\n <>\n
    \n {isLoading ? :\n
    \n

    {'Add new user'}

    \n \n
    \n }\n

    Users

    \n \n \n \n \n \n \n \n \n \n \n \n \n {isLoading ? \"\" : userList}\n \n
    NameEmailRoleRenew DateExpires DateActions
    \n {showAddNewUserForm ? : ''}\n

    {props.teamMgmtError ? props.teamMgmtError : ''}

    \n
    \n \n );\n}\n","import React from 'react';\nimport {Route, NavLink, Redirect} from 'react-router-dom';\nimport BillingHistory from './BillingHistory';\nimport TeamManagement from './TeamManagement';\nimport {useSelector} from \"react-redux\";\nimport {selectClaims} from \"../../auth/authSlice\";\nimport {OwnerTeamManagement} from \"./OwnerTeamManagement\";\nimport './Billing.scss';\n\nfunction Billing(props: any) {\n const claims = useSelector(selectClaims)\n return (\n
    \n
    \n \n
    \n \n { claims.role === 'MANAGER' ?\n :\n \n }\n \n \n { claims.role === 'MANAGER' ?\n :\n claims.role === 'OWNER' ?\n \n :\n \n }\n \n
    \n\n
    \n
    \n );\n}\n\nexport default Billing;\n","import {useDispatch} from \"react-redux\";\nimport {useState} from \"react\";\nimport {refreshUserSessionInformation} from \"../../../auth/authSlice\";\nimport {fetchSubMgmtData} from \"../../../billing/billingSlice\";\n\nexport function useInvoiceLogic(props: { errors: string, setShowInvoicePreview: (show: boolean) => void }) {\n const errorMessage = 'Unable to process your request at this time. Please contact support@valueanalytics.org' +\n ' or try again later.'\n const dispatch = useDispatch();\n const [error, setError] = useState(props.errors);\n const [isLoading, setIsLoading] = useState(false);\n const [isEnabled, setIsEnabled] = useState(true);\n\n function enableButton() {\n setIsLoading(false)\n setIsEnabled(true)\n }\n\n function disableButton() {\n setIsLoading(true)\n setIsEnabled(false)\n }\n\n function onActionSuccess() {\n props.setShowInvoicePreview(false)\n dispatch(fetchSubMgmtData())\n }\n\n const performAction:\n (action: () => Promise<{ status: 'success' | string, error?: string }>,\n onFailure?: (response: { error?: string }) => void) =>\n () => Promise\n = (action, onFailure?) =>\n async () => {\n try {\n disableButton()\n const response = await action()\n if (response.status === 'success') {\n onActionSuccess()\n } else {\n if (onFailure) {\n onFailure(response);\n } else {\n setError(errorMessage)\n }\n }\n dispatch(refreshUserSessionInformation(true))\n enableButton()\n } catch (e) {\n setError(errorMessage)\n }\n }\n\n return {\n dispatch,\n error, setError,\n isLoading,\n isEnabled,\n enableButton, disableButton,\n performAction\n }\n\n}\n","import React from \"react\";\n\ninterface OrderSummaryParams {\n errors: string;\n updateError: string;\n descText1: string;\n descText2: string;\n actionButton: React.ReactNode;\n orderInfo?: React.ReactNode;\n}\n\nexport function OrderSummary(props: OrderSummaryParams) {\n return (\n
    \n {props.errors ? \"\" :\n
    \n

    \n {props.descText1}\n

    \n {props.descText2}\n

    \n {\n props.orderInfo\n ? props.orderInfo\n : null\n }\n {props.actionButton}\n
    \n }\n

    {props.updateError}

    \n
    \n )\n}\n","import {lineItem} from \"../../../api/requestsTypes\";\nimport React from \"react\";\n\ninterface OrderInfoParams {\n lineItems: lineItem[];\n dueText: string;\n total: string;\n children?: React.ReactNode;\n}\n\nexport function OrderInfo(props: OrderInfoParams) {\n return (\n
    \n {\n props?.lineItems?.map((item, i) =>\n <>\n
    \n

    \n {item.description}\n

    \n
    \n
    \n

    \n {item.amount}\n

    \n
    \n \n )\n }\n
    \n

    {props.dueText}

    \n
    \n
    \n

    {props.total}

    \n
    \n {props.children}\n
    \n )\n}\n","import {MonthlyUpgradeProps} from \"./MonthlyUpgradeProps\";\nimport {useInvoiceLogic} from \"./UseInvoiceLogic\";\nimport {WEEKLY_NAME} from \"../../../constants\";\nimport {reSubscribe} from \"../../../api/requests\";\nimport {fetchSubMgmtData} from \"../../../billing/billingSlice\";\nimport {OrderSummary} from \"./OrderSummary\";\nimport {PrimaryButton} from \"../../Button/Button\";\nimport {OrderInfo} from \"./OrderInfo\";\nimport React from \"react\";\n\nexport function ReSubscribeManager(props: MonthlyUpgradeProps) {\n const {\n error,\n isLoading, isEnabled,\n performAction\n } = useInvoiceLogic(props)\n const button_text = 'Subscribe'\n let desc_text_1\n let desc_text_2\n let monthly_plan = props.invoice.typical_monthly.description === WEEKLY_NAME\n\n if (monthly_plan) {\n desc_text_1 = `Subscribing to a ${props.invoice.typical_monthly.description} will charge your card on file for a week of access. `\n + 'Data access will expire 7 days from purchase.'\n desc_text_2 = 'Press \"Subscribe\" to complete the following invoice. You will only billed once for this plan.'\n } else {\n desc_text_1 = `Subscribing to a ${props.invoice.typical_monthly.description} will charge your card for the first month of service. `\n + 'Your card will be billed on a monthly basis following the initial charge.'\n\n desc_text_2 = 'Press \"Subscribe\" to complete the following invoice and allow Value Analytics to charge your card monthly.'\n }\n\n const due_text = 'Total due now'\n const upgradeAccount = performAction(upgradeAccountAction);\n\n function upgradeAccountAction() {\n let payload = {\n ...props.invoice.invoice_preview_params\n }\n return reSubscribe(payload)\n }\n\n return (\n \n }\n orderInfo={\n \n {monthly_plan ? \"\" :\n [
    \n

    {'Total due next month'}

    \n
    ,\n
    \n

    {props.invoice.typical_monthly.amount}

    \n
    ]\n }\n \n }\n />\n )\n}\n","import {useInvoiceLogic} from \"./UseInvoiceLogic\";\nimport {reSubscribe} from \"../../../api/requests\";\nimport {fetchSubMgmtData} from \"../../../billing/billingSlice\";\nimport {OrderSummary} from \"./OrderSummary\";\nimport {PrimaryButton} from \"../../Button/Button\";\nimport {OrderInfo} from \"./OrderInfo\";\nimport React from \"react\";\nimport {InvoicePreview, lineItem} from \"../../../api/requestsTypes\";\n\ninterface ReSubscribeManagerProps {\n invoice: InvoicePreview\n setShowInvoicePreview: (show: boolean) => void\n line_items: lineItem[]\n errors: string\n\n}\n\nexport function ReSubscribeManagerInvoice(props: ReSubscribeManagerProps) {\n const {\n error,\n isLoading, isEnabled,\n performAction\n } = useInvoiceLogic(props)\n const button_text = 'Subscribe'\n const desc_text_1 = 'Renewing your Account Admin subscription will charge your card on file at the beginning of the next billing cycle.'\n + ' Once your Account Admin subscription is renewed, you will be able to renew any Team Member subscriptions'\n + ' that were previously cancelled.'\n const desc_text_2 = 'Press \"Subscribe\" to renew your Account Admin subscription!'\n const due_text = 'Total due on next Invoice'\n const upgradeAccount = performAction(upgradeAccountAction)\n\n async function upgradeAccountAction() {\n let payload = {\n ...props.invoice.invoice_preview_params, // important to use the same params we sent to preview\n proration_date: props.invoice.proration_date // add the proration date to payload\n }\n\n return reSubscribe(payload)\n }\n\n return (\n \n }\n orderInfo={\n \n }\n />\n )\n}\n","import {InvoicePreview, lineItem} from \"../../../api/requestsTypes\";\nimport {useInvoiceLogic} from \"./UseInvoiceLogic\";\nimport {createManagedUser} from \"../../../api/requests\";\nimport {fetchSubMgmtData} from \"../../../billing/billingSlice\";\nimport {OrderSummary} from \"./OrderSummary\";\nimport {PrimaryButton} from \"../../Button/Button\";\nimport {OrderInfo} from \"./OrderInfo\";\nimport React from \"react\";\n\ninterface SubscribeUserProps {\n invoice: InvoicePreview\n newUserEmail: string\n newUserName: string\n setShowInvoicePreview: (show: boolean) => void\n line_items: lineItem[]\n errors: string\n\n}\n\nexport function OwnerSubscribeUserInvoice(props: SubscribeUserProps) {\n const {\n error, setError,\n isLoading, isEnabled,\n performAction\n } = useInvoiceLogic(props)\n const button_text = 'Subscribe'\n const desc_text_2 = `Press \"Subscribe\" to add ${props.newUserName} to your account! ` +\n `We will send an email to ${props.newUserEmail} with login instructions. You can edit your team size at any time.`\n const due_text = 'Total due on next Invoice'\n const inviteManagedUser = performAction(\n inviteManagedUserAction,\n (response) => setError(String(response.error))\n )\n\n function inviteManagedUserAction() {\n let payload = {\n 'fullName': props.newUserName,\n 'email': props.newUserEmail\n }\n\n return createManagedUser(payload)\n }\n\n let orderSummary = <>\n }\n orderInfo={\n \n }\n />;\n return orderSummary\n}\n\n\n\nexport function SubscribeUserInvoice(props: SubscribeUserProps) {\n const {\n error, setError,\n isLoading, isEnabled,\n performAction\n } = useInvoiceLogic(props)\n const button_text = 'Subscribe'\n const desc_text_1 = 'Adding a Team Member to your account does not generate an immediate invoice. Your monthly subscription ' +\n ' total will be adjusted on the next billing cycle.'\n const desc_text_2 = `Press \"Subscribe\" to adjust your monthly subscription and add ${props.newUserName} to your account! ` +\n `We will send an email to ${props.newUserEmail} with login instructions. You can edit your team size at any time.`\n const due_text = 'Total due on next Invoice'\n const inviteManagedUser = performAction(\n inviteManagedUserAction,\n (response) => setError(String(response.error))\n )\n\n function inviteManagedUserAction() {\n let payload = {\n 'fullName': props.newUserName,\n 'email': props.newUserEmail\n }\n\n return createManagedUser(payload)\n }\n\n return (\n \n }\n orderInfo={\n \n }\n />\n )\n}\n","import {InvoicePreview, lineItem} from \"../../../api/requestsTypes\";\nimport {useInvoiceLogic} from \"./UseInvoiceLogic\";\nimport {reSubscribe} from \"../../../api/requests\";\nimport {fetchSubMgmtData} from \"../../../billing/billingSlice\";\nimport {OrderSummary} from \"./OrderSummary\";\nimport {PrimaryButton} from \"../../Button/Button\";\nimport {OrderInfo} from \"./OrderInfo\";\nimport React from \"react\";\n\ninterface ReSubscribeUserProps {\n invoice: InvoicePreview\n users: any[]\n setShowInvoicePreview: (show: boolean) => void\n line_items: lineItem[]\n errors: string\n\n}\n\nexport function ReSubscribeUserInvoice(props: ReSubscribeUserProps) {\n const {\n error,\n isLoading, isEnabled,\n performAction\n } = useInvoiceLogic(props)\n const user_id = props.invoice.invoice_preview_params.user_id\n const user_info = props.users.filter(user => {\n return user.id === user_id\n })[0]\n const button_text = 'Subscribe'\n const desc_text_1 = `Renewing ${user_info.name}'s subscription does not generate an immediate invoice. Your monthly subscription ` +\n ' total will be adjusted on the next billing cycle.'\n const desc_text_2 = `Press \"Subscribe\" to adjust your monthly total and renew ${user_info.name}'s subscription!` +\n ` ${user_info.name} can continue to use ${user_info.email} to access their account.`\n const due_text = 'Total due on next Invoice'\n const resubscribeUser = performAction(resubscribeUserAction)\n\n function resubscribeUserAction() {\n let payload = {\n ...props.invoice.invoice_preview_params, // important to use the same params we sent to preview\n proration_date: props.invoice.proration_date // add the proration date to payload\n }\n return reSubscribe(payload)\n }\n\n return (\n \n }\n orderInfo={\n \n }\n />\n )\n}\n","import {CurrentSubscription, InvoicePreview, lineItem} from \"../../../api/requestsTypes\";\nimport {useInvoiceLogic} from \"./UseInvoiceLogic\";\nimport {cancelSubscription} from \"../../../api/requests\";\nimport {fetchSubMgmtData} from \"../../../billing/billingSlice\";\nimport {OrderSummary} from \"./OrderSummary\";\nimport {PrimaryButton} from \"../../Button/Button\";\nimport {OrderInfo} from \"./OrderInfo\";\nimport React from \"react\";\n\ninterface CancelAccountAdmin {\n invoice: InvoicePreview\n setShowInvoicePreview: (show: boolean) => void\n line_items: lineItem[]\n users: any[]\n plan: CurrentSubscription\n errors: string\n invoiceAction: string\n}\n\nexport function CancelManagerInvoice(props: CancelAccountAdmin) {\n const {\n error,\n isLoading, isEnabled,\n performAction\n } = useInvoiceLogic(props)\n const button_text = 'Cancel Subscription'\n let desc_text_1 = ''\n if (props.invoiceAction === 'cancel_with_active_users') {\n desc_text_1 = 'Cancelling your Account Manager subscription will also cancel the subscription for all of your Team Members. You and your team members ' +\n 'will still have access until the end of the current subscription period.'\n }\n const desc_text_2 = 'Press \"Cancel\" to terminate access at the end of the current subscription period and end future invoicing.'\n const due_text = 'Total due on next Invoice'\n const cancelManagerSubscriptionWithUsers = performAction(cancelManagerSubscriptionWithUsersAction)\n\n function cancelManagerSubscriptionWithUsersAction() {\n const cancelled_users = props.users.filter(user => user.active)\n const cancelled_user_ids = cancelled_users.map(user => user.id)\n\n let payload = {\n 'cancelled_ids': cancelled_user_ids,\n 'type': 'cancel_manager',\n 'subscription_id': props.plan.sub_id\n }\n\n return cancelSubscription(payload)\n }\n\n return (\n \n }\n orderInfo={\n \n \n }\n />\n )\n}\n","import {useInvoiceLogic} from \"./UseInvoiceLogic\";\nimport {cancelSubscription} from \"../../../api/requests\";\nimport {fetchSubMgmtData} from \"../../../billing/billingSlice\";\nimport {OrderSummary} from \"./OrderSummary\";\nimport {PrimaryButton} from \"../../Button/Button\";\nimport {OrderInfo} from \"./OrderInfo\";\nimport React from \"react\";\nimport {CancelUserProps} from \"./CancelUserProps\";\n\nexport function CancelUserInvoice(props: CancelUserProps) {\n const {\n error,\n isLoading, isEnabled,\n performAction\n } = useInvoiceLogic(props)\n const user_id = props.invoice.invoice_preview_params.user_id\n const user_info = props.users.filter(user => {\n return user.id === user_id\n })[0]\n\n const button_text = 'Cancel'\n const desc_text_1 = `Cancelling ${user_info.name}'s subscription will not affect the subscription of your account or other Team Members.` +\n ` ${user_info.name} will still have access until the end of the current subscription period.`\n const desc_text_2 = `Press \"Cancel\" to terminate access for ${user_info.name} at the end of the current subscription and reduce your monthly subscription total.`\n const due_text = 'Total due on next Invoice'\n const cancelUserSubscription = performAction(cancelUserSubscriptionAction)\n\n function cancelUserSubscriptionAction() {\n let payload = {\n 'cancelled_ids': [props.invoice.invoice_preview_params.user_id],\n 'type': 'cancel_user',\n 'subscription_id': props.plan.sub_id\n }\n\n return cancelSubscription(payload)\n }\n\n return (\n \n }\n orderInfo={\n \n }\n />\n )\n}\n","import {useInvoiceLogic} from \"./UseInvoiceLogic\";\nimport {deleteManagedUser} from \"../../../api/requests\";\nimport {fetchSubMgmtData} from \"../../../billing/billingSlice\";\nimport {OrderSummary} from \"./OrderSummary\";\nimport {PrimaryButton} from \"../../Button/Button\";\nimport React from \"react\";\nimport {CancelUserProps} from \"./CancelUserProps\";\n\nexport function DeleteUserInvoice(props: CancelUserProps) {\n const {\n error,\n isLoading, isEnabled,\n performAction\n } = useInvoiceLogic(props)\n const user_id = props.invoice.invoice_preview_params.user_id\n const user_info = props.users.filter(user => {\n return user.id === user_id\n })[0]\n\n const button_text = 'Delete'\n const desc_text_1 = `Deleting ${user_info.name}'s account will not affect your monthly invoice.` +\n ` However, deleting ${user_info.name}'s account will allow` +\n ` ${user_info.name} to create an Account Manager subscription with ${user_info.email}.`\n const desc_text_2 = `Press \"Delete\" to delete ${user_info.name}'s account and terminate access.`\n const deleteUser = performAction(deleteUserAction)\n\n function deleteUserAction() {\n let payload = {\n 'id': user_id\n }\n return deleteManagedUser(payload)\n }\n\n return (\n \n }\n />\n )\n}\n","import {useInvoiceLogic} from \"./UseInvoiceLogic\";\nimport {reSubscribe} from \"../../../api/requests\";\nimport {fetchSubMgmtData} from \"../../../billing/billingSlice\";\nimport {OrderSummary} from \"./OrderSummary\";\nimport {PrimaryButton} from \"../../Button/Button\";\nimport {OrderInfo} from \"./OrderInfo\";\nimport React from \"react\";\nimport {MonthlyUpgradeProps} from \"./MonthlyUpgradeProps\";\n\nexport function MonthlyUpgradeInvoice(props: MonthlyUpgradeProps) {\n const {\n error,\n isLoading, isEnabled,\n performAction\n } = useInvoiceLogic(props)\n\n const button_text = 'Subscribe'\n const desc_text_1 = 'Upgrading to a monthly subscription will charge your card on file for a month of service less any time remaining ' +\n 'on your Week Pass. Your card will be billed on a monthly basis following the initial charge.'\n const desc_text_2 = 'Press \"Subscribe\" to complete the following invoice and upgrade your account! You can cancel the monthly account at any time.'\n const due_text = 'Total due on next Invoice'\n const upgradeAccount = performAction(upgradeAccountAction);\n\n function upgradeAccountAction() {\n let payload = {\n ...props.invoice.invoice_preview_params, // important to use the same params we sent to preview\n proration_date: props.invoice.proration_date // add the proration date to payload\n }\n\n return reSubscribe(payload)\n }\n\n return (\n \n }\n orderInfo={\n \n
    \n

    {'Total due next month'}

    \n
    \n
    \n

    {props.invoice.typical_monthly.amount}

    \n
    \n \n }\n />\n )\n}\n","import React from \"react\"\nimport \"./InvoiceForm.scss\"\nimport {useSelector} from 'react-redux'\nimport {getInvoice, getLineItems, getPlanType, getUsers} from '../../../billing/billingSlice';\nimport {InvoiceAction} from \"../../../billing/invoice\";\nimport {ReSubscribeManager} from \"./ReSubscribeManager\";\nimport {ReSubscribeManagerInvoice} from \"./ReSubscribeManagerInvoice\";\nimport {OwnerSubscribeUserInvoice, SubscribeUserInvoice} from \"./SubscribeUserInvoice\";\nimport {ReSubscribeUserInvoice} from \"./ReSubscribeUserInvoice\";\nimport {CancelManagerInvoice} from \"./CancelManagerInvoice\";\nimport {CancelUserInvoice} from \"./CancelUserInvoice\";\nimport {DeleteUserInvoice} from \"./DeleteUserInvoice\";\nimport {MonthlyUpgradeInvoice} from \"./MonthlyUpgradeInvoice\";\n\n\ninterface InvoicePreviewProps {\n invoiceAction: InvoiceAction\n setShowInvoicePreview: (state: boolean) => void\n newUserEmail: string\n newUserName: string\n}\n\n\nfunction InvoiceForm(props: InvoicePreviewProps) {\n const invoice = useSelector(getInvoice)\n const line_items = useSelector(getLineItems)\n const plan = useSelector(getPlanType)\n const users = useSelector(getUsers)\n\n let errors = ''\n if (!('next_invoice' in invoice) && props.invoiceAction !== 'subscribe_owner_user') {\n errors = 'Error retrieving invoice preview. Please contact support@valueanalytics.'\n }\n\n // set the invoice based on the invoice type\n let showInvoice = () => {\n switch (props.invoiceAction) {\n case 'monthly_upgrade':\n return (\n \n )\n case 'subscribe_user':\n return (\n \n )\n case 'subscribe_owner_user':\n return (\n \n )\n case 'cancel_with_active_users':\n case 'cancel_sole_manager':\n return (\n \n )\n case 're_subscribe_manager_monthly':\n return \n case 're_subscribe_user':\n return \n case 'cancel_user':\n return \n case 'delete_user':\n return \n case 're_subscribe_manager':\n return \n case 'nothing':\n default:\n return

    Not Implemented

    \n }\n }\n\n return (\n showInvoice()\n )\n\n}\n\n\nexport default InvoiceForm\n","import React, {useState} from 'react';\nimport {Route, Redirect, NavLink} from 'react-router-dom';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Col, Container, Nav, NavItem, Row} from 'reactstrap';\nimport AccountInformation from './AccountInformation';\nimport Billing from './Billing';\nimport {Modal} from '../Modal/Modal';\nimport './AccountPage.scss';\nimport classNames from 'classnames';\nimport InvoiceForm from \"./InvoiceForm/InvoiceForm\";\nimport {getPlanOptions, getPlanType, fetchInvoicePreview} from '../../billing/billingSlice';\nimport {MONTHLY_NAME} from \"../../constants\";\nimport {selectClaims} from \"../../auth/authSlice\";\nimport {InvoiceAction} from \"../../billing/invoice\";\nimport SmallScreenAlert from \"../Utility/SmallScreenAlert\";\n\nfunction AccountPage() {\n const dispatch = useDispatch();\n const claims = useSelector(selectClaims);\n const planOptions = useSelector(getPlanOptions)\n const planType = useSelector(getPlanType)\n const [newUserName, setNewUserName] = useState('');\n const [newUserEmail, setNewUserEmail] = useState('');\n const [showInvoicePreview, setShowInvoicePreview] = useState(false);\n const [invoiceAction, setInvoiceAction] = useState('nothing')\n const [teamMgmtError, setTeamMgmtError] = useState('')\n\n const accountPageClassName = () =>\n classNames({\n 'account-page': true,\n 'blur': showInvoicePreview\n });\n\n function displayInvoicePreview(name: string, email: string) {\n setNewUserName(name);\n setNewUserEmail(email);\n setShowInvoicePreview(true)\n }\n\n async function generateNewUserInvoice() {\n let monthly_option = planOptions.filter(option => {\n return option.title === MONTHLY_NAME\n })[0]\n let invoice_preview_payload = {\n subscription_id: planType.sub_id,\n price_id: monthly_option.price_id,\n type: 'subscribe_user',\n user_id: 999 // note, user not created yet. Need to refactor backend to not require user_id\n }\n await dispatch(fetchInvoicePreview(invoice_preview_payload))\n }\n\n\n async function handleInviteUser(\n name: string,\n email: string,\n confirmEmail: string,\n enableButton: () => void,\n disableButton: () => void,\n showAddUserForm: (show: boolean) => void\n ): Promise {\n if (email !== confirmEmail) {\n setTeamMgmtError('Team Member email address does not match confirmation. Please check email address')\n } else {\n disableButton()\n setTeamMgmtError('')\n await generateNewUserInvoice();\n setInvoiceAction('subscribe_user')\n displayInvoicePreview(name, email);\n enableButton()\n showAddUserForm(false)\n }\n }\n\n async function handleOwnerInviteUser(\n name: string,\n email: string,\n confirmEmail: string,\n enableButton: () => void,\n disableButton: () => void,\n showAddUserForm: (show: boolean) => void\n ): Promise {\n if (email !== confirmEmail) {\n setTeamMgmtError('Team Member email address does not match confirmation. Please check email address')\n } else {\n disableButton()\n setTeamMgmtError('')\n setInvoiceAction('subscribe_owner_user')\n displayInvoicePreview(name, email)\n enableButton()\n showAddUserForm(false)\n }\n }\n\n\n return (\n <>\n \n
    \n \n \n \n \n \n \n \n
    \n \n
    \n
    \n \n {\n claims.role === 'MANAGER' ?\n [\n ,\n \n ]\n : claims.role === 'OWNER' ?\n \n :\n \n }\n \n \n
    \n
    \n
    \n {\n showInvoicePreview\n ? (\n {\n setShowInvoicePreview(false)\n }} hideCloseButton={false}>\n \n \n )\n : null\n }\n \n );\n}\n\nexport default AccountPage;\n","import React from 'react'\nimport {FormGroup, Input, Label} from \"reactstrap\";\nimport './InputCheckbox.scss'\n\n\nexport function InputCheckbox(props: { onChange: (event: React.ChangeEvent) => void, label: string, isChecked: boolean }) {\n return (\n \n \n \n \n )\n}\n","import {createAsyncThunk, createSlice, PayloadAction} from \"@reduxjs/toolkit\";\nimport {\n IAvailableColumn,\n IDistancingOptionsResponse,\n INearestBusinessesRequest,\n INearestBusinessesResponse\n} from \"../api/requestsTypes\";\nimport {RootState} from \"../store\";\nimport {getDistancingOptions, getNearestBusinesses} from \"../api/requests\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\nimport {FilterResultRow, ITableHeader, ITicker, TickerItem} from \"../types\";\nimport {formatNumber} from \"../utility/numberFormatter\";\n\ntype NearestBusinesses = INearestBusinessesResponse|null;\n\nexport interface ICompAssistColumn extends IAvailableColumn{\n selected: boolean\n}\n\n\ninterface ICompAssistSlice{\n isFetchingDistancingOptions: boolean\n isFetchingNearestBusinesses: boolean\n nearestBusinesses: NearestBusinesses\n ticker: TickerItem,\n availableColumns: ICompAssistColumn[],\n availableTickers: ITicker[]\n}\n\ninterface ICompAssistSliceState{\n compAssistSlice: ICompAssistSlice\n}\n\ninterface ITypeTableHeader extends ITableHeader{\n type: string\n}\n\n\n function getTableRow(headers: ITypeTableHeader[] ,business: any) {\n let row: FilterResultRow = [];\n\n for (let header of headers) {\n if (business[header.id] === undefined) {\n row.push({\n column: header.id,\n name: header.name,\n value: \"\",\n type: header.type\n })\n continue\n }\n\n row.push({\n column: header.id,\n name: header.name,\n value: business[header.id],\n type: header.type\n })\n }\n\n row.push({\n column: 'uid',\n name: 'uid',\n value: business.uid,\n type: 'text'\n })\n\n return row\n }\n\n\nexport const fetchDistancingOptions = createAsyncThunk(\n 'compAssist/fetchDistancingOptions',\n async (_, thunkAPI) => {\n return await getDistancingOptions()\n },\n {\n condition: (_, {getState}) => {\n const {isFetchingDistancingOptions, availableColumns} = getState().compAssistSlice;\n\n if(isFetchingDistancingOptions){\n return false;\n }\n\n return true;\n }\n }\n);\n\nexport const fetchNearestBussiness = createAsyncThunk(\n 'compAssist/fetchNearestBusiness',\n async(_, thunkAPI) => {\n const columns = thunkAPI.getState().compAssistSlice.availableColumns\n .filter((column) => column.selected)\n .map((column) => column.column_name);\n const ticker = thunkAPI.getState().compAssistSlice.ticker;\n const data: INearestBusinessesRequest = {\n target: {\n ticker: ticker.ticker,\n uid: ticker.uid\n },\n columns: columns\n }\n return await getNearestBusinesses(data);\n },\n {\n condition: (_, {getState}) => {\n const {isFetchingNearestBusinesses, ticker, availableColumns} = getState().compAssistSlice;\n\n if(isFetchingNearestBusinesses){\n return false\n }\n\n if(ticker.uid === -1){\n return false\n }\n\n if(availableColumns.filter((column) => column.selected).length === 0){\n return false\n }\n }\n }\n);\n\nconst initialState: ICompAssistSlice = {\n isFetchingDistancingOptions: false,\n nearestBusinesses: null,\n isFetchingNearestBusinesses: false,\n ticker:{\n company_name: \"\",\n id: -1,\n ticker: \"\",\n uid: -1\n },\n availableColumns: [],\n availableTickers: []\n}\n\nfunction selectDefaultColumns(availableColumns: IAvailableColumn[]) {\n return availableColumns.map((column) => {\n return {\n ...column,\n selected: column.default\n }\n });\n }\nexport const compAssistSlice= createSlice({\n name: 'compAssistSlice',\n initialState: initialState,\n reducers: {\n setTicker: (state, action: PayloadAction) => {\n state.ticker = action.payload\n },\n setColumn: (state, action: PayloadAction) => {\n state.availableColumns = state.availableColumns.map((column) => {\n if(column.column_name === action.payload.column_name){\n return action.payload\n }\n return column\n });\n },\n resetSelections: (state) => {\n state.availableColumns = selectDefaultColumns(state.availableColumns)\n state.ticker = initialState.ticker\n }\n },\n extraReducers: builder => {\n builder.addCase(fetchDistancingOptions.fulfilled, (state, action) => {\n state.availableColumns = selectDefaultColumns(action.payload.distancing_options.available_columns)\n state.availableTickers = action.payload.distancing_options.available_tickers\n state.isFetchingDistancingOptions = false\n });\n builder.addCase(fetchDistancingOptions.pending, (state, action) => {\n state.isFetchingDistancingOptions = true\n });\n builder.addCase(fetchDistancingOptions.rejected, (state, action) => {\n state.isFetchingDistancingOptions = false\n });\n builder.addCase(fetchNearestBussiness.fulfilled, (state, action) => {\n state.nearestBusinesses = action.payload\n state.isFetchingNearestBusinesses = false\n });\n builder.addCase(fetchNearestBussiness.pending, (state, action) => {\n state.isFetchingNearestBusinesses = true\n });\n builder.addCase(fetchNearestBussiness.rejected, (state, action) => {\n state.isFetchingNearestBusinesses = false;\n })\n\n resetStateOnSignOut(builder, initialState);\n }\n});\n\nexport const selectSelectableColumnGroups = (state: ICompAssistSliceState): {[key: string]: ICompAssistColumn[]} => {\n // get a dictionary of columns that are selectable grouped by group\n if (state.compAssistSlice.availableColumns.length === 0){\n return {}\n }\n\n const selectableColumns = state.compAssistSlice.availableColumns\n .filter((column) => column.selectable)\n .reduce((acc, column) => {\n if(column.group === null){\n return acc\n }\n if(acc[column.group] === undefined){\n acc[column.group] = []\n }\n acc[column.group].push(column)\n return acc\n }, {} as {[key: string]: ICompAssistColumn[]});\n\n return selectableColumns\n}\n\nexport default compAssistSlice.reducer;\nexport const {\n setTicker,\n setColumn,\n resetSelections\n} = compAssistSlice.actions;\n\nexport const selectTicker = (state: ICompAssistSliceState): TickerItem => state.compAssistSlice.ticker;\nexport const selectTableData = (state: ICompAssistSliceState): {headers: ITableHeader[], rows: FilterResultRow[], subHeaders: ITableHeader[]} => {\n const {nearestBusinesses, availableColumns} = state.compAssistSlice;\n if(nearestBusinesses === null || nearestBusinesses === undefined){\n return {\n headers: [],\n subHeaders: [],\n rows: []\n }\n }\n\n const headers: ITypeTableHeader[] = availableColumns.map((column) => {\n return {\n id: column.column_name,\n name: column.display_name,\n type: column.type,\n highlight: column.selected\n }\n });\n\n if(nearestBusinesses.data.results === undefined){\n return {\n headers: headers,\n subHeaders: [],\n rows: []\n }\n }\n\n const subHeaders:ITableHeader[] = getTableRow(headers, nearestBusinesses.data.results[0])\n .map((column) => {\n return {\n id: column.column,\n name: formatNumber(column.value, column.type === 'integer_m'? 'integer_m_f': column.type),\n highlight: false,\n }\n });\n\n const rows = nearestBusinesses.data.results\n .slice(1)\n .map((business) => getTableRow(headers, business))\n\n return {\n headers: headers,\n subHeaders: subHeaders,\n rows: rows\n }\n}\n\nexport const selectIsFetchingDistancingOptions = (state: ICompAssistSliceState): boolean => state.compAssistSlice.isFetchingDistancingOptions;\nexport const selectIsFetchingNearestBusinesses = (state: ICompAssistSliceState): boolean => state.compAssistSlice.isFetchingNearestBusinesses;\nexport const selectCanSearchForCompanies = (state: ICompAssistSliceState): boolean => {\n const {ticker, availableColumns} = state.compAssistSlice;\n if(ticker.uid === -1){\n return false\n }\n\n if(availableColumns.filter((column) => column.selected).length === 0){\n return false\n }\n\n return true\n}\n\nexport const selectAvailableTickers = (state: ICompAssistSliceState): ITicker[] => state.compAssistSlice.availableTickers;\n","import SmallScreenAlert from \"../Utility/SmallScreenAlert\";\nimport React, {useState, useEffect} from \"react\";\nimport {Col, Container, Input, InputGroup, Label, Row} from \"reactstrap\";\nimport {Modal} from \"../Modal/Modal\";\nimport {TickerPicker} from \"../TickerPicker/TickerPicker\";\nimport {PrimaryButton} from \"../Button/Button\";\nimport CompsTab from \"../CompsTab/CompsTab\";\nimport {InputCheckbox} from \"../Checkbox/InputCheckbox\";\nimport './CompAssist.scss'\nimport {FilterTableContainer} from \"../FilterTable/FilterTable\";\nimport {getCompany} from \"../../table/filterTable\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {\n fetchDistancingOptions,\n fetchNearestBussiness,\n ICompAssistColumn,\n resetSelections, selectAvailableTickers, selectCanSearchForCompanies,\n selectIsFetchingDistancingOptions, selectIsFetchingNearestBusinesses,\n selectSelectableColumnGroups,\n selectTableData,\n selectTicker,\n setColumn,\n setTicker\n} from \"../../compAssist/compAssitSlice\";\nimport {FilterResultRow, TickerItem} from \"../../types\";\nimport {addCompsToGroup} from \"../../comps/compsGroupSlice\";\nimport {Loader} from \"../Loader/Loader\";\n\nfunction CompAssistColumnCheckbox(props: { column: ICompAssistColumn }) {\n const dispatch = useDispatch();\n\n function handleOnChange(event: React.ChangeEvent) {\n dispatch(setColumn({\n ...props.column,\n selected: event.target.checked\n }));\n }\n\n return (\n \n )\n}\n\nfunction CompAssistColumnGroup(props: { groupName: string, columns: ICompAssistColumn[] }): JSX.Element {\n return (\n \n \n
    \n {props.columns.map((column) => )}\n \n )\n}\n\nfunction CompAssist() {\n const [showTickerPicker, setShowTickerPicker] = useState(false);\n const [isCompsTabExpanded, setIsCompsTabExpanded] = useState(false);\n const dispatch = useDispatch();\n const columnGroups = useSelector(selectSelectableColumnGroups);\n const ticker = useSelector(selectTicker);\n const tableData = useSelector(selectTableData);\n const isFetchingDistancingOptions= useSelector(selectIsFetchingDistancingOptions);\n const isFetchingNearestBusiness = useSelector(selectIsFetchingNearestBusinesses);\n const canFindCompanies = useSelector(selectCanSearchForCompanies);\n const availableTickers = useSelector(selectAvailableTickers);\n\n useEffect(() => {\n dispatch(fetchDistancingOptions());\n }, []);\n\n function displayTickerPicker() {\n setShowTickerPicker(true);\n }\n\n function handleOnCloseTickerPicker() {\n setShowTickerPicker(false);\n }\n\n const handleOnAddToCompsGroup = (row: FilterResultRow) => () => {\n const company = getCompany(row);\n if (company === null) {\n return;\n }\n dispatch(addCompsToGroup(company));\n setIsCompsTabExpanded(true);\n }\n\n\n function handleOnCompsTabClicked() {\n setIsCompsTabExpanded(!isCompsTabExpanded);\n }\n\n\n function handleOnTickerPicked(ticker: TickerItem) {\n setShowTickerPicker(false);\n dispatch(setTicker(ticker))\n }\n\n return (\n <>\n \n
    \n \n \n \n \n

    Choose a ticker and find comparable companies based on\n selected attributes.

    \n
    \n \n \n \n \n \n \n \n {\n isFetchingDistancingOptions\n ?(\n
    \n )\n :(\n <>\n \n \n {\n Object\n .keys(columnGroups)\n .map(groupName =>\n )\n }\n \n \n \n \n \n dispatch(fetchNearestBussiness())}\n isEnabled={canFindCompanies}\n className={'form-button'}\n isLoading={isFetchingNearestBusiness}\n />\n \n \n dispatch(resetSelections())}\n isEnabled={true} className={'form-button'}/>\n \n \n \n \n )\n }\n {\n isFetchingNearestBusiness\n ?(\n
    \n )\n :(\n \n \n \n )\n }\n
    \n
    \n \n {\n showTickerPicker\n ? (\n \n \n \n )\n : null\n }\n
    \n \n )\n}\n\nexport default CompAssist;\n","import {useEffect, useRef} from \"react\";\n\nexport function useFixElementOnDocumentScrollLeft() {\n const navRef = useRef(null);\n\n useEffect(() => {\n document.addEventListener('scroll', handleScroll, {passive: true});\n return () => document.removeEventListener('scroll', handleScroll);\n }, []);\n\n function handleScroll(e: Event) {\n const scrollLeft = document.documentElement.scrollLeft;\n if (navRef.current === null) {\n return;\n }\n\n navRef.current.style.left = `${scrollLeft}px`;\n }\n\n return {navRef}\n}\n","import React from \"react\"\n\ninterface figure_props {\n figure_idx: number;\n image: string;\n caption: string;\n height?: string;\n width?: string;\n floatRight?: boolean;\n floatLeft?: boolean\n paddingLeft?:string;\n margin?:string;\n}\n\n\ninterface img_cont_style {\n width: string;\n height?: string;\n float?: \"-moz-initial\" | \"inherit\" | \"initial\" | \"revert\" | \"unset\" | \"inline-end\" | \"inline-start\" | \"left\" | \"none\" | \"right\" | undefined;\n paddingLeft?: string;\n margin?: string;\n}\n\nexport function Figure(props:figure_props) {\n\n let fig_cont_style: img_cont_style = {\n width: '100%'\n }\n if (props.paddingLeft) {\n fig_cont_style['paddingLeft'] = props.paddingLeft\n }\n if (props.height) {\n fig_cont_style['height'] = props.height\n }\n if (props.width) {\n // fig_img_style['width'] = props.width\n fig_cont_style['width'] = props.width\n }\n if (props.floatRight) {\n fig_cont_style['float'] = \"right\"\n }\n if (props.margin) {\n fig_cont_style['margin'] = props.margin\n }\n return (\n
    \n \n

    \n \n Figure {String(props.figure_idx)}:\n {props.caption}

    \n
    \n )\n}","import React from \"react\"\n\n\ninterface boldItalicsProps {\n text: String,\n color: \"#00B050\" | \"#0070C0\" | \"#C00000\" | \"#7030A0\" | \"#000000\"\n}\n\nexport function Bc(props:boldItalicsProps){\n\n let weight: \"bold\" | \"-moz-initial\" | \"inherit\" | \"initial\" | \"revert\" |\n \"unset\" | \"normal\" | (number & {}) | \"bolder\" | \"lighter\" | undefined = \"bold\"\n\n let style = {\n fontWeight: weight,\n color: props.color\n }\n\n return (\n {props.text}\n )\n}\n","export default __webpack_public_path__ + \"static/media/Figure_1_login.1f9de720.png\";","export default __webpack_public_path__ + \"static/media/Figure_2_login.dcb06d3f.png\";","export default __webpack_public_path__ + \"static/media/Figure_1_fn.14c48745.png\";","export default __webpack_public_path__ + \"static/media/Figure_2_fn.9a81d34b.png\";","export default __webpack_public_path__ + \"static/media/Figure_3_fn.478cd40a.png\";","export default __webpack_public_path__ + \"static/media/Figure_4_fn.dbc0fca0.png\";","export default __webpack_public_path__ + \"static/media/Figure_1_desc.6e0ba759.png\";","export default __webpack_public_path__ + \"static/media/Figure_2_desc.36da4f72.png\";","export default __webpack_public_path__ + \"static/media/Figure_1_rf.da2c8d97.png\";","export default __webpack_public_path__ + \"static/media/Figure_2_rf.2088ac87.png\";","export default __webpack_public_path__ + \"static/media/Figure_1_ts.1c2f80bf.png\";","export default __webpack_public_path__ + \"static/media/Figure_1_ins.8081c8c4.png\";","export default __webpack_public_path__ + \"static/media/Figure_2_ins.3e5e7ae1.png\";","export default __webpack_public_path__ + \"static/media/Figure_3_ins.28d7e01a.png\";","export default __webpack_public_path__ + \"static/media/Figure_4_ins.b83ebe8d.png\";","export default __webpack_public_path__ + \"static/media/Figure_2_reinstall.a0618988.png\";","export default __webpack_public_path__ + \"static/media/ts_icon.7845d6eb.png\";","export default __webpack_public_path__ + \"static/media/install_icon.e57c166d.png\";","import {Accordion} from \"react-bootstrap\";\nimport {Container} from 'reactstrap';\nimport './ExcelPluginDocumentationPage.scss';\nimport {Figure} from \"./Figure\";\nimport {Bc} from \"./boldColor\";\nimport \"../Footer/Footer.scss\";\nimport '../../App.scss'\nimport React, {Fragment, useEffect, useRef, useState} from \"react\";\n\nimport figure_1 from '../../img/instructions_figures/Figure_1_login.png'\nimport figure_2 from '../../img/instructions_figures/Figure_2_login.png'\nimport figure_1_fn from '../../img/instructions_figures/Figure_1_fn.png'\nimport figure_2_fn from '../../img/instructions_figures/Figure_2_fn.png'\nimport figure_3_fn from '../../img/instructions_figures/Figure_3_fn.png'\nimport figure_4_fn from '../../img/instructions_figures/Figure_4_fn.png'\nimport figure_1_desc from '../../img/instructions_figures/Figure_1_desc.png'\nimport figure_2_desc from '../../img/instructions_figures/Figure_2_desc.png'\nimport figure_1_rf from '../../img/instructions_figures/Figure_1_rf.png'\nimport figure_2_rf from '../../img/instructions_figures/Figure_2_rf.png'\nimport figure_1_ts from '../../img/instructions_figures/Figure_1_ts.png'\nimport figure_1_ins from '../../img/instructions_figures/Figure_1_ins.png'\nimport figure_2_ins from '../../img/instructions_figures/Figure_2_ins.png'\nimport figure_3_ins from '../../img/instructions_figures/Figure_3_ins.png'\nimport figure_4_ins from '../../img/instructions_figures/Figure_4_ins.png'\nimport figure_2_reins from '../../img/instructions_figures/Figure_2_reinstall.png'\n\n\nimport login_icon from '../../img/excel_icons/login80x80.png'\nimport retrieve_icon from '../../img/excel_icons/build80x80.png'\nimport refresh_icon from '../../img/excel_icons/refresh80x80.png'\nimport desc_icon from '../../img/excel_icons/description80x80.png'\nimport ts_icon from '../../img/excel_icons/ts_icon.png'\nimport install_icon from '../../img/excel_icons/install_icon.png'\n\nexport function ExcelPluginDocumentationPage() {\n\n let keys = {\n install: \"install\",\n login: \"login\",\n builder: \"builder\",\n fields: \"fields\",\n refresh: \"refresh\",\n troubleshoot: \"troubleshoot\",\n reInstall: \"reInstall\"\n }\n\n const get_default = function (keys: any){\n\n const anchor = window.location.hash.split('#')[1];\n let default_open = undefined\n if (Object.values(keys).indexOf(anchor) > -1) {\n default_open = anchor\n }\n return default_open\n\n }\n\n useEffect(()=>{\n\n let anchor = get_default(keys)\n if (anchor) {\n let current = document.getElementById(anchor)\n if (current){\n current.scrollIntoView()\n }\n }\n\n })\n\n\n\n return (\n
    \n \n\n\n
    \n

    Value Analytics Excel Add-In

    \n\n\n

    \n The Value Analytics Excel Add-In provides direct access to financial, equity, and\n company profile data for all U.S. exchange-traded companies available in\n the Value Analytics database. The purpose of the Add-In is to support custom\n financial data analysis and modeling via direct access to Value Analytics' data in\n the context of a Microsoft Excel spreadsheet.\n The Excel Add-In is available to all subscribing Value Analytics users!\n \n\n

    \n
    \n\n
    \n

    Basic Tasks

    \n \n \n Installing the\n Add-In\n \n

    \n The Value Analytics Excel Add-In is supported for the following versions of Excel:\n\n

      \n
    • Excel on Mac with Microsoft 365 Subscription
    • \n
    • Excel on Windows with Microsoft 365 Subscription
    • \n
    • Excel 2019 or later on Mac
    • \n
    • Excel on the web
    • \n
    \n\n Please note that for Windows users, you must have a Microsoft 365 Subscription to\n install the Add-In.\n Once you have confirmed that your version of Excel is one of the supported versions\n listed above,\n you can install the Add-In by first navigating to the Insert tab in the Excel\n ribbon, and then\n clicking My Add-ins (Figure 1).\n

    \n
    \n

    \n After the Office Add-Ins dialogue box opens, select Store and enter \"Value\n Analytics\" in\n the search field. Find the Value Analytics Add-In within the search results and\n select\n Add (Figure 2).\n

    \n
    \n

    \n Next, the Office Add-In store will inform you that you agree to our terms and\n conditions\n by continuing with the installation. Press Continue to finish installing the Add-In.\n If the installation was successful, the Value Analytics tab will be added to the\n Excel ribbon\n and you will see the following alert (Figure 3).\n

    \n
    \n\n

    \n You can test if the installation was successful by navigating to the Value Analytics tab\n and clicking Login (Figure 4).\n

    \n\n
    \n\n

    \n After clicking the Login button, you should see the Value Analytics Login page load in\n the Excel task pane. However, for some combinations of Windows and Excel builds, the task pane\n may appear blank initially. If the task pane appears blank, you can resolve the issue\n by re-sizing the task pane (Figure 5).\n\n

    \n\n
    \n\n

    \n If the task pane appears blank after resizing the window, please contact support@valueanalytics.org\n

    \n\n
    \n
    \n \n Logging In\n \n\n

    \n Once the Add-In has been successfully installed, you can view the Add-In menu\n by clicking the Value Analytics tab located on the Excel Ribbon.\n Figure 1 shows\n the location of the Value Analytics tab and the menu options.\n

    \n\n
    \n\n

    \n After clicking the Value Analytics tab, click the Login button to access the login\n form.\n Please provide the same email address and password that you used to create an\n account\n on the web application to log in to the Excel Add-in. If you have not created a\n Value Analytics account, please create\n one here to use\n the Excel Add-In.\n Figure 2 shows the login form that appears\n after pressing Login.\n

    \n\n
    \n\n\n
    \n
    \n \n Retrieving\n Data\n \n\n\n

    \n After logging in, you can start retrieving data from the Value Analytics server.\n Clicking the Formula Builder button will open a form that creates the functions\n for retrieving general, financial and equity data from Value Analytics.\n Figure 1 highlights the Formula Builder\n button\n on the Value Analytics menu.\n

    \n\n
    \n\n

    \n Within the Formula Builder interface, data are separated by category.\n There are\n a total of seven data categories: General Information, Balance Sheet, Cashflow Statement, Income\n Statement, Performance Statistics, Equity, and Pricing Multiples (Figure 2).\n Select a category by clicking one of the available tabs along the left side of the Formula Builder. Selecting different categories will\n change the field options available in the dropdown menu on the form.\n

    \n

    Retrieving Financial Data

    \n

    \n Financial data are retrieved using the Balance Sheet, Cashflow Statement, Income\n Statement, Performance Statistics, Equity, and Pricing Multiples categories.\n Once one of the financial categories are selected, complete the form to retrieve data.\n The input specifies the cell in\n the Excel sheet that will be populated with financial data. Note that the defaults to the cell that was selected\n prior to opening the Formula Builder Page.\n To specify a different :\n

    \n
      \n
    1. Click within the input field
    2. \n
    3. Click on the cell in the Excel sheet that you want to populate with financial data
    4. \n
    \n
    \n Once you have clicked the desired cell,\n pressing \"enter\" or \"tab\" will move the one\n row down or one column to the right, respectively.\n You can also specify the by typing the cell address\n within the field.\n To change the by typing:\n\n
    \n
      \n
    1. Click within the input field
    2. \n
    3. Type the cell address in the form
    4. \n
    5. Press \"enter\"
    6. \n
    \n
    \n\n Pressing \"escape\" while the cursor is within the input form\n will deactivate the cell selection process for the input.\n Figure 2 shows the set\n to G3.\n

    \n\n
    \n\n

    \n After selecting the Output Cell, select the desired field from the Field dropdown menu.\n The fields available within the dropdown menu represent the available fields for the selected category.\n Figure 3 shows the first several fields\n available for Balance Sheet category.\n You can search for specific fields within the dropdown menu search bar. Click the\n desired field to select it for retrieval. Changing the selected category will update the\n available fields in the dropdown menu.\n

    \n\n\n
    \n\n\n\n

    \n Once the desired field is selected, you must provide two more required parameters\n for the Balance Sheet, Cashflow Statement, Income Statement, Performance Statistics, Equity, and Pricing Multiples categories:\n

    \n
      \n
    1. (required): ticker associated with\n public company of interest\n\n
    2. \n
    3. (required): reference date for retrieving\n financial data. Date should be set to the valuation date
    4. \n\n
    \n
    \n\n You can also provide two optional parameters:\n
    \n
      \n
    1. (optional): The financial period\n of annualized data. Options include Fiscal Year (FY) or Trailing Twelve Month (TTM),\n and by default Period is set to \"FY\".\n Period is only applicable for annualized data, i.e. Period is ignored for\n Equity data\n\n
    2. \n
    3. (optional):\n Offsets the fiscal year relative to provided valuation date.\n For example, enter \"0\" for last fiscal year (LFY) data relative to Date,\n \"1\" for data one fiscal year prior to LFY, etc. Fiscal Year Offset defaults to \"0\",\n and is ignored when Period is set to \"TTM\"\n
    4. \n\n
    \n
    \n\n Notice that by default, is set to \"FY\",\n and is set to \"0\", meaning the Formula Builder\n will retrieve last fiscal year (LFY) data relative to if\n you do not select values for and .\n\n

    \n

    \n To specify , , and :\n\n

    \n
      \n
    1. Click within the input field of the respective parameter
    2. \n
    3. Click on the cell in the Excel sheet that stores the parameter's value
    4. \n
    \n
    \n\n The Formula Builder will\n prompt you if a parameter's value is incorrectly formatted. You can also specify , , and by typing the cell address\n within the Formula Builder.\n To change these parameters by typing:\n\n
    \n
      \n
    1. Click within the respective input fields
    2. \n
    3. Type the cell address in the form that contains the parameter's value
    4. \n
    5. Press \"enter\"
    6. \n
    \n
    \n Pressing \"esc\" on your keyboard will deactivate the cell selection process for the\n selected input.\n Please note that the input fields on the Formula Builder accept cell address\n only, not the literal values of the parameter.\n

    \n

    \n Figure 4 shows an example of a properly\n populated\n Formula Builder form. In this example, the user has a valuation Date of April 19th,\n 2022 and\n is interested in Apple Inc.'s Total Revenue for the Last Fiscal Year (LFY) prior to\n the\n valuation date.\n Thus, =AAPL, =04/19/22, =0 by default, =FY by\n default, and Total Revenue is\n selected from the dropdown menu. These inputs will retrieve the Total Revenue for Apple Inc.'s fiscal\n year ended September 25, 2021. If the =1,\n the function will retrieve Apple Inc.'s Total Revenue for the fiscal year ended\n September 25,\n 2020. The allows you to retrieve\n data for sequential fiscal years prior to an arbitrary valuation date without\n knowing\n when the specified firm's fiscal year ended.\n

    \n
    \n

    \n Pressing the Get Data button on the Formula Builder form will populate the with\n data specified by the input values.\n The Formula Builder\n also creates the VA.GETVALUE formula within the formula bar of\n the (Figure 4).\n VA.GETVALUE has the following syntax:\n
    \n
    \n \n VA.GETVALUE(Field, , , , )\n \n
    \n\n Once you become familiar with the VA.GETVALUE syntax, you can call the function\n directly without using\n the Formula Builder. VA.GETVALUE has the same functionality as standard Excel functions,\n meaning you\n can drag the formula over multiple cells to vary the function inputs.\n\n

    \n

    Retrieving General Information

    \n

    \n The General Information tab is unique relative to the financial data categories because this category\n retrieves data that provides a general description of a target company rather than specific data\n from a financial statement. For example, the General Information category includes data like\n a company's industry, business description, SIC code, exchange, etc.\n The General Information tab builds the VA.GETINFO formula:\n\n
    \n
    \n \n VA.GETINFO(Field, )\n \n
    \n\n The VA.GETINFO formula only requires two input parameters: Field and .\n Use the General Information tab to build the VA.GETINFO formula in the same manner described in the previous section.\n Once you become familiar with the VA.GETINFO syntax, you can call the function\n directly without using the builder in the General Information tab.\n\n

    \n
    \n
    \n \n Field\n Definitions\n \n\n\n

    \n You can find a list of all available fields by clicking the Field Definitions\n button in the Add-In menu (Figure 1).\n The Field Definitions window provides all available fields, their definitions,\n and the corresponding Function Value that is input to the VA.GETVALUE function.\n

    \n\n
    \n\n

    \n The Field Definitions window organizes the available Fields into six categories:\n Balance Sheet, Cashflow Statement, Equity, Income Statement, Performance\n Statistics, and Pricing Multiples (Figure 2).\n Select a different category to change the Fields displayed in the menu.\n

    \n\n
    \n

    \n Hover over descriptions to reveal the full Description text, and click a Function\n Value to copy\n that value to your clipboard. Once the Function Value is copied to your clipboard,\n you can paste\n the Function Value directly into the VA.GETVALUE function to retrieve data\n corresponding to\n that field.\n

    \n\n
    \n
    \n \n Refreshing\n Data\n \n\n\n

    \n Once data has been retrieved from the Value Analytics server, the data is stored\n within the\n Excel sheet. We store the data within the Excel Sheet so that you will not have to\n wait\n for the data to be retrieved from the server when the file is opened.\n You can refresh the data within the Excel Sheet by pressing the Refresh button in\n the\n menu (Figure 1), and then the Refresh\n button in the\n window that opens (Figure 2).\n

    \n\n
    \n\n

    \n Most of the time, the refreshed data will be identical to the data stored within the\n Excel Sheet.\n However, financial data can change when companies issue corrections.\n We recommend that you refresh data prior to using data from Value Analytics in\n official reports,\n so that the reported information is up to date.\n You will see a \"BUSY\" prompt within the cells while the Add-In is retrieving data\n from the server.\n If you are retrieving a large number of values during the refresh (i.e. thousands of\n values),\n it may take a moment for the refresh to complete.\n

    \n\n
    \n
    \n
    \n \n Troubleshooting\n \n\n

    \n If the Add-In is not behaving as expecting, you can reload the Add-In by:\n\n

    \n
      \n
    1. Clicking any button in the Value Analytics tab to open the task pane
    2. \n
    3. Clicking the information icon in the top-right
    4. \n
    5. Selecting \"Reload\" from the drop down menu
    6. \n
    \n
    \n Figure 1 shows the \"Reload\" option for Mac\n versions of excel.\n Reloading the Add-In will install the latest version of the software from our\n servers and ensure that your installed\n version is up-to-date. If you are still experiencing unexpected behavior, please\n contact us\n at support@valueanalytics.org.\n

    \n\n
    \n
    \n
    \n \n Re-Installing\n \n

    \n For some Add-In updates, it may be necessary to re-install the Add-In to load\n new functionality. You can reinstall the Add-In by first navigating to the Insert tab\n in the Excel ribbon, and then clicking My Add-ins\n (Figure 1).\n

    \n
    \n

    \n Next, navigate to the My Add-ins tab of the Office Add-In page, and select the three dots\n on the right side of the Value Analytics Add-In\n (Figure 2).\n

    \n
    \n

    \n From the menu that opens after selecting the three dots, select \"Remove\" and confirm\n in the following dialogue box. After the Add-In was successfully removed (the Value Analytics\n tab will no longer be visible on the ribbon), close the\n Excel Application.\n

    \n

    \n Next, re-open Excel and navigate back to the Office Add-Ins page\n (Figure 1).\n From the Office Add-Ins page, select the Store tab and type \"Value Analytics\" in the search field.\n Find the Value Analytics Add-In within the search results and select Add (Figure 3).\n

    \n
    \n

    \n The Office Add-In store will inform you that you agree to our terms and\n conditions\n by continuing with the installation. Press Continue to finish installing the Add-In.\n If the installation was successful, the Value Analytics tab will be added to the\n Excel ribbon\n and you will see the following alert (Figure 4).\n

    \n
    \n

    \n If the Add-In is not behaving as expected following the re-installation, please\n contact support@valueanalytics.org\n

    \n\n\n
    \n
    \n
    \n
    \n
    \n
    \n );\n}\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANJSURBVHgB7ZxLqI1RFMf/nskreWQgdSUT6pY8BkIXKcrIzIDIhMjoGpjcXAMMrgwwkbcyQokSeY7UzcQjGekUiSJ3gpv3Wu1znL2/4nyndc9da5/Wr/71fV9ncO7v7u/b+6y9zgGaYzqlh/KK8pny20BeUuYiAzZS3sCGtGL2wDhLKV9hU95byjwoMaLk655QOqvHA5Q+ylXKN+jzDuFxYpYlSP/jy+E0xSbU5T2CkzCyxGtmRccf4CSUERjzC05CswKdAi5QiAsU4gKFuEAhLlCICxTiAoW4QCEuUIgLFOIChbhAIbkKHEuZCQPkKJDFPUco5e+FMrkJnEq5gfom0nYok5NAvm0vUhZH184jA7pR3xO5Bj3OId3cOopMsCDwEFJ5PBLHIxO0Be5DKq+fMgFGsP4M3Eo5GJ1XKOthaCPdskDewD8Znb+mrKJ8hCGsClxAuU4ZUz3n/egNCCPQFBYFzqHcokypng9StlGewiDWBHZQ7iHthtiNsHg2iSWBvCzhjq+O6BqvAE7DMFYEjqZcoSyMrh2gHEEb0Op1IE8Ux5Cu9c6gjWi1wF6k8u4jjMgs0H6jPdXU4O4vFrgF+nDJrB9DQKtG4DIEYdo91v/KD8rqRn+E5iTC5amyPdoajKJMa/QizVv4AUKzenfhOje0D0AXHoHPED4N/RftZ2CtJB9L5C/ObKZ8R5swHOWsE0ifP3cok5EBVhbSuxAWzjXWUC4hPCezZzgLqsWReBPhYW4Wa8UEHol90fk6hNu54WyohcVyFk8sscQuyinKOGSK1p7IcaS380PUa4RmsFzS5zpgb3S+knIZGe3G1dDelSuOxLuol/rVyaEzgUdi/Ezkz6dctZ4BA+TS2lGcWHjHjts6JiIDrLR2MMXb+SyUya07qzixLIIy2VR+I/YjdCasoBxGBli6hc3hPdJCXKAQFyjEBQpxgUJcoBAXKMQFCnGBQlygEBcoxAUKcYFCXKAQFyjEBQpxgULKCPwZHZtu9NGgjMD30fF8OE3Dv08QbyXugPOXsk3etylrq8fcWc/7sxcon6AP/5L5IIzTgSDLwtcPiuH31Qklys7CFYRN7ArswS1vXciESZSdlMeUL7AxAl9QZkOJP88gho+yiR2iAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIgSURBVHgB7dxNKwVRHAbwx0vyskBK2YlYsPcZZM1KyUYpWx/AzoZEYquUhZKVvQ9graSQhQ1J3hbk5T+5i4l7dOY+95yZe3t+9dSkmeb05NzbOdNcQEREpEINjr83W4YtHYjjy3KS4fyijw87pYtiZgX+dooyPtd/4IelEXF9Wpo8zy3M+FwFfiEfDZ7nFWZ8zR4XLViOEca4ZRWcXMfnU+CV5RRhjIJ3hRzHF/tzpO6oQJIKJKlAkgokqUCSCiSpQJIKJKlAkgokqUCSCiSpQJIKJKlAkgokqUCSCiSpQJIKJPk8lZu2jCGMEfByHZ8erGfzZ3yuKfyE+B4ynFuY8bmm8Ixl0dKCOF4sGxnOL/r4RERERKTOuZZOc5ZZSyfieLUsWw4RTr9lCz+Lh3nLBQJ6RvzXCO4R1kHqXpuoEtdaONYLLGndCKs1ddyLKvHZztqznCOMZLtoCnUoPbUmEM7Ur3uFdJS6zz6qRDvSJBVIUoEkFUhSgSQVSFKBJBVI8lmJFNGgZdLSluGaodRxsgJagr93y67l2veCoq9EzhB/s6PsO8m1OoX7EF/Ze9bqFK7kwXoyhbtKx3eWS/9Lsz9Y12aCJ30Lk1QgSQWSVCBJBZJUIEkFklQgyWclkvzQ4S3CGECN8ylwDeLkmsLviO8DYb05jimuArcR3zrCSvbzkuIeS8dV8d+LLf2WdsSRvINxg/B68DO7HiEiIpK3b6sKzxrit9XWAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import React from 'react';\nimport './TermsConditions.scss';\nimport '../../App.scss'\nimport {Container} from \"reactstrap\";\n\n\nfunction Privacy() {\n return (\n
    \n \n
    \n
    \n

    Privacy Policy

    \n

    Last modified 5/27/2022

    \n

    1. INTRODUCTION

    \n

    Value Analytics, LLC (“Value Analytics”) respects your privacy and is committed to\n protecting\n it through our compliance with this policy. This policy describes the types of\n information\n we may collect from you or that you may provide when you visit www.ValueAnalytics.org\n (the\n “Website”) or download the Value Analytics Excel Add-In (the “Add-In”) and our practices\n for\n collecting, using, maintaining, protecting, and disclosing that information.\n This policy applies to information we collect:\n\n

    \n
      \n
    • On the Website.
    • \n
    • Through the Add-In.
    • \n
    • In email, text, and other electronic messages between you and the Website or Value\n Analytics.\n
    • \n
    • On the Company’s accounts on Twitter®, Facebook®, LinkedIn®, Google Plus®,\n Instagram®,\n YouTube®, and/or any other social media website.\n
    • \n
    \n

    Please read this policy carefully to understand our policies and practices regarding your\n information and how we will treat it. Going forward, references to the Website are\n inclusive\n of the Add-In. If you do not agree with our policies and practices, then do not use our\n Website. By accessing or using this Website, you agree to this privacy policy. This\n policy\n may change from time to time. Your continued use of this Website after we make changes\n is\n deemed to be acceptance of those changes, so please check the policy periodically for\n updates.

    \n

    2. WHAT INFORMATION WE COLLECT

    \n

    We collect several types of information from and about users of our Website, including\n the\n following types and categories of information:

    \n
      \n
    • Identifiers such as your name, postal address, unique personal identifier, online\n identifier, Internet Protocol (IP) address, email address, telephone number or other\n similar identifiers.\n
    • \n
    • Other categories of information that may be defined as personal information under\n state\n or federal law.\n
    • \n
    • A persistent identifier (such as a “cookie,” device or processor serial number, or\n an IP\n address).\n
    • \n
    • Information about how you use the Website, including browsing and search history and\n how\n you interact with ads or campaigns provided through the Website.\n
    • \n
    • Information about your computer or mobile device, including your physical location,\n browser and operating system type, and referring URLs.\n
    • \n
    • Inferences drawn from any of the information described in this Section 2 to create a\n profile about you and your preferences.\n
    • \n
    • Credit card or debit card information for processing payments by our third party\n payment\n vendor.\n
    • \n
    \n

    3. HOW WE COLLECT INFORMATION

    \n

    We collect information from you when you provide it to us, such as by submitting\n information\n when making purchases or setting up an account, and automatically as you navigate\n through\n the Website. Information collected automatically may include usage details, IP\n addresses,\n and information collected through cookies, web beacons, and other tracking\n technologies.

    \n

    As you navigate through and interact with our Website, we may use automatic data\n collection\n technologies to collect certain information about your equipment, browsing actions, and\n patterns, including:

    \n
      \n
    • Details of your visits to our Website, including traffic data, location data, logs,\n and\n other communication data and the resources that you access and use on the Website.\n
    • \n
    • Information about your computer and internet connection, including your IP address,\n operating system, and browser type.\n
    • \n
    • We also may use these technologies to collect information about your online\n activities\n over time and across third-party websites or other online services (behavioral\n tracking).\n
    • \n
    • The information we collect automatically may include personal information and/or we\n may\n maintain it or associate this information with personal information we collect in\n other\n ways or receive from third parties. It helps us to improve our Website and to\n deliver a\n better and more personalized service, including by enabling us to: estimate our\n audience\n size and usage patterns; store information about your preferences, allowing us to\n customize our Website according to your individual interests; speed up your\n searches;\n recognize you when you return to our Website.\n
    • \n\n
    \n

    Some content or applications on the Website may be provided or supported by\n third-parties,\n including advertisers, ad networks and servers, content providers, application\n providers,\n and vendors that provide services to us that we use to support our business. These third\n parties may use cookies alone or in conjunction with web beacons or other tracking\n technologies to collect information about you when you use our website. We do not\n control\n these third parties' tracking technologies or how they may be used. If you have any\n questions about an advertisement or other targeted content, you should contact the\n responsible provider directly.

    \n

    4. HOW WE USE YOUR INFORMATION

    \n

    We use information that we collect about you or that you provide to us, including any\n personal information:

    \n
      \n
    • To present our Website and its contents to you.
    • \n
    • To provide you with information, products, or services that you request from us.\n
    • \n
    • To fulfill any other purpose for which you provide it.
    • \n
    • To provide information to you about our products and services or those of our\n business\n partners.\n
    • \n
    • To carry out our obligations and enforce our rights arising from any contracts\n entered\n into between you and us.\n
    • \n
    • To notify you about changes to our Website or any products or services we offer or\n provide though it.\n
    • \n
    • To create aggregated anonymous data about the usage of the Website and to use this\n aggregated anonymous data for our own business purposes or to provide it to third\n service providers that provide services on our behalf.\n
    • \n
    • To process purchases you make through the Website.
    • \n
    \n

    5. DISCLOSURE OF YOUR INFORMATION

    \n

    We may disclose aggregated information about our users, and information that does not\n identify any individual without restriction.

    \n

    We may disclose personal information that we collect or you provide as described in this\n privacy policy:

    \n
      \n
    • To our subsidiaries and affiliates.
    • \n
    • To contractors, service providers, and other third parties we use to support our\n business. For example, your payment information will be provided to our third-party\n payment processor to process purchases you make through the Website.\n
    • \n
    • To a buyer or other successor in the event of a merger, divestiture, restructuring,\n reorganization, dissolution, or other sale or transfer of some or all of Value\n Analytics’ assets.\n
    • \n
    • To third parties to market their products or services to you if you have consented\n to/not opted out of these disclosures\n
    • \n
    • To fulfill the purpose for which you provide it.
    • \n
    • For any other purpose disclosed by us when you provide the information.
    • \n
    • For any other purpose with your consent.
    • \n
    \n

    We may also disclose your personal information:

    \n
      \n
    • To comply with any court order, law, or legal process, including to respond to any\n government or regulatory request.\n
    • \n
    • To enforce or apply our terms of use and other agreements, including for billing and\n collection purposes.\n
    • \n
    • If we believe disclosure is necessary or appropriate to protect the rights,\n property, or\n safety of Value Analytics’, our customers, or others.\n
    • \n
    \n

    6. COMPLIANCE WITH THE CHILDREN’S ONLINE PRIVACY PROTECTION ACT\n (“COPPA”)

    \n

    The Services are not designed or intended for children under the age of thirteen (a\n “Child”)\n and may not be used by a Child. Value Analytics will delete any information that Value\n Analytics suspects may relate to a Child.

    \n

    7. COMPLIANCE WITH THE CALIFORNIA CONSUMER PRIVACY ACT\n (“CCPA”)

    \n

    California residents have certain rights under the CCPA with respect to personal\n information\n that is collected, sold, and/or used for business purposes. In the last 12 months, Value\n Analytics may have collected those categories of information outlined in Section 2 from\n the\n various sources identified in Section 3. California residents have the following rights\n with\n respect to personal information collected by Value Analytics:

    \n
      \n
    • Request for Information. You can also request a copy of your personal information\n and\n how it has been used and shared over the last 12 months directly from Value\n Analytics.\n In particular, you have the right to request: (1) categories of personal information\n that have been collected; (2) the categories of sources of this personal\n information;\n (3) the business or commercial purpose for collecting the personal information; (4)\n categories of third parties with whom Value Analytics shares personal information;\n and\n (5) specific pieces of personal information that Value Analytics has collected about\n you.\n
    • \n
    • Deletion of Information. Value Analytics users can request that Value Analytics\n delete\n your personal information on your behalf at any time.\n
    • \n
    • Nondiscrimination. Value Analytics will not discriminate against any user that\n exercises\n their rights under CCPA. However, certain aspects of the Website or Value Analytics’\n products or services may depend on Value Analytics’ ability to collect and share\n your\n personal information. So, the nature and quality of services Value Analytics\n provides to\n you may depend on Value Analytics’ ability to collect and share this personal\n information.\n
    • \n
    • Requests for copies of personal information, or deletion of personal information,\n may be\n made using the contacts set forth below.\n
    • \n
    \n\n

    Value Analytics does not sell any personal information. In the last 12 months, Value\n Analytics may have collected and/or disclosed your personal information to enable Value\n Analytics to provide its products and services and run its business, including for the\n following business purposes:

    \n
      \n
    • To detect security incidents and to protect the Value Analytics against malicious,\n deceptive, fraudulent, or illegal activity and prosecute those responsible.\n
    • \n
    • To troubleshoot, debug, or correct errors in the Website or Value Analytics’\n products or\n services.\n
    • \n
    • For other short term or transient use where the personal information is not\n disclosed to\n a third party.\n
    • \n
    • To provide customer service, process analytics, and other similar services performed\n on\n behalf of Value Analytics.\n
    • \n
    • For Value Analytics’ own internal research and development purposes and to improve\n the\n quality, safety, and features Value Analytics’ products and services.\n
    • \n
    • To audit interactions between users and transactions through the Website, including\n interactions with ads or campaigns provided through the Website.\n
    • \n
    \n

    8. COMPLIANCE WITH INTERNATIONAL PRIVACY LAWS

    \n

    If you are visiting the Website from outside the United States, please be aware that you\n are\n sending information to the United States where Value Analytics’ servers are located.\n Information you submit may then be transferred within the United States or back out of\n the\n United States to other countries outside of your country of residence, depending on the\n type\n of information and how it is stored by Value Analytics. These countries (including the\n United States) may not necessarily have data protection laws as comprehensive or\n protective\n as your country of residence; however, our collection, storage, and use of your data\n will at\n all times continue to be governed by this Privacy Policy.

    \n

    If you are a member of the European Union (EU), you have special rights under the General\n Data Protection Regulation (GDPR). Those include:

    \n
      \n
    • The right to object to the processing of your data and the right to portability of\n your\n data. All complaints must be sent to Derek@ValueAnalytics.org.\n
    • \n
    • The right to erasure, rectification, access, or to seek restrictions to the\n processing\n of your personal data in our system. To the extent you provide consent to our\n processing\n of your personal data, you have the right to withdraw that consent at any time. Any\n withdrawal of consent does not apply to data collected lawfully prior to such\n consent.\n
    • \n
    • The right to lodge a complaint with a supervisory authority containing jurisdiction\n over\n GDPR related issues.\n
    • \n
    \n

    9. CONTACT

    \n

    For questions regarding this privacy policy please contact us at Derek@ValueAnalytics.org\n or\n Adam@ValueAnalytics.org.

    \n
    \n
    \n
    \n
    \n )\n}\n\nexport default Privacy;\n","export default __webpack_public_path__ + \"static/media/va-2.b4ffbbb6.svg\";","import React from 'react';\nimport './Footer.scss';\nimport logo from '../../img/va-2.svg';\nimport {Col, Container, Row} from \"reactstrap\";\nimport {Image} from \"react-bootstrap\";\nimport {Link} from \"react-router-dom\";\nimport {Routes} from \"../../routes/routes\";\n\nfunction Footer() {\n const currentYear = new Date().getFullYear()\n return (\n
    \n \n \n \n
    \n \"logo\"\n

    © {currentYear} Value Analytics LLC

    \n
    \n \n \n
    \n

    Legal

    \n Privacy Policy\n User Agreement\n
    \n \n \n
    \n

    Customer Care

    \n

    support@valueanalytics.org

    \n
    \n \n
    \n
    \n
    \n )\n}\n\nexport default Footer;\n","export default __webpack_public_path__ + \"static/media/formula_builder_preview.b2a5711d.png\";","export default __webpack_public_path__ + \"static/media/filter_preview.43ea5345.png\";","export default __webpack_public_path__ + \"static/media/documentation_preview.9f9b25b6.png\";","export default __webpack_public_path__ + \"static/media/VABIGLOGO.2a3732be.png\";","export default __webpack_public_path__ + \"static/media/CompAssist.929c9678.png\";","export default __webpack_public_path__ + \"static/media/Comps.6ae9be9a.png\";","import './HomePage.scss';\nimport React from 'react';\nimport {Container, Col, Row} from \"reactstrap\";\nimport {PrimaryButton} from \"../Button/Button\";\nimport formula_builder_preview from '../../img/landingpage_figures/formula_builder_preview.png';\nimport filter_preview from '../../img/landingpage_figures/filter_preview.png';\nimport documentation_preview from '../../img/landingpage_figures/documentation_preview.png';\nimport va_log_big from '../../img/landingpage_figures/VABIGLOGO.png';\nimport comp_assist_preview from '../../img/landingpage_figures/CompAssist.png';\nimport comps_tab_preview from '../../img/landingpage_figures/Comps.png';\nimport {Image} from \"react-bootstrap\";\nimport {useHistory} from \"react-router-dom\";\nimport {Routes} from \"../../routes/routes\";\n\nfunction LandingRow(props: { children: React.ReactNode }) {\n return (\n \n \n {props.children}\n \n \n )\n}\n\nfunction SmallPaddingLandingRow(props: { children: React.ReactNode }) {\n return (\n \n \n {props.children}\n \n \n )\n}\n\nfunction HomePage() {\n const history = useHistory();\n\n const goTo = (route: string) => () => {\n history.push(route);\n }\n\n return (\n
    \n \n \n\n \n \n \n \n

    \n Streamline business valuations with high quality data

    and AI-driven peer group formation\n

    \n
    \n \n

    \n Value Analytics offers market data and workflow automation tools.\n
    \n < p className={'informational-p-center black-link'} >\n Sign up and get the first 7 days free.\n

    \n

    \n
    \n \n \n \n
    \n \n \n\n \n \n

    \n Built by valuation practitioners for valuation practitioners\n

    \n

    \n Let your data provider work for you.\n

    \n
    \n \n

    \n Value Analytics offers financial data and automated tools\n designed to serve the business valuation community.



    \n Our platform streamlines the market approach, removing frictions\n in your analysis and reducing time spent on each project.\n

    \n
    \n \n \n\n \n\n\n
    \n
    \n \n \n \n \n \n \n

    \n Unlimited access to data\n

    \n

    \n Subscribers have unlimited access\n to data through our online platform and Excel\n Add-In.



    \n Our Excel Add-In allows subscribers to\n easily integrate data directly into proprietary models.



    \n No annual limits on screening or data calls.\n No time limits.\n



    \n

    \n
    \n \n \n \n \n
    \n \n \n \n

    \n Optimize peer group formation with Comp Assist\n

    \n

    \n Comp Assist’s AI will significantly reduce time\n spent forming peer groups by instantly identifying\n and ranking the most similar businesses to a targeted company.\n



    \n Discover hidden peers\n that would be difficult to find with traditional filtering.\n



    \n

    \n
    \n \n \n \n \n \n \n \n
    \n \n \n \n \n \n \n

    \n Receive immediate feedback on preliminary peer groups\n

    \n

    \n Get a sneak peek into the results\n of your analysis to see if selected peers deliver pricing multiples in your expected range.\n



    \n We automatically provide financial analysis and pricing multiples\n for you, which can be instantly exported to Excel.\n



    \n

    \n
    \n \n \n \n \n\n
    \n \n \n

    \n Digest data using screening and analysis tools\n

    \n

    \n Streamline the search for public comps using our robust screening and analysis\n tools. Designed to facilitate guideline public company analysis for valuation\n practitioners.\n

    \n \n \n \n \n \n \n \n \n

    \n Data quality is our highest priority\n

    \n

    \n Transparent data sourcing and quality assurance procedures allow users to trust the\n integrity of the data they use. Field definitions are available in our documentation\n both online and in our user-friendly Excel Add-In.\n

    \n

    \n

    \n \n \n
    \n \n \n \n

    \n Save more time using custom report and analysis templates\n

    \n
    \n \n

    \n Access our ever-growing inventory of templates for both analysis and reporting.\n These templates are available to subscribers.\n

    \n
    \n \n \n \n \n
    \n \n \n

    \n Value Analytics is dedicated to meeting your business valuation needs.\n

    \n Contact us at support@valueanalytics.org\n

    \n \n
    \n
    \n
    \n )\n ;\n}\n\nexport default HomePage;\n","import React, {useEffect} from \"react\";\nimport {useLocation} from \"react-router\";\n\nfunction ScrollToTop(props: { children: React.ReactNode }) {\n const location = useLocation();\n const anchor = window.location.hash.split('#')[1];\n useEffect(() => {\n if (anchor == null) {\n window.scrollTo(0, 0);\n }\n }, [location]);\n\n return <>{props.children}\n};\n\nexport default ScrollToTop;\n","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'\nimport type {AppDispatch, RootState} from \"../store\"\n\nexport const useAppDispatch: () => AppDispatch = useDispatch\nexport const useAppSelector: TypedUseSelectorHook = useSelector\n","import {Auth, Hub} from 'aws-amplify';\nimport type {HubCapsule} from '@aws-amplify/core';\nimport React, {useEffect, useState} from 'react';\nimport {useAppDispatch} from \"../hooks/hooks\";\nimport {signOutAction} from \"../auth/signOut\";\nimport {refreshUserSessionInformation} from \"../auth/authSlice\";\nimport {useHistory} from \"react-router-dom\";\nimport {Routes} from \"../routes/routes\";\n\nexport default function AuthEventListener() {\n const [authEvent, setAuthEvent] = useState();\n const dispatch = useAppDispatch()\n const history = useHistory();\n\n function authCallback(data: HubCapsule) {\n setAuthEvent(data);\n\n switch (data.payload.event) {\n case 'tokenRefresh_failure':\n Auth.signOut()\n break\n case 'signOut':\n dispatch(signOutAction())\n history.push(Routes.homePage)\n break\n }\n\n }\n\n useEffect(() => {\n dispatch(refreshUserSessionInformation(false));\n Hub.listen('auth', authCallback)\n return () => Hub.remove('auth', authCallback)\n\n }, [authEvent])\n\n return <>\n}\n\n\n\n","import {Table} from 'reactstrap'\n\nexport default function Premiums(props: { title: string, data: string[][] }) {\n const headers = props.data.length > 0 ? props.data[0] : []\n const rows = props.data.slice(1);\n\n return (\n
    \n

    {props.title}

    \n \n \n \n {headers.map(i => )}\n \n \n \n {rows.map((columns, index) =>\n \n {columns.map((i, index) =>\n \n )}\n \n )}\n \n
    {i}
    {i}
    \n
    \n )\n}\n","import {getRequest} from \"./requestUtility\";\n\ntype PreSignedUrlResponse = {url: string}\n\nexport function getPreSignedUrl(file: string): Promise{\n const filePath = encodeURIComponent(file)\n return getRequest('Api', `/sub/presigned/documentation?file=${filePath}`)\n}\n\nexport async function isPreSignedUrlExpired(url: string): Promise{\n if(!url.length){\n return false;\n }\n\n try{\n const response = await fetch(url);\n return response.status === 403;\n }\n catch (error){\n console.error('Error checking presigned url', error);\n return false;\n }\n}\n\n\n","import {createAsyncThunk, createSlice} from \"@reduxjs/toolkit\";\nimport {RootState} from \"../store\";\nimport {getPreSignedUrl, isPreSignedUrlExpired} from \"../api/preSignedUrlRequest\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\n\ntype Documents = { [s3Prefix: string]: string }\n\ninterface DocumentationSlice {\n documents: Documents\n}\n\nexport const fetchPreSignedDocumentationLink = createAsyncThunk<{ s3Prefix: string, url: string }, string, {\n state: RootState\n}>(\n 'sizePremiumsSlice/fetchWhitePaperLink',\n async (s3Prefix, {getState, rejectWithValue}) => {\n const documents = getState().documentationSlice.documents\n let url = ''\n\n if (s3Prefix in documents) {\n url = getState().documentationSlice.documents[s3Prefix]\n }\n\n if (url === '' || await isPreSignedUrlExpired(url)) {\n try {\n const response = await getPreSignedUrl(s3Prefix)\n return {\n s3Prefix: s3Prefix,\n url: response.url\n }\n } catch (e) {\n rejectWithValue({\n s3Prefix: s3Prefix,\n url: ''\n })\n }\n\n }\n\n return {\n s3Prefix: s3Prefix,\n url: url\n }\n })\n\nconst initialState: DocumentationSlice = {\n documents: {}\n};\n\nexport const documentationSlice = createSlice({\n name: \"documentationSlice\",\n initialState,\n reducers: {},\n extraReducers: builder => {\n builder.addCase(fetchPreSignedDocumentationLink.fulfilled, (state, action) => {\n const {s3Prefix, url} = action.payload\n state.documents[s3Prefix] = url\n })\n\n resetStateOnSignOut(builder, initialState)\n }\n})\n\nexport const selectDocuments = (state: RootState): Documents => {\n return state.documentationSlice.documents\n}\n","export const preSignedUrlDocuments= {\n sizePremiumMethodology2023: 'size-premiums/Size Premium Methodology and Estimation (2023).pdf',\n sizePremiumMethodology2024: 'size-premiums/Size Premium Methodology and Estimation (2024).pdf'\n}\n","import './Methodology.scss'\nimport {Col, Row, Table} from \"reactstrap\";\nimport {DocumentButton} from \"../Button/Button\";\nimport {fetchPreSignedDocumentationLink, selectDocuments} from \"../../documentationSlice/documentationSlice\";\nimport {preSignedUrlDocuments} from \"../../documentation/documentation\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {useEffect} from \"react\";\n\nfunction DownloadButton(props: { preSignedUrl: string, displayName: string }) {\n const dispatch = useDispatch();\n const documents = useSelector(selectDocuments);\n\n useEffect(() => {\n dispatch(fetchPreSignedDocumentationLink(props.preSignedUrl))\n }\n , [])\n\n async function handleDownloadButtonClick() {\n dispatch(fetchPreSignedDocumentationLink(props.preSignedUrl))\n if (documents[props.preSignedUrl]) {\n window.open(documents[props.preSignedUrl], '_blank')\n }\n }\n\n return (\n
    \n \n
    \n )\n}\n\nexport default function Methodology(props: {\n title: string,\n description: string,\n data: string[][]\n}) {\n\n return (\n
    \n

    {props.title}

    \n \n \n

    {props.description}

    \n \n \n \n \n \n
    \n \n \n {props.data.map(columns =>\n \n {columns.map(i =>\n \n )}\n \n )}\n \n
    {i}
    \n
    \n )\n}\n","export interface ISizePremium {\n title: string,\n data: string[][],\n}\n\nexport interface IPremium extends ISizePremium {\n type: \"premium\"\n}\n\nexport interface IMethodology extends ISizePremium {\n type: \"methodology\",\n description: string,\n whitePaperLink: string\n}\n\nexport interface ISizePremiums {\n normalizedRiskFreeRates: ISizePremium\n fortyYearEstimationWindow: ISizePremium\n fiveYearTreasuryRateAsRiskFreeRate: ISizePremium\n baselineSizePremium: ISizePremium\n equityRiskPremium: ISizePremium\n equallyWeightedReturns: ISizePremium\n geometricAverageReturns: ISizePremium\n historicalERP: ISizePremium\n blumeAdjustedBeta: ISizePremium\n}\n\nconst createEmptyPremium = (title: string): IPremium => {\n return {\n data: [],\n title: title,\n type: \"premium\"\n }\n}\n\nexport const createMethodology = (): IMethodology => {\n return {\n type: \"methodology\",\n title: \"Methodology\",\n whitePaperLink: \"\",\n description: \"The embedded white paper outlines the methodology used to calculate the size premiums, equity risk premiums, and risk-free rates below. Summary information is provided here.\",\n data: [\n [\n \"Title \",\n \"Description\"\n ],\n [\n \"Normalized Risk-free Rate\",\n \"This table represents the average risk-free rate over the full historical window.\"\n ],\n [\n \"Equity Risk Premium\",\n \"This table represents the excess return of equities above the normalized risk-free rate over the full historical window. The supply-side equity risk premium represents the historical equity risk premium less the portion of the premium attributable to multiples expansion.\\n\"\n ],\n [\n \"Baseline Size Premium\",\n \"This table details size premiums following conventional calculation methodologies. Specifically, baseline size premiums reflect the normalized 20-year risk-free rate and the supply-side equity risk premium.\"\n ],\n [\n \"Historical ERP\",\n \"This table follows all baseline calculation methodologies, except it uses the historical equity risk premium rather than the supply-side equity risk premium. This assumes that expansion of pricing multiples experienced historically will continue into the future.\"\n ],\n [\n \"Equally-Weighted Returns\",\n \"This table follows all baseline calculation methodologies, except it assigns equal weight to all companies in each decile (rather than market capitalization weighting. Using equally-weighted returns, the largest firms in each decile will have reduced influence over the associated premiums. If valuing a firm whose size is not near the top of their corresponding decile, one should consider using the size premiums from this table.\"\n ],\n [\n \"40 Year Estimation Window\",\n \"This table follows all baseline calculation methodologies, except the historical window is limited to the prior 40 years. A shorter estimation window emphasizes more recent market return behavior when estimating size premiums. Events in the distant past may convey more relevant information for highly mature industries whose operating environment has been unaffected by changing economic regimes. For budding or relatively new industries, the size premiums from this table may be more appropriate.\"\n ],\n [\n \"Geometric Average Returns\",\n \"This table follows all baseline calculation methodologies, except size premiums now reflect the geometric average rather than the arithmetic average. The size premiums calculated using the geometric average may be more appropriate for multi-period discounted cash flow models wherein the discount rate compounds from one period to the next, though it is common to still use the baseline size premiums for this purpose.\"\n ],\n [\n \"5 Year Treasury Rate as Risk Free Rate\",\n \"This table follows all baseline calculation methodologies, except the 20-year normalized risk-free rate is replaced with the 5-year normalized risk-free rate. The choice of risk-free rate should consider the holding period of the company being valued. If the willing buyer pool consists primarily of financial buyers, rather than strategic buyers, one should consider using the size premiums in this table.\\n\"\n ],\n [\n \"Blume-Adjusted Beta\",\n \"This table follows all baseline calculation methodologies, except the beta calculation is replaced with the Bloom-adjusted beta. If using the Bloom-adjusted beta when building up the modified capital asset pricing model, one should consider using the size premiums in this table.\"\n ]\n ]\n }\n}\n\nexport const createEmptySizePremiums = (): ISizePremiums => {\n return {\n fortyYearEstimationWindow: createEmptyPremium(\"40 Year Estimation Window\"),\n fiveYearTreasuryRateAsRiskFreeRate: createEmptyPremium(\"5 Year Treasury Rate as Risk Free Rate\"),\n baselineSizePremium: createEmptyPremium(\"Baseline Size Premium\"),\n normalizedRiskFreeRates: createEmptyPremium(\"Normalized Risk Free Rates\"),\n equityRiskPremium: createEmptyPremium(\"Equity Risk Premium\"),\n historicalERP: createEmptyPremium(\"Historical ERP\"),\n equallyWeightedReturns: createEmptyPremium(\"Equally-Weighted Returns\"),\n geometricAverageReturns: createEmptyPremium(\"Geometric Average Returns\"),\n blumeAdjustedBeta: createEmptyPremium(\"Blume-Adjusted Beta\")\n }\n}\n\n","import {createAsyncThunk, createSlice} from \"@reduxjs/toolkit\";\nimport {RootState} from '../store'\nimport {createEmptySizePremiums, createMethodology, IMethodology, ISizePremiums} from \"./sizePremium\"\nimport {getSizePremiums} from \"../api/requests\";\nimport {resetStateOnSignOut} from \"../auth/signOut\";\n\n\ninterface ISizePremiumsSlice {\n isLoadingSizePremiums: boolean\n sizePremiums: ISizePremiums\n methodology: IMethodology\n}\n\nexport const fetchSizePremiums = createAsyncThunk(\n 'sizePremiumsSlice/fetchSizePremiums',\n async (data, thunkAPI) => {\n return await getSizePremiums()\n }\n)\n\nconst initialState: ISizePremiumsSlice = {\n isLoadingSizePremiums: false,\n sizePremiums: createEmptySizePremiums(),\n methodology: createMethodology(),\n}\n\nexport const sizePremiumsSlice = createSlice({\n name: \"sizePremiumsSlice\",\n initialState,\n reducers: {},\n extraReducers: builder => {\n builder.addCase(fetchSizePremiums.pending, (state, action) => {\n state.isLoadingSizePremiums = true\n })\n builder.addCase(fetchSizePremiums.fulfilled, (state, action) => {\n state.sizePremiums = action.payload\n state.isLoadingSizePremiums = false\n })\n builder.addCase(fetchSizePremiums.rejected, (state, action) => {\n state.sizePremiums = createEmptySizePremiums()\n state.isLoadingSizePremiums = false\n })\n resetStateOnSignOut(builder, initialState)\n },\n})\n\nexport const selectSizePremiumsSlice = (state: RootState): ISizePremiumsSlice => {\n return state.sizePremiumSlice\n}\n\n\n","import './SizePremiumsPage.scss';\nimport SmallScreenAlert from \"../Utility/SmallScreenAlert\";\nimport {Col, Container, Nav, NavItem, Row, Collapse, Navbar, NavbarToggler} from \"reactstrap\";\nimport {NavLink as NavLinkRouter, Route, Switch} from \"react-router-dom\";\nimport {Routes} from \"../../routes/routes\";\nimport Premiums from \"./Premiums\";\nimport Methodology from \"./Methodology\";\nimport {useEffect, useState} from \"react\";\nimport WithActiveSubscription from \"../PadLock/WithActiveSubscription\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {fetchSizePremiums, selectSizePremiumsSlice} from \"../../sizePremiums/sizePremiumsSlice\";\nimport {ISizePremium} from \"../../sizePremiums/sizePremium\";\nimport {Loader} from \"../Loader/Loader\"\n\nfunction PremiumNavItem(props: {\n route: string,\n displayName: string,\n handleClick: () => void\n}) {\n return (\n \n \n {props.displayName}\n \n \n )\n}\n\ninterface IPremiumNavGroupItem {\n route: string\n premium: ISizePremium\n}\n\nfunction PremiumGroup(props: { group: IPremiumNavGroupItem[], onClickHandler: () => void }) {\n return (\n
    \n {\n props.group.map((i) => (\n \n ))\n }\n
    \n )\n}\n\nfunction PremiumRoute(props: {\n children: React.ReactNode,\n isLoading: boolean\n}) {\n return (\n \n \n {props.children}\n \n )\n}\n\n\nexport default function SizePremiumsPage() {\n const [isOpen, setIsOpen] = useState(false);\n const sizePremiumsSlice = useSelector(selectSizePremiumsSlice)\n const dispatch = useDispatch()\n const premiums =\n {\n group1: [\n {\n route: Routes.sizePremiums.normalizedRiskFreeRates,\n premium: sizePremiumsSlice.sizePremiums.normalizedRiskFreeRates\n },\n {\n route: Routes.sizePremiums.equityRiskPremium,\n premium: sizePremiumsSlice.sizePremiums.equityRiskPremium\n }\n ],\n group2: [\n {\n route: Routes.sizePremiums.baselineSizePremiums,\n premium: sizePremiumsSlice.sizePremiums.baselineSizePremium\n },\n {\n route: Routes.sizePremiums.historicalERP,\n premium: sizePremiumsSlice.sizePremiums.historicalERP\n },\n {\n route: Routes.sizePremiums.equallyWeightedReturns,\n premium: sizePremiumsSlice.sizePremiums.equallyWeightedReturns\n },\n {\n route: Routes.sizePremiums.fortyYearEstimationWindow,\n premium: sizePremiumsSlice.sizePremiums.fortyYearEstimationWindow\n },\n {\n route: Routes.sizePremiums.geometricAverageReturns,\n premium: sizePremiumsSlice.sizePremiums.geometricAverageReturns\n },\n {\n route: Routes.sizePremiums.fiveYearTreasuryRateAsRiskFreeRate,\n premium: sizePremiumsSlice.sizePremiums.fiveYearTreasuryRateAsRiskFreeRate\n },\n {\n route: Routes.sizePremiums.bloomAdjustedBeta,\n premium: sizePremiumsSlice.sizePremiums.blumeAdjustedBeta\n }\n ]\n }\n\n\n useEffect(() => {\n dispatch(fetchSizePremiums())\n }, []);\n\n function toggleNav() {\n setIsOpen(!isOpen);\n }\n\n function closeNav() {\n setIsOpen(false);\n }\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n premiums.group1.concat(premiums.group2).map(i =>\n \n \n \n \n )\n }\n \n \n \n \n
    \n );\n}\n","import React, {useEffect} from 'react';\nimport './App.scss';\nimport NavBar from \"./components/NavBar/VaNavbar\";\nimport {Redirect, Route, Switch, useLocation} from \"react-router-dom\";\nimport FilterPage from \"./components/FilterPage/FilterPage\";\nimport Amplify, {Auth} from 'aws-amplify';\nimport awsmobile from './aws-exports.js'\nimport currentConfig from './aws-exports-configure.js'\nimport {LoginPage, SignUpPage} from './components/SignupPage/SignUpPage';\nimport {AccountCreationFlow} from './components/AccountCreation/AccountCreation'\nimport {selectClaims, selectHasSubscribed, selectIsLoggedIn} from \"./auth/authSlice\";\nimport {useSelector} from \"react-redux\";\nimport CompsPage from './components/CompsPage/CompsPage';\nimport {Routes} from \"./routes/routes\";\nimport DocumentationPage from './components/DocumentationPage/DocumentationPage';\nimport AboutUsPage from './components/AboutUsPage/AboutUsPage';\nimport AccountPage from './components/AccountPage/AccountPage';\nimport CompAssist from \"./components/CompAssistPage/CompAssist\";\nimport {TermsPage} from './components/TermsConditions/Terms';\nimport classNames from \"classnames\";\nimport {useSignOutButtonLogic} from \"./components/NavBar/UseSignOutButtonLogic\";\nimport {useFixElementOnDocumentScrollLeft} from \"./components/Utility/Utility\";\nimport {ExcelPluginDocumentationPage} from \"./components/ExcelPluginDocumentation/ExcelPluginDocumentationPage\";\nimport Privacy from \"./components/TermsConditions/Privacy\";\nimport Footer from \"./components/Footer/Footer\";\nimport HomePage from \"./components/HomePage/HomePage\";\nimport WithActiveSubscription from \"./components/PadLock/WithActiveSubscription\";\nimport ScrollToTop from \"./components/Utility/ScrollToTop\";\nimport AuthEventListener from \"./components/AuthEventListener\";\nimport SizePremiumsPage from \"./components/SizePremiumsPage/SizePremiumsPage\";\n\n\nAuth.configure(awsmobile);\nAmplify.configure(currentConfig);\n\nfunction App() {\n const isLoggedIn = useSelector(selectIsLoggedIn);\n const hasSubscribedBefore = useSelector(selectHasSubscribed);\n const location = useLocation();\n const {showSignOut, setShowSignOut, handlePortraitClicked} = useSignOutButtonLogic();\n const {navRef} = useFixElementOnDocumentScrollLeft();\n const {navRef: footerRef} = useFixElementOnDocumentScrollLeft();\n const claims = useSelector(selectClaims);\n\n useEffect(() => {\n if (isLoggedIn) {\n setShowSignOut(false);\n }\n }, [location, isLoggedIn, claims, setShowSignOut]);\n\n const appPageClassNames = classNames({\n 'app-page': true\n });\n\n function getLoginPage() {\n if (!isLoggedIn) {\n return (\n \n )\n } else if (isLoggedIn && !hasSubscribedBefore) {\n return (\n \n )\n } else {\n return (\n \n )\n }\n }\n\n return (\n
    \n \n
    \n \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n isLoggedIn && hasSubscribedBefore ?\n :\n \n }\n \n {/*must be in trialing phase to get to this route*/}\n \n {\n isLoggedIn && !claims.is_trialing ?\n :\n \n }\n \n \n \n \n \n \n \n \n \n \n \n {\n getLoginPage()\n }\n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n );\n}\n\nexport default App;\n","import {useState} from \"react\";\n\nexport function useSignOutButtonLogic() {\n const [showSignOut, setShowSignOut] = useState(false);\n\n function handlePortraitClicked() {\n if (showSignOut) {\n setShowSignOut(false);\n } else {\n setShowSignOut(true);\n }\n }\n\n return {showSignOut, setShowSignOut, handlePortraitClicked};\n}\n","import {createSlice, PayloadAction} from \"@reduxjs/toolkit\";\nimport {IColumnData} from \"./filterTable\";\n\n\n\ninterface IColumnEditorSlice {\n columns: IColumnData[];\n}\n\ninterface IColumnEditorSliceState {\n columnEditorSlice: IColumnEditorSlice;\n}\n\nexport const columnEditorSlice = createSlice({\n name: 'columnEditorSlice',\n initialState: {\n columns: []\n } as IColumnEditorSlice,\n reducers: {\n setColumns: (state, action: PayloadAction) => {\n state.columns = action.payload\n },\n addColumn: (state, action: PayloadAction) => {\n const {id} = action.payload;\n const isSelected = state.columns\n .filter(i => i.id=== id).length > 0;\n\n if (isSelected) {\n return;\n }\n\n state.columns.push(action.payload);\n },\n removeColumn: (state, action) => {\n const {column} = action.payload;\n state.columns = state.columns\n .filter(i => i.id !== column);\n }\n }\n});\n\nexport const {addColumn, removeColumn, setColumns} = columnEditorSlice.actions;\n\nexport const selectSelectedColumns = (state: IColumnEditorSliceState): IColumnData[] =>\n state.columnEditorSlice.columns;\n\nexport default columnEditorSlice.reducer;\n","import {configureStore} from '@reduxjs/toolkit'\nimport {selectedFilterSlice} from \"./filtering/selectedFilterSlice\";\nimport {authSlice} from \"./auth/authSlice\";\nimport {sectorSlice} from \"./filtering/sectorSlice\";\nimport pinnedFilterSlice from \"./filtering/pinnedFilterSlice\";\nimport {filterSlice} from \"./filtering/filterSlice\";\nimport {savedFilterSlice} from \"./filtering/savedFilterSlice\";\nimport {signUpSlice} from \"./signup/signUpSlice\";\nimport {filterTableSlice} from './filtering/filterTableSlice';\nimport {selectedCompsGroupSlice} from \"./comps/compsGroupSlice\";\nimport {compsTableSlice} from \"./comps/compsTableSlice\";\nimport {columnEditorSlice} from \"./table/columnEditor\";\nimport {compsTickerPickerSlice} from \"./comps/compsTickerPickerSlice\";\nimport {savedUserCompSetSlice} from \"./comps/savedCompsSets\";\nimport {billingSlice} from './billing/billingSlice';\nimport {compAssistSlice} from \"./compAssist/compAssitSlice\";\nimport {sizePremiumsSlice} from \"./sizePremiums/sizePremiumsSlice\";\nimport {documentationSlice} from \"./documentationSlice/documentationSlice\";\n\n\nexport const store = configureStore({\n reducer: {\n compsTickerPickerSlice: compsTickerPickerSlice.reducer,\n filterSlice: filterSlice.reducer,\n selectedFilterSlice: selectedFilterSlice.reducer,\n authSlice: authSlice.reducer,\n sectorSlice: sectorSlice.reducer,\n pinnedFilterSlice: pinnedFilterSlice.reducer,\n savedFilterSlice: savedFilterSlice.reducer,\n filterTableSlice: filterTableSlice.reducer,\n selectedCompsGroupSlice: selectedCompsGroupSlice.reducer,\n compsTableSlice: compsTableSlice.reducer,\n columnEditorSlice: columnEditorSlice.reducer,\n signUpSlice: signUpSlice.reducer,\n savedUserCompSetSlice: savedUserCompSetSlice.reducer,\n billingSlice: billingSlice.reducer,\n compAssistSlice: compAssistSlice.reducer,\n sizePremiumSlice: sizePremiumsSlice.reducer,\n documentationSlice: documentationSlice.reducer\n }\n});\n\nexport type RootState = ReturnType\nexport type AppDispatch = typeof store.dispatch\n\n\n\n\n","import 'bootstrap/dist/css/bootstrap.css';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.scss';\nimport App from './App';\nimport {Provider} from \"react-redux\";\nimport { store } from './store';\nimport {BrowserRouter} from \"react-router-dom\";\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n\n"],"sourceRoot":""}