{"version":3,"sources":["assets/header/logo.png","constants/index.ts","utils/index.ts","utils/midBuilder.ts","pages/Login/Login.tsx","App.state.ts","utils/hooks.tsx","components/Layout/Layout.tsx","components/Header/Header.tsx","utils/zustand.ts","pages/Search/Search.state.tsx","api/utils.ts","api/search.ts","utils/reactQuery.ts","components/Fallback/Fallback.tsx","pages/Search/components/buttons.tsx","components/Scalars/Scalars.tsx","components/SearchDatabaseSummary/SearchDatabaseSummary.tsx","api/molecules.ts","utils/EventBus.ts","pages/Search/components/FormItems/HSCodeInputField.tsx","pages/Search/components/FormItems/FormItems.tsx","pages/Search/ToggleWeightUnit.tsx","pages/Search/WeightRangeInput.tsx","pages/Search/Search.tsx","pages/Admin/Admin.tsx","pages/SearchResults/components/Filters/Filters.state.ts","constants/ChartColors.ts","utils/helperFunctions.ts","pages/SearchResults/components/SearchItemWiseResultsList/SearchItemWiseResultsList.tsx","pages/SearchResults/components/Filters/Filters.tsx","pages/SearchResults/SearchResults.hooks.ts","pages/SearchResults/SearchResults.tsx","pages/Review/components/shared/CustomColumnFilterDropdown.tsx","pages/Review/Review.hooks.ts","pages/Review/components/SmartChemVendorsTable/SmartChemVendorsTable.tsx","pages/Review/components/SuggestedVendorsTable/SuggestedVendorsTable.tsx","pages/Review/components/TotalIdentifiedVendorsTable/TotalIdentifiedVendorsTable.tsx","pages/Review/components/BuyersTable/BuyersTable.tsx","pages/Review/components/PriceTrendLineChart/PriceTrendLineChart.utils.ts","pages/Review/components/PriceTrendLineChart/PriceTrendLineChart.tsx","pages/Review/components/CountriesExportingToIndia/CountriesExportingToIndiaBarGraph.tsx","pages/Review/components/CountriesExportingToIndia/CountriexExportingToIndiaTable.tsx","pages/Review/components/shared/CountriesAlpha3.ts","pages/Review/components/shared/CountrySelectionDropdown.tsx","pages/Review/components/CountriesExportingToIndia/index.tsx","pages/Review/components/shared/ChartLegends.tsx","pages/Review/components/CustomerProfileForClientChart/CustomerProfileForClientStackedChart.tsx","pages/Review/components/shared/SupplierSelectionDropdown.tsx","pages/Review/components/CustomerProfileForClientChart/constant.ts","pages/Review/components/CustomerProfileForClientChart/index.tsx","pages/Review/components/ImporterPricePoints/constant.ts","pages/Review/components/ImporterPricePoints/ImporterPriceDotGraph.tsx","pages/Review/components/ImporterPricePoints/index.tsx","pages/Review/components/CustomerPricePointForSupplierLine/constants.ts","pages/Review/components/CustomerPricePointForSupplierLine/CustomerPricePointsTable.tsx","pages/Review/components/CustomerPricePointForSupplierLine/CustomerPriceLineChart.tsx","pages/Review/components/CustomerPricePointForSupplierLine/index.tsx","pages/Review/Review.tsx","pages/Home/Home.tsx","pages/VendorDetails/VendorDetails.tsx","api/vendors.ts","App.tsx","serviceWorker.ts","index.tsx"],"names":["module","exports","DATE_FORMAT","companyTypeAbbreviations","M","T","C","CS","CR","CM","pagePaths","LOCALES","CURRENCY_SYMBOLS","USD","EUR","JPY","INR","GBP","CNY","CURRENCY_CODES_LIST","Object","keys","WEIGHT_LABELS","KGS","MT","WEIGHT_SYMBOLS","WEIGHT_SYMBOLS_LIST","WHITELIST_NAMES","MATERIAL_SUPPLIER_PROPS","TRIAL_USER_SEARCH_DATE_RANGE","convertRangeToString","low","high","locale","map","value","isNumber","formatCurrency","lowStringified","highStringified","handleDownloadOnClick","a","downloadAPI","message","loading","success","statusCode","response","status","statusText","error","formatUnit","unit","capitalize","slice","length","toLocaleString","maximumFractionDigits","materialDescription","name","grade","hsCode","join","filter","BANK_CUSTOMER_REPLACEMENT","filterCustomers","customers","noOfBanks","filteredCustomers","includes","search","push","showApiErrorMessagePopup","data","Array","isArray","forEach","errorMessage","request","uploadProgressConfig","strokeColor","strokeWidth","format","percent","toFixed","getAuthHeader","accessToken","sessionStorage","getItem","authHeader","Authorization","getBackendServiceURL","frontendOrigin","window","location","origin","replace","buildUrl","base","endpoint","params","queryParams","key","encodeURIComponent","mid","config","emailToLoginInfo","email","url","apiServer","fetch","toString","res","ok","Error","json","loginInfo","tenantListing","headers","JSON","parse","localStorage","this","core","setTenant","displayName","logout","tenants","setCookie","props","tenant","credentials","port","host","protocol","hostname","basePath","path","URL","document","baseURI","pathname","routerBase","Mid","enableCookieAuth","undefined","loginWidget","Widget","logoutRedirectUrl","redirectUrl","scopes","drivers","okta","oktaDriver","mode","bind","midBuilder","LoginPage","customHeader","direction","style","width","color","justify","Title","level","create","set","get","isAuthed","isAdmin","isTrialUser","info","checkIfAuth","prev","login","groups","accessInfo","Boolean","Intl","NumberFormat","resolvedOptions","changeLocale","state","useAppWideStore","useSearchId","useLocation","searchId","useCurrencyCode","currencyCode","LargeVerticalSpacer","children","size","LinkButton","paddingLeft","type","InfoTooltip","title","InfoCircleFilled","marginLeft","VendorRowTooltip","vendor","placement","column","Item","label","productDescription","overlayClassName","PriceSuperscript","txnType","superscipt","className","PriceColumnHeader","toUpperCase","unitPriceColumnTitle","HideForTrialUser","Option","Select","LocaleSelector","defaultValue","onSelect","dropdownMatchSelectWidth","entries","description","Text","Header","history","useHistory","menu","idInfo","startsWith","icon","ArrowRightOutlined","onClick","LogoutOutlined","align","height","marginBottom","to","src","logoImage","alt","content","UserOutlined","createReduxStyleStore","reducer","initialState","storeName","options","storeInitialState","persist","persistedStateSerialized","persistedState","devtools","redux","useStore","api","subscribe","reduxStyleState","dispatch","setItem","stringify","console","COLUMN_DATA_INDEX","currentPricingPerUnit","totalAnnualizedVolume","EXCEPT_NAME","omit","COLUMN_KEYS_EXCEPT_NAME","searchItems","searchItemValidationErrors","searchItemBulkUploadResponseErrors","flowType","dataVersionFromFileUpload","excludeMin","excludeMax","action","produce","draft","log","rowKey","uuidv4","newSearchItem","moleculeId","newSearchItemValidationErrors","fieldErrors","indexOfSearchItemToDelete","findIndex","searchItem","payload","splice","searchItemIndex","updatedSearchItem","searchItemToUpdate","searchItemValidationErrorsToUpdate","assign","updatedSearchItemValidationErrors","find","id","savedSearchItems","validationErrors","molecule","pick","errors","columns","reduce","rowErrors","columnName","validatedSearchItems","validSearchItem","useSearchFormStore","searchFormStoreAPI","totalErrorCountSelector","formErrorsAcc","formErrors","fieldErrorsAcc","fieldError","calculateTotalErrorCountForASearchItem","checkIfEmptySelector","formLengthSelector","searchItemPropertySelector","propName","currencyCodeSelector","weightRangeSelector","unitSelector","axios","Axios","baseURL","interceptors","use","Promise","reject","Blob","blob","contentDispositionHeader","fileNameIndex","match","index","fileName","createObjectURL","link","createElement","href","setAttribute","body","appendChild","click","parentNode","removeChild","handleBlobDownload","createNewSearchResults","fromDateISO","percentile","toDateISO","fromDateFormatted","parseISO","yyyyMM","toDateFormatted","put","val","seachItemObj","hasOwnProperty","String","fromDate","toDate","createNewSearchEntry","tag","post","getSearchHistoryDetails","toggleVendorInclusionStatus","searchItemId","vendorId","included","deleteSearch","delete","getSearchDatabaseSummary","getSavedSearchResultsQueryKey","useSavedSearchResultsQuery","useQuery","queryKey","queryFn","getSavedSearchResults","suspense","refetchOnWindowFocus","useSearchResultsDataFromQueryCache","useQueryCache","getQueryData","getSearchItemQueryKey","useSearchDatabaseSummary","staleTime","Infinity","When","Choose","DefaultErrorFallback","customMessage","subTitle","isAxiosError","Number","ErrorBoundryAndSuspenseFallback","noOfSuspenseFallbacks","errorFallbackRender","suspenseFallbackTitle","suspenseFallback","active","resetKeys","fallbackRender","fallback","from","_","Fallback","customLoader","customSuccessStateButton","idleStateContent","coercedError","condition","extra","goBack","DeleteSearchItem","DeleteTwoTone","twoToneColor","AddNewSearchItem","getState","NewSearchButton","totalErrorsCount","searchDatabaseSummary","searchDatabaseSummaryQueryStatus","isSearchAlreadyMade","queryCache","useMutation","onSuccess","invalidateQueries","exact","refetchInactive","setQueryData","searchResultsPageParamsInURL","searchResultsPageParamsInURLStringified","qs","addQueryPrefix","strictNullHandling","searchFreshResults","tooltipTitle","isFormInvalidToSearchFor","latestTransactionDate","subMonths","toISOString","disabled","LoadingOutlined","SearchOutlined","NewSearchButtonWrapper","Input","ButtonErrorFallback","SavedSearchResultsButton","searchResultsPageLocationState","searchResultsPageLocationStateStringified","SavedSearchResultsButtonWrapper","formatScaler","quantity","formatQuantity","QuantityScalar","formatedValue","CurrencyScalar","QuantityRangeStatistic","range","CurrencyRangeStatistic","prefix","TextualStatictic","formattedValue","groupSeparator","CurrencyStatistic","QuantityStatistic","DateStatistic","ISODateString","formatString","valueToShow","DateRangeStatistic","ISODateStringRange","summaryValueStyle","fontSize","SearchDatabaseSummary","earliestTransactionDate","noOfMolecules","filesCount","eximTransactionsCount","eximToBeReparsedCount","valueStyle","isString","SyncOutlined","spin","fetchAllMaterialTypes","downloadSecondaryNamesTrackerExcel","responseType","accept","getGrades","getMaterialHSCodes","getHSCodes","EventBus","on","event","callback","addEventListener","e","detail","dispatchEvent","CustomEvent","remove","removeEventListener","EventKeys","HSCodeInputField","onChange","useState","searchValue","setSearchValue","hsOptions","setHsOptions","isFetching","setIsFetching","rawData","setRawData","useEffect","handleOnSearch","useDebounceFn","wait","run","getHSCodesFromServer","serchForMolecule","then","err","trim","notFoundContent","image","Empty","PRESENTED_IMAGE_SIMPLE","showSearch","filterOption","selectedValue","optionData","eventBus","onSearch","placeholder","bulkUploadValidationRule","bulkUploadResponse","validator","valueToValidate","field","resolve","TypeSelectField","getAllMaterialTypes","useMemo","materialType","allowClear","NameSelectField","moleculeName","getMatchingMaterialNames","enabled","GradeSelectField","isLoading","gradeOptions","selectedGrades","WEIGHT_OPTIONS","ToggleWeightUnit","onInputChange","initialWeightUnit","setWeightUnit","strong","selection","WeightRangeInput","initialFromWeight","initialToWeight","setFromWeight","setToWeight","onInputNumberChange","forInput","n","currentTarget","onInputBlur","min","onBlur","CurrentPricingColumnTitle","AnnualizedVolumeColumnTitle","dataIndex","render","rules","required","hasFeedback","idx","data-arrtibute","emitMolecule","obj","HSCodeFormItem","max","MAX_SAFE_INTEGER","pattern","rowIndex","SearchFormRow","Form","useForm","form","Date","now","renderKey","setrenderKey","validateFields","object","formInitialValues","fromEntries","setFieldsValue","onFieldsChange","getFieldsError","formValues","getFieldsValue","component","initialValues","FormTable","reRender","setCount","forceReRender","c","useForceReRender","dataSourceLength","previousDataSourceLengthRef","useRef","currentPage","setCurrentPage","previous","current","areNumberOfRowsChanged","isNewDataUploadedFromExcel","isReRenderingOutputConsideredEqual","previousDataSourceLength","lastPageNumber","pageSize","Math","floor","getLastPageNumber","warn","components","row","dataSource","onRow","rowClassName","pagination","showSizeChanger","position","right","zIndex","margin","top","page","footer","FileUploadSearch","DownloadOutlined","downloadBulkUploadTemplate","method","file","progress","padding","CURRENCY_CODE_OPTIONS","CurrencyCodeSelector","onWeightUnitChange","onWeightLimitChange","AddNewSearchItemAndCurrencyCodeRow","NewSearchJourneyFlowHeader","orientation","NewSearchJourney","SavedSearchJourney","savedSearchResults","Search","isSavedSearchJourney","searchIdWhatShouldBe","Content","onBack","CancelToken","DEFAULT_VALUE","article57","dmf","exim","expert","moleculeMapping","orangeBook","smartChem","fn","useProgressIndicatorStore","ProgressIndicator","fileType","Uploader","setFile","cancelFn","isUploadStarted","isUploadEnded","isFileChosen","ext","target","files","preventDefault","formData","FormData","append","onUploadProgress","progressEvent","loaded","total","cancelToken","cancelerFn","catch","isCancel","warning","danger","Admin","headerTitle","filterByMaterial","searchItemsResultsToView","selectedMaterial","filterByGrade","selectedGrade","searchItemsResultsWithNoFilters","material","sortBy","searchItemsResults","useSearchItemsResultsStore","searchItemsResultsStoreAPI","MCK_CAHRT_COLORS","fill","convertPricePerUnitOfWeight","formWtUnit","toWtUnit","convertWeight","addColorsForGraph","i","colorObj","getMonthNameFromDateString","dtStr","getMonth","roundOff","decimals","round","getPremiumToL1","list","forClient","month","allSuppliers","tempObj","arrayToFilter","supplier","sort","b","clientAvgPoint","lowestAvgPoint","getPremiumToAverage","monthlyAveragePrice","RecommendedVendorsList","suppliers","vendorCountry","unitPrice","sorter","next","defaultSortOrder","sortDirections","date","isAfter","beDate","isExpertData","CheckCircleTwoTone","suggestedVendors","defaultProps","hideOnSinglePage","defaultPageSize","supplierId","SearchItemWiseResultsList","itemLayout","renderItem","estimatedPricePerUnit","searchResults","estimatedSavingsHigh","estimatedSavingsLow","fromWtUnit","Meta","gutter","span","xxl","suffix","PercentageOutlined","valueRender","moleculeSearchItem","reviewPageLocationState","urlSearchParamsStringified","handleReviewOnClick","useSearchResultsFilterMutation","dataAfterFilterApplication","throwOnError","applyFilter","filterApplicationStatus","searchItemsRequest","massageSearchItemsRequestFromSearchItemsResults","filterSearchResultsMutation","MaterialSelector","searchResultsAPIData","materialNamesFilterOptions","uniqBy","getUniqueMaterialNameOptions","onClear","GradeSelector","gradesFilterOptions","uniq","flat","getUniqueGradeOptions","trialUserDiasbleDate","disableMonthsBeforeTrialRange","moment","disableMonthsAfterTrialRange","FromDateSelector","fromDateMoment","setFromDateMoment","selectedFromDateMoment","picker","disabledDate","ToDateSelector","toDateMoment","setToDateMoment","selectedToDateMoment","isBefore","PERCENTILE_OPTIONS","PercentileFilter","setPercentile","FilterWrapper","errorFallback","PercentileFilterWrapper","ToDateWrapper","FromDateWrapper","MaterialSelectorWrapper","GradeSelectorWrapper","useSearchDeescription","TabPane","Tabs","SearchResultsSummaryDescription","summary","currentSpend","averagePercentageSavingsHigh","averagePercentageSavingsLow","projectedSpendHigh","projectedSpendLow","descripitionTitleSuffix","SummaryDownloadLink","downloadSummary","SearchResultsListDownloadLink","downloadSearchResults","SearchResults","defaultActiveKey","tabBarExtraContent","tab","CustomColumnFilterDropdown","visible","setSelectedKeys","clearFilters","confirm","filters","selectClassName","dropdownClassName","open","input","option","toLowerCase","indexOf","useToggleVendorInclusionStatus","returnValue","searchResultsAPIDataInQueryCache","updated","indexToReplaceAt","useSearchItemDescription","useSearchItemResults","moleculeSearchResultsQueryKey","searchItemRResultsDataFromQueryCache","getSearchItemResults","initialData","useSmartChemVendors","getSmartChemSuppliers","SmartChemVendorsListDownloadLink","downloadSmartChemVendorsList","SmartChemVendorsTable","vendors","accrediationOptionsDraft","Set","countryOptionsDraft","companyTypeOptionsDraft","sourceOptionsDraft","accrediations","accrediation","country","typeOfCompany","has","add","array","text","accrediationOptions","countryOptions","companyTypesOptions","sourceOptions","getColumnFilterOptions","onFilter","record","filterDropdown","accrediationList","abbreviation","websiteURL","Link","underline","scroll","x","SuggestedVendorsTable","toggleInclusionStatus","suggestedVendorsTableData","suggestedVendorsTableColumns","price","savingsPercentage","Otherwise","VendorListDownloadLink","downloadVendorList","TotalIdentifiedVendorsTable","filteredVendors","filterVendorCustomers","customerOptionsDraft","supplierCountryOptionsDraft","supplierCountry","customer","customerOptions","supplierCountryOptions","noOfSuggestedVendors","customerList","isExpanded","setIsExpanded","setKey","displayString","Paragraph","ellipsis","rows","expandable","symbol","onExpand","isIncluded","year","getFullYear","CheckOutlined","vendorDetailsPageLocationState","vendorName","querySearchParamas","defaultCurrent","useBuyersData","fetchMaterialBuyers","BuyersTable","buyers","sortTxnsByPrice","txns","txnA","txnB","getChartData","lineChartData","datumA","datumB","dateA","dateB","sortlineChartDataByDate","vendorTxnsWeightedAverageGroupedByDate","byDateVendorWeightedPrices","vendorWeightedPrices","massageToChartDataFormat","vendorTxnsGroupedByDate","weightedPriceSum","quantitySum","weightedPrice","calculateWeightedAverage","selectedVendorsTxns","selectedVendor","groupedByDate","groupBy","groupTxnsByData","selectedVendors","txnsByAggregateKinds","AGGREGATION_KINDS","supplierName","getSelectedVendorsTxns","AGGREGATION_KIND","COLOR_CODES","values","AGGREGATE_OPTIONS","aggregationKind","DEFAULT_AGGREGATION_OPTION","all","PriceTrendLineChart","fromDateObj","toDateObj","differenceInMonths","Chart","useMoleculeTxnsData","getMaterialTxnsForAllVendors","setSelectedVendors","vendorOptions","uniqueSortedVendorOptions","utils","aggregateTxns","top20","middle60","bottom20","txnsGroupedByMonth","txnsOfThisMonthSortedByPrice","noOfTxnsOfThisMonth","noOfTxnsIn20percent","noOfTxnsIn60Percent","lineChartDataSortedByDate","noOfDataPoints","widthToUse","marginRight","selectedVendorNames","getPopupContainer","getElementById","overflowX","stroke","strokeDasharray","dataKey","tickMargin","tickFormatter","angle","wrapperStyle","left","iconSize","formatter","dataPoint","connectNulls","CustomizedLabel","y","viewBox","dy","fontFamily","textAnchor","CountriesExportingToIndiaBarGraph","chartData","useCurrentPng","getPng","ref","showLegend","setShowLegend","showLoader","setShowLoader","tempKeys","currentYear","keysNotRepresentingYear","maxQuantity","sanitizedDataForGraph","newKey","dataKeys","handleDownload","useCallback","setTimeout","png","saveAs","split","backgroundColor","display","justifyContent","overflowY","barGap","interval","hide","minTickGap","domain","bottom","axisLine","tickLine","tick","verticalAlign","barSize","CountriesExportingToIndiaTable","tableData","tableElRef","sortedData","fromYear","toYear","fromMonth","toMonth","getTitle","toPng","node","tagName","some","classname","classList","contains","dataUrl","Countries","AFG","ALB","DZA","AND","AGO","ATG","ARG","ARM","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BTN","BOL","BIH","BWA","BRA","BRN","BGR","BFA","BDI","CPV","KHM","CMR","CAN","CAF","TCD","CHL","CHN","COL","COM","COG","COD","CRI","CIV","HRV","CUB","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","SWZ","ETH","FJI","FIN","FRA","GAB","GMB","GEO","DEU","GHA","GRC","GRD","GTM","GIN","GNB","GUY","HTI","HND","HUN","ISL","IND","IDN","IRN","IRQ","IRL","ISR","ITA","JAM","JPN","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MRT","MUS","MEX","FSM","MDA","MCO","MNG","MNE","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NZL","NIC","NER","NGA","MKD","NOR","OMN","PAK","PLW","PAN","PNG","PRY","PER","PHL","POL","PRT","QAT","ROU","RUS","RWA","KNA","LCA","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SVK","SVN","SLB","SOM","ZAF","SSD","ESP","LKA","SDN","SUR","SWE","CHE","SYR","TJK","TZA","THA","TLS","TGO","TON","TTO","TUN","TUR","TKM","TUV","UGA","UKR","ARE","GBR","USA","URY","UZB","VUT","VEN","VNM","YEM","ZMB","ZWE","CountriesExportingToIndia","getImporterCountryList","setCountry","CountriesMapping","importerCountry","getSupplierTableData","supplierTableData","isSupplierTableLoading","getSupplierGraphData","supplierGraphData","isSupplierGraphLoading","exporters","comparisonRange","ChartLegends","legendsData","textAlign","flexWrap","alignContent","alignItems","borderRadius","CustomerProfileForClientStackedChart","dataKeysList","dataMax","dataObj","newObj","sumOfQty","reverse","stackKeysList","sortable","tempKeyArr","tempSortArr","keyColObj","existingColorDef","CustomizedMostPopularLabel","fontColor","chartDataIdx","clientNames","percentage","currentYearFormatter","RenderStackChart","keysList","labelFormatter","stackId","whiteSpace","transform","SupplierSelectionDropdown","getAllSuppliers","allSuppliesrs","companyName","labelInValue","initialSelectedSupplier","setSupplier","getSuppliersCustomerProfileData","SelectClientLable","selectedClient","tempSuppliers","tooltip","tooltipContent","pointsData","rank","rankOutOf","totalClients","alreadyRankedValues","getRankFromDotGraph","premiumToL1","premiumToAvg","onMouseOver","tooltipPayload","monthData","priceData","tempArr","allClientNames","client","htmlString","innerHTML","clientWidth","clientHeight","tooltipPosition","opacity","onMouseLeave","indexOfSelectedClient","offset","cursor","marginTop","paddingRight","entry","onMouseEnter","minWidth","NaN","getImporterPricePoints","importerPricePointsData","importerList","clients","setClients","setClient","chartDataNew","doesDataExists","pricePoints","pricePoint","importerName","SelectSupplierLabel","CustomerPricePointsTable","tableWrapperRef","tableWidth","settableWidth","getBoundingClientRect","newArr","tmepObj","monthObj","monthNamesWithCustomerKey","lowestPriceObj","onlyMonthNames","tempDataObj","filteredArr","minValue","apply","selectedCustomer","diffToLowsestObj","selectedCustomerObj","diff","abs","monthNameOrKey","flexDirection","bordered","CustomerPricePointLineChart","chartRawData","monthNames","customerName","clientNamesArr","CustomerPricePointForSupplierLine","setCustomer","getCustomerPricePointsData","clonedDataArray","cloneDeep","allCustomers","SearchItemDesciption","SuggestedVendorsAndEstimatedSavingsBlock","Review","showChartModal","setShowChartModal","showSupplierCountriesModal","setShowSupplierCountriesModal","showImporterPriceModal","setImporterPriceModal","showSupplierProfileModal","setShowSupplierProfileModal","showSupplierPointsModal","setShowSupplierPointsModal","LineChartOutlined","onCancel","useSearcheHistoryDetailsList","refetchOnMount","allSearchTagOptions","suggestions","useTagSearchInputStore","newSearchTileData","noOfMoleculesExplored","noOfSelectedVendors","SearchHistoryDetailsTiles","filtered","filterBySuggestions","grid","seachDetailsItem","isNaN","NewSearchCard","searchCountTillNow","SavedSearchCard","TagSearchInput","AutocompleteSearchInputBox","tagToSearch","tagOptionValue","caseInsensitiveFilter","BackgroundRefreshIndicator","border","Home","DeleteSearchButton","deletedSearchId","previousData","deleteSearchEntry","onConfirm","okText","cancelText","maxWidth","searchPageLocationState","searchPageLocationStateStringified","disableNewSearch","isTagInputModalVisible","setTagInputModalVisibility","setTag","searchPageLocationStateStrigified","onError","createNewSearch","handleSearchTagEntrySubmission","PlusCircleOutlined","onOk","confirmLoading","autoFocus","onPressEnter","VendorDescription","useVendorInfo","telNo","website","molecules","address","layout","colon","useVendorDetailsDescription","fetchVendorInfo","vendorTxnsQueryURLParams","useVendorTxnsParamsStore","vendorTxnsParamsStoreAPI","useDefaultMaterial","useDefaultVendorTxnsQueryURLParams","useSelectedVendorTxnQueryURLParams","useSelectedMaterial","useVendorTxns","queryURLParams","fetchVendorTransactions","vendorTxns","CALENDER_MONTH_OPTIONS","enUS","localize","getCalenderMonthOptions","getMonthName","MONTH_SELECTOR_OPTIONS","MonthSelector","defaultVendorTxnsQueryURLParams","selectedMonthId","YearSelector","dateMoment","selectedYear","disableYearsBeforeTrailUserRange","disableYearsAfterTrialUserRange","vendorInfo","defaultMaterial","materialsFilterOptions","VendorDetails","VendorTransactionsTableWrapper","selectedMaterialId","VendorTransactionsTable","vendorTxnsTableColumns","__","buyerName","buyerLocation","dateISOString","vendorTxn","txn","NotFoundPage","ProtectedRoutes","QueryCache","defaultConfig","mutations","unknownError","queries","retry","failureCount","App","placeItems","forceRefresh","initialIsOpen","ReactDOM","StrictMode","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.db2d5e9c.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo.489c66ec.png\";","import { MaterialSupplier } from 'api/search'\n\nexport const MAX_NUMBER_LIMIT_FOR_CHARTS = 1000000\nexport const DEFAULT_UNIT = 'KGS' as const\nexport const DEFAULT_SELECTED_PERCENTILE = 10 as const\nexport enum DATE_FORMAT {\n yyyyMM = 'yyyy-MM',\n \"MMM 'yy\" = \"MMM ''yy\",\n 'yyyy-MM-dd' = 'yyyy-MM-dd',\n}\nexport const ACCEPTED_PERCENTILE_VALUES = [0, 5, 10, 15, 20, 25]\nexport const companyTypeAbbreviations = {\n M: 'Manufacturer',\n T: 'Trader',\n C: 'Catalog',\n CS: 'Custom Synthesis',\n CR: 'Contract Research',\n CM: 'Custom Manufacturer',\n}\nexport const AUTH_ACCESS_TOKEN_NAME = '_mid-access-token'\nexport const ADMIN_GROUP = 'gpp:admin'\nexport const TRIAL_USER_GROUP = 'gpp:limited-user'\nexport const pagePaths = {\n home: '/home',\n search: '/search',\n searchResults: '/search-results',\n review: '/review',\n vendor: '/vendor',\n admin: '/admin',\n authCallback: '/auth/callback',\n login: '/login',\n} as const\n\nexport const LOCALES = {\n 'ar-SA': 'Arabic (Saudi Arabia)',\n 'bn-BD': 'Bangla (Bangladesh)',\n 'bn-IN': 'Bangla (India)',\n 'cs-CZ': 'Czech (Czech Republic)',\n 'de-AT': 'Austrian German',\n 'de-DE': 'Standard German',\n 'en-AU': 'Australian English',\n 'en-GB': 'British English',\n 'en-IN': 'Indian English',\n 'en-US': 'US English',\n 'en-ZA': 'English (South Africa)',\n 'jp-JP': 'Japanese (Japan)',\n 'ko-KR': 'Korean (Republic of Korea)',\n}\nexport const CURRENCY_SYMBOLS = {\n USD: '$',\n EUR: '€',\n JPY: '¥',\n INR: '₹',\n GBP: '£',\n CNY: 'CN¥',\n} as const\n\nexport type CurrencySymbols = typeof CURRENCY_SYMBOLS\n\nexport type CurrencyCode = keyof CurrencySymbols\n\nexport const CURRENCY_CODE: { [code in CurrencyCode]: code } = {\n USD: 'USD',\n EUR: 'EUR',\n JPY: 'JPY',\n INR: 'INR',\n GBP: 'GBP',\n CNY: 'CNY',\n}\n\nexport const CURRENCY_CODES_LIST = Object.keys(CURRENCY_SYMBOLS) as Array<\n CurrencyCode\n>\n\nexport const WEIGHT_LABELS = {\n KGS: 'KG',\n MT: 'MT',\n} as const\n\nexport const WEIGHT_SYMBOLS = {\n KGS: 'KGS',\n MT: 'MT',\n} as const\n\nexport type WeightSymbols = typeof WEIGHT_SYMBOLS\n\nexport type WeightCode = keyof WeightSymbols\n\nexport const WEIGHT_SYMBOLS_LIST = Object.keys(WEIGHT_SYMBOLS) as Array<\n keyof WeightSymbols\n>\n\nexport const WHITELIST_NAMES = ['NOT KNOWN', 'NOT FOUND']\n\nexport const MATERIAL_SUPPLIER_PROPS: {\n [prop in keyof MaterialSupplier]: prop\n} = {\n accrediation: 'accrediation',\n beDate: 'beDate',\n customers: 'customers',\n included: 'included',\n supplierCountry: 'supplierCountry',\n name: 'name',\n quantity: 'quantity',\n savingsPercentage: 'savingsPercentage',\n unitPrice: 'unitPrice',\n supplierId: 'supplierId',\n unit: 'unit',\n eximDataId: 'eximDataId',\n id: 'id',\n searchItemId: 'searchItemId',\n searchId: 'searchId',\n isExpertData: 'isExpertData',\n productDescription: 'productDescription',\n hsCode: 'hsCode',\n txnType: 'txnType',\n}\n\nexport const TRIAL_USER_SEARCH_DATE_RANGE = {\n fromDateISO: '2019-01-01T00:00:00.000Z',\n toDateISO: '2019-12-31T00:00:00.000Z',\n} as const\nexport const TRIAL_USER_MAX_SEARCH_COUNT = 10\n\nexport const DEFUALT_FOR_EMPTY_OR_NULL = 'NOT KNOWN'\n\nexport const PROD_BACKEND_SERVICE_URL = 'https://psse.mckinsey.com/api'\n\n// Note:- Only use URL's ending with .mdl.cloud for local dev backend service\n// .mckinsey.digital cant be configured to CORS allow localhost.\nexport const LOCAL_DEV_BACKEND_SERVICE_URL =\n 'https://gpp-org-gpp-backend.alpha.mdl.cloud'\n\n// export const LOCAL_DEV_BACKEND_SERVICE_URL = 'http://localhost:8080'\n","import { enUS } from 'date-fns/locale'\nimport { message } from 'antd'\nimport {\n DEFAULT_UNIT,\n CURRENCY_SYMBOLS,\n CurrencyCode,\n WHITELIST_NAMES,\n AUTH_ACCESS_TOKEN_NAME,\n PROD_BACKEND_SERVICE_URL,\n LOCAL_DEV_BACKEND_SERVICE_URL,\n} from '../constants'\nimport capitalize from 'lodash/capitalize'\nimport isNumber from 'lodash/isNumber'\nimport { CSSProperties, ReactChildren } from 'react'\nimport { AxiosApiError } from 'api/utils'\nimport { UploadListProgressProps } from 'antd/lib/upload/interface'\n\nexport function convertPropsFromNullToUndefined(object: T) {\n const result = Object.fromEntries(\n Object.entries(object).map(([key, value]) => {\n if (value === null) {\n return [key, undefined]\n }\n return [key, value]\n })\n ) as {\n [key in keyof T]: null extends T[key]\n ? Exclude | undefined\n : T[key]\n }\n\n return result\n}\n\nexport function convertPropsFromUndefinedToNull(object: T) {\n const result = Object.fromEntries(\n Object.entries(object).map(([key, value]) => {\n if (value === undefined) {\n return [key, null]\n }\n return [key, value]\n })\n ) as {\n [key in keyof T]: undefined extends T[key]\n ? Exclude | null\n : T[key]\n }\n\n return result\n}\n\nexport function getCalenderMonthOptions() {\n let monthNames: Array<{ value: string; id: number }> = []\n for (let id = 0; id < 12; id++) {\n monthNames.push({\n value: enUS?.localize?.month(id),\n id,\n })\n }\n return monthNames\n}\n\nexport function convertRangeToString({\n low,\n high,\n locale,\n}: {\n low: number | null\n high: number | null\n locale: string\n}) {\n const [lowStringified, highStringified] = [low, high].map((value) =>\n isNumber(value) ? formatCurrency({ value, locale }) : ''\n )\n return `${lowStringified} - ${highStringified}`\n}\n\nexport async function handleDownloadOnClick({\n downloadAPI,\n}: {\n downloadAPI: () => Promise\n}) {\n message.loading('Downloading...')\n try {\n await downloadAPI()\n message.success('Download Successful!')\n } catch (error) {\n const statusCode = error.response?.status\n const statusText = error.response?.statusText\n if (statusText) {\n message.error(\n `Download failed due to an error with code ${statusCode} ${statusText}`\n )\n } else {\n message.error(`Download failed due to an error`)\n }\n }\n}\n\nexport function formatUnit(unit: string) {\n if (unit === DEFAULT_UNIT) {\n return capitalize(unit).slice(0, unit.length - 1)\n }\n return unit\n}\n\nexport function formatCurrency({\n value,\n locale,\n}: {\n value: number\n locale: string\n}) {\n return value.toLocaleString(locale, {\n maximumFractionDigits: 2,\n })\n}\n\nexport function formatQuantity({\n quantity,\n locale,\n}: {\n quantity: number\n locale: string\n}) {\n return quantity.toLocaleString(locale, {\n maximumFractionDigits: 2,\n })\n}\n\nexport function unitPriceColumnTitle({\n currencyCode,\n unit,\n capitalize = false,\n}: {\n currencyCode: CurrencyCode\n unit: string\n capitalize?: boolean\n}) {\n const title = `Unit price (${CURRENCY_SYMBOLS[currencyCode]} / ${unit})`\n if (capitalize) {\n return title.toUpperCase()\n }\n return title\n}\n\nexport type TableDefaultRowProps = {\n className: string\n 'data-row-key': string\n id: string\n onClick: () => void\n style: CSSProperties\n children: ReactChildren\n}\n\nexport function materialDescription({\n name,\n grade,\n hsCode,\n}: {\n name: string\n grade: Array\n hsCode: number | null\n}) {\n return [name, hsCode, grade.join(' , ')]\n .filter((value) => value !== null && value !== '')\n .join(' - ')\n}\n\nconst BANK_CUSTOMER_REPLACEMENT = {\n single: 'BANK/GUARANTOR REPORTED',\n multiple: 'MULTIPLE BANKS/GUARANTORS REPORTED',\n}\n\nexport function filterCustomers({ customers }: { customers: string[] }) {\n let noOfBanks = 0\n const filteredCustomers = customers.filter((name) => {\n if (WHITELIST_NAMES.includes(name)) {\n return false\n }\n if (name.search(/bank/i) !== -1) {\n noOfBanks += 1\n return false\n }\n return true\n })\n if (noOfBanks > 0) {\n if (noOfBanks === 1) {\n filteredCustomers.push(BANK_CUSTOMER_REPLACEMENT.single)\n } else {\n filteredCustomers.push(BANK_CUSTOMER_REPLACEMENT.multiple)\n }\n }\n return { filteredCustomers, noOfBanks }\n}\n\nexport function showApiErrorMessagePopup(error: AxiosApiError) {\n if (error.response) {\n // The request was made and the server responded with a status code\n // that falls out of the range of 2xx\n const { status, statusText, data } = error.response\n message.error(`Something went wrong with code: ${status} ${statusText}`)\n if (typeof data === 'string') {\n message.error(data)\n } else {\n if (Array.isArray(data.message)) {\n data.message.forEach((errorMessage) => {\n message.error(errorMessage)\n })\n } else {\n message.error(data.message)\n }\n }\n } else if (error.request) {\n // The request was made but no response was received\n // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n // http.ClientRequest in node.js\n message.error(`Something went wrong: ${error.message}`)\n } else {\n // Something happened in setting up the request that triggered an Error\n message.error(`Something went wrong: ${error.message}`)\n }\n}\n\nexport const uploadProgressConfig: UploadListProgressProps = {\n strokeColor: {\n '0%': '#108ee9',\n '100%': '#87d068',\n },\n strokeWidth: 3,\n format: (percent) => `${percent ? percent.toFixed(2) : ''}%`,\n}\n\nexport function getAuthHeader() {\n const accessToken = sessionStorage.getItem(AUTH_ACCESS_TOKEN_NAME)\n const authHeader = {\n Authorization: `Bearer ${accessToken}`,\n }\n return { authHeader, accessToken }\n}\n\nexport function getBackendServiceURL() {\n let backendServiceURL: string\n const frontendOrigin = window.location.origin\n if (frontendOrigin.includes('localhost')) {\n backendServiceURL = LOCAL_DEV_BACKEND_SERVICE_URL\n } else if (frontendOrigin.includes('psse.mckinsey')) {\n backendServiceURL = `${frontendOrigin}/api`\n } else {\n backendServiceURL = frontendOrigin.replace('frontend', 'backend')\n }\n return backendServiceURL\n}\n","import { Mid, Widget } from '@mid/react-widget/redirect'\nimport { oktaDriver } from '@mid/driver-okta'\nimport { Mid as MidType, MidDriverCore } from '@mid/sdk'\nimport { getBackendServiceURL } from 'utils'\n\nfunction buildUrl(\n base: string,\n endpoint: string,\n params: Record\n): string {\n const queryParams = Object.keys(params)\n .map(\n (key) => encodeURIComponent(key) + '=' + encodeURIComponent(params[key])\n )\n .join('&')\n return `${base}/${endpoint}?${queryParams}`\n}\n\nexport const midBuilder = (config: any): MidType => {\n const emailToLoginInfo = async (email: string) => {\n const url = buildUrl(config.apiServer, 'auth/login', { email })\n const res = await fetch(url.toString())\n if (!res.ok) {\n throw new Error('Unable to get login info!')\n }\n const loginInfo = await res.json()\n return loginInfo\n }\n\n async function tenantListing(email: string, accessToken: string) {\n const url = buildUrl(config.apiServer, 'auth/tenants', { email })\n const res = await fetch(url.toString(), {\n headers: { Authorization: `Bearer ${accessToken}` },\n })\n if (!res.ok) {\n /**\n * What is happening here?\n *\n * If the /tenants API fails for any reason, we use the login info\n * as the tenant info (because this is a single tenant app)\n * Using that info, we forcibly log the user out of the application.\n *\n * Why?\n *\n * This is a way to work around the limitation of the mid-sdk\n * Discussed here: https://mckinsey-client-cap.slack.com/archives/C9XECT5NY/p1597216719004000\n *\n * Below, you can see `this` being used. don't worry about it.\n * We are binding this function to the `mid` at the bottom of this file\n */\n const loginInfo = JSON.parse(localStorage.getItem('_mid-login') as string)\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n await this.core.setTenant({\n ...loginInfo,\n displayName: 'GPP-Google of pharma procurement',\n })\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n await this.logout()\n throw new Error('Unable to get tenants!')\n }\n const tenants = await res.json()\n return tenants\n }\n\n const setCookie = async (props: any) => {\n let headers = {}\n if (props) {\n const { tenant, accessToken } = props\n headers = { 'x-tenant': tenant, Authorization: `Bearer ${accessToken}` }\n }\n const url = `${config.apiServer}/endpoints/set-cookie`\n const res = await fetch(url.toString(), { credentials: 'include', headers })\n if (!res.ok) {\n throw new Error('Unable to set cookie!')\n }\n }\n\n const port = `${window.location.port ? ':' + window.location.port : ''}`\n const host = `${window.location.protocol}//${window.location.hostname}${port}`\n const routerBase = () => {\n const path = new URL(document.baseURI).pathname\n if (path) return path\n return '/'\n }\n\n const basePath = config.basePath || routerBase()\n\n const mid: MidType = new Mid({\n emailToLoginInfo,\n tenantListing,\n setCookie: config.enableCookieAuth ? setCookie : undefined,\n loginWidget: new Widget(),\n logoutRedirectUrl: `${host}${basePath}logout`,\n redirectUrl: `${host}${basePath}auth/callback`,\n scopes: ['profile'],\n drivers: { okta: oktaDriver },\n mode: 'default',\n ...config.mid,\n })\n\n ;(mid.core as MidDriverCore).tenantListing = tenantListing.bind(mid)\n return mid\n}\n\nexport const mid: MidType = midBuilder({\n apiServer: getBackendServiceURL(),\n enableCookieAuth: false,\n basePath: '/',\n})\n","import React from 'react'\nimport { LoginComponent } from '@mid/react-widget/redirect'\nimport { Typography, Space, Row } from 'antd'\nimport { mid } from 'utils/midBuilder'\n\nexport function LoginPage() {\n return (\n (\n \n \n \n Login\n \n \n \n Enter Email\n \n \n )}\n />\n )\n}\n","import create from 'zustand'\nimport { ADMIN_GROUP, TRIAL_USER_GROUP } from './constants'\nimport { mid } from 'utils/midBuilder'\n\nexport type UserInfo = {\n accessInfo:\n | {\n aud: string\n cid: string // \"0oatb3f0gyvNorbL80h7\"\n exp: number // 1598390947\n iat: number // 1598389147\n iss: string // \"https://043bb3f8-mckid-us-dev.oktapreview.com/oauth2/austb3iwx59U2bWMm0h7\"\n jti: string // \"AT.5KrxI3tM5Q27w3oyFMbRpoYtwkTQTC-mHX-kYC7LmjY\"\n scp: Array<'email' | 'profile' | 'openid'> // [\"email\", \"profile\", \"openid\"]\n sub: string // \"Sreekar_Nimbalkar@mckinsey.com\"\n uid: string // \"00uq43duhx15fh2po0h7\"\n ver: number // 1\n groups: Array\n }\n | undefined\n | null\n accessToken: string\n idInfo: {\n [key: string]: any\n email: string\n name: string\n }\n idToken: string\n midfetch: (x: any, y: any) => void\n tenant: {\n appId: string // \"0oatb3f0gyvNorbL80h7\"\n audience: string // \"https://gpp-org-gpp-frontend.alpha.mdl.cloud\"\n authDriver: 'okta'\n displayName: 'GPP'\n domain: string // \"https://043bb3f8-mckid-us-dev.oktapreview.com/oauth2/austb3iwx59U2bWMm0h7\"\n oidcConfigUrl: string // \"https://043bb3f8-mckid-us-dev.oktapreview.com/oauth2/austb3iwx59U2bWMm0h7/.well-known/openid-configuration\"\n }\n}\n\nexport type AppWideState = {\n isAuthed: 'LOADING' | 'NOT_AUTHED' | 'AUTHED'\n info: UserInfo | null\n checkIfAuth: () => Promise\n login: () => Promise\n logout: () => Promise\n isAdmin: boolean\n locale: string\n changeLocale: (locale: string) => void\n isTrialUser: boolean\n}\n\nexport const [useAppWideStore, appWideStoreAPI] = create(\n (set, get) => ({\n isAuthed: 'LOADING',\n isAdmin: false,\n isTrialUser: false,\n info: null,\n checkIfAuth: async () => {\n try {\n const isAuthed = await mid.isAuthed()\n set((prev) => ({\n ...prev,\n isAuthed: isAuthed ? 'AUTHED' : 'NOT_AUTHED',\n }))\n } catch (err) {\n set({ isAuthed: 'NOT_AUTHED', info: null })\n }\n },\n login: async () => {\n try {\n const info = ((await mid.login()) as unknown) as UserInfo\n const groups = info.accessInfo?.groups\n const isAdmin = Boolean(groups?.includes(ADMIN_GROUP))\n const isTrialUser = Boolean(groups?.includes(TRIAL_USER_GROUP))\n set((prev) => ({ ...prev, info: info, isAdmin, isTrialUser }))\n get().checkIfAuth()\n } catch (err) {\n set((prev) => ({ ...prev, isAuthed: 'NOT_AUTHED', info: null }))\n }\n },\n logout: async () => {\n try {\n await mid.logout()\n get().checkIfAuth()\n } catch (err) {\n set({ isAuthed: 'NOT_AUTHED', info: null })\n }\n },\n locale: Intl.NumberFormat().resolvedOptions().locale,\n changeLocale: (locale: string) => set((state) => ({ locale })),\n })\n)\n","import { useState } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { CurrencyCode } from '../constants'\n\nexport function useForceReRender() {\n const [, setCount] = useState(0)\n\n function forceReRender() {\n setCount((c) => c + 1)\n }\n\n return { forceReRender }\n}\n\nexport function useSearchId() {\n const { searchId } = useLocation().state as { searchId: number }\n return searchId\n}\n\nexport function useCurrencyCode() {\n const { currencyCode } = useLocation().state as { currencyCode: CurrencyCode }\n return currencyCode\n}\n","import React, { ReactNode } from 'react'\nimport { Space, Button, Tooltip, Descriptions } from 'antd'\nimport { ButtonProps } from 'antd/lib/button'\nimport { InfoCircleFilled } from '@ant-design/icons'\nimport { MaterialSupplier } from 'api/search'\nimport { TooltipProps } from 'antd/lib/tooltip'\nimport './Layout.less'\nimport { unitPriceColumnTitle } from 'utils'\nimport { useCurrencyCode } from 'utils/hooks'\nimport { useAppWideStore } from 'App.state'\nimport { WEIGHT_LABELS, WEIGHT_SYMBOLS } from '../../constants'\n\nexport function LargeVerticalSpacer({ children }: { children: ReactNode[] }) {\n return (\n \n {children}\n \n )\n}\n\nexport function LinkButton(props: Omit) {\n return \n )\n }\n />\n \n \n )\n}\n","import { Button, Tooltip, message, Skeleton } from 'antd'\nimport {\n DeleteTwoTone,\n SearchOutlined,\n LoadingOutlined,\n} from '@ant-design/icons'\nimport {\n searchFormStoreAPI,\n useSearchFormStore,\n totalErrorCountSelector,\n ValidatedSearchItem,\n currencyCodeSelector,\n unitSelector,\n} from '../Search.state'\nimport React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport qs from 'qs'\nimport { useMutation, useQueryCache } from 'react-query'\nimport { createNewSearchResults } from 'api/search'\nimport {\n getSavedSearchResultsQueryKey,\n useSearchDatabaseSummary,\n useSearchResultsDataFromQueryCache,\n SEARCH_HISTORY_QUERY_KEY,\n useSavedSearchResultsQuery,\n} from 'utils/reactQuery'\nimport { parseISO, subMonths } from 'date-fns'\nimport {\n DEFAULT_SELECTED_PERCENTILE,\n pagePaths,\n TRIAL_USER_SEARCH_DATE_RANGE,\n WEIGHT_SYMBOLS,\n} from '../../../constants'\nimport { SearchResultsPageParamsInURL as SearchResultsPageLocationState } from 'pages/SearchResults/SearchResults'\nimport { useSearchId } from 'utils/hooks'\nimport { useAppWideStore } from 'App.state'\nimport { ErrorBoundryAndSuspenseFallback } from 'components/Fallback/Fallback'\nimport { FallbackProps } from 'react-error-boundary'\n\nconst { dispatch } = searchFormStoreAPI\n\nexport function DeleteSearchItem({ rowKey }: { rowKey: string }) {\n return (\n \n dispatch({\n type: 'DELETE_SEARCH_ITEM',\n payload: { rowKey },\n })\n }\n icon={}\n className=\"delete-record-button\"\n />\n )\n}\n\nexport function AddNewSearchItem() {\n function handleOnClick() {\n const { searchItems } = searchFormStoreAPI.getState()\n if (searchItems.length < 100) {\n dispatch({\n type: 'ADD_NEW_SEARCH_ITEM',\n })\n } else {\n message.error(\n 'Maximum number of materials limit reached. Cannot add more than 100 materials per search'\n )\n }\n }\n return (\n \n + Add New Material\n \n )\n}\n\nfunction NewSearchButton() {\n const searchId = useSearchId()\n const totalErrorsCount = useSearchFormStore(totalErrorCountSelector)\n const currencyCode = useSearchFormStore(currencyCodeSelector)\n const unit = useSearchFormStore(unitSelector)\n const history = useHistory()\n const {\n data: searchDatabaseSummary,\n status: searchDatabaseSummaryQueryStatus,\n } = useSearchDatabaseSummary()\n\n const isSearchAlreadyMade =\n useSavedSearchResultsQuery().searchItems.length !== 0\n\n const { isTrialUser } = useAppWideStore()\n\n const queryCache = useQueryCache()\n\n const [searchFreshResults, { status }] = useMutation(createNewSearchResults, {\n onSuccess: (data) => {\n message.success('Successful search')\n queryCache.invalidateQueries(SEARCH_HISTORY_QUERY_KEY, {\n exact: true,\n refetchInactive: true,\n })\n queryCache.setQueryData(getSavedSearchResultsQueryKey({ searchId }), data)\n const searchResultsPageParamsInURL: SearchResultsPageLocationState = {\n searchId,\n currencyCode,\n unit,\n }\n const searchResultsPageParamsInURLStringified = qs.stringify(\n searchResultsPageParamsInURL,\n {\n addQueryPrefix: true,\n strictNullHandling: true,\n }\n )\n history.push(\n `${pagePaths.searchResults}${searchResultsPageParamsInURLStringified}`,\n searchResultsPageParamsInURL\n )\n },\n })\n\n function handleOnClick() {\n const {\n searchItems,\n unit,\n excludeMin,\n excludeMax,\n } = searchFormStoreAPI.getState()\n if (searchDatabaseSummary === undefined) {\n message.error(\n 'Could not retrive the transaction date range information required to make the search due to some error'\n )\n return\n }\n const { latestTransactionDate } = searchDatabaseSummary\n if (latestTransactionDate === null) {\n message.error(\n 'Cannot proceed search because the retrieval of latest transaction date required to make the search failed due to some error'\n )\n return\n }\n if (isTrialUser) {\n searchFreshResults({\n searchItems: searchItems as ValidatedSearchItem[],\n searchId,\n fromDateISO: TRIAL_USER_SEARCH_DATE_RANGE.fromDateISO,\n toDateISO: TRIAL_USER_SEARCH_DATE_RANGE.toDateISO,\n percentile: DEFAULT_SELECTED_PERCENTILE,\n currencyCode,\n unit,\n excludeMin,\n excludeMax,\n })\n return\n }\n const fromDateISO = subMonths(\n parseISO(latestTransactionDate),\n 24\n ).toISOString()\n\n searchFreshResults({\n searchItems: searchItems as ValidatedSearchItem[],\n searchId,\n fromDateISO,\n toDateISO: latestTransactionDate,\n percentile: DEFAULT_SELECTED_PERCENTILE,\n currencyCode,\n unit,\n excludeMin,\n excludeMax,\n })\n }\n\n const isFormInvalidToSearchFor =\n totalErrorsCount !== 0 ||\n typeof searchDatabaseSummary?.latestTransactionDate !== 'string'\n\n let tooltipTitle\n if (isFormInvalidToSearchFor) {\n if (totalErrorsCount !== 0) {\n tooltipTitle = 'Cannot proceed search due to above errors'\n } else {\n if (searchDatabaseSummaryQueryStatus === 'loading') {\n tooltipTitle =\n 'Retrieving the latest date range information to make the search. Please wait...'\n } else if (\n searchDatabaseSummaryQueryStatus === 'success' &&\n typeof searchDatabaseSummary?.latestTransactionDate !== 'string'\n ) {\n tooltipTitle =\n 'Cannot proceed search because the retrieval of latest transaction date required to make the search failed due to some error'\n } else {\n tooltipTitle =\n 'Could not retrive the transaction date range information required to make the search due to some error'\n }\n }\n } else {\n tooltipTitle = null\n }\n\n if (isTrialUser && isSearchAlreadyMade) {\n return null\n }\n\n return (\n \n : }\n >\n New Search\n \n \n )\n}\n\nexport function NewSearchButtonWrapper() {\n return (\n \n }\n errorFallbackRender={ButtonErrorFallback}\n >\n \n \n )\n}\n\nfunction ButtonErrorFallback(props: FallbackProps) {\n return (\n \n )\n}\n\nfunction SavedSearchResultsButton() {\n const history = useHistory()\n\n const searchId = useSearchId()\n const currencyCode = useSearchResultsDataFromQueryCache()?.currencyCode\n const unit = useSearchResultsDataFromQueryCache()?.unit || WEIGHT_SYMBOLS.KGS\n\n const isThisASearchWithZeroSearchItems =\n useSavedSearchResultsQuery().searchItems.length === 0\n\n function handleOnClick() {\n if (currencyCode === undefined) {\n message.error(\n 'Unexpected missing of currency code in query cache, cannot proceeed witth search.'\n )\n return\n }\n const searchResultsPageLocationState: SearchResultsPageLocationState = {\n searchId,\n currencyCode,\n unit,\n }\n const searchResultsPageLocationStateStringified = qs.stringify(\n searchResultsPageLocationState,\n {\n addQueryPrefix: true,\n strictNullHandling: true,\n }\n )\n history.push(\n `${pagePaths.searchResults}${searchResultsPageLocationStateStringified}`,\n searchResultsPageLocationState\n )\n }\n\n if (isThisASearchWithZeroSearchItems) {\n return null\n }\n\n return (\n \n )\n}\n\nexport function SavedSearchResultsButtonWrapper() {\n return (\n \n }\n errorFallbackRender={ButtonErrorFallback}\n >\n \n \n )\n}\n","import React from 'react'\nimport isNumber from 'lodash/isNumber'\nimport { formatCurrency, formatQuantity, convertRangeToString } from 'utils'\nimport { Statistic as AntdStatistic } from 'antd'\nimport { StatisticProps } from 'antd/lib/statistic/Statistic'\nimport { useAppWideStore } from 'App.state'\nimport { useCurrencyCode } from 'utils/hooks'\nimport { CURRENCY_SYMBOLS, DATE_FORMAT } from '../../constants'\nimport { format, parseISO } from 'date-fns'\nimport { PriceSuperscript } from 'components/Layout/Layout'\n\ntype ScalarType = 'currency' | 'quantity'\n\ntype FormatterProps = { type: ScalarType; value: number | null }\n\nfunction formatScaler({\n type,\n value,\n locale,\n}: FormatterProps & { locale: string }) {\n let formatedValue: string\n\n if (type === 'currency') {\n formatedValue = isNumber(value) ? formatCurrency({ value, locale }) : '-'\n } else {\n formatedValue = isNumber(value)\n ? formatQuantity({ quantity: value, locale })\n : '-'\n }\n\n return formatedValue\n}\n\nexport function QuantityScalar({ value }: { value: number | null }) {\n const { locale } = useAppWideStore()\n\n const formatedValue: string = formatScaler({\n type: 'quantity',\n value,\n locale,\n })\n\n return <>{formatedValue}\n}\n\nexport function CurrencyScalar({\n txnType,\n value,\n}: {\n txnType: string | null\n value: number | null\n}) {\n const { locale } = useAppWideStore()\n\n const formatedValue: string = formatScaler({\n type: 'currency',\n value,\n locale,\n })\n\n if (value === null) {\n return <>{formatedValue}\n }\n\n return (\n <>\n {formatedValue} \n \n )\n}\n\ntype RangeStatisticProps = Omit & {\n range: { low: number | null; high: number | null }\n}\n\nexport function QuantityRangeStatistic({\n range,\n ...props\n}: RangeStatisticProps) {\n const { locale } = useAppWideStore()\n\n return (\n \n )\n}\n\nexport function CurrencyRangeStatistic({\n range,\n ...props\n}: RangeStatisticProps) {\n const { locale } = useAppWideStore()\n const currencyCode = useCurrencyCode()\n\n return (\n \n )\n}\n\nexport function TextualStatictic({\n value,\n ...props\n}: Omit & { value: string | number | null }) {\n let formattedValue: string | number\n if (value === '' || value === null) {\n formattedValue = '-'\n } else {\n formattedValue = value\n }\n return \n}\n\ntype ScalarProps = Omit &\n Omit\n\nexport function CurrencyStatistic({ value, ...props }: ScalarProps) {\n const { locale } = useAppWideStore()\n const currencyCode = useCurrencyCode()\n if (value === null) {\n return (\n \n )\n }\n return (\n \n )\n}\n\nexport function QuantityStatistic({ value, ...props }: ScalarProps) {\n const { locale } = useAppWideStore()\n return (\n \n )\n}\n\nexport function DateStatistic({\n ISODateString,\n formatString,\n ...props\n}: Omit & {\n ISODateString: string | null\n formatString: DATE_FORMAT\n}) {\n const valueToShow = ISODateString\n ? format(parseISO(ISODateString), formatString)\n : 'Not found'\n return \n}\n\nexport function DateRangeStatistic({\n ISODateStringRange,\n formatString,\n ...props\n}: Omit & {\n ISODateStringRange: {\n fromDate: string\n toDate: string\n }\n formatString: DATE_FORMAT\n}) {\n const valueToShow = [ISODateStringRange.fromDate, ISODateStringRange.toDate]\n .map((ISODateString) => {\n return format(parseISO(ISODateString), formatString)\n })\n .join(' to ')\n\n return \n}\n","import { InfoCircleFilled, SyncOutlined } from '@ant-design/icons'\nimport { Descriptions, Popover, Tag } from 'antd'\nimport { TagProps } from 'antd/lib/tag'\nimport Fallback from 'components/Fallback/Fallback'\nimport { DateStatistic, QuantityStatistic } from 'components/Scalars/Scalars'\nimport isString from 'lodash/isString'\nimport React from 'react'\nimport { useSearchDatabaseSummary } from 'utils/reactQuery'\nimport { DATE_FORMAT } from '../../constants'\n\nconst summaryValueStyle: React.CSSProperties = {\n fontSize: 18,\n}\n\nexport function SearchDatabaseSummary() {\n const { data, error, status } = useSearchDatabaseSummary()\n\n let content\n\n if (data === undefined) {\n content = \n } else {\n const {\n earliestTransactionDate,\n latestTransactionDate,\n noOfMolecules,\n filesCount,\n eximTransactionsCount,\n eximToBeReparsedCount,\n } = data\n\n const eximReparsePercentage = (\n ((eximTransactionsCount - eximToBeReparsedCount) * 100) /\n eximTransactionsCount\n ).toFixed(2)\n\n content = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n }\n\n let color: TagProps['color']\n if (status === 'loading') {\n color = 'processing'\n } else if (status === 'error') {\n color = 'error'\n } else {\n if (isString(data?.latestTransactionDate) === false) {\n color = 'error'\n } else if (isString(data?.earliestTransactionDate) === false) {\n color = 'warning'\n } else {\n color = 'success'\n }\n }\n\n return (\n \n : \n }\n color={color}\n >\n Input data summary {color === 'error' && `(error)`}\n \n \n )\n}\n","import { axios, Material } from './utils'\nimport { APIResponseBodyBase } from './utils'\nimport { CurrencyCode, DATE_FORMAT } from '../constants'\nimport { format, parseISO } from 'date-fns'\nimport { AxiosRequestConfig } from 'axios'\n\nexport type MaterialTypesAPIResponseBody = APIResponseBodyBase<\n MaterialTypesAPIData\n>\n\nexport type MaterialTypesAPIData = Array\n\nexport function fetchAllMaterialTypes() {\n return axios.get('/molecules/types')\n}\n\nexport type MatchedMaterialsAPIResponseBody = APIResponseBodyBase<\n MatchingMaterialNamesAPIData\n>\n\nexport type MatchingMaterialNamesAPIData = Array\n\nexport function getMatchingMaterialNames({\n moleculeName,\n}: {\n moleculeName: string\n}) {\n return axios.get('/molecules', {\n params: {\n name: moleculeName,\n },\n })\n}\n\nexport type MaterialBuyer = {\n id: number\n name: string\n country: string | null\n}\n\nexport type MaterialBuyersAPIData = Array\n\nexport type MaterialBuyersAPIResponseBody = APIResponseBodyBase<\n MaterialBuyersAPIData\n>\n\nexport function fetchMaterialBuyers({ moleculeId }: { moleculeId: number }) {\n return axios.get(`/molecules/${moleculeId}/buyers`)\n}\n\nexport function downloadSecondaryNamesTrackerExcel() {\n return axios.get(`/molecules/xlsx`, {\n responseType: 'blob',\n headers: {\n accept: '*/*',\n },\n })\n}\n\nexport type GradesAPIResponseBody = APIResponseBodyBase>\n\nexport type GradesAPIData = Array\n\nexport function getGrades() {\n return axios.get('/molecules/grades')\n}\n\nexport type MaterialTxnsForAllVendorsAPIData = Array<{\n id: number\n beDate: string\n quantity: number\n unit: string\n accessValue: number | null\n unitPrice: number\n supplierName: string\n supplierId: number\n}>\n\nexport type MaterialTxnsForAllVendorsAPIResponseBody = APIResponseBodyBase<\n MaterialTxnsForAllVendorsAPIData\n>\n\nexport function getMaterialTxnsForAllVendors({\n moleculeId,\n fromDate,\n toDate,\n grade,\n hsCode,\n currencyCode,\n}: {\n moleculeId: number\n fromDate: string\n toDate: string\n grade: Array\n hsCode: number | null\n currencyCode: CurrencyCode\n}) {\n const fromDateString = format(parseISO(fromDate), DATE_FORMAT.yyyyMM)\n const toDateString = format(parseISO(toDate), DATE_FORMAT.yyyyMM)\n const params: AxiosRequestConfig['params'] = {\n fromDate: fromDateString,\n toDate: toDateString,\n grade,\n hsCode: hsCode ?? undefined,\n currencyCode,\n }\n return axios.get(\n `/molecules/${moleculeId}/transactions`,\n {\n params,\n }\n )\n}\n\nexport type MaterialHSCodesAPIResponseData = Array<{\n id: number\n value: number\n}>\n\nexport type MaterialHSCodesAPIResponseBody = APIResponseBodyBase<\n MaterialHSCodesAPIResponseData\n>\n\nexport type HSCodesAPIResponseData = Array<{\n id: number\n hsCode: number\n molecule: any\n}>\n\nexport function getMaterialHSCodes({ moleculeId }: { moleculeId: number }) {\n const url = `/molecules/${moleculeId}/hs-codes`\n return axios.get(url)\n}\n\nexport function getHSCodes({ value }: { value: string }) {\n const url = `/hs-codes`\n return axios.get(url, {\n params: {\n value,\n },\n })\n}\n","const EventBus = {\n on(event: any, callback: any) {\n document.addEventListener(event, (e) => callback(e.detail))\n },\n dispatch(event: any, data: any) {\n document.dispatchEvent(new CustomEvent(event, { detail: data }))\n },\n remove(event: any, callback: any) {\n document.removeEventListener(event, callback)\n },\n}\n\nexport default EventBus\n\nexport const EventKeys = {\n OnHsCodeChange: 'OnHsCodeChange',\n OnMaterialChange: 'OnMaterialChange',\n}\n","import React, { useState, useEffect } from 'react'\nimport {\n useSearchFormStore,\n searchItemPropertySelector,\n searchFormStoreAPI,\n} from 'pages/Search/Search.state'\nimport { Empty, Select } from 'antd'\nimport { getHSCodes, getMaterialHSCodes } from 'api/molecules'\nimport { useDebounceFn } from 'ahooks'\nimport eventBus, { EventKeys } from '../../../../utils/EventBus'\n\nconst { dispatch } = searchFormStoreAPI\nconst { Option } = Select\nconst HSCodeInputField = function HSCodeInputField({\n value,\n onChange,\n rowKey,\n}: {\n value?: string\n onChange?: (newValue: typeof value) => void\n rowKey: string\n emitMolecule?: (obj: any) => void\n}) {\n const [searchValue, setSearchValue] = useState('')\n const [hsOptions, setHsOptions] = useState([])\n const hsCode = useSearchFormStore((state) => {\n return searchItemPropertySelector(state, { rowKey, propName: 'hsCode' })\n })\n const moleculeId = useSearchFormStore((state) => {\n return searchItemPropertySelector(state, { rowKey, propName: 'moleculeId' })\n })\n const [isFetching, setIsFetching] = useState(false)\n const [rawData, setRawData] = useState([])\n\n useEffect(\n function resetWhenMoleculeIdChanges() {\n console.log('[USE EFFECT] ', hsCode)\n // if (hsCodeCurrentlyUsed !== hsCode) {\n // setHcCodeToUseCurrently(hsCode)\n // onChange?.(undefined)\n // }\n },\n [\n hsCode,\n // hsCodeCurrentlyUsed,\n onChange,\n ]\n )\n\n const { run: handleOnSearch } = useDebounceFn(\n (searchValue: string) => {\n setSearchValue(searchValue)\n },\n { wait: 500 }\n )\n\n function handleOnChange(\n selectedValue: string | undefined,\n optionData: { value: number; key: string } | undefined\n ) {\n onChange?.(selectedValue)\n if (optionData === undefined) {\n return\n }\n dispatch({\n type: 'UPDATE_HS_CODE',\n payload: {\n rowKey,\n id: optionData.value,\n },\n })\n // const tempHsCodeObj = rawData?.find(\n // (val: any) => String(val.id) === String(optionData.key)\n // )\n eventBus.dispatch(EventKeys.OnHsCodeChange, {\n rowKey,\n hsCode: hsCode,\n // molecule: tempHsCodeObj?.molecule,\n })\n // if (tempHsCodeObj?.molecule) {\n // }\n }\n\n function getHSCodesFromServer(serchForMolecule: boolean = false) {\n if (serchForMolecule && moleculeId) {\n setIsFetching(true)\n setHsOptions([])\n getMaterialHSCodes({ moleculeId }).then(\n (res: any) => {\n // rawData = res;\n const options = res?.map(({ value, id }: any) => ({\n value: value,\n id,\n }))\n setRawData([...options])\n setHsOptions(options)\n setIsFetching(false)\n },\n (err) => {\n console.log('ERR ', err)\n setIsFetching(false)\n }\n )\n } else if (searchValue && !moleculeId) {\n setIsFetching(true)\n setHsOptions([])\n getHSCodes({ value: searchValue }).then(\n (res) => {\n setRawData([...res])\n const options = res?.map(({ hsCode, id }: any) => ({\n value: hsCode,\n id,\n }))\n\n // const temp = [...new Map(options.map(item => [item.value, item])).values()]\n\n setHsOptions(options)\n setIsFetching(false)\n },\n (err) => {\n setIsFetching(false)\n }\n )\n }\n }\n useEffect(() => {\n if (moleculeId && rawData.length > 0) {\n const options = rawData?.filter((val: { value: any; id: any }) =>\n String(val.value).includes(searchValue.trim())\n )\n setHsOptions(options)\n } else {\n getHSCodesFromServer(false)\n }\n }, [searchValue])\n\n let notFoundContent = null\n if (hsOptions?.length === 0) {\n notFoundContent = (\n \n )\n }\n\n useEffect(() => {\n if (moleculeId) {\n getHSCodesFromServer(true)\n }\n }, [moleculeId])\n\n return (\n \n {hsOptions.map((val: any) => (\n \n ))}\n \n )\n}\n\nexport default HSCodeInputField\n","import React, { useState, useMemo, useEffect, ReactNode } from 'react'\nimport {\n useSearchFormStore,\n SearchItemBulkUploadResponseErrors,\n ColumnIndex,\n SearchItem,\n searchFormStoreAPI,\n searchItemPropertySelector,\n unitSelector,\n} from 'pages/Search/Search.state'\nimport { Form, InputNumber, Empty, Select, Space, Spin } from 'antd'\nimport { RuleObject } from 'antd/lib/form'\nimport { COLUMN_DATA_INDEX } from 'pages/Search/Search.state'\nimport { useQuery } from 'react-query'\nimport {\n getMatchingMaterialNames,\n getGrades,\n getMaterialHSCodes,\n fetchAllMaterialTypes as getAllMaterialTypes,\n MatchingMaterialNamesAPIData,\n GradesAPIData,\n MaterialHSCodesAPIResponseData,\n} from 'api/molecules'\nimport { useDebounceFn } from 'ahooks'\nimport isNumber from 'lodash/isNumber'\nimport Fallback from 'components/Fallback/Fallback'\nimport { AxiosApiError } from 'api/utils'\nimport { WEIGHT_LABELS } from '../../../../constants'\n\nimport HSCodeInputField from './HSCodeInputField'\nimport eventBus, { EventKeys } from 'utils/EventBus'\n\ntype BulkUploadColumnResponse = NonNullable<\n SearchItemBulkUploadResponseErrors[string]\n>[ColumnIndex]\n\nconst bulkUploadValidationRule = (\n bulkUploadResponse: BulkUploadColumnResponse\n) => ({\n validator: (_: RuleObject | any, valueToValidate: any): Promise => {\n // for hsCode even if it's string or number mark is as valid\n if (_.field === 'hsCode' && valueToValidate) {\n return Promise.resolve()\n }\n\n if (\n bulkUploadResponse &&\n bulkUploadResponse.error &&\n valueToValidate === bulkUploadResponse.value\n ) {\n return Promise.reject(bulkUploadResponse.error)\n }\n return Promise.resolve()\n },\n})\n\nexport function NameFormItem(_: any, searchItem: SearchItem) {\n const { rowKey } = searchItem\n const columnName = COLUMN_DATA_INDEX.name\n const bulkUploadResponse = useSearchFormStore(\n (state) => state.searchItemBulkUploadResponseErrors[rowKey]?.[columnName]\n )\n const hsCode = useSearchFormStore((state) => {\n return searchItemPropertySelector(state, { rowKey, propName: 'hsCode' })\n })\n\n return (\n \n \n \n )\n}\n\nexport function TypeFormItem(_: any, searchItem: SearchItem) {\n const { rowKey } = searchItem\n const columnName = COLUMN_DATA_INDEX.type\n const bulkUploadResponse = useSearchFormStore(\n (state) => state.searchItemBulkUploadResponseErrors[rowKey]?.[columnName]\n )\n return (\n \n \n \n )\n}\n\nexport function GradeFormItem(_: any, searchItem: SearchItem) {\n const { rowKey } = searchItem\n const columnName = COLUMN_DATA_INDEX.grade\n const bulkUploadResponse = useSearchFormStore(\n (state) => state.searchItemBulkUploadResponseErrors[rowKey]?.[columnName]\n )\n return (\n \n \n \n )\n}\n\nexport function CurrentPriceFormItem(_: any, searchItem: SearchItem) {\n const { rowKey } = searchItem\n const columnName = COLUMN_DATA_INDEX.currentPricingPerUnit\n const bulkUploadResponse = useSearchFormStore(\n (state) => state.searchItemBulkUploadResponseErrors[rowKey]?.[columnName]\n )\n const unit = useSearchFormStore(unitSelector)\n return (\n \n \n \n )\n}\n\nexport function TotalAnnualVolumeFormItem(_: any, searchItem: SearchItem) {\n const { rowKey } = searchItem\n const columnName = COLUMN_DATA_INDEX.totalAnnualizedVolume\n const bulkUploadResponse = useSearchFormStore(\n (state) => state.searchItemBulkUploadResponseErrors[rowKey]?.[columnName]\n )\n return (\n \n \n \n )\n}\n\nexport function HSCodeFormItem(_: any, searchItem: SearchItem) {\n const { rowKey } = searchItem\n\n const columnName = COLUMN_DATA_INDEX.hsCode\n const bulkUploadResponse = useSearchFormStore(\n (state) => state.searchItemBulkUploadResponseErrors[rowKey]?.[columnName]\n )\n\n const moleculeId = useSearchFormStore((state) => {\n return searchItemPropertySelector(state, { rowKey, propName: 'moleculeId' })\n })\n\n const setMoleculeByHSCode = (obj: any) => {\n console.log('[On EMIT MOL] ', obj)\n }\n\n return (\n \n {/* */}\n \n \n )\n}\n\nconst { dispatch } = searchFormStoreAPI\n\nexport function TypeSelectField({\n value,\n onChange,\n}: {\n value?: string\n onChange?: (newValue: typeof value) => void\n}) {\n const { status, data } = useQuery('all-materail-types', getAllMaterialTypes, {\n staleTime: Infinity,\n })\n const options = useMemo(\n () =>\n data?.map((materialType) => ({\n value: materialType,\n })),\n [data]\n )\n\n return (\n \n )\n}\n\nexport function NameSelectField({\n value,\n onChange,\n rowKey,\n}: {\n value?: string\n onChange?: (newValue: typeof value) => void\n rowKey: string\n}) {\n console.log('[NAMEFi] ', value, rowKey)\n const [searchValue, setSearchValue] = useState('')\n\n const { status, data, isFetching } = useQuery({\n queryKey: ['matching-material-names', { moleculeName: searchValue }],\n queryFn: () => getMatchingMaterialNames({ moleculeName: searchValue }),\n config: {\n enabled: searchValue !== '',\n staleTime: Infinity,\n },\n })\n\n const options = useMemo(\n () =>\n data?.map(({ name, id }) => ({\n value: name,\n id,\n })),\n [data]\n )\n\n const { run: handleOnSearch } = useDebounceFn(\n (searchValue: string) => {\n setSearchValue(searchValue)\n },\n { wait: 500 }\n )\n\n function handleOnChange(\n selectedValue: string | undefined,\n optionData: { value: string; id: number } | undefined\n ) {\n onChange?.(selectedValue)\n if (optionData === undefined) {\n return\n }\n dispatch({\n type: 'UPDATE_MATERIAL_ID',\n payload: {\n rowKey,\n id: optionData.id,\n },\n })\n eventBus.dispatch(EventKeys.OnMaterialChange, {\n rowKey,\n id: optionData.id,\n })\n }\n\n let notFoundContent = null\n if (options?.length === 0) {\n notFoundContent = (\n \n )\n }\n\n return (\n \n )\n}\n\nexport function GradeSelectField({\n value,\n onChange,\n rowKey,\n}: {\n value?: Array\n onChange?: (newValue: typeof value) => void\n rowKey: string\n}) {\n const { data, isLoading } = useQuery({\n queryKey: 'grades',\n queryFn: getGrades,\n config: {\n staleTime: Infinity, // Setting to Infinity does not cause unnecessary fetching when a duplicate of this component is mounted when add new molecule is pressed.\n },\n })\n\n const gradeOptions = useMemo(\n () =>\n data?.map((grade) => ({\n value: grade,\n })),\n [data]\n )\n\n function handleOnChange(selectedGrades: Array) {\n onChange?.(selectedGrades)\n }\n\n return (\n \n )\n}\n\nexport function HSCodeSelectField({\n value,\n onChange,\n rowKey,\n}: {\n value?: number\n onChange?: (newValue: typeof value) => void\n rowKey: string\n}) {\n const moleculeId = useSearchFormStore((state) =>\n searchItemPropertySelector(state, { rowKey, propName: 'moleculeId' })\n )\n\n const [moleculeIdUsedCurrrently, setMoleculeIdToUseCurrently] = useState(\n moleculeId\n )\n\n const { data: hsCodeOptions, isLoading, status, error } = useQuery<\n MaterialHSCodesAPIResponseData,\n AxiosApiError\n >({\n queryKey: ['hs-codes', moleculeIdUsedCurrrently],\n queryFn: () =>\n getMaterialHSCodes({ moleculeId: moleculeIdUsedCurrrently as number }),\n config: {\n enabled: isNumber(moleculeIdUsedCurrrently),\n },\n })\n\n useEffect(\n function resetWhenMoleculeIdChanges() {\n if (moleculeIdUsedCurrrently !== moleculeId) {\n setMoleculeIdToUseCurrently(moleculeId)\n onChange?.(undefined)\n }\n },\n [moleculeId, moleculeIdUsedCurrrently, onChange]\n )\n\n let fallback: ReactNode\n if (hsCodeOptions?.length === 0) {\n fallback = (\n \n )\n } else {\n fallback = (\n Select a material first to get HS Codes for it}\n customLoader={\n \n <>Fetching HS codes for this material...\n \n \n }\n />\n )\n }\n return (\n \n )\n}\n","import { Space, Typography, Select } from 'antd'\nimport { WeightCode, WEIGHT_SYMBOLS_LIST, WEIGHT_LABELS } from '../../constants'\nimport React, { useState, useEffect } from 'react'\n\nconst WEIGHT_OPTIONS = WEIGHT_SYMBOLS_LIST.map((val) => ({\n value: val,\n label: WEIGHT_LABELS[val],\n}))\n\nconst ToggleWeightUnit = ({\n onInputChange,\n unit: initialWeightUnit = null,\n}: any) => {\n const [unit, setWeightUnit] = useState(\n initialWeightUnit || WEIGHT_OPTIONS[0].value\n )\n\n useEffect(() => {\n if (onInputChange) onInputChange({ unit })\n }, [unit])\n\n return (\n \n Unit of measure\n {\n setWeightUnit(selection)\n }}\n />\n \n )\n}\n\nexport default ToggleWeightUnit\n","import { Space, Typography, Input } from 'antd'\nimport { WeightCode, WEIGHT_LABELS } from '../../constants'\nimport React, { useState, useEffect } from 'react'\n\nconst WeightRangeInput = ({\n onInputChange,\n unit,\n excludeMin: initialFromWeight = undefined,\n excludeMax: initialToWeight = undefined,\n}: {\n onInputChange: Function\n unit: WeightCode\n excludeMin: number | undefined\n excludeMax: number | undefined\n}) => {\n const [excludeMin, setFromWeight] = useState(\n initialFromWeight\n )\n const [excludeMax, setToWeight] = useState(\n initialToWeight\n )\n\n useEffect(() => {\n if (onInputChange) onInputChange({ excludeMin, excludeMax })\n }, [excludeMin, excludeMax])\n\n const onInputNumberChange = (\n e: React.FormEvent,\n forInput: 'from' | 'to'\n ) => {\n let n =\n e.currentTarget.value === '' || e.currentTarget.value === undefined\n ? undefined\n : Number(e.currentTarget.value)\n switch (forInput) {\n case 'from': {\n setFromWeight(n)\n break\n }\n case 'to': {\n setToWeight(n)\n break\n }\n }\n }\n\n const onInputBlur = (forInput: 'from' | 'to') => {\n console.log('onInputBlur ', forInput, excludeMin, excludeMax)\n switch (forInput) {\n case 'from': {\n if (excludeMin !== undefined && excludeMin < 0) {\n setFromWeight(undefined)\n }\n break\n }\n case 'to': {\n if (excludeMax !== undefined && excludeMax < 0) {\n setToWeight(undefined)\n }\n break\n }\n }\n }\n\n return (\n \n Exclude \n {'<'} \n onInputNumberChange(e, 'from')}\n onBlur={() => onInputBlur('from')}\n >\n {WEIGHT_LABELS[unit]} \n And \n {'>'} \n onInputNumberChange(e, 'to')}\n onBlur={() => onInputBlur('to')}\n >\n {WEIGHT_LABELS[unit]}\n \n )\n}\n\nexport default WeightRangeInput\n","import React, { useEffect, useState, useRef } from 'react'\nimport Header from 'components/Header/Header'\nimport {\n Layout,\n PageHeader,\n Form,\n Table,\n Space,\n Row,\n Typography,\n Button,\n Upload,\n message,\n Divider,\n Select,\n} from 'antd'\nimport { DownloadOutlined } from '@ant-design/icons'\nimport './Search.less'\nimport {\n SearchItem,\n useSearchFormStore,\n searchFormStoreAPI,\n SearchItemValidationErrors,\n currencyCodeSelector,\n COLUMN_DATA_INDEX,\n useSearchPageDescription,\n checkIfEmptySelector,\n unitSelector,\n weightRangeSelector,\n} from './Search.state'\nimport {\n convertPropsFromNullToUndefined,\n convertPropsFromUndefinedToNull,\n handleDownloadOnClick,\n TableDefaultRowProps,\n uploadProgressConfig,\n getAuthHeader,\n getBackendServiceURL,\n} from 'utils'\nimport {\n DeleteSearchItem,\n AddNewSearchItem,\n NewSearchButtonWrapper,\n SavedSearchResultsButtonWrapper,\n} from './components/buttons'\nimport { ColumnsType } from 'antd/lib/table'\nimport { useHistory } from 'react-router-dom'\nimport { useForceReRender, useSearchId } from 'utils/hooks'\nimport {\n XlsxUploadSearchItemsAPIResponseBody,\n downloadBulkUploadTemplate,\n} from 'api/search'\nimport { ErrorBoundryAndSuspenseFallback } from 'components/Fallback/Fallback'\nimport { UploadChangeParam } from 'antd/lib/upload'\nimport { UploadFile } from 'antd/lib/upload/interface'\nimport { SearchDatabaseSummary } from 'components/SearchDatabaseSummary/SearchDatabaseSummary'\nimport {\n CURRENCY_CODES_LIST,\n CURRENCY_SYMBOLS,\n WeightCode,\n} from '../../constants'\nimport {\n NameFormItem,\n HSCodeFormItem,\n TypeFormItem,\n GradeFormItem,\n CurrentPriceFormItem,\n TotalAnnualVolumeFormItem,\n} from './components/FormItems/FormItems'\nimport { LargeVerticalSpacer, HideForTrialUser } from 'components/Layout/Layout'\nimport ToggleWeightUnit from './ToggleWeightUnit'\nimport { useSavedSearchResultsQuery } from 'utils/reactQuery'\n\nimport eventBus, { EventKeys } from '../../utils/EventBus'\nimport { WEIGHT_LABELS } from '../../constants'\nimport WeightRangeInput from './WeightRangeInput'\nconst { dispatch } = searchFormStoreAPI\n\nfunction CurrentPricingColumnTitle() {\n console.log('[CurrentPricingColumnTitle] calculating title again')\n const currencyCode = useSearchFormStore(currencyCodeSelector)\n const unit = useSearchFormStore(unitSelector)\n return (\n <>\n Current Pricing ({CURRENCY_SYMBOLS[currencyCode]} / {WEIGHT_LABELS[unit]})\n \n )\n}\n\nfunction AnnualizedVolumeColumnTitle() {\n const unit = useSearchFormStore(unitSelector)\n return <>Total Annualized Volume ({WEIGHT_LABELS[unit]})\n}\n\nconst columns: ColumnsType = [\n {\n title: 'Name Of Material',\n dataIndex: COLUMN_DATA_INDEX.name,\n width: '16%',\n render: NameFormItem,\n },\n {\n title: 'HS Code',\n dataIndex: COLUMN_DATA_INDEX.hsCode,\n width: '16%',\n render: (idx, val) => {\n return HSCodeFormItem(idx, val)\n },\n },\n {\n title: 'Type Of Material',\n dataIndex: COLUMN_DATA_INDEX.type,\n width: '16%',\n render: TypeFormItem,\n },\n {\n title: 'Grade',\n dataIndex: COLUMN_DATA_INDEX.grade,\n width: '16%',\n render: GradeFormItem,\n },\n {\n title: ,\n dataIndex: COLUMN_DATA_INDEX.currentPricingPerUnit,\n width: '16%',\n render: CurrentPriceFormItem,\n },\n {\n title: ,\n dataIndex: COLUMN_DATA_INDEX.totalAnnualizedVolume,\n width: '16%',\n render: TotalAnnualVolumeFormItem,\n },\n {\n title: undefined,\n dataIndex: 'operation',\n render: (_, searchItem, rowIndex) => {\n const {\n searchItems: { length },\n } = searchFormStoreAPI.getState()\n if (length === 1) {\n return\n }\n return \n },\n },\n]\n\ntype SearchItemWithUndefinedDefaults = {\n [propName in keyof SearchItem]: null extends SearchItem[propName]\n ? Exclude | undefined\n : SearchItem[propName]\n}\n\ninterface SearchFormRowSpecialProps {\n rowIndex: number\n searchItem: SearchItem\n onClick: () => void\n}\n\ntype SearchFormRowCompProps = TableDefaultRowProps & SearchFormRowSpecialProps\n\nfunction SearchFormRow({\n rowIndex,\n searchItem,\n ...props\n}: SearchFormRowCompProps) {\n const [form] = Form.useForm()\n const [renderKey, setrenderKey] = useState(Date.now())\n useEffect(function validateFormFields() {\n form.validateFields()\n })\n\n const { rowKey, moleculeId, hsCode } = searchItem\n const [oldMoleculeId, setOldMoleculeId] = useState(moleculeId)\n\n function handleFormFieldsChange() {\n const updatedSearchItemValidationErrors: SearchItemValidationErrors = {\n rowKey,\n fieldErrors: form.getFieldsError(),\n }\n\n const formValues = form.getFieldsValue() as Omit<\n SearchItemWithUndefinedDefaults,\n 'rowKey'\n >\n const updatedSearchItem: SearchItem = {\n ...convertPropsFromUndefinedToNull(formValues),\n rowKey,\n }\n\n dispatch({\n type: 'UPDATE_SEARCH_ITEM',\n payload: {\n updatedSearchItem,\n updatedSearchItemValidationErrors,\n },\n })\n }\n\n let formInitialValues: SearchItemWithUndefinedDefaults = convertPropsFromNullToUndefined(\n searchItem\n )\n\n useEffect(() => {\n eventBus.on(EventKeys.OnHsCodeChange, (data: any) => {\n console.log('[OnHsCodeChange] ', data)\n // update material if HS Code value is changed\n if (data.rowKey === rowKey) {\n setrenderKey(Date.now())\n }\n })\n\n eventBus.on(EventKeys.OnMaterialChange, (data: any) => {\n console.log('[OnMaterialChange] ', data)\n if (data.rowKey === rowKey) {\n form.setFieldsValue({ hsCode: null })\n setrenderKey(Date.now())\n }\n })\n\n return () => {\n // remvoe event listener\n eventBus.remove(EventKeys.OnHsCodeChange, () => {})\n eventBus.remove(EventKeys.OnMaterialChange, () => {})\n }\n }, [])\n\n return (\n \n \n \n )\n}\n\nconst TABLE_PAGE_SIZE = 5\n\n/**\n * Page number `SHOULD NOT` start from `ZERO`, it starts from `ONE`, using `0` as page number `🔥🔥BLOWS UP THE Table component🔥🔥`\n */\nfunction getLastPageNumber({\n dataSourceLength,\n pageSize,\n}: {\n dataSourceLength: number\n pageSize: number\n}) {\n if (dataSourceLength < pageSize) {\n return 1\n } else if (dataSourceLength % pageSize === 0) {\n return dataSourceLength / pageSize\n } else {\n return 1 + Math.floor(dataSourceLength / pageSize)\n }\n}\n\nfunction FormTable() {\n const { forceReRender: reRender } = useForceReRender()\n\n // using the hook `useSearchFormStore` will cause this component to re-render on every key stroke in the form\n // hence using the non-rective .getState() method\n const { searchItems } = searchFormStoreAPI.getState()\n\n const dataSourceLength = searchItems.length\n\n const previousDataSourceLengthRef = useRef(dataSourceLength)\n\n const [currentPage, setCurrentPage] = useState(1)\n\n useEffect(function decideWhenToReRender() {\n return searchFormStoreAPI.subscribe(\n function listenerThatReRenders() {\n reRender()\n },\n function stateSelector({ searchItems, dataVersionFromFileUpload }) {\n return { searchItems, dataVersionFromFileUpload }\n },\n /**\n * Return `true` if you DO NOT want to re-render the component. `true` implies that previous and current props are\n * considered equal in terms of it's effect on rendering the component. Return `false` if you want to re-render,\n * the listener callback will trigger when false is returned.\n * @param previous\n * @param current\n */\n function reRenderingDecider(\n previous,\n current: {\n searchItems: SearchItem[]\n dataVersionFromFileUpload: number\n }\n ) {\n // Idea is to only re-render this FormTable component when there is change in the number of rows, hence length is checked.\n // ----Or----\n // Whenever any data from a file is uploaded.\n\n const areNumberOfRowsChanged =\n previous.searchItems.length !== current.searchItems.length\n\n const isNewDataUploadedFromExcel =\n previous.dataVersionFromFileUpload !==\n current.dataVersionFromFileUpload\n\n let isReRenderingOutputConsideredEqual = true\n\n if (areNumberOfRowsChanged || isNewDataUploadedFromExcel) {\n isReRenderingOutputConsideredEqual = false\n }\n\n return isReRenderingOutputConsideredEqual\n }\n )\n }, [])\n\n useEffect(\n function seekToLastPageWhenDataLengthChanges() {\n // 🚨 Dont seek to last page when you are using the pagination buttons to view around the available pages.\n if (\n dataSourceLength === 0 ||\n dataSourceLength === previousDataSourceLengthRef.current\n ) {\n return\n }\n const previousDataSourceLength = previousDataSourceLengthRef.current\n\n previousDataSourceLengthRef.current = dataSourceLength\n\n const lastPageNumber = getLastPageNumber({\n dataSourceLength,\n pageSize: TABLE_PAGE_SIZE,\n })\n\n // 🚨 Dont seek to last page when you are in some page before and delete a row, you would want to remain in the same page.\n if (\n dataSourceLength < previousDataSourceLength &&\n currentPage < lastPageNumber\n ) {\n return\n }\n\n if (lastPageNumber === currentPage) {\n return\n }\n\n setCurrentPage(lastPageNumber)\n },\n [dataSourceLength, currentPage]\n )\n\n useEffect(function showAlertMessage() {\n if (dataSourceLength !== 0) {\n return\n }\n message.warn(\n 'Did not find any saved search items, please enter new search items now'\n )\n }, [])\n\n return (\n comp will get called with `searchItem` as `undefined` and 🔥🔥BLOW UP THE Table component!🔥🔥\n components={\n dataSourceLength === 0\n ? undefined\n : {\n body: {\n row: SearchFormRow,\n },\n }\n }\n size=\"large\"\n dataSource={searchItems}\n columns={columns}\n // Pass data you want available in component\n onRow={(searchItem, rowIndex): SearchFormRowSpecialProps => {\n return {\n searchItem,\n rowIndex: rowIndex as number,\n onClick: () => {},\n }\n }}\n rowKey={(searchItem) => searchItem.rowKey}\n rowClassName=\"editable-row\"\n pagination={{\n showSizeChanger: false,\n pageSize: TABLE_PAGE_SIZE,\n current: currentPage, //🔥🔥 IMPORTANT NOTE 🔥🔥: current value HAS TO BE GREATER THAN ZERO, PASSING ZERO WILL 🔥🔥BLOW UP THE TABLE COMPONENT!🔥🔥\n position: ['topRight'],\n style: {\n position: 'absolute',\n right: 0,\n zIndex: 2,\n margin: 0,\n top: -60,\n },\n onChange: (page, pageSize) => {\n setCurrentPage(page)\n },\n }}\n id=\"molecule-search-form-table\"\n footer={() => (\n \n \n \n \n \n \n )}\n />\n )\n}\n\nfunction FileUploadSearch() {\n const searchId = useSearchId()\n\n function handleOnChange({\n file,\n }: UploadChangeParam>) {\n if (file.status === 'done') {\n const { response } = file\n if (response === undefined) {\n message.error(\n `Some error occurred, did not receive parsed data from successful file upload.`\n )\n return\n }\n dispatch({\n type: 'HYDRATE_FROM_FILE_UPLOAD_RESPONSE_DATA',\n payload: response.data,\n })\n dispatch({\n type: 'SET_FLOW_TYPE',\n payload: { flowType: 'BULK_UPLOAD_SEARCH' },\n })\n message.success(`${file.name} file uploaded successfully`)\n } else if (file.status === 'error') {\n message.error(`${file.name} file upload failed.`)\n }\n }\n\n const { authHeader } = getAuthHeader()\n\n return (\n \n \n \n Search by bulk uploading materials list in excel\n \n }\n onClick={() =>\n handleDownloadOnClick({\n downloadAPI: () => downloadBulkUploadTemplate({ searchId }),\n })\n }\n >\n Download Template\n \n \n \n \n \n \n )\n}\n\nconst CURRENCY_CODE_OPTIONS = CURRENCY_CODES_LIST.map((currencyCode) => ({\n value: currencyCode,\n}))\n\nfunction CurrencyCodeSelector() {\n const currencyCode = useSearchFormStore(currencyCodeSelector)\n\n return (\n \n )\n}\n\nfunction onWeightUnitChange({\n unit,\n excludeMin,\n excludeMax,\n}: {\n unit: WeightCode\n excludeMin: number\n excludeMax: number\n}) {\n console.log('[onInputChange] ', { unit, excludeMin, excludeMax })\n dispatch({\n type: 'CHANGE_WEIGHT_UNIT',\n payload: { unit },\n })\n}\n\nfunction onWeightLimitChange({\n unit,\n excludeMin,\n excludeMax,\n}: {\n unit: WeightCode\n excludeMin: number\n excludeMax: number\n}) {\n console.log('[onInputChange] ', { unit, excludeMin, excludeMax })\n dispatch({\n type: 'CHANGE_WEIGHT_RANGE',\n payload: { excludeMin, excludeMax },\n })\n}\n\nfunction AddNewSearchItemAndCurrencyCodeRow() {\n const unit = useSearchFormStore(unitSelector)\n const { excludeMin, excludeMax } = useSearchFormStore(weightRangeSelector)\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction NewSearchJourneyFlowHeader() {\n const flowType = useSearchFormStore((state) => state.flowType)\n\n if (flowType === 'NOT_YET_CHOOSEN') {\n return (\n <>\n Or\n \n Search by adding material names directly\n \n \n )\n }\n\n return (\n \n Parsed data for search\n \n )\n}\n\nexport function NewSearchJourney() {\n const isEmpty = useSearchFormStore(checkIfEmptySelector)\n // It's better UX if the user sees one empty search form row that prompts, instead of the user seeing nothing and forcing him/her to go to the\n // \"+ Add New Material\" button to populate a search form row.\n if (isEmpty) {\n dispatch({\n type: 'ADD_NEW_SEARCH_ITEM',\n })\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport function SavedSearchJourney() {\n const savedSearchResults = useSavedSearchResultsQuery()\n\n dispatch({\n type: 'HYDRATE_FROM_SAVED_SEARCH_API_DATA',\n payload: savedSearchResults,\n })\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nexport default function Search() {\n const history = useHistory()\n\n const {\n isSavedSearchJourney,\n searchId: searchIdWhatShouldBe,\n } = useSearchPageDescription()\n\n const searchIdInSearchFormStore = useSearchFormStore(\n (state) => state.searchId\n )\n // (1) When coming from the \"home\" page,\n // 1. By \"create new search\" button, the store's state has to be re-set to empty state\n // 2. By \"edit the results\" button,\n // (a) For a search id that is different than the one in store, store's state has to be re-set to empty and then hydrate from the query cache for that specific search id.\n // (b) For a search id that is same as the one in store, store's state doesn't have to re-set, it already has the state of the search id user wants to edit the ressults for.\n // (2) When coming from the \"search-results\" page by stepping back in the history stack, search id in the store is\n // same as that of the page's location state. We dont change it.\n if (searchIdWhatShouldBe !== searchIdInSearchFormStore) {\n dispatch({\n type: 'RESET_STATE',\n })\n dispatch({\n type: 'SET_SEARCH_ID',\n payload: {\n searchId: searchIdWhatShouldBe,\n },\n })\n }\n\n return (\n \n
\n \n }\n />\n {isSavedSearchJourney ? (\n \n \n \n ) : (\n \n )}\n \n \n )\n}\n","import React, { useState, useRef } from 'react'\nimport { Layout, Button, Divider, Space, Progress, message } from 'antd'\nimport { DownloadOutlined } from '@ant-design/icons'\nimport Header from 'components/Header/Header'\nimport { FileType } from 'api/files'\nimport { handleDownloadOnClick, uploadProgressConfig } from 'utils'\nimport { downloadSecondaryNamesTrackerExcel } from 'api/molecules'\nimport { axios } from 'api/utils'\nimport create from 'zustand'\nimport produce from 'immer'\nimport Axios, { Canceler } from 'axios'\nimport { LargeVerticalSpacer } from 'components/Layout/Layout'\n\nconst CancelToken = Axios.CancelToken\n\ntype ProgressState = {\n [fileType in FileType]: {\n progress: number\n error: null | Error\n }\n} & {\n set: (fn: (state: ProgressState) => void) => void\n}\n\nconst DEFAULT_VALUE = {\n progress: 0,\n error: null,\n}\n\nconst [useProgressIndicatorStore] = create((set) => ({\n article57: DEFAULT_VALUE,\n dmf: DEFAULT_VALUE,\n exim: DEFAULT_VALUE,\n expert: DEFAULT_VALUE,\n moleculeMapping: DEFAULT_VALUE,\n orangeBook: DEFAULT_VALUE,\n smartChem: DEFAULT_VALUE,\n set: (fn) => set(produce(fn)),\n}))\n\nfunction ProgressIndicator({ fileType }: { fileType: FileType }) {\n const { error, progress } = useProgressIndicatorStore(\n (state) => state[fileType]\n )\n\n return (\n \n )\n}\n\nfunction Uploader({ fileType }: { fileType: FileType }) {\n const [file, setFile] = useState()\n const cancelFn = useRef()\n const set = useProgressIndicatorStore((state) => state.set)\n\n const isUploadStarted = useProgressIndicatorStore(\n (state) => state[fileType].progress > 0\n )\n const isUploadEnded = useProgressIndicatorStore(\n (state) => state[fileType].progress >= 100\n )\n\n function handleFileInput(e: React.ChangeEvent) {\n const ext = e.target.value.match(/\\.([^\\.]+)$/)?.[1]\n\n if (fileType === 'moleculeMapping') {\n if (ext !== 'xlsx') {\n message.error('Only .xlsx files are accepted')\n // @ts-ignore\n e.target.value = null\n return\n }\n } else if (ext !== 'zip') {\n message.error('Only .zip files are accepted')\n // @ts-ignore\n e.target.value = null\n return\n }\n setFile(e.target.files?.[0])\n }\n\n function submitForm(e: React.MouseEvent) {\n e.preventDefault()\n if (file === undefined) {\n message.error('Unexpected error occurred while uploading file')\n return\n }\n const formData = new FormData()\n formData.append('type', fileType)\n formData.append('file', file)\n axios\n .post('/files', formData, {\n onUploadProgress: (progressEvent) => {\n set((state) => {\n state[fileType].progress =\n (progressEvent.loaded / progressEvent.total) * 100\n })\n },\n cancelToken: new CancelToken(function executor(cancelerFn) {\n // An executor function receives a cancel function as a parameter\n cancelFn.current = cancelerFn\n }),\n })\n .then(() => {\n message.success('Successfully uploaded file')\n })\n .catch((error) => {\n if (Axios.isCancel(error)) {\n message.warning(`Upload cancelled`)\n set((state) => {\n state[fileType].error = null\n state[fileType].progress = 0\n })\n return\n }\n set((state) => {\n state[fileType].error = error\n })\n message.error(`Error uploading file ${error}`)\n })\n }\n\n const isFileChosen = Boolean(file)\n\n return (\n \n \n {isFileChosen && (\n \n \n \n {isUploadStarted && !isUploadEnded && (\n {\n cancelFn.current?.()\n }}\n danger\n >\n Cancel\n \n )}\n \n {isUploadStarted && }\n \n )}\n \n )\n}\n\nexport default function Admin() {\n const filesConfig: { [file in FileType]: { headerTitle: string } } = {\n exim: {\n headerTitle: 'Exim',\n },\n dmf: {\n headerTitle: 'DMF',\n },\n expert: {\n headerTitle: 'Expert Price Input',\n },\n smartChem: {\n headerTitle: 'Smart Chem',\n },\n article57: {\n headerTitle: 'Article 57',\n },\n orangeBook: {\n headerTitle: 'Orange Book',\n },\n moleculeMapping: {\n headerTitle: 'Master Material List',\n },\n }\n\n return (\n \n
\n \n \n {(Object.entries(filesConfig) as Array<\n [FileType, { headerTitle: string }]\n >).map(([fileType, { headerTitle }]) => {\n return (\n \n \n {`Upload ${headerTitle} file (.${\n fileType === 'moleculeMapping' ? 'xlsx' : 'zip'\n })`}\n \n {fileType === 'moleculeMapping' ? (\n \n \n \n handleDownloadOnClick({\n downloadAPI: downloadSecondaryNamesTrackerExcel,\n })\n }\n icon={}\n >\n Download Previous Version\n \n \n ) : (\n \n )}\n \n )\n })}\n \n \n \n )\n}\n","import { Material } from 'api/utils'\nimport { SearchItemResults } from 'api/search'\nimport produce from 'immer'\nimport { createReduxStyleStore } from 'utils/zustand'\nimport sortBy from 'lodash/sortBy'\n\nexport type State = {\n selectedMaterial: Material | null\n selectedGrade: string | null\n searchItemsResultsToView: SearchItemResults[]\n searchItemsResultsWithNoFilters: SearchItemResults[]\n}\n\ntype FilterByMaterialName = {\n type: 'FILTER BY MATERIAL NAME'\n payload: {\n material: Material\n }\n}\n\ntype ResetMaterialNameFilter = {\n type: 'RESET MATERIAL NAME FILTER'\n}\n\ntype FilterByGrade = {\n type: 'FILTER BY GRADE'\n payload: {\n grade: string\n }\n}\n\ntype ResetGradeFilter = {\n type: 'RESET GRADE FILTER'\n}\n\ntype UpdateSearchItemsResultsFromAPIResponse = {\n type: 'UPDATE SEARCH ITEMS RESULTS FROM API RESPONSE'\n payload: {\n searchItemsResults: SearchItemResults[]\n }\n}\n\nexport type Action =\n | FilterByMaterialName\n | ResetMaterialNameFilter\n | FilterByGrade\n | ResetGradeFilter\n | UpdateSearchItemsResultsFromAPIResponse\n\nfunction filterByMaterial({\n searchItemsResultsToView,\n selectedMaterial,\n}: {\n searchItemsResultsToView: SearchItemResults[]\n selectedMaterial: Material\n}) {\n return searchItemsResultsToView.filter(({ molecule }) => {\n return molecule.name === selectedMaterial.name\n })\n}\n\nfunction filterByGrade({\n searchItemsResultsToView,\n selectedGrade,\n}: {\n searchItemsResultsToView: SearchItemResults[]\n selectedGrade: string\n}) {\n return searchItemsResultsToView.filter(({ grade }) => {\n return grade.includes(selectedGrade)\n })\n}\n\nfunction reducer(state: State, action: Action): State {\n const newState = produce(state, (draft) => {\n switch (action.type) {\n case 'FILTER BY MATERIAL NAME': {\n const { payload } = action\n draft.selectedMaterial = payload.material\n let searchItemsResultsToView = draft.searchItemsResultsWithNoFilters\n let { selectedMaterial, selectedGrade } = draft\n if (selectedGrade) {\n searchItemsResultsToView = filterByGrade({\n searchItemsResultsToView,\n selectedGrade,\n })\n }\n searchItemsResultsToView = filterByMaterial({\n searchItemsResultsToView,\n selectedMaterial,\n })\n draft.searchItemsResultsToView = searchItemsResultsToView\n break\n }\n\n case 'RESET MATERIAL NAME FILTER': {\n draft.selectedMaterial = null\n let searchItemsResultsToView = draft.searchItemsResultsWithNoFilters\n const { selectedGrade } = draft\n if (selectedGrade) {\n searchItemsResultsToView = filterByGrade({\n searchItemsResultsToView,\n selectedGrade,\n })\n }\n draft.searchItemsResultsToView = searchItemsResultsToView\n break\n }\n\n case 'FILTER BY GRADE': {\n const { payload } = action\n draft.selectedGrade = payload.grade\n let searchItemsResultsToView = draft.searchItemsResultsWithNoFilters\n const { selectedGrade, selectedMaterial } = draft\n if (selectedMaterial) {\n searchItemsResultsToView = filterByMaterial({\n searchItemsResultsToView,\n selectedMaterial,\n })\n }\n searchItemsResultsToView = filterByGrade({\n searchItemsResultsToView,\n selectedGrade,\n })\n draft.searchItemsResultsToView = searchItemsResultsToView\n break\n }\n\n case 'RESET GRADE FILTER': {\n draft.selectedGrade = null\n let searchItemsResultsToView = draft.searchItemsResultsWithNoFilters\n const { selectedMaterial } = draft\n if (selectedMaterial) {\n searchItemsResultsToView = filterByMaterial({\n searchItemsResultsToView,\n selectedMaterial,\n })\n }\n draft.searchItemsResultsToView = searchItemsResultsToView\n break\n }\n\n case 'UPDATE SEARCH ITEMS RESULTS FROM API RESPONSE': {\n draft.searchItemsResultsWithNoFilters = sortBy(\n action.payload.searchItemsResults,\n ['molecule.name']\n )\n let searchItemsResultsToView = draft.searchItemsResultsWithNoFilters\n const { selectedGrade, selectedMaterial } = draft\n if (selectedMaterial) {\n searchItemsResultsToView = filterByMaterial({\n searchItemsResultsToView,\n selectedMaterial,\n })\n }\n if (selectedGrade) {\n searchItemsResultsToView = filterByGrade({\n searchItemsResultsToView,\n selectedGrade,\n })\n }\n draft.searchItemsResultsToView = searchItemsResultsToView\n break\n }\n }\n })\n\n return newState\n}\n\nconst initialState: State = {\n selectedMaterial: null,\n selectedGrade: null,\n searchItemsResultsToView: [],\n searchItemsResultsWithNoFilters: [],\n}\n\nexport const [\n useSearchItemsResultsStore,\n searchItemsResultsStoreAPI,\n] = createReduxStyleStore({\n initialState,\n reducer,\n storeName: 'Search Results Page Store',\n})\n","// ref. https://mds.mckinsey.com/design/foundations/colors\nexport const MCK_CAHRT_COLORS = [\n {\n fill: '#034B6F',\n color: '#ffffff',\n },\n {\n fill: '#027AB1',\n color: '#ffffff',\n },\n {\n fill: '#39BDF3',\n color: '#000000',\n },\n {\n fill: '#71D2F1',\n color: '#000000',\n },\n {\n fill: '#AFC3FF',\n color: '#000000',\n },\n {\n fill: '#3C96B4',\n color: '#ffffff',\n },\n {\n fill: '#AAE6F0',\n color: '#000000',\n },\n {\n fill: '#8C5AC8',\n color: '#ffffff',\n },\n {\n fill: '#E6A0C8',\n color: '#000000',\n },\n {\n fill: '#E5546C',\n color: '#ffffff',\n },\n {\n fill: '#FAA082',\n color: '#000000',\n },\n {\n fill: '#333333',\n color: '#ffffff',\n },\n {\n fill: '#4D4D4D',\n color: '#ffffff',\n },\n {\n fill: '#757575',\n color: '#ffffff',\n },\n {\n fill: '#B3B3B3',\n color: '#000000',\n },\n {\n fill: '#D0D0D0',\n color: '#000000',\n },\n {\n fill: '#E6E6E6',\n color: '#000000',\n },\n]\n","import { WeightCode, WEIGHT_SYMBOLS } from '../constants'\nimport { MCK_CAHRT_COLORS } from '../constants/ChartColors'\n\nexport const convertPricePerUnitOfWeight = (\n val: number | null,\n formWtUnit: WeightCode | string,\n toWtUnit: WeightCode | string\n) => {\n if (!val) return val\n if (formWtUnit === toWtUnit) return val\n else if (\n formWtUnit === WEIGHT_SYMBOLS.KGS &&\n toWtUnit === WEIGHT_SYMBOLS.MT\n ) {\n return val * 1000\n } else if (\n formWtUnit === WEIGHT_SYMBOLS.MT &&\n toWtUnit === WEIGHT_SYMBOLS.KGS\n ) {\n return val / 1000\n } else return 0\n}\n\nexport const convertWeight = (\n val: number | null,\n formWtUnit: WeightCode | string,\n toWtUnit: WeightCode | string\n) => {\n if (!val) return val\n if (formWtUnit === toWtUnit) return val\n else if (\n formWtUnit === WEIGHT_SYMBOLS.KGS &&\n toWtUnit === WEIGHT_SYMBOLS.MT\n ) {\n return val / 1000\n } else if (\n formWtUnit === WEIGHT_SYMBOLS.MT &&\n toWtUnit === WEIGHT_SYMBOLS.KGS\n ) {\n return val * 1000\n } else return 0\n}\n\nexport const addColorsForGraph = (data: any) => {\n for (let i = 0; i < data.length; i++) {\n const totalLen = MCK_CAHRT_COLORS.length - 1\n const index = i % totalLen\n const colorObj = MCK_CAHRT_COLORS[index]\n data[i]['fill'] = colorObj.fill\n data[i]['color'] = colorObj.color\n }\n return data\n}\n\nexport const getMonthNameFromDateString = (dtStr: string) => {\n const monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ]\n\n const d = new Date(dtStr)\n return monthNames[d.getMonth()]\n}\n\nexport const roundOff = (value: number, decimals: number = 1) => {\n return Number(\n Math.round(Number(String(value) + 'e' + String(decimals))) +\n 'e-' +\n String(decimals)\n )\n}\n\nexport const getRankFromDotGraph = (\n list: any[],\n forClient: string,\n month: string,\n allSuppliers: string[]\n): { rank: number | null; rankOutOf: number | null } => {\n const tempObj = list.find((val) => val.month === month)\n // if client not exist\n if (!tempObj[forClient]) return { rank: null, rankOutOf: null }\n\n let totalClients = 0\n if (tempObj) {\n totalClients = Object.keys(tempObj).filter(\n (key: string) => !['month', 'monthlyAveragePrice'].includes(key)\n ).length\n }\n\n const arrayToFilter = []\n for (let supplier of allSuppliers) {\n if (tempObj.hasOwnProperty(supplier)) {\n arrayToFilter.push({ name: supplier, val: tempObj[supplier] })\n }\n }\n\n arrayToFilter.sort((a, b) => a.val - b.val)\n\n let rank = 0\n\n const alreadyRankedValues = new Set()\n for (let val of arrayToFilter) {\n if (!alreadyRankedValues.has(val.val)) {\n rank++\n }\n alreadyRankedValues.add(val.val)\n if (val.name === forClient) {\n return { rank, rankOutOf: totalClients }\n }\n }\n\n return { rank: null, rankOutOf: null }\n}\n\nexport const getPremiumToL1 = (\n list: any[],\n forClient: string,\n month: string,\n allSuppliers: string[]\n) => {\n const tempObj = list.find((val) => val.month === month)\n const arrayToFilter = []\n for (let supplier of allSuppliers) {\n // arrayToFilter.push({ name: val, val: tempObj[val] || 0 })\n if (tempObj.hasOwnProperty(supplier)) {\n arrayToFilter.push({ name: supplier, val: tempObj[supplier] })\n }\n }\n\n if (arrayToFilter.length <= 0) return null\n arrayToFilter.sort((a, b) => a.val - b.val)\n const clientAvgPoint = tempObj[forClient] || 0\n const lowestAvgPoint = arrayToFilter[0].val || 0\n\n const premiumToL1 = roundOff(\n ((clientAvgPoint - lowestAvgPoint) / clientAvgPoint) * 100,\n 0\n )\n return premiumToL1\n}\n\nexport const getPremiumToAverage = (\n list: any[],\n forClient: string,\n month: string,\n allSuppliers: string[]\n) => {\n const tempObj = list.find((val) => val.month === month)\n\n const clientAvgPoint = tempObj[forClient] || 0\n const monthlyAveragePrice = tempObj['monthlyAveragePrice']\n\n const premiumToAvg = roundOff(\n ((clientAvgPoint - monthlyAveragePrice) / clientAvgPoint) * 100,\n 0\n )\n return premiumToAvg\n}\n","import { SearchItemResults, MaterialSupplier } from 'api/search'\nimport {\n pagePaths,\n DATE_FORMAT,\n MATERIAL_SUPPLIER_PROPS,\n DEFUALT_FOR_EMPTY_OR_NULL,\n WeightCode,\n WEIGHT_LABELS,\n WEIGHT_SYMBOLS,\n} from '../../../../constants'\nimport { useHistory } from 'react-router-dom'\nimport { PercentageOutlined, CheckCircleTwoTone } from '@ant-design/icons'\nimport { ReviewPageLocationState } from 'pages/Review/Review'\nimport { Button, Row, Col, Statistic, List, Tooltip, Table } from 'antd'\nimport { materialDescription, formatUnit, TableDefaultRowProps } from 'utils'\nimport {\n QuantityRangeStatistic,\n QuantityScalar,\n CurrencyStatistic,\n CurrencyScalar,\n} from 'components/Scalars/Scalars'\nimport isNumber from 'lodash/isNumber'\nimport React, { useEffect } from 'react'\nimport { ColumnsType } from 'antd/lib/table'\nimport { format, parseISO, isAfter } from 'date-fns'\nimport qs from 'qs'\nimport './SearchItemWiseResultsList.less'\nimport {\n useSearchItemsResultsStore,\n searchItemsResultsStoreAPI,\n} from '../Filters/Filters.state'\nimport {\n VendorRowTooltip,\n PriceSuperscript,\n PriceColumnHeader,\n} from 'components/Layout/Layout'\nimport { useSavedSearchResultsQuery } from 'utils/reactQuery'\nimport {\n convertPricePerUnitOfWeight,\n convertWeight,\n} from 'utils/helperFunctions'\n\nfunction RecommendedVendorsList({\n suppliers,\n unit,\n}: {\n suppliers: MaterialSupplier[]\n unit: WeightCode\n}) {\n const columns: ColumnsType = [\n {\n title: 'Vendor',\n dataIndex: MATERIAL_SUPPLIER_PROPS.name,\n },\n {\n title: 'Vendor Country',\n dataIndex: MATERIAL_SUPPLIER_PROPS.supplierCountry,\n render: (vendorCountry: MaterialSupplier['supplierCountry']) => {\n if (vendorCountry === null) {\n return DEFUALT_FOR_EMPTY_OR_NULL\n }\n\n return vendorCountry\n },\n },\n {\n title: ,\n dataIndex: MATERIAL_SUPPLIER_PROPS.unitPrice,\n render: (unitPrice: number | null, { txnType }) => {\n return (\n \n )\n },\n sorter: (prev, next) => {\n if (isNumber(prev.unitPrice) && isNumber(next.unitPrice)) {\n return prev.unitPrice - next.unitPrice\n }\n return 0\n },\n defaultSortOrder: 'ascend',\n sortDirections: ['ascend', 'descend', 'ascend'],\n className: 'unit-price-column-header',\n },\n {\n title: `Qty Transacted (${WEIGHT_LABELS[unit]})`,\n dataIndex: MATERIAL_SUPPLIER_PROPS.quantity,\n render: (quantity: number | null) => {\n return (\n \n )\n },\n sorter: (prev, next) => {\n if (isNumber(prev.unitPrice) && isNumber(next.unitPrice)) {\n return prev.unitPrice - next.unitPrice\n }\n return 0\n },\n sortDirections: ['ascend', 'descend', 'ascend'],\n },\n {\n title: 'Transaction Date',\n dataIndex: MATERIAL_SUPPLIER_PROPS.beDate,\n render: (date: string) => {\n return format(parseISO(date), DATE_FORMAT['yyyy-MM-dd'])\n },\n sorter: (prev, next) => {\n if (isAfter(parseISO(next.beDate), parseISO(prev.beDate))) {\n return -1\n } else {\n return 1\n }\n },\n sortDirections: ['ascend', 'descend', 'ascend'],\n },\n {\n title: '',\n dataIndex: MATERIAL_SUPPLIER_PROPS.isExpertData,\n render: (isExpertData: boolean) => {\n return isExpertData ? (\n \n \n \n ) : null\n },\n },\n ]\n\n function CustomRow({\n vendor,\n onClick,\n ...defaultProps\n }: { vendor: MaterialSupplier; onClick: () => void } & TableDefaultRowProps) {\n return (\n \n \n \n )\n }\n\n const suggestedVendors = suppliers.filter(({ included }) => included)\n\n return (\n comp will get called with `vendor` as undefined and 🔥🔥BLOW UP THE PAGE!🔥🔥\n components={\n suggestedVendors.length === 0\n ? undefined\n : {\n body: {\n row: CustomRow,\n },\n }\n }\n // Pass data you want available in component\n onRow={(vendor) => {\n return {\n vendor,\n onClick: () => {}, // have to pass atleat one native props, Typescript complains otherwise. onClick can be replaced by any other prop\n }\n }}\n columns={columns}\n pagination={{\n hideOnSinglePage: true,\n defaultPageSize: 3,\n }}\n rowKey={(supplier) => supplier.supplierId}\n />\n )\n}\n\nexport function SearchItemWiseResultsList() {\n const {\n currencyCode,\n id: searchId,\n fromDate,\n toDate,\n percentile,\n searchItems: searchItemsResults,\n } = useSavedSearchResultsQuery()\n\n useEffect(\n function syncSearchItemsResultsStoreWithServerState() {\n searchItemsResultsStoreAPI.dispatch({\n type: 'UPDATE SEARCH ITEMS RESULTS FROM API RESPONSE',\n payload: { searchItemsResults },\n })\n },\n [searchItemsResults]\n )\n\n const { searchItemsResultsToView } = useSearchItemsResultsStore(\n ({ searchItemsResultsToView }) => ({\n searchItemsResultsToView,\n })\n )\n\n const history = useHistory()\n\n function handleReviewOnClick(moleculeSearchItem: SearchItemResults) {\n const {\n currentPricingPerUnit,\n unit,\n type,\n grade,\n totalAnnualizedVolume,\n id: searchItemId,\n molecule,\n hsCode,\n } = moleculeSearchItem\n const reviewPageLocationState: ReviewPageLocationState = {\n searchId,\n searchItemId,\n fromDate,\n molecule,\n toDate,\n currentPricingPerUnit,\n grade,\n totalAnnualizedVolume,\n type,\n unit,\n hsCode,\n currencyCode,\n percentile,\n }\n const urlSearchParamsStringified = qs.stringify(reviewPageLocationState, {\n addQueryPrefix: true,\n strictNullHandling: true,\n })\n history.push(\n `${pagePaths.review}${urlSearchParamsStringified}`,\n reviewPageLocationState\n )\n }\n\n return (\n {\n const {\n id: searchItemId,\n molecule,\n currentPricingPerUnit,\n estimatedPricePerUnit,\n unit,\n grade,\n searchResults: suppliers,\n estimatedSavingsHigh,\n estimatedSavingsLow,\n hsCode,\n txnType,\n } = searchItem\n\n const fromWtUnit = WEIGHT_SYMBOLS.KGS\n const toWtUnit = unit\n\n return (\n \n \n \n \n }\n />\n \n \n \n \n \n \n / {formatUnit(toWtUnit)}{' '}\n \n \n }\n />\n \n \n (\n \n )}\n />\n \n \n handleReviewOnClick(searchItem)}\n id=\"molecule-review-button\"\n type=\"primary\"\n >\n Review\n \n \n \n \n )\n }}\n />\n )\n}\n","import { useMutation, useQueryCache } from 'react-query'\nimport {\n createNewSearchResults,\n SearchItemResults,\n SearchResultsAPIRequestBody,\n} from 'api/search'\nimport {\n getSavedSearchResultsQueryKey,\n useSavedSearchResultsQuery,\n} from 'utils/reactQuery'\nimport { message, Select, Space, Typography, DatePicker, Skeleton } from 'antd'\nimport React, {\n useState,\n useEffect,\n useMemo,\n ReactNode,\n ReactElement,\n} from 'react'\nimport moment, { Moment } from 'moment'\nimport {\n ACCEPTED_PERCENTILE_VALUES,\n TRIAL_USER_SEARCH_DATE_RANGE,\n} from '../../../../constants'\nimport { InfoTooltip } from 'components/Layout/Layout'\nimport { useSearchItemsResultsStore } from './Filters.state'\nimport { uniqBy, uniq } from 'lodash'\nimport { useSearchId } from 'utils/hooks'\nimport { ErrorBoundryAndSuspenseFallback } from 'components/Fallback/Fallback'\nimport { useAppWideStore } from 'App.state'\n\ntype SelectedMaterial = {\n value: string\n id: number\n}\n\nfunction massageSearchItemsRequestFromSearchItemsResults({\n searchItemsResults,\n}: {\n searchItemsResults: Array\n}): SearchResultsAPIRequestBody['data'] {\n const searchItemsRequest: SearchResultsAPIRequestBody['data'] = []\n for (const {\n molecule: { id: moleculeId },\n totalAnnualizedVolume,\n type,\n currentPricingPerUnit,\n grade,\n hsCode,\n unit,\n } of searchItemsResults) {\n searchItemsRequest.push({\n currentPricingPerUnit,\n grade,\n hsCode,\n moleculeId,\n totalAnnualizedVolume,\n type,\n unit,\n })\n }\n return searchItemsRequest\n}\n\nfunction useSearchResultsFilterMutation() {\n const searchId = useSearchId()\n\n const queryCache = useQueryCache()\n\n const [applyFilter, { status: filterApplicationStatus }] = useMutation(\n createNewSearchResults,\n {\n onSuccess: (dataAfterFilterApplication) => {\n queryCache.setQueryData(\n getSavedSearchResultsQueryKey({ searchId }),\n dataAfterFilterApplication\n )\n message.success('Successfully applied the filter')\n },\n throwOnError: true,\n }\n )\n\n const searchResults = useSavedSearchResultsQuery()\n\n const searchItemsRequest = useMemo(\n () =>\n massageSearchItemsRequestFromSearchItemsResults({\n searchItemsResults: searchResults?.searchItems ?? [],\n }),\n [searchResults]\n )\n\n function filterSearchResultsMutation({\n fromDateISO,\n toDateISO,\n percentile,\n }: {\n fromDateISO?: string\n toDateISO?: string\n percentile?: number\n }) {\n if (searchResults === undefined) {\n message.warning(\n 'Could not make filter API request due to unexpected missing of query cache data'\n )\n throw Error(\n 'Could not make filter API request due to unexpected missing of query cache data'\n )\n }\n\n const { currencyCode, unit, excludeMin, excludeMax } = searchResults\n\n return applyFilter({\n searchItems: searchItemsRequest,\n currencyCode,\n searchId,\n fromDateISO: fromDateISO ?? searchResults.fromDate,\n toDateISO: toDateISO ?? searchResults.toDate,\n percentile: percentile ?? searchResults.percentile,\n unit,\n excludeMin,\n excludeMax,\n })\n }\n\n useEffect(function showFilterApplicationLoader() {\n if (filterApplicationStatus === 'loading') {\n message.loading('Applying filter...')\n }\n })\n\n return { filterSearchResultsMutation, filterApplicationStatus }\n}\n\nfunction getUniqueMaterialNameOptions({\n searchItemsResults,\n}: {\n searchItemsResults: Array\n}) {\n return uniqBy(\n searchItemsResults.map(({ molecule }) => molecule),\n 'id'\n ).map(({ id, name }) => ({\n value: name,\n id,\n }))\n}\n\nfunction getUniqueGradeOptions({\n searchItemsResults,\n}: {\n searchItemsResults: Array\n}) {\n return uniq(searchItemsResults.map(({ grade }) => grade).flat(1)).map(\n (grade) => ({\n value: grade,\n })\n )\n}\n\nfunction MaterialSelector() {\n const { dispatch, selectedMaterial } = useSearchItemsResultsStore(\n ({ dispatch, selectedMaterial }) => ({\n dispatch,\n selectedMaterial,\n })\n )\n\n const searchResultsAPIData = useSavedSearchResultsQuery()\n\n const materialNamesFilterOptions = useMemo(\n () =>\n getUniqueMaterialNameOptions({\n searchItemsResults: searchResultsAPIData.searchItems,\n }),\n [searchResultsAPIData]\n )\n\n return (\n dispatch({ type: 'RESET MATERIAL NAME FILTER' })}\n // @ts-ignore\n onSelect={(_, optionData: SelectedMaterial) => {\n const { id, value: name } = optionData\n dispatch({\n type: 'FILTER BY MATERIAL NAME',\n payload: {\n material: { id, name },\n },\n })\n }}\n />\n )\n}\n\nfunction GradeSelector() {\n const { dispatch, selectedGrade } = useSearchItemsResultsStore(\n ({ dispatch, selectedGrade }) => ({\n dispatch,\n selectedGrade,\n })\n )\n\n const searchResultsAPIData = useSavedSearchResultsQuery()\n\n const gradesFilterOptions = useMemo(\n () =>\n getUniqueGradeOptions({\n searchItemsResults: searchResultsAPIData?.searchItems ?? [],\n }),\n [searchResultsAPIData]\n )\n\n return (\n dispatch({ type: 'RESET GRADE FILTER' })}\n onSelect={(value) =>\n dispatch({ type: 'FILTER BY GRADE', payload: { grade: value } })\n }\n placeholder=\"Filter by grade\"\n allowClear\n />\n )\n}\n\nfunction trialUserDiasbleDate(current: Moment) {\n const disableMonthsBeforeTrialRange =\n current < moment(TRIAL_USER_SEARCH_DATE_RANGE.fromDateISO)\n const disableMonthsAfterTrialRange =\n current > moment(TRIAL_USER_SEARCH_DATE_RANGE.toDateISO)\n return disableMonthsBeforeTrialRange || disableMonthsAfterTrialRange\n}\n\nfunction FromDateSelector() {\n const { isTrialUser } = useAppWideStore()\n\n const { filterSearchResultsMutation } = useSearchResultsFilterMutation()\n\n const {\n fromDate: fromDateISO,\n toDate: toDateISO,\n } = useSavedSearchResultsQuery()\n\n const [fromDateMoment, setFromDateMoment] = useState(moment(fromDateISO))\n\n async function handleOnChange(selectedFromDateMoment: Moment | null) {\n if (selectedFromDateMoment === null) {\n return\n }\n\n if (selectedFromDateMoment.isAfter(moment(toDateISO))) {\n message.error('From date cannot be AFTER To date')\n return\n }\n\n setFromDateMoment(selectedFromDateMoment)\n try {\n await filterSearchResultsMutation({\n fromDateISO: selectedFromDateMoment.toISOString(),\n })\n } catch (error) {\n message.warn(\"Resetting the 'From Date' filter to it's previous value\")\n setFromDateMoment(fromDateMoment)\n }\n }\n\n function disabledDate(current: Moment) {\n if (!isTrialUser) {\n return false\n }\n\n return trialUserDiasbleDate(current)\n }\n\n return (\n \n )\n}\n\nfunction ToDateSelector() {\n const { isTrialUser } = useAppWideStore()\n\n const { filterSearchResultsMutation } = useSearchResultsFilterMutation()\n\n const {\n toDate: toDateISO,\n fromDate: fromDateISO,\n } = useSavedSearchResultsQuery()\n\n const [toDateMoment, setToDateMoment] = useState(moment(toDateISO))\n\n async function handleOnChange(selectedToDateMoment: Moment | null) {\n if (selectedToDateMoment === null) {\n return\n }\n\n if (selectedToDateMoment.isBefore(moment(fromDateISO))) {\n message.error('To date cannot be BEFORE From date')\n return\n }\n setToDateMoment(selectedToDateMoment)\n try {\n await filterSearchResultsMutation({\n toDateISO: selectedToDateMoment.toISOString(),\n })\n } catch (error) {\n message.warn(\"Resetting the 'To Date' filter to it's previous value\")\n setToDateMoment(toDateMoment)\n }\n }\n\n function disabledDate(current: Moment) {\n if (!isTrialUser) {\n return false\n }\n\n return trialUserDiasbleDate(current)\n }\n\n return (\n \n )\n}\n\nconst PERCENTILE_OPTIONS = ACCEPTED_PERCENTILE_VALUES.map((value) => ({\n value,\n}))\n\nfunction PercentileFilter() {\n const { filterSearchResultsMutation } = useSearchResultsFilterMutation()\n\n const [percentile, setPercentile] = useState(\n useSavedSearchResultsQuery().percentile\n )\n\n async function handleOnChange(value: number) {\n setPercentile(value)\n try {\n await filterSearchResultsMutation({\n percentile: value,\n })\n } catch (error) {\n message.warn(\"Resetting the 'Percentile' filter to it's previous value\")\n setPercentile(percentile)\n }\n }\n\n return (\n \n )\n}\n\nfunction FilterWrapper({\n label,\n filter,\n errorFallback,\n}: {\n label: ReactNode\n filter: ReactNode\n errorFallback: ReactElement\n}) {\n return (\n \n )\n}\n\nexport function PercentileFilterWrapper() {\n return (\n \n Percentile{' '}\n \n \n }\n filter={}\n errorFallback={\n )}\n >\n \n \n )\n}\n\nexport function GradeSelectorWrapper() {\n return (\n }\n errorFallbackRender={() => (\n \n )\n}\n","import { Skeleton, Space, Typography } from 'antd'\nimport { getSupplierTableData, getSupplierGraphData } from 'api/search'\nimport React, { useState } from 'react'\nimport { useQuery } from 'react-query'\nimport CountriesExportingToIndiaBarGraph from './CountriesExportingToIndiaBarGraph'\nimport CountriesExportingToIndiaTable from './CountriexExportingToIndiaTable'\nimport CountrySelectionDropdown from '../shared/CountrySelectionDropdown'\nimport { useSearchItemDescription } from 'pages/Review/Review.hooks'\nexport default function CountriesExportingToIndia() {\n const { searchItemId, searchId } = useSearchItemDescription()\n const [country, setCountry] = useState(null)\n\n const {\n data: supplierTableData,\n isLoading: isSupplierTableLoading,\n }: any = useQuery({\n queryKey: ['countries-exporting-table', { searchItemId, country }],\n queryFn: () => getSupplierTableData(searchId, searchItemId, country),\n config: {\n suspense: true,\n staleTime: Infinity,\n },\n })\n\n const {\n data: supplierGraphData,\n isLoading: isSupplierGraphLoading,\n }: any = useQuery({\n queryKey: ['countries-exporting-graph', { searchItemId, country }],\n queryFn: () => getSupplierGraphData(searchId, searchItemId, country),\n config: {\n suspense: true,\n staleTime: Infinity,\n },\n })\n\n const onCountryChange = (country: any) => {\n console.log('onCountryChange ', country)\n setCountry(country)\n }\n\n return (\n
\n \n Importer Country{' '}\n \n \n\n {isSupplierGraphLoading && country != null ? (\n \n ) : (\n
\n {supplierGraphData.exporters &&\n supplierGraphData.exporters.length > 0 ? (\n \n ) : null}\n
\n )}\n {isSupplierTableLoading ? (\n \n ) : (\n \n )}\n
\n )\n}\n","import React from 'react'\nimport { Typography } from 'antd'\n\nexport default function ChartLegends({\n legendsData,\n}: {\n legendsData: {\n key: string\n fill: string\n color?: string\n }[]\n}) {\n return (\n <>\n \n {legendsData.map((val: any) => {\n return (\n \n \n {val.key}\n {/* {val.key} */}\n \n )\n })}\n \n \n )\n}\n","import React, { useRef } from 'react'\nimport {\n BarChart,\n Bar,\n XAxis,\n YAxis,\n Tooltip,\n LabelList,\n ResponsiveContainer,\n} from 'recharts'\n\nimport { saveAs } from 'file-saver'\nimport { toPng } from 'html-to-image'\n\nimport {\n addColorsForGraph,\n convertWeight,\n roundOff,\n} from 'utils/helperFunctions'\nimport { Typography, Button, Tag } from 'antd'\nimport { DownloadOutlined } from '@ant-design/icons'\nimport { useSearchItemDescription } from 'pages/Review/Review.hooks'\nimport {\n WEIGHT_SYMBOLS,\n WEIGHT_LABELS,\n MAX_NUMBER_LIMIT_FOR_CHARTS,\n} from '../../../../constants'\nimport ChartLegends from '../shared/ChartLegends'\n\nconst YEAR_KEY_NAME = 'year'\n\nexport default function CustomerProfileForClientStackedChart({\n data,\n country,\n supplier,\n}: any) {\n const ref = useRef(null)\n const { unit } = useSearchItemDescription()\n\n const keysArr = Object.keys(data[0]).filter((val) => val !== YEAR_KEY_NAME)\n\n let dataKeysList = keysArr.map((val, idx) => ({\n key: val,\n }))\n addColorsForGraph(dataKeysList)\n\n // unit conversion\n let maxQuantity: number = 0\n let dataMax: number = 0 // to set max limit on all graphs for y-axis\n const divisor = 1000\n const currentYear: number = new Date().getFullYear()\n const chartData = data\n .map((dataObj: any) => {\n let keys = Object.keys(dataObj).filter((key) => key !== YEAR_KEY_NAME)\n let newObj: any = { ...dataObj }\n if (unit === WEIGHT_SYMBOLS.MT) {\n const tempObj: any = {}\n for (let key of keys) {\n tempObj[key] = roundOff(\n convertWeight(\n dataObj[key],\n WEIGHT_SYMBOLS.KGS,\n WEIGHT_SYMBOLS.MT\n ) || 0\n )\n }\n newObj = { ...newObj, ...tempObj }\n }\n\n let sumOfQty: number = 0\n for (let key of keys) {\n sumOfQty += newObj[key]\n if (newObj[key] >= MAX_NUMBER_LIMIT_FOR_CHARTS) {\n maxQuantity = newObj[key]\n }\n }\n\n if (dataMax < sumOfQty) dataMax = sumOfQty\n\n return newObj\n })\n .map((dataObj: any) => {\n // convert to 000 unit if exceeds million\n let keys = Object.keys(dataObj).filter((key) => key !== YEAR_KEY_NAME)\n if (maxQuantity > 0) {\n let newObj = { ...dataObj }\n\n for (let key of keys) {\n newObj[key] = dataObj[key] = roundOff(dataObj[key] / divisor)\n }\n\n return newObj\n } else {\n return dataObj\n }\n })\n .reverse()\n\n // set for per million data max if it exceeds the million quantity\n if (maxQuantity > 0) dataMax = dataMax / divisor\n\n // for sorting the data list\n let stackKeysList: any[] = []\n chartData.forEach((dataObj: any) => {\n let keys = Object.keys(dataObj).filter((key) => key !== YEAR_KEY_NAME)\n const sortable = []\n\n for (let key of keys) {\n sortable.push([key, dataObj[key]])\n }\n\n sortable.sort(function (a, b) {\n return b[1] - a[1]\n })\n\n let tempKeyArr = []\n for (let tempSortArr of sortable) {\n let keyColObj: any = { key: tempSortArr[0] }\n const existingColorDef = dataKeysList.find((val: any) => {\n return val.key === tempSortArr[0]\n })\n\n keyColObj = { ...existingColorDef }\n tempKeyArr.push(keyColObj)\n }\n\n stackKeysList.push(tempKeyArr)\n })\n\n const handleDownload = () => {\n const filter = (node: any) => {\n if (node.tagName) {\n const exclusionClasses = ['dont-download']\n return !exclusionClasses.some((classname) =>\n node.classList.contains(classname)\n )\n }\n return true\n }\n\n toPng(ref.current, { filter })\n .then((dataUrl) => {\n try {\n let fileName = `customer-profile-for-${country\n .split(' ')\n .join('-')}.png`\n saveAs(dataUrl, fileName)\n } catch (e) {\n console.error('Exception ', e)\n saveAs(dataUrl, `${Date.now()}.png`)\n }\n })\n .catch(function (error) {\n console.error('oops, something went wrong!', error)\n })\n }\n\n const CustomizedMostPopularLabel = (props: any) => {\n const {\n fontColor,\n x,\n y,\n viewBox: { width, height },\n value,\n chartDataIdx,\n } = props\n\n if (!value) return null\n const dataObj = chartData[chartDataIdx]\n\n const clientNames: string[] = Object.keys(dataObj).filter(\n (key) => key !== YEAR_KEY_NAME\n )\n\n let sumOfQty = 0\n for (let key of clientNames) {\n sumOfQty += dataObj[key] || 0\n }\n const percentage = roundOff((value / sumOfQty) * 100)\n\n return (\n \n {value} ({percentage}%)\n \n )\n }\n\n const currentYearFormatter = (label: any) => {\n if (String(label) === String(currentYear)) return `${label} (YTD)`\n return label\n }\n\n const RenderStackChart = ({\n chartDataIdx,\n keysList,\n }: {\n chartDataIdx: number\n keysList: any\n }) => {\n return (\n \n \n \n 0 ? '000 ' : ''}${WEIGHT_LABELS[unit]}`,\n angle: -90,\n position: 'insideLeft',\n }}\n axisLine={false}\n tickLine={false}\n tick={false}\n >\n \n {/* */}\n {keysList.map((obj: any) => (\n \n \n }\n />\n \n ))}\n \n \n )\n }\n\n return (\n
\n \n {country && supplier ? (\n \n Supplier {supplier}'s customer profile in {country}\n \n ) : null}\n\n \n \n Download\n \n
\n\n
\n
\n \n {`${maxQuantity > 0 ? '000 ' : ''}${WEIGHT_LABELS[unit]}`}\n

\n
\n\n {stackKeysList.map((keysList: any, index: number) => {\n return (\n \n )\n })}\n
\n\n \n \n )\n}\n","import { Select, Skeleton } from 'antd'\nimport { getAllSuppliers } from 'api/search'\nimport React, { useState, useEffect } from 'react'\nimport { useQuery } from 'react-query'\nimport { useSearchItemDescription } from 'pages/Review/Review.hooks'\nimport { SelectSupplierLabel } from '../CustomerProfileForClientChart/constant'\n\nexport default function SupplierSelectionDropdown({\n supplier = '',\n country,\n onChange = (c: any) => {},\n}: any) {\n const { searchItemId, searchId } = useSearchItemDescription()\n\n const { data, isLoading }: any = useQuery({\n queryKey: ['get-all-suppliers', { searchItemId, searchId, country }],\n queryFn: () => getAllSuppliers(searchId, searchItemId, country),\n config: {\n suspense: true,\n staleTime: Infinity,\n },\n })\n\n const allSuppliesrs = data.map((val: any) => {\n return { value: val.id, key: val.id, label: val.companyName }\n })\n // const [supplier, setSupplier] = useState(allSuppliesrs[0] || initalSupplier)\n\n console.log('all suppliers ', data)\n\n const handleChange = (e: any) => {\n console.log('Supplier Chagned ', e)\n setTimeout(() => {\n // to avoid the freezing of dropdown set state after dropdown close animation finishes\n // setSupplier(e)\n onChange(e)\n }, 300)\n }\n\n useEffect(() => {\n if (supplier.value === SelectSupplierLabel && allSuppliesrs.length > 0) {\n onChange(allSuppliesrs[0])\n }\n }, [data])\n\n return isLoading ? (\n \n ) : (\n \n )\n}\n","export const SelectSupplierLabel = 'Select'\n","import { Skeleton, Space, Typography } from 'antd'\nimport { getSuppliersCustomerProfileData } from 'api/search'\nimport React, { useState } from 'react'\nimport { useQuery } from 'react-query'\nimport CountrySelectionDropdown from '../shared/CountrySelectionDropdown'\nimport CustomerProfileForClientStackedChart from './CustomerProfileForClientStackedChart'\nimport { useSearchItemDescription } from 'pages/Review/Review.hooks'\nimport SupplierSelectionDropdown from '../shared/SupplierSelectionDropdown'\nimport { SelectSupplierLabel } from './constant'\n\nconst initialSelectedSupplier = {\n value: SelectSupplierLabel,\n key: null,\n label: SelectSupplierLabel,\n}\nexport default function CountriesExportingToIndia() {\n const { searchItemId, searchId } = useSearchItemDescription()\n const [country, setCountry] = useState(null)\n\n const [supplier, setSupplier] = useState(initialSelectedSupplier)\n\n const {\n data: supplierGraphData,\n isLoading: isSupplierGraphLoading,\n }: any = useQuery({\n queryKey: [\n 'suppliers-customer-profile-chart-data',\n { searchId, searchItemId, supplier, country },\n ],\n queryFn: () =>\n getSuppliersCustomerProfileData(\n searchId,\n searchItemId,\n supplier?.key || null,\n country\n ),\n config: {\n suspense: true,\n staleTime: Infinity,\n enabled: supplier.value === SelectSupplierLabel ? false : true,\n },\n })\n\n const onCountryChange = (country: any) => {\n setSupplier(initialSelectedSupplier)\n setCountry(country)\n }\n\n const onSupplierChage = (value: any) => {\n setSupplier(value)\n }\n\n return (\n
\n \n Importer Country\n \n {country ? (\n <>\n Supplier\n {' '}\n \n ) : null}\n \n\n {isSupplierGraphLoading && country != null ? (\n \n ) : (\n
\n {supplier && supplierGraphData && supplierGraphData.length > 0 ? (\n \n ) : (\n \n No Data\n \n )}\n
\n )}\n
\n )\n}\n","export const SelectClientLable = 'Select'\n","import React, { useRef, useState, useEffect } from 'react'\nimport { Button, Tag, Typography, Spin } from 'antd'\nimport { DownloadOutlined } from '@ant-design/icons'\nimport {\n ComposedChart,\n Scatter,\n XAxis,\n YAxis,\n Tooltip,\n ResponsiveContainer,\n Legend,\n} from 'recharts'\nimport { saveAs } from 'file-saver'\nimport { toPng } from 'html-to-image'\n\nimport { MCK_CAHRT_COLORS } from '../../../../constants/ChartColors'\nimport {\n getPremiumToL1,\n getRankFromDotGraph,\n getPremiumToAverage,\n roundOff,\n} from 'utils/helperFunctions'\nimport { useSearchItemDescription } from 'pages/Review/Review.hooks'\nimport { WEIGHT_LABELS } from '../../../../constants'\nimport { SelectClientLable } from './constant'\nimport './style.css'\n\nexport default function Chart({\n country,\n chartData,\n selectedClient,\n allSuppliers = [],\n}: any) {\n const tempSuppliers: { key: any; color: string }[] = []\n const { unit, currencyCode } = useSearchItemDescription()\n const ref = useRef(null)\n\n const tooltip: any = useRef(null)\n const tooltipContent: any = useRef(null)\n const [showLoader, setShowLoader] = useState(false)\n\n useEffect(() => {\n // just to re render the UI to make the element align properly\n setShowLoader(true)\n // alert(\"hi\")\n setTimeout(() => {\n setShowLoader(false)\n }, 1000)\n }, [])\n\n for (let supplier of allSuppliers) {\n const colorObj = MCK_CAHRT_COLORS[0]\n tempSuppliers.push({\n key: supplier,\n color: selectedClient === supplier ? '#FFA500' : colorObj.fill,\n })\n }\n\n const pointsData =\n selectedClient && selectedClient !== SelectClientLable\n ? chartData.map((val: any) => {\n const { rank, rankOutOf } = getRankFromDotGraph(\n chartData,\n selectedClient,\n val.month,\n allSuppliers\n )\n\n return {\n month: val.month,\n premiumToL1: getPremiumToL1(\n chartData,\n selectedClient,\n val.month,\n allSuppliers\n ),\n premiumToAvg: getPremiumToAverage(\n chartData,\n selectedClient,\n val.month,\n allSuppliers\n ),\n rank,\n rankOutOf,\n }\n })\n : []\n\n const handleDownloadTwo = () => {\n const filter = (node: any) => {\n if (node.tagName) {\n const exclusionClasses = ['dont-download']\n return !exclusionClasses.some((classname) =>\n node.classList.contains(classname)\n )\n }\n return true\n }\n\n toPng(ref.current, { filter })\n .then((dataUrl) => {\n // console.log(dataUrl)\n // saveAs(dataUrl, `${Date.now()}.png`)\n\n try {\n let fileName = `importer-price-${\n selectedClient !== SelectClientLable\n ? selectedClient.split(' ').join('-')\n : ''\n }-${country.split(' ').join('-')}.png`\n saveAs(dataUrl, fileName)\n } catch (e) {\n console.error('Exception ', e)\n saveAs(dataUrl, `${Date.now()}.png`)\n }\n })\n .catch(function (error) {\n console.error('oops, something went wrong!', error)\n })\n }\n\n const onMouseOver = (e: any) => {\n const [monthData, priceData] = e.tooltipPayload\n\n const tempArr: { name: string; price: number }[] = []\n for (let obj of chartData) {\n if (obj[monthData.name] === monthData.value) {\n // matching object found\n const allClientNames = Object.keys(obj).filter(\n (key) => !['monthlyAveragePrice', 'month'].includes(key)\n )\n for (let client of allClientNames) {\n if (obj[client] === priceData.value) {\n tempArr.push({ name: client, price: priceData.value })\n }\n }\n }\n }\n\n const htmlString =\n `
${monthData.value}
` +\n tempArr\n .map(\n (val) =>\n `
\n
${val.name}:
\n
${roundOff(val.price)}
\n
`\n )\n .join(' ')\n\n tooltipContent.current.innerHTML = htmlString\n\n const { clientWidth, clientHeight } = tooltip.current\n let x = Math.round(e.tooltipPosition.x)\n let y = Math.round(e.tooltipPosition.y)\n\n tooltip.current.style.opacity = '1'\n tooltip.current.style.transform = `translate(${x}px, ${y}px)`\n }\n\n const onMouseLeave = (e: any) => {\n tooltip.current.style.opacity = '0'\n }\n\n const renderLegend = (props: any) => {\n const { payload } = props\n\n return (\n
\n {payload\n .filter(\n (entry: any) =>\n entry.value === selectedClient &&\n entry.value !== SelectClientLable\n )\n .map((entry: any, index: any) => (\n \n
\n \n {entry.value}\n \n \n ))}\n \n )\n }\n\n // to bring the orange dot in front of all dots\n const indexOfSelectedClient = tempSuppliers.findIndex((x) => {\n return x.key === selectedClient\n })\n if (indexOfSelectedClient > -1) {\n tempSuppliers.push(tempSuppliers.splice(indexOfSelectedClient, 1)[0])\n }\n\n return (\n
\n \n {country ? (\n \n Price points for different importers(buyer) in {country}\n \n ) : null}\n \n \n Download\n \n
\n\n
\n {showLoader ? (\n \n \n
\n ) : null}\n\n \n \n \n\n \n\n \n\n \n\n {tempSuppliers.map((val) => (\n \n ))}\n \n \n \n\n
\n
\n
\n\n {selectedClient && selectedClient !== SelectClientLable ? (\n \n \n \n {pointsData.map((val: any) => (\n \n ))}\n \n\n \n \n {pointsData.map((val: any) => (\n \n ))}\n \n\n \n \n {pointsData.map((val: any) => (\n \n ))}\n \n\n \n \n {pointsData.map((val: any) => (\n \n ))}\n \n
{val.month}
Premium to L1\n \n {[NaN, -Infinity, Infinity, undefined, null].includes(\n val.premiumToL1\n )\n ? 'NA'\n : `${val.premiumToL1} %`}\n \n
Premium to avg\n \n {[NaN, -Infinity, Infinity, undefined, null].includes(\n val.premiumToAvg\n )\n ? 'NA'\n : `${val.premiumToAvg} %`}\n \n
Rank\n \n {val.rank ? `${val.rank}/${val.rankOutOf}` : 'NA'}\n \n
\n ) : null}\n \n )\n}\n","import { Skeleton, Space, Select, Typography } from 'antd'\nimport { getImporterPricePoints } from 'api/search'\nimport React, { useEffect, useState } from 'react'\nimport { useQuery } from 'react-query'\nimport ImporterPriceDotGraph from './ImporterPriceDotGraph'\nimport { useSearchItemDescription } from 'pages/Review/Review.hooks'\nimport CountrySelectionDropdown from '../shared/CountrySelectionDropdown'\n// import { DummyImporterPriceDataNew } from './DummyImporterPriceData'\nimport { WEIGHT_SYMBOLS } from '../../../../constants'\nimport { convertPricePerUnitOfWeight } from 'utils/helperFunctions'\nimport { SelectClientLable } from './constant'\n\n// const dataNew = DummyImporterPriceDataNew\nconst { Option } = Select\n\nexport default function CountriesExportingToIndia() {\n const { searchItemId, searchId, unit } = useSearchItemDescription()\n const [country, setCountry] = useState(null)\n\n const {\n data: importerPricePointsData,\n isLoading,\n loading,\n error,\n }: any = useQuery({\n queryKey: ['importer-price-points', { searchId, searchItemId, country }],\n queryFn: () => getImporterPricePoints(searchId, searchItemId, country),\n config: {\n suspense: true,\n staleTime: Infinity,\n },\n })\n\n const [clients, setClients] = useState([\n SelectClientLable,\n ...importerPricePointsData.importerList,\n ])\n const [client, setClient] = useState(\n clients.length > 0 ? clients[0] : undefined\n )\n\n useEffect(() => {\n if (!error && !loading) {\n setClients([SelectClientLable, ...importerPricePointsData.importerList])\n setClient(clients.length > 0 ? clients[0] : undefined)\n }\n }, [importerPricePointsData, error, loading])\n\n const onCountryChange = (country: any) => {\n setCountry(country)\n }\n\n const onClientChange = (client: any) => {\n setClient(client)\n }\n\n const chartDataNew: any[] = []\n let doesDataExists: boolean = false\n for (let val of importerPricePointsData.data) {\n const tempObj: any = { month: val.month }\n if (val.pricePoints.length > 0) doesDataExists = true\n for (let pricePoint of val.pricePoints) {\n tempObj[pricePoint.importerName] = convertPricePerUnitOfWeight(\n pricePoint.value,\n WEIGHT_SYMBOLS.KGS,\n unit\n )\n }\n tempObj['monthlyAveragePrice'] = convertPricePerUnitOfWeight(\n val.monthlyAveragePrice,\n WEIGHT_SYMBOLS.KGS,\n unit\n )\n chartDataNew.push(tempObj)\n }\n\n console.log(' data ', importerPricePointsData)\n\n return (\n
\n \n Importer Country\n \n\n Importer\n \n \n\n {isLoading && !country && !client ? (\n \n ) : (\n
\n {doesDataExists ? (\n \n ) : (\n \n No Data\n \n )}\n
\n )}\n
\n )\n}\n","export const DiffToLowestLabel = 'Difference to lowest'\nexport const LowestPriceLabel = 'Lowest price'\nexport const SelectSupplierLabel = 'Select'\nexport const CustomerNameColumnName = 'Customer Name'\n","import { Space, Table, Tag, Typography } from 'antd'\nimport React, { useEffect, useRef, useState } from 'react'\nimport { roundOff } from 'utils/helperFunctions'\nimport {\n CustomerNameColumnName,\n DiffToLowestLabel,\n LowestPriceLabel,\n} from './constants'\n\nimport './table.css'\n\nexport default function CustomerPricePointsTable({\n customer,\n chartData,\n supplier,\n}: any) {\n const tableWrapperRef = useRef(null)\n const [tableWidth, settableWidth] = useState(0)\n\n useEffect(() => {\n settableWidth(tableWrapperRef.current.getBoundingClientRect().width)\n }, [])\n\n const newArr = chartData.map((val: any) => {\n const tmepObj: any = { [CustomerNameColumnName]: val.customer }\n for (let monthObj of val.pricePoints) {\n tmepObj[monthObj.month] = monthObj.price\n }\n return tmepObj\n })\n\n const monthNamesWithCustomerKey = Object.keys(newArr[0]) //.filter((key:string) => key !== \"customer\");\n\n // for calculating lowest\n const lowestPriceObj: any = {\n [CustomerNameColumnName]: LowestPriceLabel,\n }\n const onlyMonthNames = monthNamesWithCustomerKey.filter(\n (key: string) => key !== CustomerNameColumnName\n )\n\n for (let month of onlyMonthNames) {\n let tempArr: any = []\n for (let custObj of chartData) {\n const tempDataObj = custObj.pricePoints.find(\n (val: any) => val.month === month\n )\n if (tempDataObj) tempArr.push(tempDataObj.price)\n }\n const filteredArr = tempArr.filter(\n (val: any) => ![null, undefined].includes(val)\n )\n const minValue = Math.min.apply(Math, filteredArr)\n lowestPriceObj[month] = filteredArr.includes(minValue) ? minValue : null\n\n // const minValue = Math.min.apply(Math, tempArr);\n // lowestPriceObj[month] = minValue;\n }\n newArr.push(lowestPriceObj)\n\n // for calculating difference\n const selectedCustomer = customer\n\n if (selectedCustomer) {\n const diffToLowsestObj: any = {\n [CustomerNameColumnName]: DiffToLowestLabel,\n }\n\n const selectedCustomerObj = newArr.find(\n (val: any) => val[CustomerNameColumnName] === customer\n )\n\n if (selectedCustomerObj) {\n for (let month of onlyMonthNames) {\n if (lowestPriceObj[month] && selectedCustomerObj[month]) {\n const diff = Math.abs(\n lowestPriceObj[month] - selectedCustomerObj[month]\n )\n const total = (lowestPriceObj[month] + selectedCustomerObj[month]) / 2\n const percent = roundOff((diff / total) * 100)\n diffToLowsestObj[month] = `${percent === 0 ? '0.0' : percent}%`\n } else {\n diffToLowsestObj[month] = null\n }\n }\n newArr.push(diffToLowsestObj)\n }\n }\n\n const columns = monthNamesWithCustomerKey.map((monthNameOrKey) => ({\n title: monthNameOrKey,\n dataIndex: monthNameOrKey,\n key: monthNameOrKey,\n className: onlyMonthNames.includes(monthNameOrKey) ? 'month-col' : '',\n render: (value: any) => {\n if (\n onlyMonthNames.includes(monthNameOrKey) &&\n lowestPriceObj[monthNameOrKey] === value &&\n ![null, undefined].includes(value)\n ) {\n return {value === 0 ? '0.0' : value}\n }\n return value === 0 ? '0.0' : value\n },\n }))\n\n const addRowClassName = (record: any, index: number) => {\n console.log('AddRowClassName ', record, selectedCustomer)\n if (record[CustomerNameColumnName] === selectedCustomer) {\n return 'selected-row'\n } else if (record[CustomerNameColumnName] === DiffToLowestLabel) {\n return 'green-row'\n }\n return ''\n }\n\n return (\n
\n \n * Box indicates lowest price\n \n \n
\n )\n}\n","import { WEIGHT_LABELS } from '../../../../constants'\nimport { MCK_CAHRT_COLORS } from 'constants/ChartColors'\nimport { useSearchItemDescription } from 'pages/Review/Review.hooks'\nimport React from 'react'\nimport {\n LineChart,\n Line,\n XAxis,\n YAxis,\n Tooltip,\n ResponsiveContainer,\n} from 'recharts'\nimport ChartLegends from '../shared/ChartLegends'\n\nexport default function CustomerPricePointLineChart({\n chartRawData,\n customer,\n}: any) {\n const { currencyCode, unit } = useSearchItemDescription()\n const firstObj = chartRawData[0]\n const monthNames = firstObj.pricePoints.map((val: any) => val.month)\n\n const chartData: any[] = []\n const clientNames = new Set()\n for (let month of monthNames) {\n const tempObj: any = {\n month,\n }\n for (const dataObj of chartRawData) {\n for (let pricePoint of dataObj.pricePoints) {\n if (pricePoint.month === month) {\n const customerName: string = dataObj.customer\n tempObj[customerName] = pricePoint.price || 0\n clientNames.add(customerName)\n }\n }\n }\n chartData.push(tempObj)\n }\n\n // const suppliersNames = Object.keys(data[0]).filter((key) => key !== 'month')\n // console.log('suppliers ', suppliersNames)\n\n const suppliers: { key: string; fill: string; color: string }[] = []\n const clientNamesArr: any[] = [...clientNames]\n for (let i = 0; i < clientNamesArr.length; i++) {\n const totalLen = MCK_CAHRT_COLORS.length - 1\n const index = i % totalLen\n const colorObj = MCK_CAHRT_COLORS[index]\n\n suppliers.push({\n key: clientNamesArr[i],\n fill: colorObj.fill,\n color: colorObj.color,\n })\n }\n\n return (\n <>\n \n \n \n \n\n \n {/* */}\n {suppliers.map((val) => (\n \n ))}\n \n \n \n \n )\n}\n","import { Skeleton, Space, Typography, Button, Select } from 'antd'\nimport { getCustomerPricePointsData } from 'api/search'\nimport React, { useState, useRef, useEffect } from 'react'\nimport { useQuery } from 'react-query'\nimport CountrySelectionDropdown from '../shared/CountrySelectionDropdown'\nimport CustomerPricePointsTable from './CustomerPricePointsTable'\nimport CustomerPricePointLineChart from './CustomerPriceLineChart'\nimport SupplierSelectionDropdown from '../shared/SupplierSelectionDropdown'\nimport { DownloadOutlined } from '@ant-design/icons'\nimport { cloneDeep } from 'lodash'\nimport { toPng } from 'html-to-image'\nimport { saveAs } from 'file-saver'\n\nimport { useSearchItemDescription } from 'pages/Review/Review.hooks'\nimport { convertPricePerUnitOfWeight, roundOff } from 'utils/helperFunctions'\nimport { WEIGHT_LABELS, WEIGHT_SYMBOLS } from '../../../../constants'\nimport { SelectSupplierLabel } from './constants'\n\nconst initialSelectedSupplier = {\n value: SelectSupplierLabel,\n key: null,\n label: SelectSupplierLabel,\n}\nconst { Option } = Select\n\nexport default function CustomerPricePointForSupplierLine() {\n const {\n searchItemId,\n searchId,\n unit,\n currencyCode,\n } = useSearchItemDescription()\n const [country, setCountry] = useState(null)\n const [supplier, setSupplier] = useState(initialSelectedSupplier)\n const [customer, setCustomer] = useState(SelectSupplierLabel)\n const ref = useRef(null)\n\n const {\n data: supplierGraphData,\n isLoading: isSupplierGraphLoading,\n }: any = useQuery({\n queryKey: [\n 'supplier-points-graph',\n { searchId, searchItemId, supplier, country },\n ],\n queryFn: () =>\n getCustomerPricePointsData(searchId, searchItemId, supplier.key, country),\n config: {\n suspense: true,\n staleTime: Infinity,\n enabled: supplier.key ? true : false,\n },\n })\n\n const onCountryChange = (country: any) => {\n console.log('onCountryChange ', country)\n setSupplier(initialSelectedSupplier)\n setCustomer(SelectSupplierLabel)\n setCountry(country)\n }\n\n const onSupplierChange = (data: any) => {\n console.log('onSupplierChange ', data)\n setCustomer(SelectSupplierLabel)\n setSupplier(data)\n }\n\n // convert the units\n const clonedDataArray = cloneDeep(\n supplierGraphData ? supplierGraphData.data : []\n )\n for (let dataObj of clonedDataArray) {\n for (let pricePoint of dataObj.pricePoints) {\n if (pricePoint.price) {\n pricePoint.price = roundOff(\n convertPricePerUnitOfWeight(\n pricePoint.price,\n WEIGHT_SYMBOLS.KGS,\n WEIGHT_SYMBOLS[unit]\n ) || 0\n )\n }\n }\n }\n\n const allCustomers = [\n SelectSupplierLabel,\n ...(supplierGraphData ? supplierGraphData.data : []).map(\n (val: any) => val.customer\n ),\n ]\n\n const handleDownload = () => {\n const filter = (node: any) => {\n if (node.tagName) {\n const exclusionClasses = ['dont-download']\n return !exclusionClasses.some((classname) =>\n node.classList.contains(classname)\n )\n }\n return true\n }\n\n toPng(ref.current, { filter })\n .then((dataUrl) => {\n // console.log(dataUrl)\n try {\n saveAs(\n dataUrl,\n `customer-price-points-for-${supplier.label}-${\n country ? country.split(' ').join('-') : ''\n }.png`\n )\n } catch (e) {\n saveAs(dataUrl, `${Date.now()}.png`)\n }\n })\n .catch(function (error) {\n console.error('oops, something went wrong!', error)\n })\n }\n\n useEffect(() => {\n return () => {\n setSupplier(initialSelectedSupplier)\n setCountry(null)\n setCustomer(SelectSupplierLabel)\n }\n }, [])\n\n return (\n
\n \n Importer Country\n \n\n {country ? (\n <>\n Supplier\n \n \n ) : null}\n\n {allCustomers.length > 0 ? (\n <>\n Customer\n {\n setCustomer(e)\n }}\n >\n {allCustomers.map((val: string) => (\n \n ))}\n \n \n ) : null}\n \n\n {isSupplierGraphLoading && country != null ? (\n \n ) : (\n
\n {supplierGraphData && supplier ? (\n <>\n {clonedDataArray.length > 0 ? (\n <>\n \n {country && supplier ? (\n \n Supplier {supplier.label}'s pricing trend in {country}\n \n ) : null}\n\n \n \n Download\n \n
\n\n \n {country && supplier ? (\n \n Comparison of prices in {currencyCode} per{' '}\n {WEIGHT_LABELS[unit]}\n \n ) : null}\n
\n\n \n\n \n \n ) : (\n \n No Data\n \n )}\n \n ) : null}\n \n )}\n \n )\n}\n","import React, { useState } from 'react'\nimport {\n Layout,\n PageHeader,\n Descriptions,\n Tabs,\n Button,\n Row,\n Col,\n Space,\n} from 'antd'\nimport { PercentageOutlined, LineChartOutlined } from '@ant-design/icons'\nimport Header from 'components/Header/Header'\nimport { useHistory } from 'react-router-dom'\nimport './Review.less'\nimport SmartChemVendorsTable from './components/SmartChemVendorsTable/SmartChemVendorsTable'\nimport { ErrorBoundryAndSuspenseFallback } from 'components/Fallback/Fallback'\nimport SuggestedVendorsTable from './components/SuggestedVendorsTable/SuggestedVendorsTable'\nimport TotalIdentifiedVendorsTable from './components/TotalIdentifiedVendorsTable/TotalIdentifiedVendorsTable'\nimport { materialDescription } from 'utils'\nimport { BuyersTable } from './components/BuyersTable/BuyersTable'\nimport Modal from 'antd/lib/modal/Modal'\nimport PriceTrendLineChart from './components/PriceTrendLineChart/PriceTrendLineChart'\nimport {\n QuantityRangeStatistic,\n CurrencyStatistic,\n QuantityStatistic,\n DateRangeStatistic,\n TextualStatictic,\n} from 'components/Scalars/Scalars'\nimport {\n CurrencyCode,\n DATE_FORMAT,\n WeightCode,\n WEIGHT_LABELS,\n WEIGHT_SYMBOLS,\n} from '../../constants'\nimport { InfoTooltip } from 'components/Layout/Layout'\nimport { useSearchItemDescription, useSearchItemResults } from './Review.hooks'\nimport { Material } from 'api/utils'\nimport CountriesExportingToIndia from './components/CountriesExportingToIndia'\nimport CustomerProfileForClientChart from './components/CustomerProfileForClientChart'\nimport ImporterPricePoints from './components/ImporterPricePoints'\nimport CustomerPricePointForSupplierLine from './components/CustomerPricePointForSupplierLine'\n\nimport {\n convertPricePerUnitOfWeight,\n convertWeight,\n} from 'utils/helperFunctions'\n\nconst { TabPane } = Tabs\n\nfunction SearchItemDesciption() {\n const {\n type,\n grade,\n hsCode,\n currentPricingPerUnit,\n totalAnnualizedVolume,\n unit,\n percentile,\n fromDate,\n toDate,\n } = useSearchItemDescription()\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n PERCENTILE\n \n \n }\n value={percentile}\n />\n \n \n \n DATE RANGE\n \n \n }\n formatString={DATE_FORMAT.yyyyMM}\n ISODateStringRange={{\n fromDate,\n toDate,\n }}\n />\n \n \n )\n}\n\nexport type ReviewPageLocationState = {\n searchId: number\n searchItemId: number\n molecule: Material\n fromDate: string\n toDate: string\n grade: Array\n totalAnnualizedVolume: number | null\n currentPricingPerUnit: number | null\n type: string | null\n unit: WeightCode\n hsCode: number | null\n currencyCode: CurrencyCode\n percentile: number\n}\n\nfunction SuggestedVendorsAndEstimatedSavingsBlock() {\n const {\n estimatedSavingsHigh,\n estimatedSavingsLow,\n unit,\n } = useSearchItemResults()\n console.log('[SEARCH RES] unit ', unit)\n return (\n \n \n \n \n \n }\n />\n \n \n )\n}\n\nexport default function Review() {\n const history = useHistory()\n\n const {\n molecule,\n hsCode,\n grade,\n searchItemId,\n unit,\n } = useSearchItemDescription()\n\n const [showChartModal, setShowChartModal] = useState(false)\n const [showSupplierCountriesModal, setShowSupplierCountriesModal] = useState(\n false\n )\n const [showImporterPriceModal, setImporterPriceModal] = useState(false)\n const [showSupplierProfileModal, setShowSupplierProfileModal] = useState(\n false\n )\n const [showSupplierPointsModal, setShowSupplierPointsModal] = useState(false)\n\n return (\n \n
\n \n \n \n \n \n \n \n \n setShowSupplierCountriesModal(true)}\n // icon={}\n >\n Target geography\n \n setImporterPriceModal(true)}\n // icon={}\n >\n Price benchmarks by buyer\n \n setShowSupplierProfileModal(true)}\n // icon={}\n >\n Supplier profile\n \n setShowSupplierPointsModal(true)}\n // icon={}\n >\n Price benchmarks by supplier\n \n\n setShowChartModal(true)}\n icon={}\n >\n Price Trend Analysis\n \n \n }\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setShowChartModal(false)}\n footer={null}\n width={'70%'}\n >\n \n \n \n \n\n setShowSupplierCountriesModal(false)}\n footer={null}\n width={'70%'}\n >\n \n \n \n \n\n setImporterPriceModal(false)}\n footer={null}\n width={'85%'}\n >\n \n \n \n \n\n setShowSupplierProfileModal(false)}\n footer={null}\n width={'70%'}\n >\n \n \n \n \n\n setShowSupplierPointsModal(false)}\n footer={null}\n width={'85%'}\n >\n \n \n \n \n \n )\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport {\n Layout,\n Card,\n Button,\n List,\n Row,\n Space,\n Typography,\n message,\n Skeleton,\n Popconfirm,\n Modal,\n Input,\n AutoComplete,\n Tooltip,\n Tag,\n Col,\n} from 'antd'\nimport {\n PercentageOutlined,\n ArrowRightOutlined,\n PlusCircleOutlined,\n DeleteTwoTone,\n SyncOutlined,\n CheckOutlined,\n} from '@ant-design/icons'\nimport Header from 'components/Header/Header'\nimport { useHistory } from 'react-router-dom'\nimport { useMutation, useQuery, useQueryCache, QueryResult } from 'react-query'\nimport {\n createNewSearchEntry,\n getSearchHistoryDetails,\n deleteSearch,\n SearcheHistoryDetailsAPIData,\n} from 'api/search'\nimport qs from 'qs'\nimport './Home.less'\nimport { ErrorBoundryAndSuspenseFallback } from 'components/Fallback/Fallback'\nimport { SearchPageLocationState } from 'pages/Search/Search.state'\nimport { SearchDatabaseSummary } from 'components/SearchDatabaseSummary/SearchDatabaseSummary'\nimport { pagePaths, TRIAL_USER_MAX_SEARCH_COUNT } from '../../constants'\nimport {\n QuantityRangeStatistic,\n QuantityStatistic,\n} from 'components/Scalars/Scalars'\nimport create from 'zustand'\nimport produce from 'immer'\nimport { useAppWideStore } from 'App.state'\nimport { AxiosApiError } from 'api/utils'\nimport { showApiErrorMessagePopup } from 'utils'\nimport { LargeVerticalSpacer, HideForTrialUser } from 'components/Layout/Layout'\nimport { SEARCH_HISTORY_QUERY_KEY } from 'utils/reactQuery'\n\nfunction useSearcheHistoryDetailsList() {\n const { data, isFetching } = useQuery({\n queryKey: SEARCH_HISTORY_QUERY_KEY,\n queryFn: getSearchHistoryDetails,\n config: {\n suspense: true,\n refetchOnMount: 'always',\n },\n }) as QueryResult & {\n data: SearcheHistoryDetailsAPIData\n }\n const allSearchTagOptions = useMemo(\n () => data.map(({ name }) => ({ value: name })),\n [data]\n )\n\n return {\n allSearchTagOptions,\n data,\n isFetching,\n }\n}\n\ntype Suggestions = Array<{ value: string }>\n\ntype TagSearchInputState = {\n suggestions: Suggestions\n set: (fn: (arg0: TagSearchInputState) => void) => void\n}\n\nconst [useTagSearchInputStore] = create((set) => ({\n set: (fn) => set(produce(fn)),\n suggestions: [],\n}))\n\nconst newSearchTileData = {\n id: NaN,\n averagePercentageSavingsHigh: NaN,\n averagePercentageSavingsLow: NaN,\n noOfMoleculesExplored: NaN,\n noOfSelectedVendors: NaN,\n name: '',\n}\n\nfunction filterBySuggestions({\n suggestions,\n data,\n}: {\n suggestions: Suggestions\n data: SearcheHistoryDetailsAPIData\n}) {\n if (suggestions.length === 0) {\n return data\n }\n return data.filter(({ name }) =>\n Boolean(suggestions.find(({ value }) => value === name))\n )\n}\n\nfunction SearchHistoryDetailsTiles() {\n const { data } = useSearcheHistoryDetailsList()\n\n const suggestions = useTagSearchInputStore((state) => state.suggestions)\n\n const filtered = filterBySuggestions({ suggestions, data })\n\n const dataSource = [newSearchTileData, ...filtered]\n\n return (\n {\n const { id: searchId } = seachDetailsItem\n\n if (isNaN(searchId)) {\n return (\n \n \n \n )\n }\n\n return (\n \n \n \n )\n }}\n />\n )\n}\n\nfunction caseInsensitiveFilter(tagToSearch: string, tagOptionValue: string) {\n return tagOptionValue.toUpperCase().indexOf(tagToSearch.toUpperCase()) !== -1\n}\n\nfunction TagSearchInput() {\n const { allSearchTagOptions } = useSearcheHistoryDetailsList()\n\n const [suggestions, set] = useTagSearchInputStore((state) => [\n state.suggestions,\n state.set,\n ])\n\n function onChange(tagToSearch: string) {\n const suggestions = allSearchTagOptions.filter(({ value }) => {\n return caseInsensitiveFilter(tagToSearch, value)\n })\n set((state) => void (state.suggestions = suggestions))\n }\n\n return \n}\n\nfunction AutocompleteSearchInputBox({\n disabled = false,\n suggestions,\n onChange,\n}: {\n disabled?: boolean\n suggestions?: Suggestions\n onChange?: (tagToSearch: string) => void\n}) {\n return (\n \n )\n}\n\nfunction BackgroundRefreshIndicator() {\n const { isFetching } = useSearcheHistoryDetailsList()\n\n if (isFetching) {\n return (\n }\n style={{ border: 'none' }}\n color=\"processing\"\n >\n refreshing...\n \n )\n }\n return null\n}\n\nexport default function Home() {\n return (\n \n
\n \n \n \n \n \n }\n errorFallbackRender={() => (\n \n )}\n >\n \n \n null}\n >\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction DeleteSearchButton({\n searchId,\n name,\n}: {\n name: string\n searchId: number\n}) {\n const queryCache = useQueryCache()\n\n const [deleteSearchEntry, { isLoading }] = useMutation(deleteSearch, {\n onSuccess: ({ id: deletedSearchId }) => {\n queryCache.setQueryData(\n SEARCH_HISTORY_QUERY_KEY,\n (previousData: SearcheHistoryDetailsAPIData | undefined) => {\n return (\n previousData?.filter(({ id }) => {\n return deletedSearchId !== id\n }) ?? []\n )\n }\n )\n message.success('Search entry deleted.')\n },\n })\n\n useEffect(\n function displayMutationProgressMessage() {\n if (isLoading) {\n message.loading(`Deleting the search \"${name}\"...`)\n }\n },\n [isLoading, name]\n )\n\n return (\n deleteSearchEntry({ searchId })}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n \n \n )\n}\n\nfunction SavedSearchCard({\n averagePercentageSavingsHigh,\n averagePercentageSavingsLow,\n noOfMoleculesExplored,\n noOfSelectedVendors,\n id: searchId,\n name,\n}: SearcheHistoryDetailsAPIData[number]) {\n const history = useHistory()\n\n function handleEditResultsOnClick() {\n const searchPageLocationState: SearchPageLocationState = {\n isSavedSearchJourney: true,\n searchId,\n }\n\n if (noOfMoleculesExplored === 0) {\n // Treat this is a new search journey\n searchPageLocationState.isSavedSearchJourney = false\n }\n\n const searchPageLocationStateStringified = qs.stringify(\n searchPageLocationState,\n {\n addQueryPrefix: true,\n }\n )\n\n history.push(\n `${pagePaths.search}${searchPageLocationStateStringified}`,\n searchPageLocationState\n )\n }\n\n return (\n \n \n \n {name}\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\nfunction NewSearchCard({ searchCountTillNow }: { searchCountTillNow: number }) {\n const history = useHistory()\n const queryCache = useQueryCache()\n const { isTrialUser } = useAppWideStore()\n\n const disableNewSearch =\n isTrialUser && searchCountTillNow >= TRIAL_USER_MAX_SEARCH_COUNT\n\n const [isTagInputModalVisible, setTagInputModalVisibility] = useState(false)\n\n const [tag, setTag] = useState('')\n\n const [createNewSearch, { isLoading }] = useMutation(createNewSearchEntry, {\n onSuccess: (data) => {\n message.success('This new search is tagged succesfully')\n queryCache.invalidateQueries(SEARCH_HISTORY_QUERY_KEY, {\n exact: true,\n refetchInactive: true,\n })\n const searchPageLocationState: SearchPageLocationState = {\n searchId: data.id,\n isSavedSearchJourney: false,\n }\n const searchPageLocationStateStrigified = qs.stringify(\n searchPageLocationState,\n {\n addQueryPrefix: true,\n }\n )\n history.push(\n `${pagePaths.search}${searchPageLocationStateStrigified}`,\n searchPageLocationState\n )\n },\n onError: (error: AxiosApiError) => {\n if (error.response?.status === 409) {\n message.error(\n 'A search with this name already exists. Please enter a different name'\n )\n } else {\n showApiErrorMessagePopup(error)\n }\n },\n })\n\n function handleNewSearchOnClick() {\n if (isTrialUser) {\n message.warning(\n `${TRIAL_USER_MAX_SEARCH_COUNT - searchCountTillNow} searches remaining`\n )\n }\n setTagInputModalVisibility(true)\n }\n\n function closeTagInputModal() {\n setTagInputModalVisibility(false)\n }\n\n function handleSearchTagEntrySubmission() {\n if (tag === '') {\n message.error('Tag name cannot be empty')\n return\n }\n createNewSearch({ tag })\n }\n\n function handleSearchTagInputOnChange(\n event: React.ChangeEvent\n ) {\n const tag = event.target.value\n setTag(tag)\n }\n\n return (\n \n \n \n {disableNewSearch ? (\n
\n \n Cannot create a new search anymore\n \n \n You have made {TRIAL_USER_MAX_SEARCH_COUNT} searches already\n \n
\n ) : (\n \n Create a new search\n \n )}\n \n \n \n \n
\n )\n}\n","import React, { useMemo } from 'react'\nimport {\n Layout,\n PageHeader,\n Descriptions,\n Space,\n Tabs,\n Select,\n Table,\n Typography,\n DatePicker,\n Skeleton,\n} from 'antd'\nimport Header from 'components/Header/Header'\nimport './VendorDetails.less'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport DescriptionsItem from 'antd/lib/descriptions/Item'\nimport { useQuery } from 'react-query'\nimport {\n fetchVendorInfo,\n VendorInfoAPIData,\n fetchVendorTransactions,\n VendorTransaction,\n VendorTransactionsAPIData,\n} from 'api/vendors'\nimport {\n ErrorBoundryAndSuspenseFallback,\n DefaultErrorFallback,\n} from 'components/Fallback/Fallback'\nimport { ColumnsType } from 'antd/lib/table'\nimport { parseISO, format } from 'date-fns'\nimport {\n getCalenderMonthOptions,\n formatUnit,\n filterCustomers,\n TableDefaultRowProps,\n} from 'utils'\nimport isAfter from 'date-fns/isAfter'\nimport isNumber from 'lodash/isNumber'\nimport moment, { Moment } from 'moment'\nimport { QuantityScalar, CurrencyScalar } from 'components/Scalars/Scalars'\nimport {\n CurrencyCode,\n DEFAULT_UNIT,\n TRIAL_USER_SEARCH_DATE_RANGE,\n DEFUALT_FOR_EMPTY_OR_NULL,\n WeightCode,\n WEIGHT_LABELS,\n WEIGHT_SYMBOLS,\n} from '../../constants'\nimport { PriceColumnHeader, VendorRowTooltip } from 'components/Layout/Layout'\nimport create from 'zustand'\nimport { Material } from 'api/utils'\nimport produce from 'immer'\nimport pick from 'lodash/pick'\nimport { useAppWideStore } from 'App.state'\nimport {\n convertPricePerUnitOfWeight,\n convertWeight,\n} from 'utils/helperFunctions'\nconst { TabPane } = Tabs\n\nexport type VendorDetailsPageLocationState = {\n searchId: number\n vendorId: number\n vendorName: string\n month: number\n year: number\n molecule: Material\n currencyCode: CurrencyCode\n unit: WeightCode\n}\n\nfunction VendorDescription() {\n const {\n companyName,\n country,\n email,\n telNo,\n website,\n molecules,\n accrediation,\n address,\n } = useVendorInfo()\n\n return (\n <>\n \n \n {companyName}\n \n {address ?? '-'}\n {country ?? '-'}\n \n {accrediation.length === 0 ? '-' : accrediation.join(', ')}\n \n {telNo ?? '-'}\n \n {website ? {website} : '-'}\n \n {email ?? '-'}\n \n \n {molecules.map(({ id, name }) => (\n {name}\n ))}\n \n \n )\n}\n\nfunction useVendorInfo() {\n const { vendorId } = useVendorDetailsDescription()\n const { data } = useQuery({\n queryKey: ['vendor-info', { vendorId }],\n queryFn: () => fetchVendorInfo({ vendorId }),\n config: {\n suspense: true,\n },\n })\n\n return data as VendorInfoAPIData\n}\n\ntype VendorTxnsQueryURLParams = {\n month: number | null // goes from 0 to 11 as native Date.getMonth() does\n year: number\n currencyCode: CurrencyCode\n}\n\ntype VendorTxnsParamsStore = {\n selectedMaterial: Material | null\n vendorTxnsQueryURLParams: VendorTxnsQueryURLParams | null\n set: (fn: (arg0: VendorTxnsParamsStore) => void) => void\n}\n\nconst [useVendorTxnsParamsStore, vendorTxnsParamsStoreAPI] = create<\n VendorTxnsParamsStore\n>((set, get) => ({\n selectedMaterial: null,\n vendorTxnsQueryURLParams: null,\n set: (fn) => set(produce(fn)),\n}))\n\nfunction useDefaultMaterial() {\n return useVendorDetailsDescription().molecule\n}\n\nfunction useDefaultVendorTxnsQueryURLParams() {\n return pick(\n useVendorDetailsDescription(),\n 'year',\n 'month',\n 'currencyCode'\n ) as VendorTxnsQueryURLParams & { month: number }\n}\n\nfunction useSelectedVendorTxnQueryURLParams() {\n return (\n useVendorTxnsParamsStore((state) => state.vendorTxnsQueryURLParams) ??\n useDefaultVendorTxnsQueryURLParams()\n )\n}\n\nfunction useSelectedMaterial() {\n return (\n useVendorTxnsParamsStore((state) => state.selectedMaterial) ??\n useDefaultMaterial()\n )\n}\n\nfunction useVendorTxns() {\n const { vendorId } = useVendorDetailsDescription()\n const selectedMaterial = useSelectedMaterial()\n const moleculeId = selectedMaterial.id\n const queryURLParams = useSelectedVendorTxnQueryURLParams()\n const { data } = useQuery({\n queryKey: [\n 'vendor-transactions',\n { vendorId, moleculeId, ...queryURLParams },\n ],\n queryFn: () =>\n fetchVendorTransactions({ vendorId, moleculeId, ...queryURLParams }),\n config: {\n suspense: true,\n },\n })\n\n return {\n vendorTxns: data as VendorTransactionsAPIData,\n ...queryURLParams,\n selectedMaterial,\n }\n}\n\nfunction useVendorDetailsDescription() {\n return useLocation().state\n}\n\nconst CALENDER_MONTH_OPTIONS = getCalenderMonthOptions()\n\n/**\n * @param month `0` to `11` or `null`\n */\nfunction getMonthName(month: number | null) {\n let monthName: string\n if (month === null) {\n monthName = 'All'\n } else {\n monthName = CALENDER_MONTH_OPTIONS[month].value\n }\n return monthName\n}\n\nconst MONTH_SELECTOR_OPTIONS = [\n { value: 'All', id: null },\n ...CALENDER_MONTH_OPTIONS,\n]\n\nfunction MonthSelector() {\n const defaultVendorTxnsQueryURLParams = useDefaultVendorTxnsQueryURLParams()\n\n function handleOnChange(\n value: string,\n optionData: { id: number; value: number }\n ) {\n vendorTxnsParamsStoreAPI.getState().set((state) => {\n const selectedMonthId = optionData.id\n if (state.vendorTxnsQueryURLParams === null) {\n state.vendorTxnsQueryURLParams = defaultVendorTxnsQueryURLParams\n }\n state.vendorTxnsQueryURLParams.month = selectedMonthId\n })\n }\n\n return (\n \n )\n}\n\nfunction YearSelector() {\n const defaultVendorTxnsQueryURLParams = useDefaultVendorTxnsQueryURLParams()\n const { isTrialUser } = useAppWideStore()\n\n function handleOnChange(dateMoment: Moment | null, year: string) {\n vendorTxnsParamsStoreAPI.getState().set((state) => {\n const selectedYear = Number(year)\n if (state.vendorTxnsQueryURLParams === null) {\n state.vendorTxnsQueryURLParams = defaultVendorTxnsQueryURLParams\n }\n state.vendorTxnsQueryURLParams.year = selectedYear\n })\n }\n\n function disabledDate(current: Moment) {\n if (isTrialUser) {\n const disableYearsBeforeTrailUserRange =\n current.year() < moment(TRIAL_USER_SEARCH_DATE_RANGE.fromDateISO).year()\n const disableYearsAfterTrialUserRange =\n current.year() > moment(TRIAL_USER_SEARCH_DATE_RANGE.toDateISO).year()\n return disableYearsBeforeTrailUserRange || disableYearsAfterTrialUserRange\n }\n const disableYearGreaterThanPresentYear =\n current.year() > new Date().getFullYear()\n return disableYearGreaterThanPresentYear\n }\n\n return (\n \n )\n}\n\nfunction MaterialSelector() {\n const vendorInfo = useVendorInfo()\n const defaultMaterial = useDefaultMaterial()\n const materialsFilterOptions = useMemo(\n () =>\n vendorInfo.molecules.map(({ id, name }) => ({\n value: name,\n id,\n })),\n [vendorInfo]\n )\n\n function handleOnChange(\n value: string,\n optionData: { id: number; value: string }\n ) {\n vendorTxnsParamsStoreAPI.getState().set((state) => {\n if (state.selectedMaterial === null) {\n state.selectedMaterial = defaultMaterial\n }\n state.selectedMaterial.id = optionData.id\n state.selectedMaterial.name = value\n })\n }\n\n return (\n \n )\n}\n\nfunction MaterialSelectorWrapper() {\n const selectedMaterial = useSelectedMaterial()\n return (\n {\n return (\n \n }\n />\n )\n }}\n suspenseFallback={\n }\n />\n }\n >\n \n \n )\n}\n\nexport default function VendorDetails() {\n const history = useHistory()\n\n const { vendorName } = useVendorDetailsDescription()\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\nconst dataIndex: { [prop in keyof VendorTransaction]: prop } = {\n id: 'id',\n accessValue: 'accessValue',\n beDate: 'beDate',\n importerCountry: 'importerCountry',\n importerName: 'importerName',\n quantity: 'quantity',\n supplierName: 'supplierName',\n unit: 'unit',\n unitPrice: 'unitPrice',\n grade: 'grade',\n txnType: 'txnType',\n hsCode: 'hsCode',\n productDescription: 'productDescription',\n}\n\nfunction VendorTransactionsTableWrapper() {\n const selectedMaterialId = useSelectedMaterial().id\n const queryURLParams = useSelectedVendorTxnQueryURLParams()\n return (\n \n \n \n )\n}\n\nfunction VendorTransactionsTable() {\n const { vendorTxns, selectedMaterial, year, month } = useVendorTxns()\n const title = `${getMonthName(month)} ${year}`\n const { unit } = useVendorDetailsDescription()\n\n const vendorTxnsTableColumns: ColumnsType = [\n {\n title: 'Sr. No',\n dataIndex: undefined,\n render: (_, __, rowIndex) => {\n return rowIndex + 1\n },\n width: '7%',\n },\n {\n title: 'Material',\n dataIndex: dataIndex.grade,\n render: (grade: VendorTransaction['grade']) =>\n `${selectedMaterial.name} (${grade})`,\n width: '14%',\n },\n {\n title: 'Buyer',\n dataIndex: dataIndex.importerName,\n width: '21%',\n render: (buyerName: VendorTransaction['importerName']) => {\n if (buyerName === null) {\n return DEFUALT_FOR_EMPTY_OR_NULL\n }\n const { filteredCustomers } = filterCustomers({\n customers: [buyerName],\n })\n\n if (filterCustomers.length === 0) {\n return DEFUALT_FOR_EMPTY_OR_NULL\n }\n\n return filteredCustomers[0]\n },\n },\n {\n title: 'Buyer location',\n dataIndex: dataIndex.importerCountry,\n width: '21%',\n render: (buyerLocation: VendorTransaction['importerCountry']) => {\n if (buyerLocation === null) {\n return DEFUALT_FOR_EMPTY_OR_NULL\n }\n return buyerLocation\n },\n },\n {\n title: ,\n dataIndex: dataIndex.unitPrice,\n render: (unitPrice: VendorTransaction['unitPrice'], { txnType }) => {\n return (\n \n )\n },\n width: '10%',\n sorter: (prev, next) => {\n if (isNumber(prev.unitPrice) && isNumber(next.unitPrice)) {\n return prev.unitPrice - next.unitPrice\n }\n return 0\n },\n defaultSortOrder: 'ascend',\n sortDirections: ['ascend', 'descend', 'ascend'],\n className: 'unit-price-column-header',\n },\n {\n title: `Qty transacted (${WEIGHT_LABELS[unit]})`,\n dataIndex: dataIndex.quantity,\n render: (quantity: VendorTransaction['quantity']) => {\n return (\n \n )\n },\n width: '10%',\n sorter: (prev, next) => {\n if (isNumber(prev.quantity) && isNumber(next.quantity)) {\n return prev.quantity - next.quantity\n }\n return 0\n },\n sortDirections: ['ascend', 'descend', 'ascend'],\n },\n {\n title: 'Date of transaction',\n dataIndex: dataIndex.beDate,\n render: (dateISOString: VendorTransaction['beDate']) => {\n return format(parseISO(dateISOString), 'dd MMM yyyy')\n },\n width: '14%',\n sorter: (prev, next) => {\n if (isAfter(parseISO(next.beDate), parseISO(prev.beDate))) {\n return -1\n } else {\n return 1\n }\n },\n sortDirections: ['ascend', 'descend', 'ascend'],\n },\n ]\n\n function CustomRow({\n vendorTxn,\n ...defaultProps\n }: { vendorTxn: VendorTransaction } & TableDefaultRowProps) {\n return (\n \n \n \n )\n }\n\n return (\n {title}}\n columns={vendorTxnsTableColumns}\n // 🔥 IMPORTANT NOTE 🔥\n // vendorTxns.length === 0 check is important, otherwise comp will get called with `vendorTTxn` as undefined and BLOW UP THE PAGE!\n components={\n vendorTxns.length === 0\n ? undefined\n : {\n body: {\n row: CustomRow,\n },\n }\n }\n onRow={(vendorTxn) => {\n return {\n vendorTxn,\n onClick: () => {},\n }\n }}\n dataSource={vendorTxns}\n bordered={false}\n size=\"middle\"\n pagination={{\n defaultPageSize: 10,\n position: ['topRight'],\n style: {\n position: 'absolute',\n right: 0,\n top: 16,\n zIndex: 2,\n margin: 0,\n },\n }}\n rowKey={(txn) => txn.id}\n id=\"vendor-txns-table\"\n />\n )\n}\n","import { APIResponseBodyBase, Material } from './utils'\nimport { axios } from './utils'\nimport { CurrencyCode } from '../constants'\nimport isNumber from 'lodash/isNumber'\n\nexport type VendorInfoAPIResponseBody = APIResponseBodyBase\n\nexport type VendorInfoAPIData = {\n id: number\n companyName: string\n country: string | null\n address: string | null\n telNo: string | null\n email: string | null\n website: string | null\n accrediation: string[]\n molecules: Array\n}\n\nexport function fetchVendorInfo({ vendorId }: { vendorId: number }) {\n return axios.get(`/suppliers/${vendorId}/`)\n}\n\nexport type VendorTransactionsAPIResponseBody = APIResponseBodyBase<\n VendorTransactionsAPIData\n>\n\nexport type VendorTransaction = {\n id: number\n beDate: string\n quantity: number | null\n unit: string\n accessValue: number | null\n unitPrice: number | null\n importerName: string | null\n importerCountry: string | null\n supplierName: string | null\n txnType: string | null\n grade: Array\n hsCode: number | null\n productDescription: string | null\n}\n\nexport type VendorTransactionsAPIData = Array\n\nexport function fetchVendorTransactions({\n vendorId,\n moleculeId,\n month,\n year,\n currencyCode,\n}: {\n vendorId: number\n moleculeId: number\n month: number | null\n year: number\n currencyCode: CurrencyCode\n}) {\n return axios.get(\n `/suppliers/${vendorId}/molecules/${moleculeId}/transactions`,\n {\n params: {\n month: isNumber(month) ? month + 1 : undefined, // backend API expects months to be indexed from 1, so add 1.\n year,\n currencyCode,\n },\n }\n )\n}\n","import React, { useEffect } from 'react'\nimport './App.less'\nimport { QueryCache, ReactQueryCacheProvider } from 'react-query'\nimport { LoginPage } from 'pages/Login/Login'\nimport Search from 'pages/Search/Search'\nimport Admin from 'pages/Admin/Admin'\nimport SearchResults from 'pages/SearchResults/SearchResults'\nimport Review from 'pages/Review/Review'\nimport Home from 'pages/Home/Home'\nimport VendorDetails from 'pages/VendorDetails/VendorDetails'\nimport {\n BrowserRouter as Router,\n Switch,\n Route,\n useHistory,\n Redirect,\n} from 'react-router-dom'\nimport { Result, Button, Spin, ConfigProvider, message } from 'antd'\nimport { pagePaths } from './constants'\nimport { useAppWideStore } from 'App.state'\nimport {\n ReactQueryDevtoolsPanel,\n ReactQueryDevtools,\n} from 'react-query-devtools'\nimport { AxiosApiError } from 'api/utils'\nimport { showApiErrorMessagePopup } from 'utils'\n\nfunction NotFoundPage() {\n const history = useHistory()\n return (\n history.push(pagePaths.home)}>\n Back Home\n \n }\n />\n )\n}\n\nfunction ProtectedRoutes() {\n const { isAuthed, isAdmin } = useAppWideStore()\n\n if (isAuthed === 'NOT_AUTHED') {\n return \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 {isAdmin && (\n \n \n \n )}\n \n \n \n \n )\n}\n\nconst queryCache = new QueryCache({\n defaultConfig: {\n mutations: {\n onError: (unknownError) => {\n const error = unknownError as AxiosApiError\n showApiErrorMessagePopup(error)\n console.error(error)\n },\n },\n queries: {\n retry: (failureCount, unknownError) => {\n const error = unknownError as AxiosApiError\n if (error.request) {\n return false\n }\n if (error.response) {\n const statusCode = error.response.status\n if (statusCode < 500) {\n return false\n } else if (failureCount > 2) {\n return false\n } else {\n return true\n }\n }\n return false\n },\n },\n },\n})\n\nexport default function App() {\n const { isAuthed, info, checkIfAuth, login } = useAppWideStore()\n\n useEffect(function performAuthenticationOnMount() {\n checkIfAuth()\n login()\n //eslint-disable-next-line\n }, [])\n\n if (isAuthed === 'LOADING' || (isAuthed === 'AUTHED' && info === null)) {\n return (\n \n )\n }\n\n return (\n \n \n \n {\n if (isAuthed === 'AUTHED') {\n return \n }\n return \n }}\n />\n \n \n \n \n \n \n \n )\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n)\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void\n onUpdate?: (registration: ServiceWorkerRegistration) => void\n}\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n )\n })\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker == null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type')\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n })\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister()\n })\n .catch((error) => {\n console.error(error.message)\n })\n }\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport './index.less'\nimport * as serviceWorker from './serviceWorker'\n\nif (process.env.NODE_ENV === 'development') {\n const { worker } = require('./mocks')\n // worker.start()\n}\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n)\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"sourceRoot":""}